From caed242c0a5d58cbe5f24d445f4d52de90f8a8d9 Mon Sep 17 00:00:00 2001 From: FeMa42 Date: Wed, 11 Sep 2024 17:08:40 +0000 Subject: [PATCH] Deploy site built from commit 30cbbc548e92363ce3a89a9681dd9befb4acaa23 --- 404.html | 190 + assets/boborzi/diffusion.png | Bin 0 -> 136459 bytes assets/boborzi/instantmesh.png | Bin 0 -> 329403 bytes assets/css/main.css | 6 + assets/js/_main.js | 230 + assets/js/lunr/lunr-en.js | 69 + assets/js/lunr/lunr-gr.js | 522 + assets/js/lunr/lunr-store.js | 31 + assets/js/lunr/lunr.js | 3475 +++++ assets/js/lunr/lunr.min.js | 6 + assets/js/main.min.js | 7 + assets/js/main.min.js.map | 1 + assets/js/plugins/gumshoe.js | 484 + .../js/plugins/jquery.ba-throttle-debounce.js | 252 + assets/js/plugins/jquery.fitvids.js | 82 + assets/js/plugins/jquery.greedy-navigation.js | 128 + assets/js/plugins/jquery.magnific-popup.js | 1860 +++ assets/js/plugins/smooth-scroll.js | 650 + assets/js/vendor/jquery/jquery-3.6.0.js | 10881 ++++++++++++++++ assets/logo/AuxMe.jpg | Bin 0 -> 60013 bytes assets/logo/logo.png | Bin 0 -> 51610 bytes assets/luttkus/paf.png | Bin 0 -> 167281 bytes assets/luttkus/robot_sf.png | Bin 0 -> 77731 bytes ba.html | 302 + en/404.html | 190 + en/assets/boborzi/diffusion.png | Bin 0 -> 136459 bytes en/assets/boborzi/instantmesh.png | Bin 0 -> 329403 bytes en/assets/css/main.css | 6 + en/assets/js/_main.js | 230 + en/assets/js/lunr/lunr-en.js | 69 + en/assets/js/lunr/lunr-gr.js | 522 + en/assets/js/lunr/lunr-store.js | 31 + en/assets/js/lunr/lunr.js | 3475 +++++ en/assets/js/lunr/lunr.min.js | 6 + en/assets/js/main.min.js | 7 + en/assets/js/main.min.js.map | 1 + en/assets/js/plugins/gumshoe.js | 484 + .../js/plugins/jquery.ba-throttle-debounce.js | 252 + en/assets/js/plugins/jquery.fitvids.js | 82 + .../js/plugins/jquery.greedy-navigation.js | 128 + en/assets/js/plugins/jquery.magnific-popup.js | 1860 +++ en/assets/js/plugins/smooth-scroll.js | 650 + en/assets/js/vendor/jquery/jquery-3.6.0.js | 10881 ++++++++++++++++ en/assets/logo/AuxMe.jpg | Bin 0 -> 60013 bytes en/assets/logo/logo.png | Bin 0 -> 51610 bytes en/assets/luttkus/paf.png | Bin 0 -> 167281 bytes en/assets/luttkus/robot_sf.png | Bin 0 -> 77731 bytes en/ba.html | 302 + en/feed.xml | 1 + en/fm.html | 302 + en/hiwi.html | 302 + en/index.html | 312 + en/ma.html | 302 + en/pm.html | 302 + en/sb.html | 302 + en/sm.html | 302 + feed.xml | 1 + fm.html | 302 + hiwi.html | 350 + index.html | 543 + ma.html | 404 + pm.html | 496 + sb.html | 302 + sm.html | 339 + 64 files changed, 43214 insertions(+) create mode 100644 404.html create mode 100644 assets/boborzi/diffusion.png create mode 100644 assets/boborzi/instantmesh.png create mode 100644 assets/css/main.css create mode 100644 assets/js/_main.js create mode 100644 assets/js/lunr/lunr-en.js create mode 100644 assets/js/lunr/lunr-gr.js create mode 100644 assets/js/lunr/lunr-store.js create mode 100644 assets/js/lunr/lunr.js create mode 100644 assets/js/lunr/lunr.min.js create mode 100644 assets/js/main.min.js create mode 100644 assets/js/main.min.js.map create mode 100644 assets/js/plugins/gumshoe.js create mode 100644 assets/js/plugins/jquery.ba-throttle-debounce.js create mode 100644 assets/js/plugins/jquery.fitvids.js create mode 100644 assets/js/plugins/jquery.greedy-navigation.js create mode 100644 assets/js/plugins/jquery.magnific-popup.js create mode 100644 assets/js/plugins/smooth-scroll.js create mode 100644 assets/js/vendor/jquery/jquery-3.6.0.js create mode 100644 assets/logo/AuxMe.jpg create mode 100644 assets/logo/logo.png create mode 100644 assets/luttkus/paf.png create mode 100644 assets/luttkus/robot_sf.png create mode 100644 ba.html create mode 100644 en/404.html create mode 100644 en/assets/boborzi/diffusion.png create mode 100644 en/assets/boborzi/instantmesh.png create mode 100644 en/assets/css/main.css create mode 100644 en/assets/js/_main.js create mode 100644 en/assets/js/lunr/lunr-en.js create mode 100644 en/assets/js/lunr/lunr-gr.js create mode 100644 en/assets/js/lunr/lunr-store.js create mode 100644 en/assets/js/lunr/lunr.js create mode 100644 en/assets/js/lunr/lunr.min.js create mode 100644 en/assets/js/main.min.js create mode 100644 en/assets/js/main.min.js.map create mode 100644 en/assets/js/plugins/gumshoe.js create mode 100644 en/assets/js/plugins/jquery.ba-throttle-debounce.js create mode 100644 en/assets/js/plugins/jquery.fitvids.js create mode 100644 en/assets/js/plugins/jquery.greedy-navigation.js create mode 100644 en/assets/js/plugins/jquery.magnific-popup.js create mode 100644 en/assets/js/plugins/smooth-scroll.js create mode 100644 en/assets/js/vendor/jquery/jquery-3.6.0.js create mode 100644 en/assets/logo/AuxMe.jpg create mode 100644 en/assets/logo/logo.png create mode 100644 en/assets/luttkus/paf.png create mode 100644 en/assets/luttkus/robot_sf.png create mode 100644 en/ba.html create mode 100644 en/feed.xml create mode 100644 en/fm.html create mode 100644 en/hiwi.html create mode 100644 en/index.html create mode 100644 en/ma.html create mode 100644 en/pm.html create mode 100644 en/sb.html create mode 100644 en/sm.html create mode 100644 feed.xml create mode 100644 fm.html create mode 100644 hiwi.html create mode 100644 index.html create mode 100644 ma.html create mode 100644 pm.html create mode 100644 sb.html create mode 100644 sm.html diff --git a/404.html b/404.html new file mode 100644 index 0000000..5df63b1 --- /dev/null +++ b/404.html @@ -0,0 +1,190 @@ + + + + + + + +Seite nicht gefunden - AuxMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + +
+

404

+ +

Seite nicht gefunden :(

+

Die angeforderte Seite konnte nicht gefunden werden.

+
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/assets/boborzi/diffusion.png b/assets/boborzi/diffusion.png new file mode 100644 index 0000000000000000000000000000000000000000..f4cae7466d79fa277ae2623985b656f208ded800 GIT binary patch literal 136459 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

s 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%0DtRLF}k9<2L7PTkcN$=OxU*GAUOvjEVbv(2mDO z2c8+74WU0Y0M|YCKtplx7d6+Y-E&k1@d8rlp8~~ml|n44wiGs(9=Cc>1>BsPgm>=Z zC+Vbx0E%n4K6n`L6Ho~{q*z6j6`P@L8#3r5`7U#uC!r=K0?YfC^GA)y?42+AYqSZ? z`oWY!7mm_!_Cc%nZ=n0cQdkhBKKwDBc+QrLV%SJH8Q&sN4jSPkd$^qNGzZN<_&}H+ zis6rFDvAi`ga_H5s4WQmNr05R$2E)G+wSiT`teL<$dsebIr@W}(dY01UR5fSdqUlI zCZT_N_4Z#Z<*83d`Cw;AS36-%sP6FQZQ4x0rYSg1^V z`fYu`m|40xz4XV4$*km5(In3Hkj6by5=UDf3a|h0~_c2lRtoFoi zzpvxp1pn|yXf{0NEWrinhhqOc}~x(6siDuf=M>2mn+FE)w= zhc%LqhWOay?BaZA5DQRl_FIl@9Y!lfCsnA%5FiNfGTFug9?vfwV1`U8roFP?vE>$# z;_b~t*TL(ZUknR1EF+wf8{9G=DMp7;_hmVFiIyTkTXbKkku@u3qssl8B}PRNv9`q=rU`?N`+ z7_jZ(Z~k__%STQit;&T~JLGylmz=Zd29!`h3Gg;a@taXmFyst9{mTbVBVl0w_}qp= zM?i-qiWUug`|^k%Khrri`Bk6Zzv6Xhv=kx2GyNA2E=~QPJh^<4{v#K?3S?K-0(h55 zNm2agR4$-!8wvXEaefGmBG&IU>$E?uE=g^lL)V_+o<96rTrMfTQM{}@W_tQ2QAz$v zA@}FLQA7$r7b(P;hqymQT3~+p6}I{y96ia3N}%0X0f4p^f+u$q`EBW;JaS4=>mJQXLMFldl$PKN&n#qU{{>{c z!724`MY;TRDGm9t$*E6_v6lh=W&2&TlO)3@ZP4lc5A+zqKh&<_E(rW-rO_}L(*p>k z9NPE#jo424xZ`mL_db!7<&I#dF*30NmCT$Zp!T_=Hk_a-11-Fyl37Qpffg!d!!aJKC-dY#fYH7K;lf{SF%+9yOKct5fv6`s`HWnkGqF(GovFnML%~!^Y ztW=M=zjAjRhy_`7`^&KOanq$c;AuB#t*x%mslu!^^XH-2ae>~q2F7)Ef?^cX7YSF< zXRZ>2g!wlH8j^TLH;{-Rt;oB3eyPhzaw>*K2)i!SBuV*cv24lvf-6XxROvwRFy3U= zZ7SDFI)W7na6UuEn)M_-Eyuo4H@gH;fxyUUXJsAE)$uzGrrnb)! z+PV#Sbn^QKQJuAmnP7+&(asBqU(LZBXa=`FA2#UBr*Bj17?f3EHrk$^xNm;gou}mt z%P*l|b<=|LTuMPj@q@+qZwi2B%+ss>uQ|3F)8_TCuLtYv^~cF**F@}H>aJ0Mhl8JT zXU0tkqWr76d)iAy&P$2^{rxYYIBX|X-$aTa*$5QOO*bi#TLc_L&wKX@qwtGm7C>XS zdFrf=Pvm+_9UiTd`@J7D(R+XBzz3>rywY&V+Uvv71E$JfuBMcTUw0nW9KVL3wu-~H z4fEwj35-l&i`AnvJ5W>2ODQXD%QH+D3TtMPt>7^L`n$y}Y28V&@|v-bmsGFF>|ahL z9S??73R?%-Qo+=D^}Q3)A=V@TX4VrEig*>87kRNaGZ=bTEou^`Rain2Ob|BDj3auLqVqmu!!M@Z`udh?2pd|h7 ze0g_oyyb3@q-`eu|FQs_Uir}62Zdqf;cSFc8%VxBHH^jvmFEe;c?av$oXybRY=5>M zR)WhjjjvE>Y4GN<#%Mz0ewF)=S#_Qx2>90D?KHm+hrD9*1is{UcF1xp3wQciT)ypI zz7$M>gg^Sv#{zchH=h!J1st*p`t0in{h(Z_QJxx{ald!D{pH|mB>ebTKpY3V{g~^= z@au(2`Knm>ebV9lc)MBF)K{}R0;q=)ma=Dk$7+o0hM*85EDL=MP*1^FhS(%RilBN+ z6oT7HdnT(JH!x625uttYma|M@k7DyiglMtIg=Q`3e{88BY;l#b919YV&+o&`n)s<% z|9kDL)yybN&{!wZWAii}#6)aL1YqmJjG;a#0j3p7fH@0X3(XWt1^|2z=cT(cL392&gQaSgnEa%KYT#BZyT7%(4}U01YX~jGf&$lP&M3$N zQURk*J9rkk@D#)GIAR_}=S>M}$xAGz+c0K&U^q&gb zPyjkWNouPNT1uAQZ^aV(U#c?(WJbib6k1;7A^rD1XN%T)YN*x^MLAU(^SCO>yu>8d zeq7cjdFKCpuA(`=6C%i$7hV4*tFBp z)A>ve;T^$E*uZgE<+wB|`^j5$ZD|RC*z_I1a~lTUV%eL2ivvIBOKUBY`i}n?KEx>ixA`9vf zn7o-*KqrBwKqL|nZCzj_4g4QibXkSqv7 zE0L@B0wR2Y#Ze5U&ZCsJ3P@KseW=09@aV*nJFE^PiCae;bcIWaLL7MkuQ^smaW8-+ zRQe5o-(`(QYdEn}=Jr**{ucP+%Vt#{zl6a;?AH(nrK$!1L~jx0Ed}p1anW155yU!a zmew8Jo$=iFtOzDqZJwVQ%%=({*d1~LXZ$ydOnD8?!`2g((gFvU4)Xp#0H#1$zdt<> zd3HYWp_Lc@`v3KpS3at)l0&0H2yrOI9w($14`^F*!tZVR9H`L{h|;d%)!+E9|IRO- zee(F{cm&2H@ZK5$(7<=T4blW2jG+WDf{X!vM#(ODd{b9crX*!@P{5n|(lOR5l?(x_ zZ^D%zMb-p#=|z87}}QU!SYGKc=5@73YMlW-k+qm-dk1bGIGMxZFo zP1-!ZUk(Ij1P{|VNP8nZB`u|svW-XYZSK<3s}w%^!KWi|iQov}tuWiydNXz({_f*! zivsQVJl8unSUX|Ad2fT}ht+WP>OAQ(QdTgsT`E7Cq?wAOek*tft)Sg0v7>_5KF65i znyzw*)?rj8)5{ngX2RC`I@K7kNZgb~WBEJ<56rm&O)4v}LIo;91b#9_IkY}mD%bMZ zVoXdiq_wCf^Y^~uJUjZ&JsMOdF5du5(li(MYgt)m0;55(1&bjx zgt4lHbG3SIlH(oV%hXw3W8Sl1;@_4++onX}cXS#Cz(ySsAZoI*jCRA)WSD5ck_{u9 zq|HZ-W1alWeDrXNFK?<83?w;}LkTj=*;XjG%|0uL)(+=9v~cBXmSD zrKRRVkrUvk0M$?M$N_RpUm2*0%ZMn6Fp9ZIU8P*n@i&EE3aQnL4M93-f|@CeJUo7y z@?b@23aGO!bRgV#=%wxM2&fqV6E`$WigfRF1v@MgQ0YRPq{2kdq{}T;fcza0N61rf z-RC)1{{=+a*iNBug7G3^x^KJqHVJlZe33FBuN0b+Kg;beOke&OdWvWMEcf|d-WOx> z!5{nO%OCou|K6RqWSZZ>Gl~r32own#&R8PBkQyV|Bf*1ACYJ*OMbatLHWn?1*AO!| zT9k9bP}E6F-MsrSEX>b@_mNhMU`5u5OC8Y52{1prv-1D=AO6NA$3I6mWdEk$#x3@7 zXMHEk<1l??Vm>^i(qo%6RSjoW1=LNh`JteMs*i4-hv47RdqBVP!z>I^DKQsrz4S6| zK^~GWv-gk{C-@+t7xGAo0EEiaY!oMQW)UzH&>LyEmc`vVR-o{_f=IPKK1{>uu@Z0e z%nmDP1Q}gH+an;NAk(4<=S>8LE;M?l7{1*Ov(xB|0A`8l6?A`8#lY?)_xA8rq4Y0aYF4%1!;xlQo|`_xT7VB_&#q>o*%R2T*-$3)aL~DtU&v(bCieS!=KIpD$q9I zS$!D?x#`KEOQ5kdTA7i^m_AA)M17&ZM>LNN@ zyb~lSHNX^N(+d0G2iO((j@)i5ctc#zh3euTzMkvb4(syyJs;vYZU`{a*{pF*D0HT9 zm_Z%#v(edQ0KUY-UR$OL^og^Vt&93ZyKtV~ z6mbh!h;ERU#j%?Ftt;Gxh}=i84SY5^GGQ;Cx&YWJSg5_lqA-n7?(A0<$nl048ly8bRmlLR)EKQV%iK z0gKwlh1OV~0F3@+0DbMScbe1)6p8+cajXSE)5WvrY!-_G8P8t2GGXIWv-Zr3r|iJt zo9wn*SM9#{-(}He3U6{k7Rflv0s2~ELF+Vhy*~lR>Yeiu8V)p=$MWC(cG&d!B-p| z00A$7#pSfUfNQU(+GhKEj}m6%UZN}yN@*+rc9@4WVITXbHs_Z-_$BS+CNZ!sdRCZh z^Wi=dJHvMr3ZKPGsEvN4HCi{Dqk}{`Ov-r+tXbyyy;fn_+O(18ZGdyY=JESqad@u zjbg^4FhKGFs>KngYBb1^axB&cCMb*#Q4zzpGBdaeBF7-%fohSGAu?|y98sfVQ@Xzj zyvbqHgT@C112bWD{}r2|9?VXrXQiMVuVItulzsF@K>&~H%@m>WmCXZuvb?9&627#> z39Dt81vaNJ&*E9B_kOfb1!mvKPw`SBBtU;01ANJVvIg4HtT#kQA1NgnD9{tc(O7VN z1^GlULk(g`d0m%UO;s_k>nh*n^@5B-< zkg{JvzjCmz(?$lm?5T5OE-Vu!9Hbg%7b$2MkGyOj{<-^X$3Qphc=dMDz^=hxr`%;x z0(K^+=U_8V+t}110Dw>w-&n$J_6kf(1prf$t-XK<_lXL)s>1Xl_sS{ucgnE&FB3NA z+Kp1xq?E4NrIFLH9BK4IFfjrgY%?hE0V@+lTrGemFz8C-I6xwe70C_&A%Qe@3|$iU zD)&cOB?p)&h)L>h?X}*vVVjuh0R9r!@PD15RaX6_#y!dBcV_ z7VW@J+7R#olrvAH6&6lnY3ZD}H(7z&Ml6~GJz|CQ`YI?=xK1o|6B8I`F@SDLWd(FB z9>VcU2-eH!sZPA~GUuRT_df8T9fBG9;-CLlo1-c?tFzAT9y|8Fd#t4`X=g8wSWjOs z2_1fW{@E7+Nj!Q|mGwBEwemgz_+Y8YicLTt>4eZ3 zAPz!TM5uz$nZjFQ#(i}76#$Wk-}liWE>NqZ12J_qMlVNa943W6PYA8RcEC||#el7vTw*nJ zs!}*CFJZYqMVkJh;a*sjAxsW4c6xly4dVJu76AR+sf(1~NMMUk>U(<|429G@^~GsY z_)8(FMF7Lo&z-R2r!N!E0c5Z!oRkKTOk;)^C{wHzrlZJUTZS!?ftjxJ99~~*ut`c> z2+Ea}{q1gVw*>Wx7P8ZTCnY8*S%9!IjE@6F=!hcdiv(r_E~GnBio9HQwat1cjSwOL zN}_Y2H?2e9NZ>Bnl(3yWd)VJ6F+ilgA)h%9Bqdz9LbJvm@F?IMzZ)2i>6ScV~V)>wLi)NbW9Pi#Xw1DO+(m=Pd#bl zqobI~k@^p46-_lYIcrOV5N|(rr$rH#XPML-fBt!U>gneZtygVu?>_svM;@`ZwpM%U z*=Mc4zmILx7O>S(*rM-0_6*-WZmpcFfA9}JM`7G9gynP(d@c=BhIW^$_SEFG{iiQ} z75jp;J$TO%J95)bLYrxuxOCYr5xz^KXBytW*Y*q?#@I6ECU99+B%PD=M~$V?0*w}U z_qM>6fKh~u64g(ki$rk^GOsjFGI%S)Ix!SDv3Cw{B`R7{B|J%| zi3f~_SvNCPF-lbxyG5|sShi0K0G|Qmgo6MAE_CLA5Frr&g+gNv9Pv6vxXI5o1|+vt zDp6mWT(BMONo$6IIl8kKa76WN#KAIrJgK;d20y66}Oog(F(en#km<55(*P4QyHFcBuvPt6~;?CAVkzKEOoO)GBwc=33j-!7?-|V z02Klp5wg)7DtYVDW8fnIOX4I<-EvgVrsuq;sK15yq?qF?4~xVQG2Q zE?gL;Xy&?|yL_3H{ir?o;h(pociwI%UVPqu@aPkkCFTD84}aJ`{Naaf*U+Hbr$YyK zk`YI!k?oy0bKb^AC+yIngLZdR1Cn>%PFcO=Tf^8g~ z!(?zZWxeeI+dtTcuT9*ptmW*Pm(MV07i@o5%szUg3q!z^J^#1gw6kk4B&=(Gah2_m zTF=0I|GrlHdk^fk!##&>-@t->`{aVXII#k&6S5?Oe3=4}5%ysRenxv^Ef(kZd9Lk= zV#>xU6psC$xKtoOJyN9X&Yf!o@UCKJOM*<0#+^so0G+Tu?Q%+>z-R||AGB5MbFt+{_3x7Vs6b2-FBOO z>XRR}E|{Q^E0=A2Y?AT^QNT_clc$)?&CUa`mhJH;o^k^B+wZu8dQ+=d6u_<_P?rbM z-aWf)9bcl6(Qy~{3&9>{5N4l!`6cTa-eX4}`6RWPX6%J$o}tJr;kTEsP`=<niN$%Pdx3$m60BsG>s3p85b-P;0N0!CTFR)Hv;G~hxRBSF`(X=aSDl~jILr$qv6 z{DdORRx5PiDQS_Ig(}?UbyaR*ebmW2jS&CGMb|^<%@cy9K?tN$Ap!hid=-S*ye{SG zND)=be^Ex;Wi&?;fvbj76+yRZqp?~yGxjE^&ywMH0306~X7tm{yy=9cZBY0kOy?_h z3$0NQ|Ce$rV6I5jU)4?`RHqtDD&nV72yDKwY@-&C_*&PYSV8HE93T=?#E7oXf;>V1 zl9r@cM_3fXOoc)gRv~96M`qEVp(6pvw6`@|5%BWj>GKvxSE51vh0AD!00%3z1R0O8 z9SVuToQ4R`gzyVGK84QihvTqL0b8dwmr~YS5p|cDBnUhy6}^S<(~f9@2er-EzA`d} z&9i`tDQX&N5lhk6GH5NKRvS&tIVO>QK{E_1`EHj|FO8IPk|58q~^^Opb%93S^x9pJ!p!K%97zy_%f zp}ff|-h|DpVu*;~Izwgd)q=d0Fo*mg838-h3UVV>! z7hseAXM?cjItG?Cj-kD8*aj$JB0%)L?|j$km|`t$cI?!!22%O3fKkJ-7i=WX=t37er@%rYU?b~4$*p-z_}C|{`e;_``4eB$#r z@VM{4f!k_q>OIy1TLMN*z?jK0`=fZQ53zNX&R;3enlJD)garja3yTTeA0c!;c~bD@ z7X9K3pdI~P5%*~M0%>lb%r0Hq%`I#bV5AZsAbc1Yz!?lmfc+Jl#a_D$I0SPV19)U% zH6*&0AX%EAmX=m)2JmpHyOeybSRpbMYjv6@)}t*6@Fe-J*rbB?Uw0_&Ab0E{>{qaa z7Dri~07wCWK?KUT-g3yM7B8bEs*AHF+7>91=vo>m6?jzrwxx8`{``lngq0F7Rz-_N zzU=@{m3vNFrxM4kdTu#buK#@NU2LNsLaU%NlDf1(hUa5H|A-Be zUDk;h`@Vbcw1I&E05T$N>=ptTYNlYPmk5I?R2P6fl7Z*O`l`iY50~&r%CX)TpM1=w zCx^)F!}OD52@skb8Xj`qM~a#%bQvd<3GRlCe$O&SzrWr4kjC-7H(Fpzz^J0EGK9?X z6T+7VFaZdnoz%(5sEs%oof>!sfa4eCqWWgc#H4f3tkOpzOdnn-Re%r(#r>^;0cd0~ z!dzu&{~|y0irVL20KfwzqQhtQou{MskZndGNo`fdV@s4A@sjoCAp=b!ZiGe5z}ZK# zc>-dY_*;~{1~Ae7yhZqpt-%ubSeL;XVcX6AA-YvDTG%4?j(<2}1CSca_Gtm-7`j@; zT(i#kT5ORXfQ6t~o2!2d%nbB*+m+Et7#9X-u5*Q>@&JNXQogC7Vd;~X9Iy#0ZVdRA z)3QK^27iU4xZ(g00t8p9J9`Nw0}ccVn1K+ma^e!z>L z_4(;YYIM@BJ{27*eHWcCgO}EbUs07F(GQprWnWVX0y1;tGsG*%Beu=&z0^FaRsl)O z#(e;q3Il_RZrJpSDSUn6c4)BIZXWKpR$hm?y2-$5 zw%(p@Yp0m3#MLS~n?t)(V9*Z|a+6+3%z?sB5*I6^C3DCc*MFL%1c3$tDDVdp2~ZF- ziy~e|3kAx7+MKj(CAG&U?X58 zfG3dSz!6l50G{+YnRSjePsSeid{q-7!s(R8aBZO9m0+pF`l$3sND~-Bk3wStLTZOi za8zP_5X#)oWeP(#Ta-5Epa{cx?T&lyM?gJ7TXSA8#%%8yu$83+$9TlD^2iJTG$nHPfOPn%qS6+P5E)eRR7+aCEuW$qZPz!n)Ak&?34wYNMrqYj8|yGq^R@yr6{ajqbDYvDO(ci_j0B=JpHe9F zy|{ekD_?o=y?ES>W8Qu(u%$b=K*jq=j=U}ai$@}ADDZ#-HV8PO@4*ywqI8}DObDdC z2%LQ&5ANMd0Gl3-Gt#)xdNt6C#5MT70s z84I-AFbqOMF46#vDYBy=ah#@PKR~I!BZ=413fBz6VCtzAB{HTwO_}hqk5E(%1RumA zq6zR4kCRP_a9c%a<^cBsO+~IlWv8iDpq$#5d2g1mj%u`$pk@WGRUe=z1fv)_&wA)ytH5Bnf~x{h0&EjEVyPK5KWnk&Vqc4bn9_U zD%L8WqyooPmJl2Lm9o+{7lASTrHM-brbRj)iNC9a!^43ntk9svFHYIP-TR%k=U@KM z{}bWPs158s=)~*N0i`f@?CbkU|@zRH2Pbw!GHYhTpP1180uW$+-HoSd@d z@k@3%ao7?R0@nHSMLO;FJ9gQ#&%NOKG#b~1Q)dxV2MBRK^m8Ay)2B|`xsxwj2TW1_ z&OHd^ak#$ukkfTlIR+8ad4L~LMc1~Q$Jcmnv_PW;-hC~wC14a)dOeUvz9vMp=m6;b zC{bS(dqgH!Ss^L(J5@xPuKrTgYZ(MSVLE#HcRF4itVPG8zwjbVRp_do`in3WhAGcX z(@PqCg;afSlunXr_j%BhBtKXd!Q}8cou>u`F;cj*pgSP7pAbdRn`HeNI$?mDfD^0} zLJu~I=_CVDj*d}G5M4FD=QY2L$P@{rr5S4pYFf4P zXE6e7Zvvp8zpKK)P&XODG#QqKG+-)ZJ3G-2VPDad4A~;SUd3Vz)+o(&%6fD!z`D31 z$^f(~7^evPS>z%tiHYS}mp4%mxA_?6qmVJSv9?whPm9@62#RfSPynR5+qFx_XOf}8 z-Gu@*8PNri7Bw17;tY-XBp{FG;vVBT zxpycW#vLM7h}(>9h1gG@Kwg>rPpunRiYze(kwV1Y>j@$uY+F>)Jm)TeLiQg!raE(m8lNTrL zsg*ekHUEuu`LZ@LMR*N%uYYJ5K!ptgVa$~PBJ9VHyWc*23E!ny1z)5gyYHU&IR>w{ ztCMzKu`5?bXvwP0OpVca9$O)VsTy-(0A&K8+dt5Q^ErZh*syxr(68`4re53SwrLzk zqXpiREwCkEMD19dt;sNmNFdOEJfUROVMD`eAEsPyYDF!NZLuJBVX~JFwu{}9DTxQoL7%PSfP!cm_ zKv|lBjy}zO7dbWHhHlIc7=mT;OH9r0)ln62!Y(u0X8O#09h3!dDg%VPRcrxN+>-a4 z)`2d%Ms`|Ng>HGbv23FjP$*43>x+J(z?bAn7tKnJTNB7?Bzgvgm8_R(U4u9-(Uds*e>2v?00Hm z(O#M+%SpgQ;2tEP!Bp&v!bCyR?GuDxB3#hf3_@iY1p=H@S>DU%0y!l@bs55FVqgSv z1Yo$l9hd`J0Ma%PVYgU;5TL#<)~Lks2{h>*)p)Hin}CGG*6H0H?Yoctz@jZ3usBJ3;`E$7eA|F^?>%hYH{WXmJ9@0MYlmz1HiYVPCmy%) z1w`!8Zl_Ot>Zzyg$nCe=(9kfp2W@ucGAt1NRW9qZ$N%VyHmBm@R z``AqwZK7pjA48nGJlB#umykQU(nLCv#?okkMhm<5nc5CI^GMFsw|Oa8|9f&cMWsjeijM{9PA*Dzi;lV+6eLBEkVX zKt>xhdZ3cxO+pWZ#4_qo19aTdF41ZFm7PY<8AT^luKE~En1K^N%fd*h5NuEy2L_J{ ze>280^9)k@14>^rWA(U|40WY~Q1J9(5ws6j4TSwsz!$KIPTmFjm~A$e?b8Ab+gzUj zAub?YLoQ|C39iKw2^`4@T7cSb2M+ABZ+!Ke_QcaKJMWz7b%B&Tj6)2-)I>@@S{-yb z6Vyw)I5lq*GmAEdxTJGm2i4?Zq|jvdB*NC&615N-yC7w1((4p|rPh`*uH>8JOisD* zGpzfi@8SCcI9bCzRpRD8SP1Rsul&jvMSO z%rS^lhizfr)hvwQT>ZIU`z^co&Z7>H$a!0fgw{n~%cCpAamY46_($2ADp8UmEag{? zLE0%p=t}^y!o8LV?ITRBd4&Y)7*di@@qc{b_ng>SDfFbH0_I>`0geJ*0*g*d=(fsh z-M<1zpd>M6TE7!#(+^0Oqg%56KYfqBL12mZ1Rhn|WEG}ndUC?rV1#>)-cP33tj*3$ zu}w@E=NIk&{gXdMm`+w94%y%_Cz@VeF587QzkTSJKSQ6AwCNdskNIVcFr4=P#L2UE z5r*l&y&nWX2JFH!kJ;HXrya9h~Xc#4=MLi>9dREjcHR7Z)N21HM8`a(osGqV)IMj^1g1^k2S2S&$9Vuemf}Ihzmy zdjb4P>tA9}K0PvRSH`DdD#=(QTWuE9;zdW(8m(C?Y29J;DKnS|F3nT+gOvVN3Y>~R zmF~w+c9@qHOO(7um`*i6GU*K9qHI&F``FEUZSRgD2jB`M2Pm6MX6*`taWgm^;R>%x ztHeN`=XzdFtvIvO`|h~g?z`{(POBq(0Hu#hBrc%g#MLlO0!!{S+f%qpNe@tWuc%H|H9gw{l+idha<QaH^i~_0n6-mlUA8(uV`HA?O(Eww_ZE;`Q;0>eaa?V}c&H$#X*!fyr?`H19M zhtlqY3`$;4&YJwqOfmsQX=rU`h#{D#TDcV`>nws-QmJ9MJj~W*8YzJ0wI)g{5Nd$U z@}wyd;F*UDBXybqGK-2ln8cC$XRuuUn-v>-bj><%irLM7ugmShXT2oKZ?)dFq1}ja&8E-QcJN2jY)^{vn!8mC0 zZCbS5m;Y$a_I;ww;(ZbXzw;Kgh{8yEXrNchx?XP%>H+~S)W$WidpFrgy9RCP_*oD* z*D_3l7!hgbBzRt0O`{c}j0Zp=P1%e~lVoI-@bMvEy}hFqMkWGN6t(P9)<$u`F2Ib6 zS&{HNg)T|kbo&CB5ZjZ-Gbs+!ql~XIY3(g7&192t{R5mT?2o{d0G!LB<67R#tnN929xo{Yuj62;v^vH+okN@5OX}J_kFzrTMTqF+*zy=hg?Fk&|IJJl^ z5;ziLB$0Yaj4_`{bnR-m>E5I-(b}a!Qn+3$77}p#%&&bKp?ln3#&LRaZq8+f&CbkN ze_xM%f+DZI{rwh8BwYP6)n$wK?Y29In{D{;5sF@W?K8jnOLo^?w~#@Wu(PM9Y<-C$ zvH+U{2M^fV%Cds2(NBFEpQ;u6%9p=?D>eQtZ_O5hRyukvT!M6@Gxt2EB|APoj)GUI?jql`@Zbpc*Gw zMs1=PY!fj6D1Y8p>M?qxsuNl=lO_vAj=e#IjU~cpRXkp*fGh7B6nqmjwFUqfE7A9I zyY>TWa)6{N87Rd(RkwX{m)#ZxpcM;b0eNwO;rC%We>f^a63o;k%5I~>O#`fASPP^m z2M{35zZ!)GXMkb`9aX5Vpc+wITR!rUkL)GX@J~p^{@369<~K*S_Urn$J8p{FmG7+B z+)HUY_~{PEz;qmn+SJojE(a885%c3EM44YJ+rnwW3rFJCJj8nd%{?Eb1j1ENr0<^m zlX)9_AZZ;3X!q;5oCIvO?ul6cU3CDN+!40Jzt(9l{M#A3>!0+SKT;oruj3|PSrrbu zUuIDM!>@n+>)(Cl%{O?VtI-3P7Bk_%57&?bCjgVpzuhx~yg*Y7P?N+_xrn-0%5_|1GETC zIo6B)6$4fV%nP4%_72*vFZ-aVL+V1KFT7~5@4ML?jIRGN(UtG zA}lP5Z$6^K*+1d>z_5WP69Y zVW8F!i8HARCG7I0%XY`%-L?Y;sFIpPTeR2iIPwX{2nwkAgSQfrPuujF=PXgmI1SdR z%TsoS;=XFvg~cVCLl4%2&S;s}awXrOeUbpxn+}l~_py)LvidE7Alfkxz$Qj)Br_4?sPWZ-=;0FC1B*EBdCyd7Nv77pt-2}NX3B-QpI{@ktmzS z&lIo{!E`Z$PYUQIPO42dtn_5S2@H=yXPOCCLkL+JaKe=2@X%|P0WYY6EJo*7rH?Et z?TzmWYcmRP$C$_tg4C8IZ}kh)){liuoraFwyv^P7O9fAsN>fBY}_ z{lEI^SHF5{E9=>qELhJSahpA!vPFTO+vAoZ1z8|ub16|*u7akk;}A8Vj;9?kDj`rW z@_us1t8C56WeoKIPn)19vq<&ux%zBY>r2luD5feF?I29lE$HyZi)v=AT*}$(3n`0I zKTILI_Jb5Lg$W5Kabeyaw(-Z;Y}doBZ@jX%_zl3q-3-p30w6ul0Q)ZiNMB=B8hU^1 zqH6_i&}mwfrZ0fBnYQn|umqSm1{Y=nXm}W?y@Xt1ur^JY2*uAx@Myj)3!vR z&@Qg8=<{E;Hig7siRRbSHq_B<&21evH9H40sY>f+yLR;2`KM30ZAY^U_P(B0oA6R9 zWH#+s7!e~Xw^4+3h~lB7?644Z(_|*7qQ(Lu(&gy+)rSBK`wZ|9z!Mq7U1bOM9Cjg~ zMGOx$NUPL`o@L&s;}-L!MaL3tVnV^7uh(ilS0I-A&()0s_z2{PO;W?kC{o#2+P)Yw zfu+0ezR$k$#sA1X2&2WiwI5pa47Oo?_1C(;Wv)ZJzV$O)Fy&U{k-VsZ}eOa$$HyIL`49JT-F%in{gYsaPg7W?H- zebo9QdF$!xwwC^VE>qSO{ACiQHf(EcvzzX`o9x$R%Pc$rphO3T>8!4Y4}Iuiy9Mym z+SY2V#RXfKoyGw>W!;nk*}x`Y5ul_H+&UmFMYdv5V3tIY7GwgzW*Z2?jyK^*?%%Ml zyO#LT|9e+~qXsDY(I>I-?zV1$Esg$u7?pLX_6XV?%hQ3=(ST^IhOVSU=Tebqn!%+; zX@O8v0nLP23Rhn_SqBJ%RnQXoeR(H#^dh8I22W7w{k*4C`Vg}&FZzsfEn+c1OqxNZ zM#t>Or^pAulBl(YS4xr2HNv)v3gZEgsxpwoXC*CN5wpP(pVxc{N!dmTfaC#mVGclX zPX-&nmjIUPsO2rM31Ia2>)^yYli))p3q0XP4QK{!B1AJ}}p_O;&Q>bUk% zr*yzzeDAY-{;RCx8w}oGDA~C;bs;HCCeTt$Q>|N|2VkW4#1d^T3Y#VRLoVEQ_AeF* zXI5=}j9KjfgV{A~kyxj$n_p#$G+>?kt3_w0aNq9^n$|P={Z+gDH+nZ${f5uE6>4|E zUb*eiW*bul09t*p)sGbdy!5q|HwBD5tFa{D<`4Oqu0t*+Wr5>~>~Z-??)B#TdQYF} zZ(eVruA>apU!jdp@!21I?Q38AuYAss{38}XhKDea7#bIj62rk}Bo58Whk2bc6Nn~Fu;Wzt<4swnbuBW(Veyc8;DdD@|_IPLIP{mG&K{UZ0$?*C{?LFC?Fs zA;)xG)j?_h6k2op33~)6DFVzCmgCa4u0*>{jE&gB{G0;Tgwr(!cU|GC zIVi?PAk0IEPoPlYD}9zss=#c-X_LhIh-E61VOk*UEl^ZoKczR?F+2!pj5+6RX_CYU zDSJ(ex`ryut9A=~rT@5Q1eQFuyB!fYp>(-j7pOC&T4>7~Ia{DG>k9g+4E;a>05ryP zF5PE?&3mn-qZ4z-37eUop>2zHto>#3@qi*KO}$x9#d{wgdgmu*wCp(|QTh z;c-S=&T|fQo;y0bZH0F5!Swa*xye>W&RTE@&Crp(mLL=trf)lY_Ow0o+zU2DQpT}8 zefH#~IaeR8xuxBvMlRcfcijpjhj^UyvwWsX*gu2Gtr*ak@WkXl{e!+`nsHE3$te7^SewePtvz3zW}t{;C4CaI;IW`~;UgU0K= z_L@Hhf`%SMFU2pL3 zF-2lp00NAguATYQ4gL-sIVOqg8m6%m7GiX25#1W$D8eJE>y-s$2+(x5G?9(D4x>qy z8P{=kec68D=uT_GEqM-c@jzz_8Bj|M_8D8<$l6X=k1hng6_`lvM~1AY0)W=(X}E&b zUU__g1Ugg$t+i(WAde*gAvKp`@9qy+BCc=k=jL%Z_KW@3f%LR=QMlHR|IP(l0szHf zgtX5afPs}Ifdc^+?nwYl3>Hk`I5|0M9m>dy;L+n)T%L0zLdX(8i_U|hW9+p9KT7Ej zQf4H`ee}pL{#UVN zoCiDwnTeGJnp9X8JO8o@(83@|mmr@Z=~(4f9b~&@;%;Fy8>G9C?#}=hD6oEJwTMxJ z(hA{4qnRtCfMd6051?w_Kqtb2_0XU^lSuZ3^}Ir03aRB* zOMsVGLtPF$p*ISUo!5Q)?s*kFX*(qtwLnax=BtZ9kOb1F{&c|(eWqhe zplEX~Ya^sB?|hZP+I(Nn0ZctPEsmA);Wzb@mRhVx&EJ|BBYpw$tv|o!HSI~!b*<5T zr=q`k{kuGfvFN&~P4M(D(9`^vM<0DupZ&-MvIIf{w&fLu=qgL35E=l$fdhdeK!VcR zl~SKn$&V}{O_)W27Pe)b6pFolZ=d1UNQsV;_3WdtC}F4C>I{N^zfB@`SNVto`}bHg z#*gDm89O&J;j-J>xNmX*qqbz!rf2h(qCAMSF*&j;HQ!(lElY7$-a@Ce7cc^t09h#f z#Bsm!5GblMTy;i9pUbfEzx$ovw?&wylgFPToqYx{&{P_bQ|tiRY><`yx$!2H002M$Nkl7eswD(6zP7okS>>X8VPQ@3nX<*FT}sG$lUT zTa%V7qbXV$v4ez`Z{64D^h-mRR&8P(Es@x~WQ(=%n*bBU03pc;g6yug7#VE|H^Ey6 z=*fm)dF726qs@!-9SM#aplI{-G@jq1EwCkEj0RQFyf;s6>B4?XlyTRa~B zrwpLydHf!soxkMAY~;-?YvY8-&tGjICbYr%@@#+9!wt6F5pLJqzH%SbK@#n&edq5@KqqaKJbwnMZT9#N zzHLiO3tV}Gta3299P8lFE({L4ZG>=85`)7i`>EI##0>sCDQo69w9h(jF-4k$D4Q*Y z=v+eRoR~87cQNi2UC{N+F@PO_O3fJuC^YeCqtbmFqV*^twv#VB4LF)6%F~V5@%jN_jte6vdw*waYy7s#7Wzg@8P9w0!CLjz-RR5q%wlpkO9QJ6>zTMW* zzr%8COLqCi=kRf&B*>wZ_0v~`;+^a#`_Be1k51Vi|H)t4i%&mAf5XIz_d?Nxy?`d@ z=z#%CRyko@6ASW0g7Hhi?Copz+5?AnTK}${uv$4gu)EjBpSfsDctouOAVmh1GE1C0 z{GIv`=NFQ;%KIlS%-Rz#jnN){%A>q?GNMEONy|G595q1EPdZhN&)y>~ur*+WSzVz5 zy^kEk&&0h7La6|B)G5>J0Z?Fg2yMv(R~@bwfw03Kguc|_hGCNA;+uz&7s&C$Ao&0? zUKk-&v@i1IFzavth7^7Ql^Wr?BASmf+hc9?_2`>a1(x;K$b6FNqx@I$bj~p}OkOhL z3cNvIibeyVLl5jF6V1;)D4R_gF+LwvyUTReXiR(ovVX`{W9*{?CTocAS0x|^&~0^z zMx!}^!#`xO{}b0BTU^2F<+^rg^Jm>hnp~JnI-|`+LTqWSf_TYjk*3GKNO(~1y)GTU zsS5@U@%6RKXF4?88 zFT3nGu~S+Ev?{c*+IQ(ZHK_;(T??f0tJKZvH`na|`nu4~w17HA% z6qB+B!>6LMP52)~omEtvZPTo0aCgYy?ykWZ+}$;}Yj7XjJ-9mrcMI;W!95ThLU0JM zdB6W)pU=^=dadrMy6dVt%6+W@z3B=QtzMV9C-E1WKL+s9bxBnT4{m$SkyyXJ3CjamB7x`8RwO_aB0p3-)w&i` z$Y1`BQGm!H2RXl^bLsYEuR@{d#g|Yv)42o-AV4uI7ola%$m=)o$I8mA98kd6ZyZ>lhSU$P-{5&KE{=Phr5I zMp}kCG*Ay#5?6(FzHS*Gu{9hQ@X`+;Pj?`v4#M|<-@=gkYR&v3bmTGP4hnLN@zcde zFjN{Rx-U?_Po82G%XEf;9E$Yp-o=lAR`bE33Ynbq@Z{}UE3o{kybPJ=35S|Mk5@{J zQCKVrO32hGdC(m-@t+Bdkz75$sl&G-R`8NbVs$+!W~sqeJQ4Pi9=pd23e>OKaG0F_wz8B*r<{j)C36W5mq=CG$k?!mED7IaPY)2B{;sUqb12i4jCrlgU2^RT-SzoKq%#I zp>B^2;?d1+>JhqhQZvueb4o%S9ximbacmCkxkM2)aGs^fefn#fv^rOhl7BPLWe7q+ zgBS&TkNGX&Lg-?7eM_Ew%SAsYE4b#PhSAvH-F9oA5}C&h9-DJr3%e<=M>wYOio!XX zk3$q-fC;L7tL5=TTe6IbXSo^q?O>x2t4i|GI9Vd<7kc;d?A!1uN?+gV(<`FV(<3f( zQ#VFRGka^d(#SdriRRHrDK&J4%g*l(yha0TCyS@d;15O0hq1i+I{W`79ac;gS0@8N zaRdknk#p7X$DG_(ijzdDJH&-CCpXaSGvOce)NG86)#BIbL(Pp@q5z(RJk|)B3P#qI z=FtzJJXM)2T%UM7CRtv8XD}iklqiz5f(Cb>O*d0cm=|;2VWKfwuCVzIeT$!Jbz?SB zWrAWT`G!pQNOwsyu_J~BK{jtlsh1CE&8LI`8Q*77QZgeYPNcM6EqX!}fH_^5B3pCn zEb2oMJ@q%-8ya5cd+&BDj8~PEBKHEXb^p4b_FLaS?&d?gJOT9K^NBVsVnV8Xa&I(; zXS9KnxY6u1$hHKf zX$XSp&eqt^<#Zw|>G4clFnA|*_1CFOc#TWehW4UKEA#cvL17Ao|j+gZ=m9i zSPk6pUHH>1m$5^r*Kxv;z2rQ(Q4-abbJETqdTgFDZQ$cSCR(bhA%HP=D57&vuko zQI>x%3tZL3s5` zlwvPCEdzUOGbm3d_m*0Ek(COyoedlVmT>%oSxB&I2wQr5%f{_LO9AcEQrD)@I znY_fdsJW6+SBqCkKSz9zqZ!=Ru^u!A-I)GWJ${XUrqxdur98DPqP7eI@)P$+S;y@} zhCz|hH=#0_DJq^1!Y%PKsqw_m$Y@~0ItoD=oJoF-+J-w5ak`&Y%#ZGIQ#47tVFOpO z(NB)DE*k?$AUcx0hc})t6lCsaBIm8@fjmy|!aq%-f=KiITiI2e^N}}YT&eukJQ~c~ z-nEpw9gJ2$b?}m5agDieH?RVKCNE}YkKMn#XTBqnxUBP(me{dKB= z;amS$GQ++8QyU-IeRa9Pq@=a@cZ!#qwv0&@!4_JC5;amj^vj5v0#5te@?6&D>)VUN zY@QGgvW)KTL%CA!ki84EKgzXPEvvMQ3$a&Uh%e~+{(LB7awHmyK;1{E3(Y#Ce__*Hy^y^;%o+wRT!wma}Etg#DRglxmGp zX&?;STA-VP?I4b>n`-EuDkSk%i5kc=;KATQIGQA!G62BNFXK}?EMGZ=OC`ag7nFR< z14V@GKUmi^A~axokq?hGE;gMm6$&?6fOq%LaZ;Lc;*9Vq2_2A(L%1ORO8vIl^TggZ zb$6)vW>Uuq#!uFSLHXVi`{UNQ>_Uaj!>Ayxe+9=OeyabrHu+HW;obkT7er5Ee+a_qhm3325`m(o8Sxf$(4SG1kEdSGUSt6 z8U$fUTAut9BX<)z#{SliMNNg-|JVSi$IX1=-_im*O?X=MXInCsZ1Vl_Gz-$=c%}Zy^VL+CUF0hBToD?ZS8WIdI2n=*ffwj`qH~FxF%-0F zySQkGCl&ycXs$-{&^}H(Rj)tEbMka2ifN0*RimsJd&fDWXR4o7wMMtnw)8-e>4lJ} zd1>>L4U9qHhiw=IWrUkj?Z-_YADlZnob@Q=c&M>MXpT#s=mitZA7ykVE^_V_1dj5y zkm2`XoDJIJ9$=&WHa{ajvW_pg;6)rGRVyf4bumw@Lt9IalVqg=JU2>%h4 zSj0>ZqXjqd_8PPH`oS%yFA%UP#suNphB2#;x&QnLMVOl->biI$F~|7GO|8KKJtEs# zFx{H^IeAgE!PQ43>eEu5(96X^9|ry9Vyj>;j0_M(PJhVhkg1m6?K|_z&Z1?@C0;zG ztcUK_aJK}eA#u5w2ZtSz73tp?USDXVzsI59A!WGF*)U=^rAf#o8-w=}`#j!vAiRL3+k+Cthi2zZlP+E;I*J?+%qEiyi<^zF_${Tr(^-?3?nOa8iPG<;N*(QKRA@c%I5r>H6_=MrdtfsU7v=^N5H{JEeVF z{(70HqHi3gFhsc8CO!j^rSy|Ya39EK5#@V*)bAn+a)Ed*JcuK|t)go zBA5o@FQ|P|X)1W@J#x$~Y-j5%F{`$Ay?6SwZW?kCJ% zfVsBl-#QM-0-w=716Vnzzk)b&E?3YL3^*1S=XeEWt@tbYjGdWWy0+RZ@oSv4qxN4@ z#fGZe#ORTp&}Ch3;+)=4QEVceanCWvj7llfOi0>^iDZnC9U;sZmy&R^#zsZQ_K!y{1m-QU3OKNY5Sh#5fOm(xh=Ma`%ifK5`gq_&b=2jatz+*G~{?a8t1-MG> z4XPB*$?vomoq(m66+fce3?+u`WFpoNdrgz+L>bf1%4|C1xag?nxzh`5g1Q!+?7OAQ z4Yc_>#Ul6uP1x}jF>aILXP)K<# zcQ6V3XI;20Wtex0)XfT@215WCb2B!AUm-a??MJ)Gr^27(N+0YTYx46JfU`|evDPY! z@+dxa4XJFB0~i@tia~Z%SO?@Y^^R7YVRNDn#t>+fO2gP|z-Wop@l0K-Qr4s4?LCNo<*vrJ?kIw1ESzAw!aC%KD zHMLOEHz|Z9o}DX+^xGix01OOq{1n$u6?ipLqSH)#TeJb5DwfDL| z>M(G@aP=Cj>SA5M;6}Euu56MB$Tg`v7w5KZtz||<+oC!pe1x=|_Hd{w`&0OY{ILi` zdw1~k9$n>iVRIW)eUURV{&)@yq~$2_8=5oP~l*R*fkO#oWjRx6Ltyn@_sV!W0=oiW7EWa^LyScV6Z)FNaUwIi==Na z6|7M`Q8VqaQqWRk;zyqb4r;VuI#jL3W4>T|B(B2uagZa;vZ<$Ej*DkZ{}LyZjEFG* zcDEO-Xk8oq;%K&J$qc~ohD9)hB}Aih@wchR(Wl%k?AIwQAk#IeY~iy4AmAMdHM?ZM z1)JG_4!NK{N0It`S|D*Kpf|qB|M7;6M~KI=_*b!Y;+PTiW=vF4LfS1Ilrj{WT#yq* zu?nCZV6FWX9Dan-`Gd*k1X|IYDmk|_wwl3&*2Y*PUIIOJXUfn66W8<>( z2s({s>R9qYqwosD4#zxAP5hk_T}geg4oufS7m*ZG2tU~q^rB5IXjU0 zCd3)~_|TK^E2;{HN?4{PWSKN&qbMJ%5Qi$i$&%F5@zgkX!W-&Y*r5ER?vW1~Ww9wb0t=|4lOhwdEKSbB&nZ>J zOQwL`Py_%`#^e*o2;+;vjWZ1@kEaxvg}E?5+kcgGQ!zRRHk(<;9sH}}3jC>8HTF4* z%`j9Y6F#xzPe>mwB`P#x?RFLg1rz$Pn@XI8KnuWX8MX1>ERbq+gm(_ujschtIs3^j zV8Ci*OrN$tX>=N2Sr~ zq6VnIOJP_r{SeJAHDndJPcO3r5{@7hiIK|DTO#|H5ogqMFiJ}>RBs;2#mN=Vw*b^eTPaT2AGqO&mZ2{K==jx!5dg= zFcNm4k)!Ry)M50cgVz>&aWbCyn=R5qXA*VCj_3M9(y4_Wn$M`Uhn(_nUekAkHGY1yIc04mndEifd+e zFO#xQGO{yvjYU}rhr7oU6LtvAAF1mjND{>pMdo5}GEL|ebZD~PP-#?Eqx=;MfcI1> zD#D#-qx%ADY$5&K$BaPm5P=!f9e>1)^R|?U>4~&bE}u90C(&+DTrG!gMPvL-9ti;U zgCNM0S@irCE!2s$-`oqK3?i;+tExigsUQSkRddpXdOgGYI9zSN@`wn)AHvE@^3I`S z;|vatv5Q4Ee^#4@Ah4=HPV0xSRWFnK*-I~q)aI~SQb5D0B+ULNd_JPk+$88 z?^N_JSTR*B`rYP;d+gw3JknPPARQq0>Exb~mK6E`5D73gZE(vGwW)0Hg@$DPCdsD` z{(hs?8whLex7lo(r;#RcR9TvGAElz5w5Apo6-SG7HtfH#9{Y~1kTc+Bn1k&EKn`tH zO3zGFE_}!QHTo8+kMO1S4#UU((8p`7tPGFW3?h{wgs-{Gd(R|G$q~Q8rz1K?GEm=$ z9pQ@DJ_%vx$9%3toh;g$*!z-7yQJMG^n+}+q|M~1vhU-L>PEFHX_&b9(5nevQ^+~M zk<*k&9HiuQ?w8zv!~x^KuSs6b)%76a^iN27Gs_H%Kpq#%_Tfg zQi=In+2gc1ePc2mEj%PmdIlSQWu5%*5e_PpsN~q$MK{6Z4D~`Huv9{BWe08bU%-vd zczXIp+S7NBxjGbgK<3m(y#N zAP=4Yl5i##QVUIR?4xm@!z6GfQ|&L`4hiET%% z@7x9?%eg}Mb4+mB$K)Im+k)4J!wa}j40qoznj#}M*=6njUIJ8;oBae1$zG`0<0xDP z8m+f!;2k-K_D+WmG%FK)tMgwz`^$Jm|IhQz=G`8kLf5*U-{;bRJ=0sj~GS7n}3w?eniwH3;D3Di3-2 zm0K#9c1v6}-O2yQEYQqKH#s!LXI6#Svj$9urib{+pTEVX( z49B9(SZ=jDlOJ-&QPB!TFv~cNc44I(GD(snF74jf@9Jt1pJAXCjydEk^Ea!ob3tmC z{JYH&c5}WB5?$QxGzbsn2;IzGt>mdwSugMo2?Jh->Go+;+{6X9h5@ZBoV z=LQCfx)tuzPGegzXujcZe;%sm>rM{_vf=t~J8VbJHa zbx33+R;z9(lqy5%0%W3jj)ZGnc16MRXyl&Bt?A@twkV06 z5b|gmd%Ocrn0`YM%KA*}vwC;1J}+LImQE?11N&zo*%v4*-3S_^sWm24hy|{7sBuI1 zLy@nX**TqDW*!unwv}nX6*;q!Z>~5$nOb+Xkm4*PyvUf%Uo%Ky9rsr8I1gugiT#tw zzrXcTPDhQ@|5F%_Dy^%1v;UWHh?@DXAdLgSu!+_wR(}ARa_vH5GD5{NKLG{(SQe!) zWlg<~VKG^w6^kn9yW1AZCXao;{Hj|kI1c3PG58%c5jtfQWp{d zX4sr@)G8^iL)}u5c@MCii`lX!&VsN7z^hGdPxZ$imdMaTzhuW{D%Q-jq;PM2FH0@; zL2@${{?E@74cxmPsys=9wpEeHh72*U*H=b&?K{Ee)X@(*$HGwEDu?E8P3IQEt)$v@ zu0854M#&7kyv@#jWV}72=s}~_!5%rYlKPC(pp&kdC6z3}zJzFk6>-~6^i}PK{L4Z% zE`=4%xn?tC&>zUt!ASMu)>5zba3Y5&<{EjI^EFcn9)S3AWs;M!rA#QG4L5k^VPMUN93(N~uBzPFc>p7KmwigKAKwPa_EXQeDl*Z!-|XkjGqlw4(S%blI>XDrG}hGo)U2kq(}}OO84X(`a2txck8fM$V?OlBD4Wm0XUc> z7vP1EdcYUXK_+{*@LhF)%=71fmx}}t zVuQ32JT+XD-C7XEHmi#eV--V0O&^p=o%_=Xz$fPwFiMB97|hEj8##gNd6b5OH4)h#CIe+DWC->^IUsqw3^FvB7iw*eMZe@KQ-2RH%eWDUr`Xe5#R6n8q{8 zRJv#SPK|!jKRT0k%^!tGIq>Yt7BrevyU?-bNr`5G9ZmB@rP`k=tyaQ3^_n<0aZ<3w zKf&?@*G$YW=lHJkgGH9sx10n#&^9Fd5+(LEpCdRl8qq)L;_FBiE$NgPM1#NU)MFh< zITQ=ii)RIdUEvm#HbTubZ^Y>YQ1IG9iU?hh2sT##mqIB4^+e!jS^NDo`b(*Dzb|K) z#QY#2uE1Lby%PIivxFwU>R6*hOr zBkp6AsuyvpyU6sW?~=A`P3XW@P(>jv`Ba|aK{==D1_FPNu@*=s?sc;43b5&!b(Fz^ zobb~e=O~=}`z}|>?MWvDPbo}5(jc;Yoll_nM&$QLdq4a2p6ifL_Ml($`=VmC^;E)Q z!onY)Wffi1X#o)Oi9PFngB+Dnu1kAj=630O5wRDP%#kRoP+^fPrH z&w5=EUwJbMe|3&j6KJf-G5NP0{Cw;j;}&TeKvA!VyR4fMMWvvYTAu|E)-v%$(ml8V zQ1@XP672EaXZF|8)nLOq)ZH|C<*u|5Yk3Z?ONggR%n}gEN8Wty58HM%mfa1GfV&JU zwRm|;8Fe6P>a)m*`^nu*#fD;<1oAhON+lGWFF4<68w_|#%06F2KW`N9Y|$fCnsQks zb&TK#U?F^kn5DQ|M7pz!D7uY|+Hh=;29j0Fh@}=6EV9sE4B4{vuH3ADr zzt)}2u3MdyaFN-)5B;s~So(Sif58foD3Aje%RL@#uDSB?@QZekD9|D9ZSgFb7=|YE z%lKX$IFN!*6&&;8(33{q?c+e|jUo=N)PQG$l_r3%p-@?~{hhU6ZK?nPcNCVW$(* z#}`ZIWsg2n;jzG(m568e@fS`x$=`mq@J@prOM?ac6oZme7+8(CyR#^VSA)yBmwcgG zriEE7MNG?J#^U4<9`Pg#ZjM|H}MH>Rz$akv~%&Fdrv=^Na<8XS=~CzJ-(+=KxDP|`@v zCixenO1nNJ48QiCoQ_5NjV!4)YI`C0uNssJJ>q323rUxs;Yu5-)(Efni4<`-oJ8fk zT&OiJ!QWH-+afk~NtEP927F%E_SRmv=V-&C@U-Zf-@vy;#C$HN5}^kq1C}S1Q3rCw_$}!7Q#8ihnEc3{a%uk;L_k2X6oa^EEVK zVHLh)9494GkN$3yuV=7(dO1B(N83&T_BX!vHC%KAeFuB|iOqtPQv9z+gC>7p&lK6^ z(~s%|z^4Y)1rYtB5}CA^{S!izKehm6;>X2a@h4?yaosAaPLo37$T;`B26bpnQ*2pP zrD#SpQh}p4g902k;b`p-rq95)M+1Ntun&!^KKR)=P0f7;&2p{_0u7F=4|d<)C?i?b zV9j+kD^i%a-=sk-F^@lnIVNM+^w!~Z(J*X7*pa^WPWo0VbW8Z-jnLAsaRSs^Cps{p z;p9>2aLcJj6v>r|)0sfKoq%W}k?NlWyN=MnfM~k{KzHfcnG|b0-}7{tw7{GH^E_eq z#mGGYbN$x;IDpH^<<-)ho5D>i3vjw5t9)3&e-k~f%(P(1%@lbxjxyLaD@{pNXwhXR zOw(lk#O|mP%2m!EbIOI*aJ+HstM5OBHWFcBf{K){8!joxMwJ;vf;j9%#mSb-VHOww zKmPfBq5pSW5%vQBMgf~oRf6q@mCL69*eHE(kd)=jH2FzP37rdY#jY(}|QtTVi@ z6i4t+|J%=l4#nfL?VHT1+Ii z~XA+G2qb?ny^pErBx;4L#3y4I((q^+P2kB zRf@A3-akvg%6uGt{Z@$L`GDzm{!)vh&hXjqmd^lKg<~_XJFwXYq_wdz%@c4j4WUNc z&ADn6iOC`8JV9g_tl) zy!p&S%Xc4;z{!*O;)jI`VuSihPYJr_tZZ6=rZw4H9GQh|`;HX4gfPyu75D|vu0U5e&O3MLSuryC zu_|jiD11uUqenV*L|t(*LF+B@4vjpoUcaZtofA|F0g{9O(H)Xm#ucZq;s`oHWDo;% zErs0>#gs~UwJJVFle|noM${O)E~o`)4-3}8SEeGa(hntYZ9hDl)yT{lb(8Vkb>yH?=b>WL@llm`L_@9+DjDrMZQMbQo zOpmmz1PGXZ(=X0rOaZ=b%Eym?UyXPjk45MFnT3-qaoRL|+BFQr4d`>L3~JQ|>r6~I zK-T7s?6~Z)3C?1RuZYY5p)+RgfQH|iRTIZV}bsVW`>A%vd9gfFY>hCC|Ut!(V!zI6`iEdsAKn$6id|9tVyBFQ(dv; zStptS4B>mJg+|i5E_N=|_V!nixtaD2LB>T!(qMn5VoB?&_{AH`RRe0FY{X@i*nNHR z5k8v3D8$C^mfx4I#Hx`o{tDl^C!2>=A_a)CQT`Gfog0i}m>Xf0E_8ds+i z#wNkWSe1SEXQE};`3^6OAYeftblq`BANh#28{f!l&jJrS^yu+|CE2~DvoY8UpHik- z((`H)SiLkzU?TjY<}svF((AfGC*N%6jRyW^>LMQ0L)&D&dOEY8I~L1sJ}2CRK9`ZB zk1$H=i#1zO%pQ8^fjQ=knTBYmq)dJaM^=lmzCnKGAeTVI&`(-8lnk>z}M@I78d z3qAkSSRPZyT_(jh*O+I8jL#fY(5^CF7N8UGB4Lklh6NktZP*w;dRUEJ3uBeAo4d7X zWLv~smZqg;u-q=2XbnvkghA5C#N#h>&*b}U7CkzKl9=KNtr(OZNWt_pJiK@n=%(se z0tKER8**!LOw!{#z;QZjB#u%q<8a%a zm*1EaR6O!eO}alDVYxa6qK(bKh0rjb?fBK{Pa2TYZj$rv2XK_YNqWBrhU;p7Hs&*U z;e?Fl1AL`*hEF42yNP+fdeD8s3sss*j7 zgO^DYhxK_`%h{cV3E|9a$2w;n3Y<|mLO!sy;d#wN5VdAnAQKISwzdxJ2D1GX;F9Pw zw^qnatzNnR4cCYMf}-+^F7_sA@Mf=pRs@NSUpjxm3c@lw+0ZX{|2Ff9PEUVh3;7d^ z5vs^bib$|o`(6jd<<>8d%62R{k7(M|QWBrqYfTIS8%L;9qfEAn0cL?&wvEv_>Eaz~ zZd|MygdkTVhUYVHtF8xi=qg{|0o_VrBwvYCD~CSbTZ>b-blJQNo^j6lPkh6;KZV*JZ?6aJnfS4rQ8d1nGNmedX!=qRTVz}rhHG=SPH$CM3 zeVvVnvY89V2rY})x048ls%n~|-$ZwFUqiWk>Scsh^Zd}*h7OYGIsg3P+L*Kl=9CT4 z-Noq%9s8VS;Toqh-LHS{LIq+F;bcA^BkLfhv#r@BG!2AwUj0fdS4O?Xx-e;kAYJ{L z>LY2GLN=>@)9k;0A`~%jlQ*v{U<7iz1^UKoX&9fN@wYDWG|~G}Jhl2FVn&K;T_dcs&2-}zPyt9OW-3;J=_1-V@`Vs? z=+yzpua%x2UM=5+znpfq$J1A6fq+u5|3pB*xo8hK+u&wI5xoXM9gUA?R_v^8OUVxh zcmgF_IC{-=QiYGWgLc=y;y*KQ{dk6(Lh^5HmO*WC-E(~5f!Hy{CLw)+twxAPQT~q` zQ-mg&>H4F#rcPDQEHgh}k1Cmc_5EKGtYD~c=$tRH>SG+6{CJ``ggR)1#Y8}I$FkS| zM8s%l(?xh{S}AO$?g!#=b`k0_!yr#V3$Ej~ZuHCTx?&u9%mNbAoi@jY1|B1{PV$x- zp^Yp>(_J-Vd76#3w0&!mnDLDMISkmpMxJqG+RJuhP(B$lGeyiF z;8OO+=`%DyEf~(>|7OnlznPoYfm3ZPvV%(nemGtArU(onV4ptU)v*y^IpSgP5(1EG z#Lg^q5JQ8}Pbz7;wO-zuv560ik%B%*18b6*LF5I{v5eK6gXRXsmexc7!p39In^D%B z39f?bG7@$Av3MrQn_1Y$t{NH6^^ArRLDiZoJQlmvyzw4DeC?)HU^7SoUMRE)Pzww( zazs||jLl?1*+%H%)IpTN=f)A}MoyUZ|9kr7-)er&c7aRaj3Dj~ezrT!&#_2_ye)FA~ z(}up0cBg)>W<=o;EeP_Ec4;=LU>GS5UoclQCyXW|3tNefvyp;9FCtAqZD5Cy3^j$3 zJoSM2)F{58u#76E>cg5ISiy7#f>V8cq%u z&GNNb4N++47#vhBe<9!-;)QG#F^v(_?wEz*HQ{qe^Ig$MeXpu#RJ2FAwNK{G$^@Y* z``!L(*j`7T?Z)8j6uy5YMdoY@Z8XlzZr)j-W3p>S~vv3lB=RDN3gl=bGRxlun|F@2Zy|@Z`T_ z`{O)qQZS#`^33K4*(LfkfnodMwTBEl&P&JL354R?x#Tv%V%%id7A;WTflq@%HlWdA zVnGBTfXt$W=3z#D#FlE?Jo^T+2v(C%^P-dZmvkWc7E%ffpg4x{jwJX*67I^g z!xC4CDSlQrDI{w>bO{MkPh#pQ4$TKqPwU@y&cges230a#=O)8htzv6&LGxc@g=mM% zx&i=G>e~lfK7N-UnfOK8x8s9MHJ*p;*kX}ciO1tE_v+XBFD%%4MQ>jm!fIv(AGlm1 zod!en6MRE`#Vo^Df+qY$5u9GW^!KwEkM1`jeUlHZgOP!vT+4LNh(vohMVsY+SYVk_ z&Gl_XzNu`bhL2=}uGU(?nRmWX30%az`xD3p^Uw%?!})g6Jt+*!?MFoWOQ;`X<7UA3 zUxLGF2I2Dc4Lvk(QNp}Fc{5!f-0_$(LbP8C%Z~V7(Ro0qD7T-7~Ox^8Ry&qIw&_Y9f zjl#xJrH~!MJrP&okd>bsd&Dg6dA>Sd0lN+*hzqnh&4Y1{H$?4Ip@%A-ub3yu(&KoW zo272nNj=s1u`CHlUm3ZkJnjCM&Dhbg7|So;-?)4CxTo8!w`3syf2W!K$7#l9n}{bM zw-)E2E0?E954{2zr}RM>uiu?ECD9Fc^V>J2z(83A?Sh&a{E|&Dr0k}_@;WGK75Z+l zaD&h?6#7~HXc&^~UlV{mV+@{sM@kydeMo0cBWgFZ0J)M&D;_wa=ROJ!#t>z7todVXzBjaQpp|b*qeqC`qq5I5qKA%sd z@6Uuzjtwt6H&284eC~897p&kgdVu$iVEgu+!soWfr=8B$Mp7j?t+B6Mi2~c9o1et6 zScD#Q;@ABQ{Kc%7`l0-)0_mYqn1F@7D*59dbU)c7u{w!XzdF&#vV3ZdDJnfT{kau1 zy%Ic>lFW|84VqPNDprkc%=KaQF1*v?_hHcpL74sB_L3b?DuILTBGxuJwp$ z&X+5`5U!&F>RU}($O?H!Ju>ndLZdQ0-0^H;l|vViZqu1k{T*8K4NV$ODDn?w0OKx& z=i)C?&KmC5BS-q*U~KwGzQb-^vIj`t0uB_d!p;xtPUD`T&rGgnaxf&ET9e zNJC8h;a<@SM%Qh^JKcs_sH9s2241=_{~V{Go{$}- z_>uTiMAzn>pkHDhFz?jOve2uHO z8+hFb8aTc0&crCF{!j)=0jOc;gG&)%Ca7;E%T^zN3V5c5RN@L{;x5hl4ld}eK)MSO zF*6W8w)*kj# zwz(rc6JCY|yUQ)e?Ax|Z7_1MGb5glsF(ew_w(CMC8-+(Ep_GQKc;q3v`Pc8bs>qnp zL73msM_&Sjr?xwlT32xh%IxN^#&3=bhxK~e6cEtBV^6L0h4ZvGuK1r%N{1z%LnIMI zSU3JHNza6h=Krhx)0Y42whE&F5Ews)7FonY{qz!x>W!!IZyo4#h|p}*>&5ru_6uvc z{z{z*1)pU2rr|l_Z(x&oI?xXV9*M-gZo85jG43M#ir1Gy@cke1-Y?R3BT%jT2->Yw zP72BzOctGdj?QE)3TFwZ3t6RcweDDBuX9RGGKi$AG;!oPS1c zmXwWL;;JwQ*e~y=GMq>T3$*o$CfD^pK?Oy;`r;Ii1jK6iIg=5S(h(T!;iW-mpuErr zznTfUui_eH3_o|aub7;V62cxoe9A0esB`kjG@8aS3z9O+{{dT1iCHUJ5gLe+@mMrZ zQrL-CtsTYV0n}IEgMav5miC@N0;vT1=F+1Az~Nwpnl$o#(oNEB!tj;3^~AUq=rf8z zPO<1;=eICMe4dmsRK=BKT?4O$`p z#AI9J%Ivo}p^7fss)V6;7&3m-Z$$)o6bm| z{MX_FsojT8DwJ&!Gne;Kh8-YHAaY6~G9%>ZFhD6CpRCD4B09o3D@>@ACyalVrwLT# z_Dfh=T*3gSqiWs|cK%yuG{Kt7C`WJAz6_;l8DlEr_xy_p$h(*cFCL8#n=aMoN?h^; z>t^5Y{BY0SAqU~=I2f6oo{Lf~fFm`uTb@no?Ig4-U-1?a+v~et88An@N z`Z{X=^>eKe`WN483lG#jQ$l7Sh3mA7#RCnUEhA;A@;r-FvgKdHb}u18I9{KNfish! zL_K2KbE7tV$DL06PUKuR+bHbT=~j#lXvo7Diw3l%enc9|Bd5#Td_9&+07}Z&T;y0$ zJBcvHb9oQew7|jyn6m4hzhBFwPlJ}A;Tz#e5I~2R+JrN>#$xOK5vk53>~0ZL9On3i75yaksJ~Eb?y4h!0=ZbJBlz|; zcABNx{^1V_KMF<`>LlYN8%rC&6~eDmfG;M0fE;d{+Q<(H`FdjC z?ta6Mj1xQuAnFcVb`CYt-vI?P^)#tEK?Tsgs^;vrjUae zFlyHh&!u;gBk#vk#NPX^V{lQ(>|c3-bqs5kG$*3`0Bq%N6S0C}KONlk zJ+HR=abFO8!INP!{>}U(TlIVvc$%Tiw4UO_ObV2?)`zx!kHmoW50gho@NEy`l8<;>qed_e- z$ec_AIyTW5tt>Cc!m1}8IfaK2Vr$azeSZ`7W(GE<1T*8$Y@N{83IL`AC_2J^n%g*1 zqr-tl!4#2F8?Z2YFmj7;-a^d13oAp`r{+A2=d=z?Hm z*4EadZ9o$t{1V~IBS+C5VTjoz6<$y!D`$AJ0x+8Z0GRrFg#uNqkYP}3Cs;!zJEa&RXdU8crEBjK%^U*3HdcdMutuC6x8d+xr zDIt!@?qQs18=%o*y?(!smMXG%{yRNV52PMAus!fV!02~=_jmvGz@BMpc47J!cn}iF|Gws0oEU#|hCqx^_@O%BG^Wl3w1_Oom$q<)eO|?Z0 z!gAKJ8-e{X+@;&J+MybuL)kLJhDDHzmIXP0T2ls&{q0aQZgzT_g&d_>C<(Gt+oCOv z2!<>N5-kYWpN`p}%rHvmu|}H=t5sl)#>N%BZ-RjgYg&?ocEEU7IDQirtHUBq;5DpO zbbxNQ)YQ}isRzEP2ObC*ebYD7KT;2*9(dP!V6jny(Ikw;tvhBqR!0CMfOPGu?oN{0%}eIrltTAGA27@wMFqVAu5H{Qo20=)v?Du5Psk% zekO{c0PRY@yEgxI-*P07ZH7v zIS1g`CRAuGH(8rYm#+ZoM#6{Bor@y!Q;!@EcTU|3cPZOaAOlSENLj3kp+4HQPI&MT z=TSjZWpP>C>EEXF*S0z^P|Gn(PhTf(7^;Ng8dwxq15R5H!O_rnm3{}bWuU=Jy7Y4a z^7yNb0kTZ>?-TYPpq;AMaY?7Wiph)dI>Ct1FNrXE*M1gh$EgS2lO9OG=soG?bdb~o z5849&4?;dbiI~#ANVZgI^Iq6wQXYrxP)}nKSkJo7?y^gj1w z1)rem+Xjo4Zqj((|BFqDfI#?;FkJ6jS`efUL z4_7djJay`k*k-fg%(g4zkJfDqa5`a~%ry5UI8v0}66hG>Lj&cxY7^pTEi%*0Tod5w z%{Jg#$V`m`j&K1181CU)wHq_)@`To`O=r6dV=6dLkJJOH2M%rzBw%!KuU%^S`?v=v zz!B;L*cm2m#lQ_1lME>9gT0&wVMnHBU`d02kZ$Iu$}NVHJSgAE7Y z?{$kXGVO5n+Kq7h=t6YBzI5pd_0aCJPe2N~#=`(G!)_LBZD2-eL0pqOMrlWj5a1fD zk!3>^qYKIkfIYMM#sGPy<<|gxX5wWD8=8Kv50MX=8Z}2|!O2E>4u<~RCT6DrmhxmY zj*P%Sp|i{a@MMbgqf&NcxfDZ^`WbQA(j)ai>VX5?0|^)%;ER`<{{HQO6Ql>MGqK;s z)2E5syx|}aP6Pxy_!a5(Bd}516G0CJZ>d}n#nOil9mOen79XDmObGSe2!k0qnxI67 zx*Jh|SzZtvfE>P0HwtbnYvN>o0$?PoWY|c7wH{0r3@ z$PXjSGdCLn+6+3QDs}`p0EoqDW9>6&9nZ@rhMWVLqazDP;-UBwp-9ad(HjA71WB=M z3+G%R3~7d&b_n@Ah6jZG25fKkEFr*5gZ*pnXc1Zf(!ll+YD0EK7?0!+uoNLRl0WzZ zbH_nfZB?tM)57)l@12>>EcL+qzXuX9djDVJbcP492O2%9yTeRS5@ZwcaEDAT!$vU! z3WlNy6Jq#hszWvy%+1-;Pf^_UdSpOG04`IcxG%uUtdr#>sHzeIieLsHU^bS;Rn5Y( zxa`JS7Y))JnO1m*!GsuQnT?W4R8)ZEoW+=Fl@$XAg&q z*RG1WKn+8-h?fYIz)3N+zDgasz1rI4PygW`{PwrHG=KLEA6&Tbp4J=wh9jpxQxBvb zco=&i0i%cUs;6___dT$O__|5BsDs~54P8-#*Ai*(vO_W#GB|qxqb&q4vNazqPlZ=* zzXYhEIy|47S*B=u$S4gB2(2b>$jaJfV`Dfyvkw_1i@RDtbrLW&4l5+;i5XpQu`n_% z+Fckvi={IFL3zMYfnycP;EKn9Wzlcwi6=fBzVhWS0*pXGFe%z!0E^=PrKq9~hvV~z z*lFKih}6K;1E~idx*kZt=%Ksh>4XnL57aPk+=0EZ_Lcx>u#5i>#h9}&MFo6)jMwZa z^dMbd`UETiLl@IHW|;ZUJwNv23}bwAZ#wn#I^Dh7{_o<4&+I2mDtp$w;)i6(R8 z!)+`KD_^Om+SdrM%XleIug@v+R3;K=vgpLGi}6pEIeGK)*Cj^ACtar@M*KWCy8=0~T(s~2y?pp|UTE*WR0plgaKvtx#s;H5^mOs&u) z`>@WK0&dH22zX4_k6}9Y9bKdWKzoR;V_{ub9t+#5J(5u>BDS{lhud2#P2koSywSKh zv`bGu@mRP_2@?TWe9{&(x8#bf1E)rb`eG@RmTvac1E~l0We+4^v@b79YShEt1BSNr z&JhV2b&9|QX-*kDfo%^tYk(z~o#WGoLkEGjpl28J#wOq;2Z%8xtAlN}43AGkW>I%U z7%XanbRle6{zm6$s=}|YMU%uTsq8XD7Dgo(Ju*pxnNcdt%L*By^Uyg$dIBOtZEe`3 z4q-nt#B|U;_u&tP&emcK$@!k!bOA@|j%1Busy~K`>5+OM^+4)@{n!Hu812WalG^mp z_rM6nl&$F(OH9xk1ybY7CDxj4aV2kuGvOLBZuGmF9fCdEQETN0!I7ux};V;#VBNHT|wX&FoF$BkJJOH z2T~90!yZV$Xdhmb)TGn{nSSZ3nQZHadLWgoAfm5Uh;S64r~&HhmKuOpRCG;yv|7Y=i3CiuQgMU*dLtm$wY2@oGk0FF)Auo%BdOka{5Xz<%t3 zFYm`jr8cD=NIj5xAoak3>47wl9GFX$8v1|rzFv}52d)SH8ww=Mk9NtdTL1t607*qoM6N<$f>+CZ6951J literal 0 HcmV?d00001 diff --git a/assets/boborzi/instantmesh.png b/assets/boborzi/instantmesh.png new file mode 100644 index 0000000000000000000000000000000000000000..89f120d41a68e1383607c0f338f79e4f45828759 GIT binary patch literal 329403 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

A91HGh#6Kv5bXisTv^9#-)3`Vr+V zffO9fxNPRgh5Q3Z)bIE5_7C$rB{h2NS{zK5I)RHo;<#zj0e(i|>qyZv>qk#~$3q`O z#`Kz+G^0jc3gP#}|E!S}8E1AnTC8^|2N2R#HJ?aidQK`G)A|fBgxC5mwLf0+f)0Mn zfFtQuRPqHB%LUvvfRf1dbvpLzH)Xmokynv3dX31d&27bZ_s0S_vVvU7?~iwQWNQt8 zk&l(Nc(kO6LeNH*@mE32c?S25j#ih6vQfbD36cT%cdp)(N9&o8O=%7J1WY-NM*QX7 zYP0(yUHqTF(W3~&ApzsJOMZvjiP?4qiJ_>iekA3=Q(-ve>FApBnp;~2do(@_=z4KK z*8)>Ra@!rcpkgW=?Jx#K!YjI5p*(RG0vmoI^5YLK$CPMF2NA@U?@Xw3rnTW`_urrr zmZ6EgUt_t4+ZClFQx%HoP+%0;nj6ZY1jbC>QIHmD8w?A6)&Lc;(^PABhH%NGnERxp zBtChL(DPrEg@aBx{kbshI2IEf(fo-zxUQhJwb@L)3jcOI<^cDA;$@K+$3b_0L+OVg zFuagok+SgRDAVXeq4m6uR=Au3dgs_UAwXYE3GU)>@UzNAxXP1-A%!RwIT40%rR?!C*@zZ?HsWf1{NK=Z!XOj)jo*wpUYn z(1Eo0sBn!GphUrtL27G7cat^(;3A-7!J$R9;e7+M;}`fMAH~um>hp)0h_u>ce&Ewv zvY3t)F#Tm^;_g$Wt5T#Tp)mKyCpE6Ozk{PbNu3TIx`oDDkC4=L50ZJ6KmCLoJ0TO7 zkM3Pk)-Qvk6(~A#qBw{Us_x0h)inN8N3wA3a4mxnRaN?>f`N zAq(7&Qh2U@jk#C?22HK)m`~G2VYDaDSrb zQelh!dncTw!!!*Ur>$cL>HktO9hHn7Yg7+^Pvh7SBilnA$gQ3%!u#!oB6qEsc8<3Y zq8Bj>HAErEXg{*^RAZ^bKyT_nP8dsKL_S-}mw0}y=)f4!&(|U;j6*FvHiQQJsD;F( zzH}ZE-x&ir? zHst&=5uc&v!`t+8ga9|tBrA1(3q86lKU|V=wW03&^TUysTYrwb_dcnWIM@~JK8fvc zT`;U&Gg>j-_d;sK02mce=V8FUm2G8h&U9x<*+VV%pK(s$TXouwkP}FWv6nfU z@}A5#T#f%$^}J$Pf48#cH>lL>_{a{l2?Od}tZCKg0+ zrF^h@3;FaN&rSW$OA33^_&t6TUYUzp5ait}Oo&K~0p*%GT4Blrzd6__c6hv}w)1b= z0B^w^7tFpW)k@0Yc6r{=$fwRY!TPlV#AOwL;mXLy6v=Mbqe*J=A;sh)_J9v)DDTAu z$-Z~5n$Jd}2TuV}?--!T>KXAXCA9QuOU4O=!*Tp3^dnf=@NvfWx38qw(@?hM*tX23 zzW462CVJ5$!H#+g9sZiaf+9K|dq@}_eGxmRTF`vCZ=}Wqi-6jSmzAL)pP$@+hIs}Q zr3~%!h`(oXK{{F%*#TD+He;Ek18^S4C}~|$g`BW5mVewL{f|NVxBJq!TSOd#)N!35 z=sq>c2Rr{$R6K?~3qSb}@)-OzI1I>p0l@y}rV;tDtt7(%z}V{DC~ixQx3DssrJa!G30|hBQ2Yqv_ibFT zCM_O)^sn&NJDlE!FD`4xg(_~71>XzuAb0U4wXmb87hSG=rkNpLRtb3&b}u3;$*D2i z;R~PHiCE1hY)y0cSQBpRnNXBbIxH{}9E}Whao$WkBNnguZtsBk{(v$*$yC-NMj*N+ zo*$h^IwOrNW|EO-N6_*IQ_s9B+|`6oLtLBeFjCOM!NCbt#J`2jn}05SXpcl4&ASAn zCX{%)t>KYC{f25Gdt)8&`*`P)511+(8{le0Q*!ZzPi$E>O}V50UQnJ;^Bl(i5DRk~ zQRutR=(IWbFvD6Y2#4^U-Q5J>K&u4-tHhoAZ&(>a<`{>ToaKMQrgYp$2+dOrevwJd z?M`DHF`_)+qGfn`K8c;C++0Yt>oIxRIwaWYu%*&#hkj^YOE+b)BA=1Cbv|mq7~FR9 zEYC9edvE%?PbPbNF47b^UR<#*P1D);+mpS6F6=(EtAmmUE#;zsPs$tqk0s1{d+orE zPoGUN#d%33Pvs!0br^I(G*lce;KDC4_wV+T7 zdR8+AIx+>A+|NBRL=#QfSH2T-&)Pyz4-AZlFaQ!PBKegq)YoN;pY^uhdRZK++Bg{JVxFZNV^`LPxw5rK2=z9^qSiv(U7O?NHv1zih?U)xYp_ zu;+??aU|VyhRn^W8g^Sl6JLKODh3m}585A--)BbD{t|?iF2$7*(X`|OX<-kHnG228 zHoG}C$CRNBLz<~y@-p8Mri`fdIhb1k)9@X%+O~)Z>1?*Q{NfEFWb;KSt-fX<-yKJI zkswPa=2tZc{_8(P6TG}c{3OOKgh`pIwogiG&U0M_$jy&bXc<>3?m=nOKS6+>Nf=D0 z;tZ`!O`N{G-bFZNu|@vZJvHO~r5-$?bKGbKiYK;&;}1BIN&<516^euMzi$^77>^@F zKut96Ti?avVAj%A;kw=xJXnMLRm}tp5FEAvu%vgR^JS>Ock7{=Q5I->)bFhZIFfA(ur3L?I4G!i}ki{T~ z~gs5d5)4_8RwZD;_WVoVEbX33>KLzZ|u z{uv;qXHvx31se!c%VV!(9EP9ix|1DeSXe=_BED0QpBaeR@y&9ZV)A+*dIc^B)??l& zW-fS=Xj!J*&kRUfb3{S^77*uanlivmpA)7rZrkC4;>S(T7Q)s0D)z$}Q{YJiLwytj z@~@k$#vvg3=b6>On3Sih)L+u~nNPh=cu#4^5Mad*U(MH?S@t3= zzi%uXPW#F=4VK!|dhBhlNy}rP$z|WldRoeP^Hjg#8IGJaUw;6lUdjkY7;1tJcnoiF^4(ECob5mHtu9D-Jwz^<%)ibiuzg$K_#)>n zkBel>;=-BzQVIju{f+YJ#%V__6iG&;a?8!pZpRenVIxYA#qO3 z?*60D^u~J*$Lvaqp%f;_4tkUhe7dJPTMG%&?NK?50!2n11bp~2@p`7{Ick{pPIp~* zMD48CQC0S!QE9`gSASt0k(MME_S_bsDXUgr7T#OMa>-mY#<%45@hlNzjq&d0lt-dn$TogCTAtd zxoBI+9*EI17`bG~sr97dK#hqo@O2*g${!oDdv3lyJZ|w}l`->UXO-K7Qt^5e>r?Dx zx*vHc5Ke8<(#8m~VKua&x7V95Cp+iDy`jL|#qxXR@KR)MR%@0&iz)G8TFEm4U-7;& zHNt^Pri$H4KPapzD`R!jjf}cfICNzwRZ5(U!Ec&R@qgORVjM}J zZ2VbsJ-;P5{s<(Q;yrhRxz_Hf{(n53V|1MF_x0m6w%It1lZkEH)+CMXq)}trwr!_r zY#WVj^O^5&t^f0OUd_7an){sV?9bUdC?goH>P)k`k6*A??*KP(DU;Uk$HRpauZ?^R z!JioSy0q2DhH71hr)kE3&K?CKvmJ`UCh^piZ$Y^7kBy$G`9N82j@tDIXnVgBgVAnZ z*H!&d@dp71Ek8ZadBvRvrS<=5RsY+Qb%HXV&WQ$vMpkT?l~bo~pV44p?H7YY5LDFW zG>{|G;i8+3d#^>%|Ch_^sL`Z=#M_DNryc+Mtj|EqA6z2M`4a0Cv9{|LP}BQqa!7SI zAoE8&B3v$gLXraj0ELrI4`hzc{ND|{Oo+%`d|lU#hD)$NExJ{YtVK{leNZTFK(hSeF*ama&RM&C>U z7ilkScE#Map9Kg7k2{GL0rig>?vVTi+ej@bYu?8F&-8IAyhPn%C?o~HCo-gTP8~^V zmM`n)O{(C(Lig>zwyj$cHyA^S@B0r2Oeyhl+EKR|b0u7`^2P~b=#FMU-)69N`~4!X znLa7*1f?_SV{w{2s!hy@nY@DPh0tHO!y{o_PTmv8RDaX4$V-U=ge9l?UNc|-ak$Rt z7`%nr6g>2OQuSbtkwbXe=DR>}v?oV0u0K6G9E*+W+QIpx-v2J3`37fb0u+DqW(G9RbRL zMV=P?^68wuUHEu#nwB7yT8ximN^$)4CIhkU`^Er+LL3D`b?(onF2k3oL%ie*f4$5! z6A-Lba*3Ic^&)@1}qvzq+%$nyIv{_(XMbGqf%Qol_Rosm{> z(IL(gJR(J?Lg*_I39?tH2kv&zEKA@TV^iT#0=1*Q8{MA*v@VzzmYD;xPz-Coh)*WI z$k0q3B@C-{x`|DxNsvW*pkd9@lw01t#a<8dJcQ7)DBQ;ID;Hgvl~kC~BmR&p1JQ2| zP>cx<23r=NXY7w@vOGS;pT~#LSENHWK{CYRq0~qyb2uqRF@B>SWAdA%6dC#G3{7z( zB1QB&#iWd7j2AhcMN?Y5qR7-pm(6D#9G&$?ngjv6BGrgAA)ITBT?R!6D<9fAMnTZNyD{vTj~!+Q>kfz4KXX9tejEn( z5DgqFn&@-S4>{-VPQCly<2v`$(S4uc{^1JX=-Q8&xl^F>nq{iUjbU0UHw@XTw_Hqw4I9^B ztLp%3hI?jRxf){Gc6-=)Jsvq#p!pkdz||4~JpMMhtjloI8;S9A)$`fy<|&GcjvVM? zH%D8PrwBeIk01O;;3aA4UU{>15wfmY=HdUkpA}oEAk2D7@@jXL%>8^~0iS1u$GOZW zSg7}==Kp-8DJR>F2Vjz0tEzoRpDE;iDue@gcOntR7FX1VA{Zj&ARYY6h62Nbz(y|` zgokR>4C0cYt+Jj6TEzHoIZqriHrz;iFml~wO~h)uJTo7q^@9Hza;rET(dc(mXKNmm zVaK)V_HO-em<=+w&kz;$(Dh9) zPs;H$7TCRbNrNI|i|_eydX?MB%@P|0O=XQi{R)gP@O)`k4f!jPV-{_rt3L6wbu_5L(m$PVi&Dvq?A z#6!4Tu~DJDtCRU7+#7E811Y-RDo$+umMf z|2=uJe5_zNjxyN~4_|d{6<=%Nvg?bM26onT2BDd&gw$ zC(1g}f4nCeo3jBB7KRK&F|LO;@#*oxcb#g;HZE&*hX@D?s345yaZK7$CwCAcB^3+h zGSv6@7ks>2OL7TnnIH?cI}&*%g~-OtCo_UUAx&k+^*?iexs}3NN(zXGK_`$zwDrSt zi}FfFv$qe%rJW{M9o!nqkPWlraOD6T^eQ3{6&7br$VNLz9u?0Wz&^30KveFp<_zAQ ztPryASauD$Hi|n`ql{|tN7*{ViW7G=@U@x=3f9slR2*l$|Lqt&i3(wuZ(d~_WBc&rlv85Rc*rH9`lYF}Czs2A*r%uTDuO3- zWJ~?fkqT0uU)oy174|QRlEZ{O!#9dz?T7;T#L~fQV{kfIrEKNhoXahE;G?ZHA!BzU zxQ)T5ENSG`bFgQN6|4VcA| zm|X?jivJlATB99tE-L+*&vHrSc-p@^rV}+K9hyArWQ;B^J^BX|&|#x2CE+H1Xl=Y3 z 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 literal 0 HcmV?d00001 diff --git a/assets/css/main.css b/assets/css/main.css new file mode 100644 index 0000000..d70d854 --- /dev/null +++ b/assets/css/main.css @@ -0,0 +1,6 @@ +.author__urls.social-icons i,.author__urls.social-icons .svg-inline--fa,.page__footer-follow .social-icons i,.page__footer-follow .social-icons .svg-inline--fa{color:inherit}.ais-search-box .ais-search-box--input{background-color:#1f242c}article.page{float:left;width:125%}/*! + * Minimal Mistakes Jekyll Theme 4.26.2 by Michael Rose + * Copyright 2013-2024 Michael Rose - mademistakes.com | @mmistakes + * Free for personal and commercial use under the MIT license + * https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE + */.mfp-counter{font-family:Georgia,Times,serif}.mfp-bg{top:0;left:0;width:100%;height:100%;z-index:1042;overflow:hidden;position:fixed;background:#000;opacity:.8;filter:alpha(opacity=80)}.mfp-wrap{top:0;left:0;width:100%;height:100%;z-index:1043;position:fixed;outline:none !important;-webkit-backface-visibility:hidden}.mfp-container{text-align:center;position:absolute;width:100%;height:100%;left:0;top:0;padding:0 8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mfp-container:before{content:'';display:inline-block;height:100%;vertical-align:middle}.mfp-align-top .mfp-container:before{display:none}.mfp-content{position:relative;display:inline-block;vertical-align:middle;margin:0 auto;text-align:left;z-index:1045}.mfp-inline-holder .mfp-content,.mfp-ajax-holder .mfp-content{width:100%;cursor:auto}.mfp-ajax-cur{cursor:progress}.mfp-zoom-out-cur,.mfp-zoom-out-cur .mfp-image-holder .mfp-close{cursor:-moz-zoom-out;cursor:-webkit-zoom-out;cursor:zoom-out}.mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.mfp-auto-cursor .mfp-content{cursor:auto}.mfp-close,.mfp-arrow,.mfp-preloader,.mfp-counter{-webkit-user-select:none;-moz-user-select:none;user-select:none}.mfp-loading.mfp-figure{display:none}.mfp-hide{display:none !important}.mfp-preloader{color:#ccc;position:absolute;top:50%;width:auto;text-align:center;margin-top:-0.8em;left:8px;right:8px;z-index:1044}.mfp-preloader a{color:#ccc}.mfp-preloader a:hover{color:#fff}.mfp-s-ready .mfp-preloader{display:none}.mfp-s-error .mfp-content{display:none}button.mfp-close,button.mfp-arrow{overflow:visible;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;display:block;outline:none;padding:0;z-index:1046;-webkit-box-shadow:none;box-shadow:none}button::-moz-focus-inner{padding:0;border:0}.mfp-close{width:44px;height:44px;line-height:44px;position:absolute;right:0;top:0;text-decoration:none;text-align:center;opacity:1;filter:alpha(opacity=100);padding:0 0 18px 10px;color:#fff;font-style:normal;font-size:28px;font-family:Georgia,Times,serif}.mfp-close:hover,.mfp-close:focus{opacity:1;filter:alpha(opacity=100)}.mfp-close:active{top:1px}.mfp-close-btn-in .mfp-close{color:#fff}.mfp-image-holder .mfp-close,.mfp-iframe-holder .mfp-close{color:#fff;right:-6px;text-align:right;padding-right:6px;width:100%}.mfp-counter{position:absolute;top:0;right:0;color:#ccc;font-size:12px;line-height:18px}.mfp-arrow{position:absolute;opacity:1;filter:alpha(opacity=100);margin:0;top:50%;margin-top:-55px;padding:0;width:90px;height:110px;-webkit-tap-highlight-color:transparent}.mfp-arrow:active{margin-top:-54px}.mfp-arrow:hover,.mfp-arrow:focus{opacity:1;filter:alpha(opacity=100)}.mfp-arrow:before,.mfp-arrow:after,.mfp-arrow .mfp-b,.mfp-arrow .mfp-a{content:'';display:block;width:0;height:0;position:absolute;left:0;top:0;margin-top:35px;margin-left:35px;border:medium inset transparent}.mfp-arrow:after,.mfp-arrow .mfp-a{border-top-width:13px;border-bottom-width:13px;top:8px}.mfp-arrow:before,.mfp-arrow .mfp-b{border-top-width:21px;border-bottom-width:21px;opacity:0.7}.mfp-arrow-left{left:0}.mfp-arrow-left:after,.mfp-arrow-left .mfp-a{border-right:17px solid #fff;margin-left:31px}.mfp-arrow-left:before,.mfp-arrow-left .mfp-b{margin-left:25px;border-right:27px solid #fff}.mfp-arrow-right{right:0}.mfp-arrow-right:after,.mfp-arrow-right .mfp-a{border-left:17px solid #fff;margin-left:39px}.mfp-arrow-right:before,.mfp-arrow-right .mfp-b{border-left:27px solid #fff}.mfp-iframe-holder{padding-top:40px;padding-bottom:40px}.mfp-iframe-holder .mfp-content{line-height:0;width:100%;max-width:900px}.mfp-iframe-holder .mfp-close{top:-40px}.mfp-iframe-scaler{width:100%;height:0;overflow:hidden;padding-top:56.25%}.mfp-iframe-scaler iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;box-shadow:0 0 8px rgba(0,0,0,0.6);background:#000}img.mfp-img{width:auto;max-width:100%;height:auto;display:block;line-height:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:40px 0 40px;margin:0 auto}.mfp-figure{line-height:0}.mfp-figure:after{content:'';position:absolute;left:0;top:40px;bottom:40px;display:block;right:0;width:auto;height:auto;z-index:-1;box-shadow:0 0 8px rgba(0,0,0,0.6);background:#444}.mfp-figure small{color:#bdbdbd;display:block;font-size:12px;line-height:14px}.mfp-figure figure{margin:0}.mfp-figure figcaption{margin-top:0;margin-bottom:0}.mfp-bottom-bar{margin-top:-36px;position:absolute;top:100%;left:0;width:100%;cursor:auto}.mfp-title{text-align:left;line-height:18px;color:#f3f3f3;word-wrap:break-word;padding-right:36px}.mfp-image-holder .mfp-content{max-width:100%}.mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer}@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px){.mfp-img-mobile .mfp-image-holder{padding-left:0;padding-right:0}.mfp-img-mobile img.mfp-img{padding:0}.mfp-img-mobile .mfp-figure:after{top:0;bottom:0}.mfp-img-mobile .mfp-figure small{display:inline;margin-left:5px}.mfp-img-mobile .mfp-bottom-bar{background:rgba(0,0,0,0.6);bottom:0;margin:0;top:auto;padding:3px 5px;position:fixed;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mfp-img-mobile .mfp-bottom-bar:empty{padding:0}.mfp-img-mobile .mfp-counter{right:5px;top:3px}.mfp-img-mobile .mfp-close{top:0;right:0;width:35px;height:35px;line-height:35px;background:rgba(0,0,0,0.6);position:fixed;text-align:center;padding:0}}@media all and (max-width: 900px){.mfp-arrow{-webkit-transform:scale(0.75);transform:scale(0.75)}.mfp-arrow-left{-webkit-transform-origin:0;transform-origin:0}.mfp-arrow-right{-webkit-transform-origin:100%;transform-origin:100%}.mfp-container{padding-left:6px;padding-right:6px}}.mfp-ie7 .mfp-img{padding:0}.mfp-ie7 .mfp-bottom-bar{width:600px;left:50%;margin-left:-300px;margin-top:5px;padding-bottom:5px}.mfp-ie7 .mfp-container{padding:0}.mfp-ie7 .mfp-content{padding-top:44px}.mfp-ie7 .mfp-close{top:0;right:0;padding-top:0}a:focus,button:focus{outline:thin dotted #00adb5;outline:5px auto #00adb5;outline-offset:-2px}*{box-sizing:border-box}html{box-sizing:border-box;background-color:#252a34;font-size:16px;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}@media (min-width: 48em){html{font-size:18px}}@media (min-width: 64em){html{font-size:20px}}@media (min-width: 80em){html{font-size:22px}}body{margin:0}::-moz-selection{color:#fff;background:#000}::selection{color:#fff;background:#000}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}a{color:#8cd2d5}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{box-sizing:border-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}html{position:relative;min-height:100%}body{margin:0;padding:0;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;line-height:1.5}body.overflow--hidden{overflow:hidden}h1,h2,h3,h4,h5,h6{margin:2em 0 0.5em;line-height:1.2;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:bold}h1{margin-top:0;font-size:1.563em}h2{font-size:1.25em}h3{font-size:1.125em}h4{font-size:1.0625em}h5{font-size:1.03125em}h6{font-size:1em}small,.small{font-size:.75em}p{margin-bottom:1.3em}u,ins{text-decoration:none;border-bottom:1px solid #eaeaea}u a,ins a{color:inherit}del a{color:inherit}p,pre,blockquote,ul,ol,dl,figure,table,fieldset{orphans:3;widows:3}abbr[title],abbr[data-original-title]{text-decoration:none;cursor:help;border-bottom:1px dotted #eaeaea}blockquote{margin:2em 1em 2em 0;padding-left:1em;padding-right:1em;font-style:italic;border-left:0.25em solid #00adb5}blockquote cite{font-style:italic}blockquote cite:before{content:"\2014";padding-right:5px}a:visited{color:#699ea0}a:hover{color:#a9dde0;outline:0}tt,code,kbd,samp,pre{font-family:Monaco,Consolas,"Lucida Console",monospace}pre{overflow-x:auto}hr{display:block;margin:1em 0;border:0;border-top:1px solid #51555d}ul li,ol li{margin-bottom:0.5em}li ul,li ol{margin-top:0.5em}figure{display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:start;align-items:flex-start;flex-wrap:wrap;margin:2em 0}figure img,figure iframe,figure .fluid-width-video-wrapper{margin-bottom:1em}figure img{width:100%;border-radius:4px;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}figure>a{display:block}@media (min-width: 37.5em){figure.half>a,figure.half>img{width:calc(50% - 0.5em)}}figure.half figcaption{width:100%}@media (min-width: 37.5em){figure.third>a,figure.third>img{width:calc(33.3333% - 0.5em)}}figure.third figcaption{width:100%}figcaption{margin-bottom:0.5em;color:#eee;font-family:Georgia,Times,serif;font-size:.75em}figcaption a{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}figcaption a:hover{color:#a9dde0}svg:not(:root){overflow:hidden}nav ul{margin:0;padding:0}nav li{list-style:none}nav a{text-decoration:none}nav ul li,nav ol li{margin-bottom:0}nav li ul,nav li ol{margin-top:0}b,i,strong,em,blockquote,p,q,span,figure,img,h1,h2,header,input,a,tr,td,form button,input[type="submit"],.btn,.highlight,.archive__item-teaser{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}form{margin:0 0 5px 0;padding:1em;background-color:#1f242c}form fieldset{margin-bottom:5px;padding:0;border-width:0}form legend{display:block;width:100%;margin-bottom:10px;*margin-left:-7px;padding:0;color:#eaeaea;border:0;white-space:normal}form p{margin-bottom:2.5px}form ul{list-style-type:none;margin:0 0 5px 0;padding:0}form br{display:none}label,input,button,select,textarea{vertical-align:baseline;*vertical-align:middle}input,button,select,textarea{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}label{display:block;margin-bottom:0.25em;color:#eaeaea;cursor:pointer}label small{font-size:.75em}label input,label textarea,label select{display:block}input,textarea,select{display:inline-block;width:100%;padding:0.25em;margin-bottom:0.5em;color:#eaeaea;background-color:#252a34;border:#51555d;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.125)}.input-mini{width:60px}.input-small{width:90px}input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;border-radius:0;border:0 \9;box-shadow:none}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="image"]{border:0}input[type="file"]{width:auto;padding:initial;line-height:initial;border:initial;background-color:transparent;background-color:initial;box-shadow:none}input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;cursor:pointer;*overflow:visible}select,input[type="file"]{*margin-top:4px}select{width:auto;background-color:#fff}select[multiple],select[size]{height:auto}textarea{resize:vertical;height:auto;overflow:auto;vertical-align:top}input[type="hidden"]{display:none}.form{position:relative}.radio,.checkbox{padding-left:18px;font-weight:normal}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{opacity:0.5;cursor:not-allowed}input:focus,textarea:focus{border-color:#00adb5;outline:0;outline:thin dotted \9;box-shadow:inset 0 1px 3px rgba(234,234,234,0.06),0 0 5px rgba(0,173,181,0.7)}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{box-shadow:none}.help-block,.help-inline{color:#eee}.help-block{display:block;margin-bottom:1em;line-height:1em}.help-inline{display:inline-block;vertical-align:middle;padding-left:5px}.form-group{margin-bottom:5px;padding:0;border-width:0}.form-inline input,.form-inline textarea,.form-inline select{display:inline-block;margin-bottom:0}.form-inline label{display:inline-block}.form-inline .radio,.form-inline .checkbox,.form-inline .radio{padding-left:0;margin-bottom:0;vertical-align:middle}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px}.form-search input,.form-search textarea,.form-search select{display:inline-block;margin-bottom:0}.form-search .search-query{padding-left:14px;padding-right:14px;margin-bottom:0;border-radius:14px}.form-search label{display:inline-block}.form-search .radio,.form-search .checkbox,.form-inline .radio{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px}.form--loading:before{content:""}.form--loading .form__spinner{display:block}.form:before{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(255,255,255,0.7);z-index:10}.form__spinner{display:none;position:absolute;top:50%;left:50%;z-index:11}table{display:block;margin-bottom:1em;width:100%;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;border-collapse:collapse;overflow-x:auto}table+table{margin-top:1em}thead{background-color:#51555d;border-bottom:2px solid #3d4046}th{padding:0.5em;font-weight:bold;text-align:left}td{padding:0.5em;border-bottom:1px solid #3d4046}tr,td,th{vertical-align:middle}@-webkit-keyframes intro{0%{opacity:0}100%{opacity:1}}@keyframes intro{0%{opacity:0}100%{opacity:1}}.btn{display:inline-block;margin-bottom:0.25em;padding:0.5em 1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;font-weight:bold;text-align:center;text-decoration:none;border-width:0;border-radius:4px;cursor:pointer}.btn .icon{margin-right:0.5em}.btn .icon+.hidden{margin-left:-0.5em}.btn--primary{background-color:#00adb5;color:#fff}.btn--primary:visited{background-color:#00adb5;color:#fff}.btn--primary:hover{background-color:#008a91;color:#fff}.btn--inverse{background-color:#fff;color:#3d4144;border:1px solid #51555d}.btn--inverse:visited{background-color:#fff;color:#3d4144}.btn--inverse:hover{background-color:#ccc;color:#3d4144}.btn--light-outline{background-color:transparent;color:#fff;border:1px solid #fff}.btn--light-outline:visited{background-color:transparent;color:#fff}.btn--light-outline:hover{background-color:rgba(0,0,0,0.2);color:#fff}.btn--success{background-color:#3fa63f;color:#fff}.btn--success:visited{background-color:#3fa63f;color:#fff}.btn--success:hover{background-color:#328532;color:#fff}.btn--warning{background-color:#d67f05;color:#fff}.btn--warning:visited{background-color:#d67f05;color:#fff}.btn--warning:hover{background-color:#ab6604;color:#fff}.btn--danger{background-color:#ee5f5b;color:#fff}.btn--danger:visited{background-color:#ee5f5b;color:#fff}.btn--danger:hover{background-color:#be4c49;color:#fff}.btn--info{background-color:#3b9cba;color:#fff}.btn--info:visited{background-color:#3b9cba;color:#fff}.btn--info:hover{background-color:#2f7d95;color:#fff}.btn--facebook{background-color:#3b5998;color:#fff}.btn--facebook:visited{background-color:#3b5998;color:#fff}.btn--facebook:hover{background-color:#2f477a;color:#fff}.btn--twitter{background-color:#55acee;color:#fff}.btn--twitter:visited{background-color:#55acee;color:#fff}.btn--twitter:hover{background-color:#448abe;color:#fff}.btn--linkedin{background-color:#007bb6;color:#fff}.btn--linkedin:visited{background-color:#007bb6;color:#fff}.btn--linkedin:hover{background-color:#006292;color:#fff}.btn--block{display:block;width:100%}.btn--block+.btn--block{margin-top:0.25em}.btn--disabled{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);box-shadow:none;opacity:0.65}.btn--x-large{font-size:1.25em}.btn--large{font-size:1em}.btn--small{font-size:.6875em}.notice{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#434851;border-radius:4px;box-shadow:0 1px 1px rgba(189,193,196,0.25)}.notice h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice h4{margin-bottom:0;font-size:1em}.notice p:last-child{margin-bottom:0 !important}.notice h4+p{margin-top:0;padding-top:0}.notice a{color:#aaaeb0}.notice a:hover{color:#5f6162}blockquote.notice{border-left-color:#aaaeb0}.notice code{background-color:#343942}.notice pre code{background-color:inherit}.notice ul:last-child{margin-bottom:0}.notice--primary{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#1e444e;border-radius:4px;box-shadow:0 1px 1px rgba(0,173,181,0.25)}.notice--primary h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--primary h4{margin-bottom:0;font-size:1em}.notice--primary p:last-child{margin-bottom:0 !important}.notice--primary h4+p{margin-top:0;padding-top:0}.notice--primary a{color:#009ca3}.notice--primary a:hover{color:#00575b}blockquote.notice--primary{border-left-color:#009ca3}.notice--primary code{background-color:#213741}.notice--primary pre code{background-color:inherit}.notice--primary ul:last-child{margin-bottom:0}.notice--info{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#29414f;border-radius:4px;box-shadow:0 1px 1px rgba(59,156,186,0.25)}.notice--info h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--info h4{margin-bottom:0;font-size:1em}.notice--info p:last-child{margin-bottom:0 !important}.notice--info h4+p{margin-top:0;padding-top:0}.notice--info a{color:#358ca7}.notice--info a:hover{color:#1e4e5d}blockquote.notice--info{border-left-color:#358ca7}.notice--info code{background-color:#273541}.notice--info pre code{background-color:inherit}.notice--info ul:last-child{margin-bottom:0}.notice--warning{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#483b2b;border-radius:4px;box-shadow:0 1px 1px rgba(214,127,5,0.25)}.notice--warning h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--warning h4{margin-bottom:0;font-size:1em}.notice--warning p:last-child{margin-bottom:0 !important}.notice--warning h4+p{margin-top:0;padding-top:0}.notice--warning a{color:#c17205}.notice--warning a:hover{color:#6b4003}blockquote.notice--warning{border-left-color:#c17205}.notice--warning code{background-color:#37332f}.notice--warning pre code{background-color:inherit}.notice--warning ul:last-child{margin-bottom:0}.notice--success{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#2a4336;border-radius:4px;box-shadow:0 1px 1px rgba(63,166,63,0.25)}.notice--success h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--success h4{margin-bottom:0;font-size:1em}.notice--success p:last-child{margin-bottom:0 !important}.notice--success h4+p{margin-top:0;padding-top:0}.notice--success a{color:#399539}.notice--success a:hover{color:#205320}blockquote.notice--success{border-left-color:#399539}.notice--success code{background-color:#283635}.notice--success pre code{background-color:inherit}.notice--success ul:last-child{margin-bottom:0}.notice--danger{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#4d353c;border-radius:4px;box-shadow:0 1px 1px rgba(238,95,91,0.25)}.notice--danger h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--danger h4{margin-bottom:0;font-size:1em}.notice--danger p:last-child{margin-bottom:0 !important}.notice--danger h4+p{margin-top:0;padding-top:0}.notice--danger a{color:#d65652}.notice--danger a:hover{color:#77302e}blockquote.notice--danger{border-left-color:#d65652}.notice--danger code{background-color:#392f38}.notice--danger pre code{background-color:inherit}.notice--danger ul:last-child{margin-bottom:0}.masthead{position:relative;border-bottom:1px solid #51555d;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.15s;animation-delay:0.15s;z-index:20}.masthead__inner-wrap{clear:both;margin-left:auto;margin-right:auto;padding:1em;max-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.masthead__inner-wrap::after{clear:both;content:"";display:table}@media (min-width: 80em){.masthead__inner-wrap{max-width:1280px}}.masthead__inner-wrap nav{z-index:10}.masthead__inner-wrap a{text-decoration:none}.site-logo img{max-height:2rem}.site-title{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-item-align:center;align-self:center;font-weight:bold}.site-subtitle{display:block;font-size:.625em}.masthead__menu{float:left;margin-left:0;margin-right:0;width:100%;clear:both}.masthead__menu .site-nav{margin-left:0}@media (min-width: 37.5em){.masthead__menu .site-nav{float:right}}.masthead__menu ul{margin:0;padding:0;clear:both;list-style-type:none}.masthead__menu-item{display:block;list-style-type:none;white-space:nowrap}.masthead__menu-item--lg{padding-right:2em;font-weight:700}.breadcrumbs{clear:both;margin:0 auto;max-width:100%;padding-left:1em;padding-right:1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.3s;animation-delay:0.3s}.breadcrumbs::after{clear:both;content:"";display:table}@media (min-width: 80em){.breadcrumbs{max-width:1280px}}.breadcrumbs ol{padding:0;list-style:none;font-size:.75em}@media (min-width: 64em){.breadcrumbs ol{float:right;width:calc(100% - 200px)}}@media (min-width: 80em){.breadcrumbs ol{width:calc(100% - 300px)}}.breadcrumbs li{display:inline}.breadcrumbs .current{font-weight:bold}.pagination{clear:both;float:left;margin-top:1em;padding-top:1em;width:100%}.pagination::after{clear:both;content:"";display:table}.pagination ul{margin:0;padding:0;list-style-type:none;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.pagination li{display:block;float:left;margin-left:-1px}.pagination li a{display:block;margin-bottom:0.25em;padding:0.5em 1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:14px;font-weight:bold;line-height:1.5;text-align:center;text-decoration:none;color:#eee;border:1px solid #3d4046;border-radius:0}.pagination li a:hover{color:#a9dde0}.pagination li a.current,.pagination li a.current.disabled{color:#fff;background:#00adb5}.pagination li a.disabled{color:rgba(238,238,238,0.5);pointer-events:none;cursor:not-allowed}.pagination li:first-child{margin-left:0}.pagination li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination--pager{display:block;padding:1em 2em;float:left;width:50%;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em;font-weight:bold;text-align:center;text-decoration:none;color:#eee;border:1px solid #3d4046;border-radius:4px}.pagination--pager:hover{background-color:#eee;color:#3d4144}.pagination--pager:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.pagination--pager:last-child{margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.pagination--pager.disabled{color:rgba(238,238,238,0.5);pointer-events:none;cursor:not-allowed}.page__content+.pagination,.page__meta+.pagination,.comment__date+.pagination,.page__share+.pagination,.page__comments+.pagination{margin-top:2em;padding-top:2em;border-top:1px solid #51555d}.greedy-nav{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:2em;background:#252a34}.greedy-nav a{display:block;margin:0 1rem;color:#eaeaea;text-decoration:none;-webkit-transition:none;transition:none}.greedy-nav a:hover{color:#bbb}.greedy-nav a.site-logo{margin-left:0;margin-right:0.5rem}.greedy-nav a.site-title{margin-left:0}.greedy-nav img{-webkit-transition:none;transition:none}.greedy-nav__toggle{-ms-flex-item-align:center;align-self:center;height:2rem;border:0;outline:none;background-color:transparent;cursor:pointer}.greedy-nav .visible-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden}.greedy-nav .visible-links li{-webkit-box-flex:0;-ms-flex:none;flex:none}.greedy-nav .visible-links a{position:relative}.greedy-nav .visible-links a:before{content:"";position:absolute;left:0;bottom:0;height:4px;background:#00adb5;width:100%;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;-webkit-transform:scaleX(0) translate3d(0, 0, 0);transform:scaleX(0) translate3d(0, 0, 0)}.greedy-nav .visible-links a:hover:before{-webkit-transform:scaleX(1);-ms-transform:scaleX(1);transform:scaleX(1)}.greedy-nav .hidden-links{position:absolute;top:100%;right:0;margin-top:15px;padding:5px;border:1px solid #51555d;border-radius:4px;background:#252a34;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)}.greedy-nav .hidden-links.hidden{display:none}.greedy-nav .hidden-links a{margin:0;padding:10px 20px;font-size:1em}.greedy-nav .hidden-links a:hover{color:#bbb;background:#1a1d24}.greedy-nav .hidden-links:before{content:"";position:absolute;top:-11px;right:10px;width:0;border-style:solid;border-width:0 10px 10px;border-color:#51555d transparent;display:block;z-index:0}.greedy-nav .hidden-links:after{content:"";position:absolute;top:-10px;right:10px;width:0;border-style:solid;border-width:0 10px 10px;border-color:#252a34 transparent;display:block;z-index:1}.greedy-nav .hidden-links li{display:block;border-bottom:1px solid #51555d}.greedy-nav .hidden-links li:last-child{border-bottom:none}.no-js .greedy-nav .visible-links{-ms-flex-wrap:wrap;flex-wrap:wrap;overflow:visible}.nav__list{margin-bottom:1.5em}.nav__list input[type="checkbox"],.nav__list label{display:none}@media (max-width: 63.9375em){.nav__list label{position:relative;display:inline-block;padding:0.5em 2.5em 0.5em 1em;color:#7a8288;font-size:.75em;font-weight:bold;border:1px solid #bdc1c4;border-radius:4px;z-index:20;-webkit-transition:0.2s ease-out;transition:0.2s ease-out;cursor:pointer}.nav__list label:before,.nav__list label:after{content:"";position:absolute;right:1em;top:1.25em;width:0.75em;height:0.125em;line-height:1;background-color:#7a8288;-webkit-transition:0.2s ease-out;transition:0.2s ease-out}.nav__list label:after{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.nav__list label:hover{color:#fff;border-color:#7a8288;background-color:#333}.nav__list label:hover:before,.nav__list label:hover:after{background-color:#fff}.nav__list input:checked+label{color:white;background-color:#333}.nav__list input:checked+label:before,.nav__list input:checked+label:after{background-color:#fff}.nav__list label:hover:after{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.nav__list input:checked+label:hover:after{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}.nav__list ul{margin-bottom:1em}.nav__list a{display:block;padding:0.25em 0}}@media (max-width: 63.9375em) and (min-width: 64em){.nav__list a{padding-top:0.125em;padding-bottom:0.125em}}@media (max-width: 63.9375em){.nav__list a:hover{text-decoration:underline}}.nav__list .nav__items{margin:0;font-size:1.25rem}.nav__list .nav__items a{color:inherit}.nav__list .nav__items .active{margin-left:-0.5em;padding-left:0.5em;padding-right:0.5em;font-weight:bold}@media (max-width: 63.9375em){.nav__list .nav__items{position:relative;max-height:0;opacity:0%;overflow:hidden;z-index:10;-webkit-transition:0.3s ease-in-out;transition:0.3s ease-in-out;-webkit-transform:translate(0, 10%);-ms-transform:translate(0, 10%);transform:translate(0, 10%)}}@media (max-width: 63.9375em){.nav__list input:checked ~ .nav__items{-webkit-transition:0.5s ease-in-out;transition:0.5s ease-in-out;max-height:9999px;overflow:visible;opacity:1;margin-top:1em;-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}}.nav__title{margin:0;padding:0.5rem 0.75rem;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em;font-weight:bold}.nav__sub-title{display:block;margin:0.5rem 0;padding:0.25rem 0;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;font-weight:bold;text-transform:uppercase;border-bottom:1px solid #51555d}.toc{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;color:#7a8288;background-color:#252a34;border:1px solid #51555d;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.125);box-shadow:0 1px 1px rgba(0,0,0,0.125)}.toc .nav__title{color:#fff;font-size:.75em;background:#00adb5;border-top-left-radius:4px;border-top-right-radius:4px}.toc .active a{background-color:#cceff0;color:#3d4144}.toc__menu{margin:0;padding:0;width:100%;list-style:none;font-size:.75em}@media (min-width: 64em){.toc__menu{font-size:.6875em}}.toc__menu a{display:block;padding:0.25rem 0.75rem;color:#eee;font-weight:bold;line-height:1.5;border-bottom:1px solid #51555d}.toc__menu a:hover{color:#eaeaea}.toc__menu li ul>li a{padding-left:1.25rem;font-weight:normal}.toc__menu li ul li ul>li a{padding-left:1.75rem}.toc__menu li ul li ul li ul>li a{padding-left:2.25rem}.toc__menu li ul li ul li ul li ul>li a{padding-left:2.75rem}.toc__menu li ul li ul li ul li ul li ul>li a{padding-left:3.25rem}.page__footer{clear:both;float:left;margin-left:0;margin-right:0;width:100%;margin-top:3em;color:#eee;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.45s;animation-delay:0.45s;background-color:#1a1d24}.page__footer::after{clear:both;content:"";display:table}.page__footer footer{clear:both;margin-left:auto;margin-right:auto;margin-top:2em;max-width:100%;padding:0 1em 2em}.page__footer footer::after{clear:both;content:"";display:table}@media (min-width: 80em){.page__footer footer{max-width:1280px}}.page__footer a{color:inherit;text-decoration:none}.page__footer a:hover{text-decoration:underline}.page__footer .fas,.page__footer .fab,.page__footer .far,.page__footer .fal{color:#eee}.page__footer-copyright{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.6875em}.page__footer-follow ul{margin:0;padding:0;list-style-type:none}.page__footer-follow li{display:inline-block;padding-top:5px;padding-bottom:5px;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;text-transform:uppercase}.page__footer-follow li+li:before{content:"";padding-right:5px}.page__footer-follow a{padding-right:10px;font-weight:bold}.page__footer-follow .social-icons a{white-space:nowrap}.layout--search .archive__item-teaser{margin-bottom:0.25em}.search__toggle{margin-left:1rem;margin-right:1rem;height:2rem;border:0;outline:none;color:#00adb5;background-color:transparent;cursor:pointer;-webkit-transition:0.2s;transition:0.2s}.search__toggle:hover{color:#008288}.search-icon{width:100%;height:100%}.search-content{display:none;visibility:hidden;padding-top:1em;padding-bottom:1em}.search-content__inner-wrap{width:100%;margin-left:auto;margin-right:auto;padding-left:1em;padding-right:1em;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.15s;animation-delay:0.15s}@media (min-width: 80em){.search-content__inner-wrap{max-width:1280px}}.search-content__form{background-color:transparent}.search-content .search-input{display:block;margin-bottom:0;padding:0;border:none;outline:none;box-shadow:none;background-color:transparent;font-size:1.563em}@media (min-width: 64em){.search-content .search-input{font-size:1.953em}}@media (min-width: 80em){.search-content .search-input{font-size:2.441em}}.search-content.is--visible{display:block;visibility:visible}.search-content.is--visible::after{content:"";display:block}.search-content .results__found{margin-top:0.5em;font-size:.75em}.search-content .archive__item{margin-bottom:2em}@media (min-width: 64em){.search-content .archive__item{width:75%}}@media (min-width: 80em){.search-content .archive__item{width:50%}}.search-content .archive__item-title{margin-top:0}.search-content .archive__item-excerpt{margin-bottom:0}.ais-search-box{max-width:100% !important;margin-bottom:2em}.archive__item-title .ais-Highlight{color:#00adb5;font-style:normal;text-decoration:underline}.archive__item-excerpt .ais-Highlight{color:#00adb5;font-style:normal;font-weight:bold}div.highlighter-rouge,figure.highlight{position:relative;margin-bottom:1em;background:#263238;color:#eff;font-family:Monaco,Consolas,"Lucida Console",monospace;font-size:.75em;line-height:1.8;border-radius:4px}div.highlighter-rouge>pre,div.highlighter-rouge pre.highlight,figure.highlight>pre,figure.highlight pre.highlight{margin:0;padding:1em}.highlight table{margin-bottom:0;font-size:1em;border:0}.highlight table td{padding:0;width:calc(100% - 1em);border:0}.highlight table td.gutter,.highlight table td.rouge-gutter{padding-right:1em;width:1em;color:#b2ccd6;border-right:1px solid #b2ccd6;text-align:right}.highlight table td.code,.highlight table td.rouge-code{padding-left:1em}.highlight table pre{margin:0}.highlight pre{width:100%}.highlight .hll{background-color:#eff}.highlight .c{color:#b2ccd6}.highlight .err{color:#f07178}.highlight .k{color:#c792ea}.highlight .l{color:#f78c6c}.highlight .n{color:#eff}.highlight .o{color:#89ddff}.highlight .p{color:#eff}.highlight .cm{color:#b2ccd6}.highlight .cp{color:#b2ccd6}.highlight .c1{color:#b2ccd6}.highlight .cs{color:#b2ccd6}.highlight .gd{color:#f07178}.highlight .ge{font-style:italic}.highlight .gh{color:#eff;font-weight:bold}.highlight .gi{color:#c3e88d}.highlight .gp{color:#b2ccd6;font-weight:bold}.highlight .gs{font-weight:bold}.highlight .gu{color:#89ddff;font-weight:bold}.highlight .kc{color:#c792ea}.highlight .kd{color:#c792ea}.highlight .kn{color:#89ddff}.highlight .kp{color:#c792ea}.highlight .kr{color:#c792ea}.highlight .kt{color:#ffcb6b}.highlight .ld{color:#c3e88d}.highlight .m{color:#f78c6c}.highlight .s{color:#c3e88d}.highlight .na{color:#82aaff}.highlight .nb{color:#eff}.highlight .nc{color:#ffcb6b}.highlight .no{color:#f07178}.highlight .nd{color:#89ddff}.highlight .ni{color:#eff}.highlight .ne{color:#f07178}.highlight .nf{color:#82aaff}.highlight .nl{color:#eff}.highlight .nn{color:#ffcb6b}.highlight .nx{color:#82aaff}.highlight .py{color:#eff}.highlight .nt{color:#89ddff}.highlight .nv{color:#f07178}.highlight .ow{color:#89ddff}.highlight .w{color:#eff}.highlight .mf{color:#f78c6c}.highlight .mh{color:#f78c6c}.highlight .mi{color:#f78c6c}.highlight .mo{color:#f78c6c}.highlight .sb{color:#c3e88d}.highlight .sc{color:#eff}.highlight .sd{color:#b2ccd6}.highlight .s2{color:#c3e88d}.highlight .se{color:#f78c6c}.highlight .sh{color:#c3e88d}.highlight .si{color:#f78c6c}.highlight .sx{color:#c3e88d}.highlight .sr{color:#c3e88d}.highlight .s1{color:#c3e88d}.highlight .ss{color:#c3e88d}.highlight .bp{color:#eff}.highlight .vc{color:#f07178}.highlight .vg{color:#f07178}.highlight .vi{color:#f07178}.highlight .il{color:#f78c6c}.gist th,.gist td{border-bottom:0}.hidden,.is--hidden{display:none;visibility:hidden}.load{display:none}.transparent{opacity:0}.visually-hidden,.screen-reader-text,.screen-reader-text span,.screen-reader-shortcut{position:absolute !important;clip:rect(1px, 1px, 1px, 1px);height:1px !important;width:1px !important;border:0 !important;overflow:hidden}body:hover .visually-hidden a,body:hover .visually-hidden input,body:hover .visually-hidden button{display:none !important}.screen-reader-text:focus,.screen-reader-shortcut:focus{clip:auto !important;height:auto !important;width:auto !important;display:block;font-size:1em;font-weight:bold;padding:15px 23px 14px;background:#fff;z-index:100000;text-decoration:none;box-shadow:0 0 2px 2px rgba(0,0,0,0.6)}.skip-link{position:fixed;z-index:20;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;white-space:nowrap}.skip-link li{height:0;width:0;list-style:none}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.task-list{padding:0}.task-list li{list-style-type:none}.task-list .task-list-item-checkbox{margin-right:0.5em;opacity:1}.task-list .task-list{margin-left:1em}.cf{clear:both}.wrapper{margin-left:auto;margin-right:auto;width:100%}.align-left{display:block;margin-left:auto;margin-right:auto}@media (min-width: 37.5em){.align-left{float:left;margin-right:1em}}.align-right{display:block;margin-left:auto;margin-right:auto}@media (min-width: 37.5em){.align-right{float:right;margin-left:1em}}.align-center{display:block;margin-left:auto;margin-right:auto}@media (min-width: 64em){.full{margin-right:-20.3389830508% !important}}.icon{display:inline-block;fill:currentColor;width:1em;height:1.1em;line-height:1;position:relative;top:-0.1em;vertical-align:middle}.social-icons .fas,.social-icons .fab,.social-icons .far,.social-icons .fal{color:#eaeaea}.social-icons .fa-behance,.social-icons .fa-behance-square{color:#1769ff}.social-icons .fa-bitbucket{color:#205081}.social-icons .fa-dribbble,.social-icons .fa-dribbble-square{color:#ea4c89}.social-icons .fa-facebook,.social-icons .fa-facebook-square,.social-icons .fa-facebook-f{color:#3b5998}.social-icons .fa-flickr{color:#ff0084}.social-icons .fa-foursquare{color:#0072b1}.social-icons .fa-github,.social-icons .fa-github-alt,.social-icons .fa-github-square{color:#171516}.social-icons .fa-gitlab{color:#e24329}.social-icons .fa-instagram{color:#517fa4}.social-icons .fa-keybase{color:#ef7639}.social-icons .fa-lastfm,.social-icons .fa-lastfm-square{color:#d51007}.social-icons .fa-linkedin,.social-icons .fa-linkedin-in{color:#007bb6}.social-icons .fa-mastodon,.social-icons .fa-mastodon-square{color:#2b90d9}.social-icons .fa-pinterest,.social-icons .fa-pinterest-p,.social-icons .fa-pinterest-square{color:#cb2027}.social-icons .fa-reddit{color:#ff4500}.social-icons .fa-rss,.social-icons .fa-rss-square{color:#fa9b39}.social-icons .fa-soundcloud{color:#f30}.social-icons .fa-stack-exchange,.social-icons .fa-stack-overflow{color:#fe7a15}.social-icons .fa-tumblr,.social-icons .fa-tumblr-square{color:#32506d}.social-icons .fa-twitter,.social-icons .fa-twitter-square{color:#55acee}.social-icons .fa-vimeo,.social-icons .fa-vimeo-square,.social-icons .fa-vimeo-v{color:#1ab7ea}.social-icons .fa-vine{color:#00bf8f}.social-icons .fa-xing,.social-icons .fa-xing-square{color:#006567}.social-icons .fa-youtube{color:#b00}.navicon{position:relative;width:1.5rem;height:.25rem;background:#00adb5;margin:auto;-webkit-transition:0.3s;transition:0.3s}.navicon:before,.navicon:after{content:"";position:absolute;left:0;width:1.5rem;height:.25rem;background:#00adb5;-webkit-transition:0.3s;transition:0.3s}.navicon:before{top:-.5rem}.navicon:after{bottom:-.5rem}.close .navicon{background:transparent}.close .navicon:before,.close .navicon:after{-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;top:0;width:1.5rem}.close .navicon:before{-webkit-transform:rotate3d(0, 0, 1, 45deg);transform:rotate3d(0, 0, 1, 45deg)}.close .navicon:after{-webkit-transform:rotate3d(0, 0, 1, -45deg);transform:rotate3d(0, 0, 1, -45deg)}@supports (pointer-events: none){.greedy-nav__toggle:before{content:'';position:fixed;top:0;left:0;width:100%;height:100%;opacity:0;background-color:#252a34;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;pointer-events:none}}.greedy-nav__toggle.close:before{opacity:0.9;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;pointer-events:auto}.greedy-nav__toggle:hover .navicon,.greedy-nav__toggle:hover .navicon:before,.greedy-nav__toggle:hover .navicon:after{background:#008288}.greedy-nav__toggle:hover.close .navicon{background:transparent}@media (min-width: 64em){.sticky{clear:both;position:-webkit-sticky;position:sticky;top:2em}.sticky::after{clear:both;content:"";display:table}.sticky>*{display:block}}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.show-modal{overflow:hidden;position:relative}.show-modal:before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;z-index:999;background-color:rgba(255,255,255,0.85)}.show-modal .modal{display:block}.modal{display:none;position:fixed;width:300px;top:50%;left:50%;margin-left:-150px;margin-top:-150px;min-height:0;z-index:9999;background:#fff;border:1px solid #51555d;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.125)}.modal__title{margin:0;padding:0.5em 1em}.modal__supporting-text{padding:0 1em 0.5em 1em}.modal__actions{padding:0.5em 1em;border-top:1px solid #51555d}.footnote{color:#9ba1a6;text-decoration:none}.footnotes{color:#9ba1a6}.footnotes ol,.footnotes li,.footnotes p{margin-bottom:0;font-size:.75em}a.reversefootnote{color:#7a8288;text-decoration:none}a.reversefootnote:hover{text-decoration:underline}.required{color:#ee5f5b;font-weight:bold}.gsc-control-cse table,.gsc-control-cse tr,.gsc-control-cse td{border:0}.responsive-video-container{position:relative;margin-bottom:1em;padding-bottom:56.25%;height:0;overflow:hidden;max-width:100%}.responsive-video-container iframe,.responsive-video-container object,.responsive-video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}:-webkit-full-screen-ancestor .masthead,:-webkit-full-screen-ancestor .page__footer{position:static}.clipboard-helper{font-size:12pt !important;border:0 !important;padding:0 !important;margin:0 !important;outline:none !important;position:absolute}pre.highlight .clipboard-copy-button{color:#ffffca}pre .clipboard-copy-button{display:block;position:absolute;top:0.6em;right:0.5em;width:1.8em;height:1.5em;z-index:1;background:none;border:none;outline:none;border-radius:0.1em;padding:0.2em 0.5em;opacity:0.4;transition:color 0.25s linear -0.25s, opacity 0.25s linear}pre .clipboard-copy-button::before{content:'';position:absolute;top:0;right:0;bottom:0;left:0;z-index:2}pre .clipboard-copy-button i{position:absolute;top:0.25em;right:0.25em}pre .clipboard-copy-button i.copied{opacity:0}pre .clipboard-copy-button.copied i{opacity:0}pre .clipboard-copy-button.copied i.copied{opacity:1}.no-copy pre .clipboard-copy-button{display:none}pre:hover .clipboard-copy-button{opacity:1}#main{clear:both;margin-left:auto;margin-right:auto;padding-left:1em;padding-right:1em;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;max-width:100%;-webkit-animation-delay:0.15s;animation-delay:0.15s}#main::after{clear:both;content:"";display:table}@media (min-width: 80em){#main{max-width:1280px}}body{display:-webkit-box;display:-ms-flexbox;display:flex;min-height:100vh;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.initial-content,.search-content{flex:1 0 auto}@media (min-width: 64em){.page{float:right;width:calc(100% - 200px);padding-right:200px}}@media (min-width: 80em){.page{width:calc(100% - 300px);padding-right:300px}}.page .page__inner-wrap{float:left;margin-top:1em;margin-left:0;margin-right:0;width:100%;clear:both}.page .page__inner-wrap .page__content,.page .page__inner-wrap .page__meta,.page .page__inner-wrap .comment__date,.page .page__inner-wrap .page__share{position:relative;float:left;margin-left:0;margin-right:0;width:100%;clear:both}.page__title{margin-top:0;line-height:1}.page__title a{color:#eaeaea;text-decoration:none}.page__title+.page__meta,.page__title+.comment__date{margin-top:-0.5em}.page__lead{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1.25em}.page__content h2{padding-bottom:0.5em;border-bottom:1px solid #51555d}.page__content h1 .header-link,.page__content h2 .header-link,.page__content h3 .header-link,.page__content h4 .header-link,.page__content h5 .header-link,.page__content h6 .header-link{position:relative;left:0.5em;opacity:0;font-size:0.8em;-webkit-transition:opacity 0.2s ease-in-out 0.1s;-moz-transition:opacity 0.2s ease-in-out 0.1s;-o-transition:opacity 0.2s ease-in-out 0.1s;transition:opacity 0.2s ease-in-out 0.1s}.page__content h1:hover .header-link,.page__content h2:hover .header-link,.page__content h3:hover .header-link,.page__content h4:hover .header-link,.page__content h5:hover .header-link,.page__content h6:hover .header-link{opacity:1}.page__content p,.page__content li,.page__content dl{font-size:1em}.page__content p{margin:0 0 1.3em}.page__content a:not(.btn):hover{text-decoration:underline}.page__content a:not(.btn):hover img{box-shadow:0 0 10px rgba(0,0,0,0.25)}.page__content :not(pre)>code{padding-top:0.1rem;padding-bottom:0.1rem;font-size:0.8em;background:#1f242c;border-radius:4px}.page__content :not(pre)>code::before,.page__content :not(pre)>code::after{letter-spacing:-0.2em;content:"\00a0"}.page__content dt{margin-top:1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:bold}.page__content dd{margin-left:1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em}.page__content .small{font-size:.75em}.page__content blockquote+.small{margin-top:-1.5em;padding-left:1.25rem}.page__hero{position:relative;margin-bottom:2em;clear:both;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.25s;animation-delay:0.25s}.page__hero::after{clear:both;content:"";display:table}.page__hero--overlay{position:relative;margin-bottom:2em;padding:3em 0;clear:both;background-size:cover;background-repeat:no-repeat;background-position:center;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.25s;animation-delay:0.25s}.page__hero--overlay::after{clear:both;content:"";display:table}.page__hero--overlay a{color:#fff}.page__hero--overlay .wrapper{padding-left:1em;padding-right:1em}@media (min-width: 80em){.page__hero--overlay .wrapper{max-width:1280px}}.page__hero--overlay .page__title,.page__hero--overlay .page__meta,.page__hero--overlay .comment__date,.page__hero--overlay .page__lead,.page__hero--overlay .btn{color:#fff;text-shadow:1px 1px 4px rgba(0,0,0,0.5)}.page__hero--overlay .page__lead{max-width:768px}.page__hero--overlay .page__title{font-size:1.953em}@media (min-width: 37.5em){.page__hero--overlay .page__title{font-size:2.441em}}.page__hero-image{width:100%;height:auto;-ms-interpolation-mode:bicubic}.page__hero-caption{position:absolute;bottom:0;right:0;margin:0 auto;padding:2px 5px;color:#fff;font-family:Georgia,Times,serif;font-size:.6875em;background:#000;text-align:right;z-index:5;opacity:0.5;border-radius:4px 0 0 0}@media (min-width: 64em){.page__hero-caption{padding:5px 10px}}.page__hero-caption a{color:#fff;text-decoration:none}.page__share{margin-top:2em;padding-top:1em;border-top:1px solid #51555d}@media (max-width: 37.5em){.page__share .btn span{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}}.page__share-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}.page__meta,.comment__date{margin-top:2em;color:#eee;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em}.page__meta p,.comment__date p{margin:0}.page__meta a,.comment__date a{color:inherit}.page__meta-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}.page__meta-sep::before{content:"\2022";padding-left:0.5em;padding-right:0.5em}.page__taxonomy .sep{display:none}.page__taxonomy strong{margin-right:10px}.page__taxonomy-item{display:inline-block;margin-right:5px;margin-bottom:8px;padding:5px 10px;text-decoration:none;border:1px solid #3d4046;border-radius:4px}.page__taxonomy-item:hover{text-decoration:none;color:#a9dde0}.taxonomy__section{margin-bottom:2em;padding-bottom:1em}.taxonomy__section:not(:last-child){border-bottom:solid 1px #51555d}.taxonomy__section .archive__item-title{margin-top:0}.taxonomy__section .archive__subtitle{clear:both;border:0}.taxonomy__section+.taxonomy__section{margin-top:2em}.taxonomy__title{margin-bottom:0.5em;color:#eee}.taxonomy__count{color:#eee}.taxonomy__index{display:grid;grid-column-gap:2em;grid-template-columns:repeat(2, 1fr);margin:1.414em 0;padding:0;font-size:0.75em;list-style:none}@media (min-width: 64em){.taxonomy__index{grid-template-columns:repeat(3, 1fr)}}.taxonomy__index a{display:-webkit-box;display:-ms-flexbox;display:flex;padding:0.25em 0;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;color:inherit;text-decoration:none;border-bottom:1px solid #51555d}.back-to-top{display:block;clear:both;color:#eee;font-size:0.6em;text-transform:uppercase;text-align:right;text-decoration:none}.page__comments{float:left;margin-left:0;margin-right:0;width:100%;clear:both}.page__comments-title{margin-top:2rem;margin-bottom:10px;padding-top:2rem;font-size:.75em;border-top:1px solid #51555d;text-transform:uppercase}.page__comments-form{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.page__comments-form.disabled input,.page__comments-form.disabled button,.page__comments-form.disabled textarea,.page__comments-form.disabled label{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);box-shadow:none;opacity:0.65}.comment{clear:both;margin:1em 0}.comment::after{clear:both;content:"";display:table}.comment:not(:last-child){border-bottom:1px solid #51555d}.comment__avatar-wrapper{float:left;width:60px;height:60px}@media (min-width: 64em){.comment__avatar-wrapper{width:100px;height:100px}}.comment__avatar{width:40px;height:40px;border-radius:50%}@media (min-width: 64em){.comment__avatar{width:80px;height:80px;padding:5px;border:1px solid #51555d}}.comment__content-wrapper{float:right;width:calc(100% - 60px)}@media (min-width: 64em){.comment__content-wrapper{width:calc(100% - 100px)}}.comment__author{margin:0}.comment__author a{text-decoration:none}.comment__date{margin:0}.comment__date a{text-decoration:none}.page__related{clear:both;float:left;margin-top:2em;padding-top:1em;border-top:1px solid #51555d}.page__related::after{clear:both;content:"";display:table}@media (min-width: 64em){.page__related{float:right;width:calc(100% - 200px)}}@media (min-width: 80em){.page__related{width:calc(100% - 300px)}}.page__related a{color:inherit;text-decoration:none}.page__related-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}@media (min-width: 64em){.wide .page{padding-right:0}}@media (min-width: 80em){.wide .page{padding-right:0}}@media (min-width: 64em){.wide .page__related{padding-right:0}}@media (min-width: 80em){.wide .page__related{padding-right:0}}.archive{margin-top:1em;margin-bottom:2em}@media (min-width: 64em){.archive{float:right;width:calc(100% - 200px);padding-right:200px}}@media (min-width: 80em){.archive{width:calc(100% - 300px);padding-right:300px}}.archive__item{position:relative}.archive__item a{position:relative;z-index:10}.archive__item a[rel="permalink"]{position:static}.archive__subtitle{margin:1.414em 0 0.5em;padding-bottom:0.5em;font-size:1em;color:#eee;border-bottom:1px solid #51555d}.archive__subtitle+.list__item .archive__item-title{margin-top:0.5em}.archive__item-title{margin-bottom:0.25em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;line-height:initial;overflow:hidden;text-overflow:ellipsis}.archive__item-title a[rel="permalink"]::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}.archive__item-title a+a{opacity:0.5}.page__content .archive__item-title{margin-top:1em;border-bottom:none}.archive__item-excerpt{margin-top:0;font-size:.75em}.archive__item-excerpt+p{text-indent:0}.archive__item-excerpt a{position:relative}.archive__item-teaser{position:relative;border-radius:4px;overflow:hidden}.archive__item-teaser img{width:100%}.archive__item-caption{position:absolute;bottom:0;right:0;margin:0 auto;padding:2px 5px;color:#fff;font-family:Georgia,Times,serif;font-size:.625em;background:#000;text-align:right;z-index:5;opacity:0.5;border-radius:4px 0 0 0}@media (min-width: 64em){.archive__item-caption{padding:5px 10px}}.archive__item-caption a{color:#fff;text-decoration:none}.list__item .page__meta,.list__item .comment__date{margin:0 0 4px;font-size:0.6em}@media (min-width: 64em){.archive .grid__wrapper{margin-right:-200px}}@media (min-width: 80em){.archive .grid__wrapper{margin-right:-300px}}.grid__item{margin-bottom:2em}@media (min-width: 37.5em){.grid__item{float:left;width:48.9795918367%}.grid__item:nth-child(2n+1){clear:both;margin-left:0}.grid__item:nth-child(2n+2){clear:none;margin-left:2.0408163265%}}@media (min-width: 48em){.grid__item{margin-left:0;margin-right:0;width:23.7288135593%}.grid__item:nth-child(2n+1){clear:none}.grid__item:nth-child(4n+1){clear:both}.grid__item:nth-child(4n+2){clear:none;margin-left:1.6949152542%}.grid__item:nth-child(4n+3){clear:none;margin-left:1.6949152542%}.grid__item:nth-child(4n+4){clear:none;margin-left:1.6949152542%}}.grid__item .page__meta,.grid__item .comment__date{margin:0 0 4px;font-size:0.6em}.grid__item .page__meta-sep{display:block}.grid__item .page__meta-sep::before{display:none}.grid__item .archive__item-title{margin-top:0.5em;font-size:1em}.grid__item .archive__item-excerpt{display:none}@media (min-width: 48em){.grid__item .archive__item-excerpt{display:block;font-size:.75em}}@media (min-width: 37.5em){.grid__item .archive__item-teaser{max-height:200px}}@media (min-width: 48em){.grid__item .archive__item-teaser{max-height:120px}}.feature__wrapper{clear:both;margin-bottom:2em;border-bottom:1px solid #51555d}.feature__wrapper::after{clear:both;content:"";display:table}.feature__wrapper .archive__item-title{margin-bottom:0}.feature__item{position:relative;margin-bottom:2em;font-size:1.125em}@media (min-width: 37.5em){.feature__item{float:left;margin-bottom:0;width:32.2033898305%}.feature__item:nth-child(3n+1){clear:both;margin-left:0}.feature__item:nth-child(3n+2){clear:none;margin-left:1.6949152542%}.feature__item:nth-child(3n+3){clear:none;margin-left:1.6949152542%}.feature__item .feature__item-teaser{max-height:200px;overflow:hidden}}.feature__item .archive__item-body{padding-left:1.6949152542%;padding-right:1.6949152542%}.feature__item a.btn::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}.feature__item--left{position:relative;float:left;margin-left:0;margin-right:0;width:100%;clear:both;font-size:1.125em}.feature__item--left .archive__item{float:left}.feature__item--left .archive__item-teaser{margin-bottom:2em}.feature__item--left a.btn::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}@media (min-width: 37.5em){.feature__item--left .archive__item-teaser{float:left;width:40.6779661017%}.feature__item--left .archive__item-body{float:right;padding-left:1.6949152542%;padding-right:1.6949152542%;width:57.6271186441%}}.feature__item--right{position:relative;float:left;margin-left:0;margin-right:0;width:100%;clear:both;font-size:1.125em}.feature__item--right .archive__item{float:left}.feature__item--right .archive__item-teaser{margin-bottom:2em}.feature__item--right a.btn::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}@media (min-width: 37.5em){.feature__item--right{text-align:right}.feature__item--right .archive__item-teaser{float:right;width:40.6779661017%}.feature__item--right .archive__item-body{float:left;width:57.6271186441%;padding-left:1.6949152542%;padding-right:1.6949152542%}}.feature__item--center{position:relative;float:left;margin-left:0;margin-right:0;width:100%;clear:both;font-size:1.125em}.feature__item--center .archive__item{float:left;width:100%}.feature__item--center .archive__item-teaser{margin-bottom:2em}.feature__item--center a.btn::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}@media (min-width: 37.5em){.feature__item--center{text-align:center}.feature__item--center .archive__item-teaser{margin:0 auto;width:40.6779661017%}.feature__item--center .archive__item-body{margin:0 auto;width:57.6271186441%}}.archive .feature__wrapper .archive__item-title{margin-top:0.25em;font-size:1em}.archive .feature__item,.archive .feature__item--left,.archive .feature__item--center,.archive .feature__item--right{font-size:1em}@media (min-width: 64em){.wide .archive{padding-right:0}}@media (min-width: 80em){.wide .archive{padding-right:0}}.layout--single .feature__wrapper{display:inline-block}.sidebar{clear:both}.sidebar::after{clear:both;content:"";display:table}@media (min-width: 64em){.sidebar{float:left;width:calc(200px - 1em);opacity:0.75;-webkit-transition:opacity 0.2s ease-in-out;transition:opacity 0.2s ease-in-out}.sidebar:hover{opacity:1}.sidebar.sticky{overflow-y:auto;max-height:calc(100vh - 2em - 2em)}}@media (min-width: 80em){.sidebar{width:calc(300px - 1em)}}.sidebar>*{margin-top:1em;margin-bottom:1em}.sidebar h2,.sidebar h3,.sidebar h4,.sidebar h5,.sidebar h6{margin-bottom:0;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.sidebar p,.sidebar li{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;line-height:1.5}.sidebar img{width:100%}.sidebar img.emoji{width:20px;height:20px}.sidebar__right{margin-bottom:1em}@media (min-width: 64em){.sidebar__right{position:absolute;top:0;right:0;width:200px;margin-right:-200px;padding-left:1em;z-index:10}.sidebar__right.sticky{clear:both;position:-webkit-sticky;position:sticky;top:2em;float:right}.sidebar__right.sticky::after{clear:both;content:"";display:table}.sidebar__right.sticky .toc .toc__menu{overflow-y:auto;max-height:calc(100vh - 7em)}}@media (min-width: 80em){.sidebar__right{width:300px;margin-right:-300px}}@media (min-width: 64em){.splash .sidebar__right{position:relative;float:right;margin-right:0}}@media (min-width: 80em){.splash .sidebar__right{margin-right:0}}.author__avatar{display:table-cell;vertical-align:top;width:36px;height:36px}@media (min-width: 64em){.author__avatar{display:block;width:auto;height:auto}}.author__avatar img{max-width:110px;border-radius:50%}@media (min-width: 64em){.author__avatar img{padding:5px;border:1px solid #51555d}}.author__content{display:table-cell;vertical-align:top;padding-left:15px;padding-right:25px;line-height:1}@media (min-width: 64em){.author__content{display:block;width:100%;padding-left:0;padding-right:0}}.author__content a{color:inherit;text-decoration:none}.author__name{margin:0}@media (min-width: 64em){.author__name{margin-top:10px;margin-bottom:10px}}.sidebar .author__name{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em}.author__bio{margin:0}@media (min-width: 64em){.author__bio{margin-top:10px;margin-bottom:20px}}.author__urls-wrapper{position:relative;display:table-cell;vertical-align:middle;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;z-index:20;cursor:pointer}.author__urls-wrapper li:last-child a{margin-bottom:0}.author__urls-wrapper .author__urls span.label{padding-left:5px}@media (min-width: 64em){.author__urls-wrapper{display:block}}.author__urls-wrapper button{position:relative;margin-bottom:0}@supports (pointer-events: none){.author__urls-wrapper button:before{content:'';position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none}}.author__urls-wrapper button.open:before{pointer-events:auto}@media (min-width: 64em){.author__urls-wrapper button{display:none}}.author__urls{display:none;position:absolute;right:0;margin-top:15px;padding:10px;list-style-type:none;border:1px solid #51555d;border-radius:4px;background:#252a34;box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);cursor:default}.author__urls.is--visible{display:block}@media (min-width: 64em){.author__urls{display:block;position:relative;margin:0;padding:0;border:0;background:transparent;box-shadow:none}}.author__urls:before{display:block;content:"";position:absolute;top:-11px;left:calc(50% - 10px);width:0;border-style:solid;border-width:0 10px 10px;border-color:#51555d transparent;z-index:0}@media (min-width: 64em){.author__urls:before{display:none}}.author__urls:after{display:block;content:"";position:absolute;top:-10px;left:calc(50% - 10px);width:0;border-style:solid;border-width:0 10px 10px;border-color:#252a34 transparent;z-index:1}@media (min-width: 64em){.author__urls:after{display:none}}.author__urls ul{padding:10px;list-style-type:none}.author__urls li{white-space:nowrap}.author__urls a{display:block;margin-bottom:5px;padding-right:5px;padding-top:2px;padding-bottom:2px;color:inherit;font-size:1em;text-decoration:none}.author__urls a:hover{text-decoration:underline}.wide .sidebar__right{margin-bottom:1em}@media (min-width: 64em){.wide .sidebar__right{position:initial;top:initial;right:initial;width:initial;margin-right:initial;padding-left:initial;z-index:initial}.wide .sidebar__right.sticky{float:none}}@media (min-width: 80em){.wide .sidebar__right{width:initial;margin-right:initial}}@media print{[hidden]{display:none}*{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}html{margin:0;padding:0;min-height:auto !important;font-size:16px}body{margin:0 auto;background:#fff !important;color:#000 !important;font-size:1rem;line-height:1.5;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3,h4,h5,h6{color:#000;line-height:1.2;margin-bottom:0.75rem;margin-top:0}h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.75rem}h4{font-size:1.5rem}h5{font-size:1.25rem}h6{font-size:1rem}a,a:visited{color:#000;text-decoration:underline;word-wrap:break-word}table{border-collapse:collapse}thead{display:table-header-group}table,th,td{border-bottom:1px solid #000}td,th{padding:8px 16px}img{border:0;display:block;max-width:100% !important;vertical-align:middle}hr{border:0;border-bottom:2px solid #bbb;height:0;margin:2.25rem 0;padding:0}dt{font-weight:bold}dd{margin:0;margin-bottom:0.75rem}abbr[title],acronym[title]{border:0;text-decoration:none}table,blockquote,pre,code,figure,li,hr,ul,ol,a,tr{page-break-inside:avoid}h2,h3,h4,p,a{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid;page-break-inside:avoid}h1+p,h2+p,h3+p{page-break-before:avoid}img{page-break-after:auto;page-break-before:auto;page-break-inside:avoid}pre{white-space:pre-wrap !important;word-wrap:break-word}a[href^='http://']:after,a[href^='https://']:after,a[href^='ftp://']:after{content:" (" attr(href) ")";font-size:80%}abbr[title]:after,acronym[title]:after{content:" (" attr(title) ")"}#main{max-width:100%}.page{margin:0;padding:0;width:100%}.page-break,.page-break-before{page-break-before:always}.page-break-after{page-break-after:always}.no-print{display:none}a.no-reformat:after{content:''}abbr[title].no-reformat:after,acronym[title].no-reformat:after{content:''}.page__hero-caption{color:#000 !important;background:#fff !important;opacity:1}.page__hero-caption a{color:#000 !important}.masthead,.toc,.page__share,.page__related,.pagination,.ads,.page__footer,.page__comments-form,.author__avatar,.author__content,.author__urls-wrapper,.nav__list,.sidebar,.adsbygoogle{display:none !important;height:1px !important}} diff --git a/assets/js/_main.js b/assets/js/_main.js new file mode 100644 index 0000000..03c9f4b --- /dev/null +++ b/assets/js/_main.js @@ -0,0 +1,230 @@ +/* ========================================================================== + jQuery plugin settings and other scripts + ========================================================================== */ + +$(document).ready(function () { + // FitVids init + $("#main").fitVids(); + + // Follow menu drop down + $(".author__urls-wrapper button").on("click", function () { + $(".author__urls").toggleClass("is--visible"); + $(".author__urls-wrapper").find("button").toggleClass("open"); + }); + + // Close search screen with Esc key + $(document).keyup(function (e) { + if (e.keyCode === 27) { + if ($(".initial-content").hasClass("is--hidden")) { + $(".search-content").toggleClass("is--visible"); + $(".initial-content").toggleClass("is--hidden"); + } + } + }); + + // Search toggle + $(".search__toggle").on("click", function () { + $(".search-content").toggleClass("is--visible"); + $(".initial-content").toggleClass("is--hidden"); + // set focus on input + setTimeout(function () { + $(".search-content input").focus(); + }, 400); + }); + + // Smooth scrolling + var scroll = new SmoothScroll('a[href*="#"]', { + offset: 20, + speed: 400, + speedAsDuration: true, + durationMax: 500, + }); + + // Gumshoe scroll spy init + if ($("nav.toc").length > 0) { + var spy = new Gumshoe("nav.toc a", { + // Active classes + navClass: "active", // applied to the nav list item + contentClass: "active", // applied to the content + + // Nested navigation + nested: false, // if true, add classes to parents of active link + nestedClass: "active", // applied to the parent items + + // Offset & reflow + offset: 20, // how far from the top of the page to activate a content area + reflow: true, // if true, listen for reflows + + // Event support + events: true, // if true, emit custom events + }); + } + + // Auto scroll sticky ToC with content + const scrollTocToContent = function (event) { + var target = event.target; + var scrollOptions = { behavior: "auto", block: "nearest", inline: "start" }; + + var tocElement = document.querySelector("aside.sidebar__right.sticky"); + if (!tocElement) return; + if (window.getComputedStyle(tocElement).position !== "sticky") return; + + if (target.parentElement.classList.contains("toc__menu") && target == target.parentElement.firstElementChild) { + // Scroll to top instead + document.querySelector("nav.toc header").scrollIntoView(scrollOptions); + } else { + target.scrollIntoView(scrollOptions); + } + }; + + // Has issues on Firefox, whitelist Chrome for now + if (!!window.chrome) { + document.addEventListener("gumshoeActivate", scrollTocToContent); + } + + // add lightbox class to all image links + $( + "a[href$='.jpg'],a[href$='.jpeg'],a[href$='.JPG'],a[href$='.png'],a[href$='.gif'],a[href$='.webp']" + ).has("> img").addClass("image-popup"); + + // Magnific-Popup options + $(".image-popup").magnificPopup({ + // disableOn: function() { + // if( $(window).width() < 500 ) { + // return false; + // } + // return true; + // }, + type: "image", + tLoading: "Loading image #%curr%...", + gallery: { + enabled: true, + navigateByImgClick: true, + preload: [0, 1], // Will preload 0 - before current, and 1 after the current image + }, + image: { + tError: 'Image #%curr% could not be loaded.', + }, + removalDelay: 500, // Delay in milliseconds before popup is removed + // Class that is added to body when popup is open. + // make it unique to apply your CSS animations just to this exact popup + mainClass: "mfp-zoom-in", + callbacks: { + beforeOpen: function () { + // just a hack that adds mfp-anim class to markup + this.st.image.markup = this.st.image.markup.replace( + "mfp-figure", + "mfp-figure mfp-with-anim" + ); + }, + }, + closeOnContentClick: true, + midClick: true, // allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source. + }); + + // Add anchors for headings + document + .querySelector(".page__content") + .querySelectorAll("h1, h2, h3, h4, h5, h6") + .forEach(function (element) { + var id = element.getAttribute("id"); + if (id) { + var anchor = document.createElement("a"); + anchor.className = "header-link"; + anchor.href = "#" + id; + anchor.innerHTML = + 'Permalink'; + anchor.title = "Permalink"; + element.appendChild(anchor); + } + }); + + // Add copy button for
 blocks
+  var copyText = function (text) {
+    if (document.queryCommandEnabled("copy") && navigator.clipboard) {
+      navigator.clipboard.writeText(text).then(
+        () => true,
+        () => console.error("Failed to copy text to clipboard: " + text)
+      );
+      return true;
+    } else {
+      var isRTL = document.documentElement.getAttribute("dir") === "rtl";
+
+      var textarea = document.createElement("textarea");
+      textarea.className = "clipboard-helper";
+      textarea.style[isRTL ? "right" : "left"] = "-9999px";
+      // Move element to the same position vertically
+      var yPosition = window.pageYOffset || document.documentElement.scrollTop;
+      textarea.style.top = yPosition + "px";
+
+      textarea.setAttribute("readonly", "");
+      textarea.value = text;
+      document.body.appendChild(textarea);
+
+      var success = true;
+      try {
+        textarea.select();
+        success = document.execCommand("copy");
+      } catch (e) {
+        success = false;
+      }
+      textarea.parentNode.removeChild(textarea);
+      return success;
+    }
+  };
+
+  var copyButtonEventListener = function (event) {
+    var thisButton = event.target;
+
+    // Locate the  element
+    var codeBlock = thisButton.nextElementSibling;
+    while (codeBlock && codeBlock.tagName.toLowerCase() !== "code") {
+      codeBlock = codeBlock.nextElementSibling;
+    }
+    if (!codeBlock) {
+      // No  found - wtf?
+      console.warn(thisButton);
+      throw new Error("No code block found for this button.");
+    }
+
+    // Skip line numbers if present (i.e. {% highlight lineno %})
+    var realCodeBlock = codeBlock.querySelector("td.code, td.rouge-code");
+    if (realCodeBlock) {
+      codeBlock = realCodeBlock;
+    }
+    var result = copyText(codeBlock.innerText);
+    // Restore the focus to the button
+    thisButton.focus();
+    if (result) {
+      if (thisButton.interval !== null) {
+        clearInterval(thisButton.interval);
+      }
+      thisButton.classList.add('copied');
+      thisButton.interval = setTimeout(function () {
+        thisButton.classList.remove('copied');
+        clearInterval(thisButton.interval);
+        thisButton.interval = null;
+      }, 1500);
+    }
+    return result;
+  };
+
+  if (window.enable_copy_code_button) {
+    document
+      .querySelectorAll(".page__content pre.highlight > code")
+      .forEach(function (element, index, parentList) {
+        // Locate the 
 element
+        var container = element.parentElement;
+        // Sanity check - don't add an extra button if there's already one
+        if (container.firstElementChild.tagName.toLowerCase() !== "code") {
+          return;
+        }
+        var copyButton = document.createElement("button");
+        copyButton.title = "Copy to clipboard";
+        copyButton.className = "clipboard-copy-button";
+        copyButton.innerHTML = 'Copy code';
+        copyButton.addEventListener("click", copyButtonEventListener);
+        container.prepend(copyButton);
+      });
+  }
+});
diff --git a/assets/js/lunr/lunr-en.js b/assets/js/lunr/lunr-en.js
new file mode 100644
index 0000000..d1400a7
--- /dev/null
+++ b/assets/js/lunr/lunr-en.js
@@ -0,0 +1,69 @@
+var idx = lunr(function () {
+  this.field('title')
+  this.field('excerpt')
+  this.field('categories')
+  this.field('tags')
+  this.ref('id')
+
+  this.pipeline.remove(lunr.trimmer)
+
+  for (var item in store) {
+    this.add({
+      title: store[item].title,
+      excerpt: store[item].excerpt,
+      categories: store[item].categories,
+      tags: store[item].tags,
+      id: item
+    })
+  }
+});
+
+$(document).ready(function() {
+  $('input#search').on('keyup', function () {
+    var resultdiv = $('#results');
+    var query = $(this).val().toLowerCase();
+    var result =
+      idx.query(function (q) {
+        query.split(lunr.tokenizer.separator).forEach(function (term) {
+          q.term(term, { boost: 100 })
+          if(query.lastIndexOf(" ") != query.length-1){
+            q.term(term, {  usePipeline: false, wildcard: lunr.Query.wildcard.TRAILING, boost: 10 })
+          }
+          if (term != ""){
+            q.term(term, {  usePipeline: false, editDistance: 1, boost: 1 })
+          }
+        })
+      });
+    resultdiv.empty();
+    resultdiv.prepend('

'+result.length+' Result(s) found

'); + for (var item in result) { + var ref = result[item].ref; + if(store[ref].teaser){ + var searchitem = + '
'+ + '
'+ + '

'+ + ''+store[ref].title+''+ + '

'+ + '
'+ + ''+ + '
'+ + '

'+store[ref].excerpt.split(" ").splice(0,20).join(" ")+'...

'+ + '
'+ + '
'; + } + else{ + var searchitem = + '
'+ + '
'+ + '

'+ + ''+store[ref].title+''+ + '

'+ + '

'+store[ref].excerpt.split(" ").splice(0,20).join(" ")+'...

'+ + '
'+ + '
'; + } + resultdiv.append(searchitem); + } + }); +}); diff --git a/assets/js/lunr/lunr-gr.js b/assets/js/lunr/lunr-gr.js new file mode 100644 index 0000000..e829362 --- /dev/null +++ b/assets/js/lunr/lunr-gr.js @@ -0,0 +1,522 @@ +step1list = new Array(); +step1list["ΦΑΓΙΑ"] = "ΦΑ"; +step1list["ΦΑΓΙΟΥ"] = "ΦΑ"; +step1list["ΦΑΓΙΩΝ"] = "ΦΑ"; +step1list["ΣΚΑΓΙΑ"] = "ΣΚΑ"; +step1list["ΣΚΑΓΙΟΥ"] = "ΣΚΑ"; +step1list["ΣΚΑΓΙΩΝ"] = "ΣΚΑ"; +step1list["ΟΛΟΓΙΟΥ"] = "ΟΛΟ"; +step1list["ΟΛΟΓΙΑ"] = "ΟΛΟ"; +step1list["ΟΛΟΓΙΩΝ"] = "ΟΛΟ"; +step1list["ΣΟΓΙΟΥ"] = "ΣΟ"; +step1list["ΣΟΓΙΑ"] = "ΣΟ"; +step1list["ΣΟΓΙΩΝ"] = "ΣΟ"; +step1list["ΤΑΤΟΓΙΑ"] = "ΤΑΤΟ"; +step1list["ΤΑΤΟΓΙΟΥ"] = "ΤΑΤΟ"; +step1list["ΤΑΤΟΓΙΩΝ"] = "ΤΑΤΟ"; +step1list["ΚΡΕΑΣ"] = "ΚΡΕ"; +step1list["ΚΡΕΑΤΟΣ"] = "ΚΡΕ"; +step1list["ΚΡΕΑΤΑ"] = "ΚΡΕ"; +step1list["ΚΡΕΑΤΩΝ"] = "ΚΡΕ"; +step1list["ΠΕΡΑΣ"] = "ΠΕΡ"; +step1list["ΠΕΡΑΤΟΣ"] = "ΠΕΡ"; +step1list["ΠΕΡΑΤΑ"] = "ΠΕΡ"; +step1list["ΠΕΡΑΤΩΝ"] = "ΠΕΡ"; +step1list["ΤΕΡΑΣ"] = "ΤΕΡ"; +step1list["ΤΕΡΑΤΟΣ"] = "ΤΕΡ"; +step1list["ΤΕΡΑΤΑ"] = "ΤΕΡ"; +step1list["ΤΕΡΑΤΩΝ"] = "ΤΕΡ"; +step1list["ΦΩΣ"] = "ΦΩ"; +step1list["ΦΩΤΟΣ"] = "ΦΩ"; +step1list["ΦΩΤΑ"] = "ΦΩ"; +step1list["ΦΩΤΩΝ"] = "ΦΩ"; +step1list["ΚΑΘΕΣΤΩΣ"] = "ΚΑΘΕΣΤ"; +step1list["ΚΑΘΕΣΤΩΤΟΣ"] = "ΚΑΘΕΣΤ"; +step1list["ΚΑΘΕΣΤΩΤΑ"] = "ΚΑΘΕΣΤ"; +step1list["ΚΑΘΕΣΤΩΤΩΝ"] = "ΚΑΘΕΣΤ"; +step1list["ΓΕΓΟΝΟΣ"] = "ΓΕΓΟΝ"; +step1list["ΓΕΓΟΝΟΤΟΣ"] = "ΓΕΓΟΝ"; +step1list["ΓΕΓΟΝΟΤΑ"] = "ΓΕΓΟΝ"; +step1list["ΓΕΓΟΝΟΤΩΝ"] = "ΓΕΓΟΝ"; + +v = "[ΑΕΗΙΟΥΩ]"; +v2 = "[ΑΕΗΙΟΩ]" + +function stemWord(w) { + var stem; + var suffix; + var firstch; + var origword = w; + test1 = new Boolean(true); + + if(w.length < 4) { + return w; + } + + var re; + var re2; + var re3; + var re4; + + re = /(.*)(ΦΑΓΙΑ|ΦΑΓΙΟΥ|ΦΑΓΙΩΝ|ΣΚΑΓΙΑ|ΣΚΑΓΙΟΥ|ΣΚΑΓΙΩΝ|ΟΛΟΓΙΟΥ|ΟΛΟΓΙΑ|ΟΛΟΓΙΩΝ|ΣΟΓΙΟΥ|ΣΟΓΙΑ|ΣΟΓΙΩΝ|ΤΑΤΟΓΙΑ|ΤΑΤΟΓΙΟΥ|ΤΑΤΟΓΙΩΝ|ΚΡΕΑΣ|ΚΡΕΑΤΟΣ|ΚΡΕΑΤΑ|ΚΡΕΑΤΩΝ|ΠΕΡΑΣ|ΠΕΡΑΤΟΣ|ΠΕΡΑΤΑ|ΠΕΡΑΤΩΝ|ΤΕΡΑΣ|ΤΕΡΑΤΟΣ|ΤΕΡΑΤΑ|ΤΕΡΑΤΩΝ|ΦΩΣ|ΦΩΤΟΣ|ΦΩΤΑ|ΦΩΤΩΝ|ΚΑΘΕΣΤΩΣ|ΚΑΘΕΣΤΩΤΟΣ|ΚΑΘΕΣΤΩΤΑ|ΚΑΘΕΣΤΩΤΩΝ|ΓΕΓΟΝΟΣ|ΓΕΓΟΝΟΤΟΣ|ΓΕΓΟΝΟΤΑ|ΓΕΓΟΝΟΤΩΝ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + w = stem + step1list[suffix]; + test1 = false; + } + + re = /^(.+?)(ΑΔΕΣ|ΑΔΩΝ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + + reg1 = /(ΟΚ|ΜΑΜ|ΜΑΝ|ΜΠΑΜΠ|ΠΑΤΕΡ|ΓΙΑΓΙ|ΝΤΑΝΤ|ΚΥΡ|ΘΕΙ|ΠΕΘΕΡ)$/; + + if(!(reg1.test(w))) { + w = w + "ΑΔ"; + } + } + + re2 = /^(.+?)(ΕΔΕΣ|ΕΔΩΝ)$/; + + if(re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + w = stem; + + exept2 = /(ΟΠ|ΙΠ|ΕΜΠ|ΥΠ|ΓΗΠ|ΔΑΠ|ΚΡΑΣΠ|ΜΙΛ)$/; + + if(exept2.test(w)) { + w = w + "ΕΔ"; + } + } + + re3 = /^(.+?)(ΟΥΔΕΣ|ΟΥΔΩΝ)$/; + + if(re3.test(w)) { + var fp = re3.exec(w); + stem = fp[1]; + w = stem; + + exept3 = /(ΑΡΚ|ΚΑΛΙΑΚ|ΠΕΤΑΛ|ΛΙΧ|ΠΛΕΞ|ΣΚ|Σ|ΦΛ|ΦΡ|ΒΕΛ|ΛΟΥΛ|ΧΝ|ΣΠ|ΤΡΑΓ|ΦΕ)$/; + + if(exept3.test(w)) { + w = w + "ΟΥΔ"; + } + } + + re4 = /^(.+?)(ΕΩΣ|ΕΩΝ)$/; + + if(re4.test(w)) { + var fp = re4.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept4 = /^(Θ|Δ|ΕΛ|ΓΑΛ|Ν|Π|ΙΔ|ΠΑΡ)$/; + + if(exept4.test(w)) { + w = w + "Ε"; + } + } + + re = /^(.+?)(ΙΑ|ΙΟΥ|ΙΩΝ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + re2 = new RegExp(v + "$"); + test1 = false; + + if(re2.test(w)) { + w = stem + "Ι"; + } + } + + re = /^(.+?)(ΙΚΑ|ΙΚΟ|ΙΚΟΥ|ΙΚΩΝ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + re2 = new RegExp(v + "$"); + exept5 = /^(ΑΛ|ΑΔ|ΕΝΔ|ΑΜΑΝ|ΑΜΜΟΧΑΛ|ΗΘ|ΑΝΗΘ|ΑΝΤΙΔ|ΦΥΣ|ΒΡΩΜ|ΓΕΡ|ΕΞΩΔ|ΚΑΛΠ|ΚΑΛΛΙΝ|ΚΑΤΑΔ|ΜΟΥΛ|ΜΠΑΝ|ΜΠΑΓΙΑΤ|ΜΠΟΛ|ΜΠΟΣ|ΝΙΤ|ΞΙΚ|ΣΥΝΟΜΗΛ|ΠΕΤΣ|ΠΙΤΣ|ΠΙΚΑΝΤ|ΠΛΙΑΤΣ|ΠΟΣΤΕΛΝ|ΠΡΩΤΟΔ|ΣΕΡΤ|ΣΥΝΑΔ|ΤΣΑΜ|ΥΠΟΔ|ΦΙΛΟΝ|ΦΥΛΟΔ|ΧΑΣ)$/; + + if((exept5.test(w)) || (re2.test(w))) { + w = w + "ΙΚ"; + } + } + + re = /^(.+?)(ΑΜΕ)$/; + re2 = /^(.+?)(ΑΓΑΜΕ|ΗΣΑΜΕ|ΟΥΣΑΜΕ|ΗΚΑΜΕ|ΗΘΗΚΑΜΕ)$/; + if(w == "ΑΓΑΜΕ") { + w = "ΑΓΑΜ"; + } + + if(re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + } + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept6 = /^(ΑΝΑΠ|ΑΠΟΘ|ΑΠΟΚ|ΑΠΟΣΤ|ΒΟΥΒ|ΞΕΘ|ΟΥΛ|ΠΕΘ|ΠΙΚΡ|ΠΟΤ|ΣΙΧ|Χ)$/; + + if(exept6.test(w)) { + w = w + "ΑΜ"; + } + } + + re2 = /^(.+?)(ΑΝΕ)$/; + re3 = /^(.+?)(ΑΓΑΝΕ|ΗΣΑΝΕ|ΟΥΣΑΝΕ|ΙΟΝΤΑΝΕ|ΙΟΤΑΝΕ|ΙΟΥΝΤΑΝΕ|ΟΝΤΑΝΕ|ΟΤΑΝΕ|ΟΥΝΤΑΝΕ|ΗΚΑΝΕ|ΗΘΗΚΑΝΕ)$/; + + if(re3.test(w)) { + var fp = re3.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + re3 = /^(ΤΡ|ΤΣ)$/; + + if(re3.test(w)) { + w = w + "ΑΓΑΝ"; + } + } + + if(re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + re2 = new RegExp(v2 + "$"); + exept7 = /^(ΒΕΤΕΡ|ΒΟΥΛΚ|ΒΡΑΧΜ|Γ|ΔΡΑΔΟΥΜ|Θ|ΚΑΛΠΟΥΖ|ΚΑΣΤΕΛ|ΚΟΡΜΟΡ|ΛΑΟΠΛ|ΜΩΑΜΕΘ|Μ|ΜΟΥΣΟΥΛΜ|Ν|ΟΥΛ|Π|ΠΕΛΕΚ|ΠΛ|ΠΟΛΙΣ|ΠΟΡΤΟΛ|ΣΑΡΑΚΑΤΣ|ΣΟΥΛΤ|ΤΣΑΡΛΑΤ|ΟΡΦ|ΤΣΙΓΓ|ΤΣΟΠ|ΦΩΤΟΣΤΕΦ|Χ|ΨΥΧΟΠΛ|ΑΓ|ΟΡΦ|ΓΑΛ|ΓΕΡ|ΔΕΚ|ΔΙΠΛ|ΑΜΕΡΙΚΑΝ|ΟΥΡ|ΠΙΘ|ΠΟΥΡΙΤ|Σ|ΖΩΝΤ|ΙΚ|ΚΑΣΤ|ΚΟΠ|ΛΙΧ|ΛΟΥΘΗΡ|ΜΑΙΝΤ|ΜΕΛ|ΣΙΓ|ΣΠ|ΣΤΕΓ|ΤΡΑΓ|ΤΣΑΓ|Φ|ΕΡ|ΑΔΑΠ|ΑΘΙΓΓ|ΑΜΗΧ|ΑΝΙΚ|ΑΝΟΡΓ|ΑΠΗΓ|ΑΠΙΘ|ΑΤΣΙΓΓ|ΒΑΣ|ΒΑΣΚ|ΒΑΘΥΓΑΛ|ΒΙΟΜΗΧ|ΒΡΑΧΥΚ|ΔΙΑΤ|ΔΙΑΦ|ΕΝΟΡΓ|ΘΥΣ|ΚΑΠΝΟΒΙΟΜΗΧ|ΚΑΤΑΓΑΛ|ΚΛΙΒ|ΚΟΙΛΑΡΦ|ΛΙΒ|ΜΕΓΛΟΒΙΟΜΗΧ|ΜΙΚΡΟΒΙΟΜΗΧ|ΝΤΑΒ|ΞΗΡΟΚΛΙΒ|ΟΛΙΓΟΔΑΜ|ΟΛΟΓΑΛ|ΠΕΝΤΑΡΦ|ΠΕΡΗΦ|ΠΕΡΙΤΡ|ΠΛΑΤ|ΠΟΛΥΔΑΠ|ΠΟΛΥΜΗΧ|ΣΤΕΦ|ΤΑΒ|ΤΕΤ|ΥΠΕΡΗΦ|ΥΠΟΚΟΠ|ΧΑΜΗΛΟΔΑΠ|ΨΗΛΟΤΑΒ)$/; + + if((re2.test(w)) || (exept7.test(w))) { + w = w + "ΑΝ"; + } + } + + re3 = /^(.+?)(ΕΤΕ)$/; + re4 = /^(.+?)(ΗΣΕΤΕ)$/; + + if(re4.test(w)) { + var fp = re4.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + } + + if(re3.test(w)) { + var fp = re3.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + re3 = new RegExp(v2 + "$"); + exept8 = /(ΟΔ|ΑΙΡ|ΦΟΡ|ΤΑΘ|ΔΙΑΘ|ΣΧ|ΕΝΔ|ΕΥΡ|ΤΙΘ|ΥΠΕΡΘ|ΡΑΘ|ΕΝΘ|ΡΟΘ|ΣΘ|ΠΥΡ|ΑΙΝ|ΣΥΝΔ|ΣΥΝ|ΣΥΝΘ|ΧΩΡ|ΠΟΝ|ΒΡ|ΚΑΘ|ΕΥΘ|ΕΚΘ|ΝΕΤ|ΡΟΝ|ΑΡΚ|ΒΑΡ|ΒΟΛ|ΩΦΕΛ)$/; + exept9 = /^(ΑΒΑΡ|ΒΕΝ|ΕΝΑΡ|ΑΒΡ|ΑΔ|ΑΘ|ΑΝ|ΑΠΛ|ΒΑΡΟΝ|ΝΤΡ|ΣΚ|ΚΟΠ|ΜΠΟΡ|ΝΙΦ|ΠΑΓ|ΠΑΡΑΚΑΛ|ΣΕΡΠ|ΣΚΕΛ|ΣΥΡΦ|ΤΟΚ|Υ|Δ|ΕΜ|ΘΑΡΡ|Θ)$/; + + if((re3.test(w)) || (exept8.test(w)) || (exept9.test(w))) { + w = w + "ΕΤ"; + } + } + + re = /^(.+?)(ΟΝΤΑΣ|ΩΝΤΑΣ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept10 = /^(ΑΡΧ)$/; + exept11 = /(ΚΡΕ)$/; + if(exept10.test(w)) { + w = w + "ΟΝΤ"; + } + if(exept11.test(w)) { + w = w + "ΩΝΤ"; + } + } + + re = /^(.+?)(ΟΜΑΣΤΕ|ΙΟΜΑΣΤΕ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept11 = /^(ΟΝ)$/; + + if(exept11.test(w)) { + w = w + "ΟΜΑΣΤ"; + } + } + + re = /^(.+?)(ΕΣΤΕ)$/; + re2 = /^(.+?)(ΙΕΣΤΕ)$/; + + if(re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + re2 = /^(Π|ΑΠ|ΣΥΜΠ|ΑΣΥΜΠ|ΑΚΑΤΑΠ|ΑΜΕΤΑΜΦ)$/; + + if(re2.test(w)) { + w = w + "ΙΕΣΤ"; + } + } + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept12 = /^(ΑΛ|ΑΡ|ΕΚΤΕΛ|Ζ|Μ|Ξ|ΠΑΡΑΚΑΛ|ΑΡ|ΠΡΟ|ΝΙΣ)$/; + + if(exept12.test(w)) { + w = w + "ΕΣΤ"; + } + } + + re = /^(.+?)(ΗΚΑ|ΗΚΕΣ|ΗΚΕ)$/; + re2 = /^(.+?)(ΗΘΗΚΑ|ΗΘΗΚΕΣ|ΗΘΗΚΕ)$/; + + if(re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + } + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept13 = /(ΣΚΩΛ|ΣΚΟΥΛ|ΝΑΡΘ|ΣΦ|ΟΘ|ΠΙΘ)$/; + exept14 = /^(ΔΙΑΘ|Θ|ΠΑΡΑΚΑΤΑΘ|ΠΡΟΣΘ|ΣΥΝΘ|)$/; + + if((exept13.test(w)) || (exept14.test(w))) { + w = w + "ΗΚ"; + } + } + + re = /^(.+?)(ΟΥΣΑ|ΟΥΣΕΣ|ΟΥΣΕ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept15 = /^(ΦΑΡΜΑΚ|ΧΑΔ|ΑΓΚ|ΑΝΑΡΡ|ΒΡΟΜ|ΕΚΛΙΠ|ΛΑΜΠΙΔ|ΛΕΧ|Μ|ΠΑΤ|Ρ|Λ|ΜΕΔ|ΜΕΣΑΖ|ΥΠΟΤΕΙΝ|ΑΜ|ΑΙΘ|ΑΝΗΚ|ΔΕΣΠΟΖ|ΕΝΔΙΑΦΕΡ|ΔΕ|ΔΕΥΤΕΡΕΥ|ΚΑΘΑΡΕΥ|ΠΛΕ|ΤΣΑ)$/; + exept16 = /(ΠΟΔΑΡ|ΒΛΕΠ|ΠΑΝΤΑΧ|ΦΡΥΔ|ΜΑΝΤΙΛ|ΜΑΛΛ|ΚΥΜΑΤ|ΛΑΧ|ΛΗΓ|ΦΑΓ|ΟΜ|ΠΡΩΤ)$/; + + if((exept15.test(w)) || (exept16.test(w))) { + w = w + "ΟΥΣ"; + } + } + + re = /^(.+?)(ΑΓΑ|ΑΓΕΣ|ΑΓΕ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept17 = /^(ΨΟΦ|ΝΑΥΛΟΧ)$/; + exept20 = /(ΚΟΛΛ)$/; + exept18 = /^(ΑΒΑΣΤ|ΠΟΛΥΦ|ΑΔΗΦ|ΠΑΜΦ|Ρ|ΑΣΠ|ΑΦ|ΑΜΑΛ|ΑΜΑΛΛΙ|ΑΝΥΣΤ|ΑΠΕΡ|ΑΣΠΑΡ|ΑΧΑΡ|ΔΕΡΒΕΝ|ΔΡΟΣΟΠ|ΞΕΦ|ΝΕΟΠ|ΝΟΜΟΤ|ΟΛΟΠ|ΟΜΟΤ|ΠΡΟΣΤ|ΠΡΟΣΩΠΟΠ|ΣΥΜΠ|ΣΥΝΤ|Τ|ΥΠΟΤ|ΧΑΡ|ΑΕΙΠ|ΑΙΜΟΣΤ|ΑΝΥΠ|ΑΠΟΤ|ΑΡΤΙΠ|ΔΙΑΤ|ΕΝ|ΕΠΙΤ|ΚΡΟΚΑΛΟΠ|ΣΙΔΗΡΟΠ|Λ|ΝΑΥ|ΟΥΛΑΜ|ΟΥΡ|Π|ΤΡ|Μ)$/; + exept19 = /(ΟΦ|ΠΕΛ|ΧΟΡΤ|ΛΛ|ΣΦ|ΡΠ|ΦΡ|ΠΡ|ΛΟΧ|ΣΜΗΝ)$/; + + if(((exept18.test(w)) || (exept19.test(w))) && !((exept17.test(w)) || (exept20.test(w)))) { + w = w + "ΑΓ"; + } + } + + re = /^(.+?)(ΗΣΕ|ΗΣΟΥ|ΗΣΑ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept21 = /^(Ν|ΧΕΡΣΟΝ|ΔΩΔΕΚΑΝ|ΕΡΗΜΟΝ|ΜΕΓΑΛΟΝ|ΕΠΤΑΝ)$/; + + if(exept21.test(w)) { + w = w + "ΗΣ"; + } + } + + re = /^(.+?)(ΗΣΤΕ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept22 = /^(ΑΣΒ|ΣΒ|ΑΧΡ|ΧΡ|ΑΠΛ|ΑΕΙΜΝ|ΔΥΣΧΡ|ΕΥΧΡ|ΚΟΙΝΟΧΡ|ΠΑΛΙΜΨ)$/; + + if(exept22.test(w)) { + w = w + "ΗΣΤ"; + } + } + + re = /^(.+?)(ΟΥΝΕ|ΗΣΟΥΝΕ|ΗΘΟΥΝΕ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept23 = /^(Ν|Ρ|ΣΠΙ|ΣΤΡΑΒΟΜΟΥΤΣ|ΚΑΚΟΜΟΥΤΣ|ΕΞΩΝ)$/; + + if(exept23.test(w)) { + w = w + "ΟΥΝ"; + } + } + + re = /^(.+?)(ΟΥΜΕ|ΗΣΟΥΜΕ|ΗΘΟΥΜΕ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept24 = /^(ΠΑΡΑΣΟΥΣ|Φ|Χ|ΩΡΙΟΠΛ|ΑΖ|ΑΛΛΟΣΟΥΣ|ΑΣΟΥΣ)$/; + + if(exept24.test(w)) { + w = w + "ΟΥΜ"; + } + } + + re = /^(.+?)(ΜΑΤΑ|ΜΑΤΩΝ|ΜΑΤΟΣ)$/; + re2 = /^(.+?)(Α|ΑΓΑΤΕ|ΑΓΑΝ|ΑΕΙ|ΑΜΑΙ|ΑΝ|ΑΣ|ΑΣΑΙ|ΑΤΑΙ|ΑΩ|Ε|ΕΙ|ΕΙΣ|ΕΙΤΕ|ΕΣΑΙ|ΕΣ|ΕΤΑΙ|Ι|ΙΕΜΑΙ|ΙΕΜΑΣΤΕ|ΙΕΤΑΙ|ΙΕΣΑΙ|ΙΕΣΑΣΤΕ|ΙΟΜΑΣΤΑΝ|ΙΟΜΟΥΝ|ΙΟΜΟΥΝΑ|ΙΟΝΤΑΝ|ΙΟΝΤΟΥΣΑΝ|ΙΟΣΑΣΤΑΝ|ΙΟΣΑΣΤΕ|ΙΟΣΟΥΝ|ΙΟΣΟΥΝΑ|ΙΟΤΑΝ|ΙΟΥΜΑ|ΙΟΥΜΑΣΤΕ|ΙΟΥΝΤΑΙ|ΙΟΥΝΤΑΝ|Η|ΗΔΕΣ|ΗΔΩΝ|ΗΘΕΙ|ΗΘΕΙΣ|ΗΘΕΙΤΕ|ΗΘΗΚΑΤΕ|ΗΘΗΚΑΝ|ΗΘΟΥΝ|ΗΘΩ|ΗΚΑΤΕ|ΗΚΑΝ|ΗΣ|ΗΣΑΝ|ΗΣΑΤΕ|ΗΣΕΙ|ΗΣΕΣ|ΗΣΟΥΝ|ΗΣΩ|Ο|ΟΙ|ΟΜΑΙ|ΟΜΑΣΤΑΝ|ΟΜΟΥΝ|ΟΜΟΥΝΑ|ΟΝΤΑΙ|ΟΝΤΑΝ|ΟΝΤΟΥΣΑΝ|ΟΣ|ΟΣΑΣΤΑΝ|ΟΣΑΣΤΕ|ΟΣΟΥΝ|ΟΣΟΥΝΑ|ΟΤΑΝ|ΟΥ|ΟΥΜΑΙ|ΟΥΜΑΣΤΕ|ΟΥΝ|ΟΥΝΤΑΙ|ΟΥΝΤΑΝ|ΟΥΣ|ΟΥΣΑΝ|ΟΥΣΑΤΕ|Υ|ΥΣ|Ω|ΩΝ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem + "ΜΑ"; + } + + if((re2.test(w)) && (test1)) { + var fp = re2.exec(w); + stem = fp[1]; + w = stem; + + } + + re = /^(.+?)(ΕΣΤΕΡ|ΕΣΤΑΤ|ΟΤΕΡ|ΟΤΑΤ|ΥΤΕΡ|ΥΤΑΤ|ΩΤΕΡ|ΩΤΑΤ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + } + + return w; +}; + +var greekStemmer = function (token) { + return token.update(function (word) { + return stemWord(word); + }) +} + +var idx = lunr(function () { + this.field('title') + this.field('excerpt') + this.field('categories') + this.field('tags') + this.ref('id') + + this.pipeline.remove(lunr.trimmer) + this.pipeline.add(greekStemmer) + this.pipeline.remove(lunr.stemmer) + + for (var item in store) { + this.add({ + title: store[item].title, + excerpt: store[item].excerpt, + categories: store[item].categories, + tags: store[item].tags, + id: item + }) + } +}); + +$(document).ready(function() { + $('input#search').on('keyup', function () { + var resultdiv = $('#results'); + var query = $(this).val().toLowerCase(); + var result = + idx.query(function (q) { + query.split(lunr.tokenizer.separator).forEach(function (term) { + q.term(term, { boost: 100 }) + if(query.lastIndexOf(" ") != query.length-1){ + q.term(term, { usePipeline: false, wildcard: lunr.Query.wildcard.TRAILING, boost: 10 }) + } + if (term != ""){ + q.term(term, { usePipeline: false, editDistance: 1, boost: 1 }) + } + }) + }); + resultdiv.empty(); + resultdiv.prepend('

'+result.length+' Result(s) found

'); + for (var item in result) { + var ref = result[item].ref; + if(store[ref].teaser){ + var searchitem = + '
'+ + '
'+ + '

'+ + ''+store[ref].title+''+ + '

'+ + '
'+ + ''+ + '
'+ + '

'+store[ref].excerpt.split(" ").splice(0,20).join(" ")+'...

'+ + '
'+ + '
'; + } + else{ + var searchitem = + '
'+ + '
'+ + '

'+ + ''+store[ref].title+''+ + '

'+ + '

'+store[ref].excerpt.split(" ").splice(0,20).join(" ")+'...

'+ + '
'+ + '
'; + } + resultdiv.append(searchitem); + } + }); +}); diff --git a/assets/js/lunr/lunr-store.js b/assets/js/lunr/lunr-store.js new file mode 100644 index 0000000..f2786f2 --- /dev/null +++ b/assets/js/lunr/lunr-store.js @@ -0,0 +1,31 @@ +var store = [{ + "title": "Anpassung vonDiffusion Modelle", + "excerpt":"Du findest generative Modelle wie Stable Diffusion oder DALL-E, die anhand von Text detailreiche Bilder erzeugen können, spannend und hast Interesse, dich in aktuelle Machine-Learning-Themen einzuarbeiten? In dieser Arbeit hast du die Möglichkeit, Methoden wie Stable Diffusion und SV3D genauer kennenzulernen. Stable Diffusion ermöglicht es, Bilder anhand von Text oder...","categories": [], + "tags": ["pm","ma"], + "url": "/boborzi/Diffusion.html", + "teaser": null + },{ + "title": "Fine-tuning von Large Reconstruction Models für die 3D Objektgenerierung", + "excerpt":"Kann man per Knopfdruck 3D-Objekte erzeugen? Generative Modelle wie Stable Diffusion oder DALL-E können bereits beeindruckende Bilder anhand einer Beschreibung auf Knopfdruck erzeugen. Das wäre auch für 3D-Objekte interessant, und tatsächlich lassen sich Methoden der Bildgenerierung auch zur Erzeugung von 3D-Objekten nutzen. Allerdings sind die Ergebnisse oft noch nicht so...","categories": [], + "tags": ["pm","ma"], + "url": "/boborzi/LRM.html", + "teaser": null + },{ + "title": "Seminararbeit zur Falsifizierung und virtuellen Validierung autonomer Fahrzeuge", + "excerpt":"Im Rahmen dieser Seminararbeit sollen Sie einen umfassenden Überblick über moderne Methoden zur Falsifizierung und virtuellen Validierung von autonomen Fahrzeugen erarbeiten. Der besondere Fokus liegt dabei auf der Anwendung von Deep Reinforcement Learning (DRL) in diesem Kontext. Beginnen Sie Ihre Arbeit mit einer Einführung in die Herausforderungen, die bei der...","categories": [], + "tags": ["sm"], + "url": "/luttkus/SA_falsifizierungs_methoden.html", + "teaser": null + },{ + "title": "Integration von Robot-SF in SLURM-Umgebung", + "excerpt":"Im Rahmen dieses Projektmoduls soll die Trainingsumgebung Robot-SF für eine effiziente Nutzung auf unserem Servercluster optimiert werden. Robot-SF ist eine Simulationsumgebung, in der ein Roboter mittels Reinforcement Learning (RL) trainiert wird, sich sicher in einer 2D-Umgebung mit Fußgängern zu bewegen. Da RL-Methoden sehr ressourcenintensiv sind, ist es das Ziel dieses...","categories": [], + "tags": ["pm"], + "url": "/luttkus/SLURM_robot_sf.html", + "teaser": null + },{ + "title": "Praktikum Autonomes Fahren Refactoring", + "excerpt":"Das Praktikum Autonomes Fahren findet in jedem Wintersemester statt. Wenn du bereits an dem Projekt gearbeitet hast, kannst du auch im Sommersemester weiter daran arbeiten. PAF ","categories": [], + "tags": ["pm","hiwi"], + "url": "/luttkus/PAF.html", + "teaser": null + },] diff --git a/assets/js/lunr/lunr.js b/assets/js/lunr/lunr.js new file mode 100644 index 0000000..6aa370f --- /dev/null +++ b/assets/js/lunr/lunr.js @@ -0,0 +1,3475 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */ + +;(function(){ + +/** + * A convenience function for configuring and constructing + * a new lunr Index. + * + * A lunr.Builder instance is created and the pipeline setup + * with a trimmer, stop word filter and stemmer. + * + * This builder object is yielded to the configuration function + * that is passed as a parameter, allowing the list of fields + * and other builder parameters to be customised. + * + * All documents _must_ be added within the passed config function. + * + * @example + * var idx = lunr(function () { + * this.field('title') + * this.field('body') + * this.ref('id') + * + * documents.forEach(function (doc) { + * this.add(doc) + * }, this) + * }) + * + * @see {@link lunr.Builder} + * @see {@link lunr.Pipeline} + * @see {@link lunr.trimmer} + * @see {@link lunr.stopWordFilter} + * @see {@link lunr.stemmer} + * @namespace {function} lunr + */ +var lunr = function (config) { + var builder = new lunr.Builder + + builder.pipeline.add( + lunr.trimmer, + lunr.stopWordFilter, + lunr.stemmer + ) + + builder.searchPipeline.add( + lunr.stemmer + ) + + config.call(builder, builder) + return builder.build() +} + +lunr.version = "2.3.9" +/*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A namespace containing utils for the rest of the lunr library + * @namespace lunr.utils + */ +lunr.utils = {} + +/** + * Print a warning message to the console. + * + * @param {String} message The message to be printed. + * @memberOf lunr.utils + * @function + */ +lunr.utils.warn = (function (global) { + /* eslint-disable no-console */ + return function (message) { + if (global.console && console.warn) { + console.warn(message) + } + } + /* eslint-enable no-console */ +})(this) + +/** + * Convert an object to a string. + * + * In the case of `null` and `undefined` the function returns + * the empty string, in all other cases the result of calling + * `toString` on the passed object is returned. + * + * @param {Any} obj The object to convert to a string. + * @return {String} string representation of the passed object. + * @memberOf lunr.utils + */ +lunr.utils.asString = function (obj) { + if (obj === void 0 || obj === null) { + return "" + } else { + return obj.toString() + } +} + +/** + * Clones an object. + * + * Will create a copy of an existing object such that any mutations + * on the copy cannot affect the original. + * + * Only shallow objects are supported, passing a nested object to this + * function will cause a TypeError. + * + * Objects with primitives, and arrays of primitives are supported. + * + * @param {Object} obj The object to clone. + * @return {Object} a clone of the passed object. + * @throws {TypeError} when a nested object is passed. + * @memberOf Utils + */ +lunr.utils.clone = function (obj) { + if (obj === null || obj === undefined) { + return obj + } + + var clone = Object.create(null), + keys = Object.keys(obj) + + for (var i = 0; i < keys.length; i++) { + var key = keys[i], + val = obj[key] + + if (Array.isArray(val)) { + clone[key] = val.slice() + continue + } + + if (typeof val === 'string' || + typeof val === 'number' || + typeof val === 'boolean') { + clone[key] = val + continue + } + + throw new TypeError("clone is not deep and does not support nested objects") + } + + return clone +} +lunr.FieldRef = function (docRef, fieldName, stringValue) { + this.docRef = docRef + this.fieldName = fieldName + this._stringValue = stringValue +} + +lunr.FieldRef.joiner = "/" + +lunr.FieldRef.fromString = function (s) { + var n = s.indexOf(lunr.FieldRef.joiner) + + if (n === -1) { + throw "malformed field ref string" + } + + var fieldRef = s.slice(0, n), + docRef = s.slice(n + 1) + + return new lunr.FieldRef (docRef, fieldRef, s) +} + +lunr.FieldRef.prototype.toString = function () { + if (this._stringValue == undefined) { + this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef + } + + return this._stringValue +} +/*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A lunr set. + * + * @constructor + */ +lunr.Set = function (elements) { + this.elements = Object.create(null) + + if (elements) { + this.length = elements.length + + for (var i = 0; i < this.length; i++) { + this.elements[elements[i]] = true + } + } else { + this.length = 0 + } +} + +/** + * A complete set that contains all elements. + * + * @static + * @readonly + * @type {lunr.Set} + */ +lunr.Set.complete = { + intersect: function (other) { + return other + }, + + union: function () { + return this + }, + + contains: function () { + return true + } +} + +/** + * An empty set that contains no elements. + * + * @static + * @readonly + * @type {lunr.Set} + */ +lunr.Set.empty = { + intersect: function () { + return this + }, + + union: function (other) { + return other + }, + + contains: function () { + return false + } +} + +/** + * Returns true if this set contains the specified object. + * + * @param {object} object - Object whose presence in this set is to be tested. + * @returns {boolean} - True if this set contains the specified object. + */ +lunr.Set.prototype.contains = function (object) { + return !!this.elements[object] +} + +/** + * Returns a new set containing only the elements that are present in both + * this set and the specified set. + * + * @param {lunr.Set} other - set to intersect with this set. + * @returns {lunr.Set} a new set that is the intersection of this and the specified set. + */ + +lunr.Set.prototype.intersect = function (other) { + var a, b, elements, intersection = [] + + if (other === lunr.Set.complete) { + return this + } + + if (other === lunr.Set.empty) { + return other + } + + if (this.length < other.length) { + a = this + b = other + } else { + a = other + b = this + } + + elements = Object.keys(a.elements) + + for (var i = 0; i < elements.length; i++) { + var element = elements[i] + if (element in b.elements) { + intersection.push(element) + } + } + + return new lunr.Set (intersection) +} + +/** + * Returns a new set combining the elements of this and the specified set. + * + * @param {lunr.Set} other - set to union with this set. + * @return {lunr.Set} a new set that is the union of this and the specified set. + */ + +lunr.Set.prototype.union = function (other) { + if (other === lunr.Set.complete) { + return lunr.Set.complete + } + + if (other === lunr.Set.empty) { + return this + } + + return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements))) +} +/** + * A function to calculate the inverse document frequency for + * a posting. This is shared between the builder and the index + * + * @private + * @param {object} posting - The posting for a given term + * @param {number} documentCount - The total number of documents. + */ +lunr.idf = function (posting, documentCount) { + var documentsWithTerm = 0 + + for (var fieldName in posting) { + if (fieldName == '_index') continue // Ignore the term index, its not a field + documentsWithTerm += Object.keys(posting[fieldName]).length + } + + var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5) + + return Math.log(1 + Math.abs(x)) +} + +/** + * A token wraps a string representation of a token + * as it is passed through the text processing pipeline. + * + * @constructor + * @param {string} [str=''] - The string token being wrapped. + * @param {object} [metadata={}] - Metadata associated with this token. + */ +lunr.Token = function (str, metadata) { + this.str = str || "" + this.metadata = metadata || {} +} + +/** + * Returns the token string that is being wrapped by this object. + * + * @returns {string} + */ +lunr.Token.prototype.toString = function () { + return this.str +} + +/** + * A token update function is used when updating or optionally + * when cloning a token. + * + * @callback lunr.Token~updateFunction + * @param {string} str - The string representation of the token. + * @param {Object} metadata - All metadata associated with this token. + */ + +/** + * Applies the given function to the wrapped string token. + * + * @example + * token.update(function (str, metadata) { + * return str.toUpperCase() + * }) + * + * @param {lunr.Token~updateFunction} fn - A function to apply to the token string. + * @returns {lunr.Token} + */ +lunr.Token.prototype.update = function (fn) { + this.str = fn(this.str, this.metadata) + return this +} + +/** + * Creates a clone of this token. Optionally a function can be + * applied to the cloned token. + * + * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token. + * @returns {lunr.Token} + */ +lunr.Token.prototype.clone = function (fn) { + fn = fn || function (s) { return s } + return new lunr.Token (fn(this.str, this.metadata), this.metadata) +} +/*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A function for splitting a string into tokens ready to be inserted into + * the search index. Uses `lunr.tokenizer.separator` to split strings, change + * the value of this property to change how strings are split into tokens. + * + * This tokenizer will convert its parameter to a string by calling `toString` and + * then will split this string on the character in `lunr.tokenizer.separator`. + * Arrays will have their elements converted to strings and wrapped in a lunr.Token. + * + * Optional metadata can be passed to the tokenizer, this metadata will be cloned and + * added as metadata to every token that is created from the object to be tokenized. + * + * @static + * @param {?(string|object|object[])} obj - The object to convert into tokens + * @param {?object} metadata - Optional metadata to associate with every token + * @returns {lunr.Token[]} + * @see {@link lunr.Pipeline} + */ +lunr.tokenizer = function (obj, metadata) { + if (obj == null || obj == undefined) { + return [] + } + + if (Array.isArray(obj)) { + return obj.map(function (t) { + return new lunr.Token( + lunr.utils.asString(t).toLowerCase(), + lunr.utils.clone(metadata) + ) + }) + } + + var str = obj.toString().toLowerCase(), + len = str.length, + tokens = [] + + for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) { + var char = str.charAt(sliceEnd), + sliceLength = sliceEnd - sliceStart + + if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) { + + if (sliceLength > 0) { + var tokenMetadata = lunr.utils.clone(metadata) || {} + tokenMetadata["position"] = [sliceStart, sliceLength] + tokenMetadata["index"] = tokens.length + + tokens.push( + new lunr.Token ( + str.slice(sliceStart, sliceEnd), + tokenMetadata + ) + ) + } + + sliceStart = sliceEnd + 1 + } + + } + + return tokens +} + +/** + * The separator used to split a string into tokens. Override this property to change the behaviour of + * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens. + * + * @static + * @see lunr.tokenizer + */ +lunr.tokenizer.separator = /[\s\-]+/ +/*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * lunr.Pipelines maintain an ordered list of functions to be applied to all + * tokens in documents entering the search index and queries being ran against + * the index. + * + * An instance of lunr.Index created with the lunr shortcut will contain a + * pipeline with a stop word filter and an English language stemmer. Extra + * functions can be added before or after either of these functions or these + * default functions can be removed. + * + * When run the pipeline will call each function in turn, passing a token, the + * index of that token in the original list of all tokens and finally a list of + * all the original tokens. + * + * The output of functions in the pipeline will be passed to the next function + * in the pipeline. To exclude a token from entering the index the function + * should return undefined, the rest of the pipeline will not be called with + * this token. + * + * For serialisation of pipelines to work, all functions used in an instance of + * a pipeline should be registered with lunr.Pipeline. Registered functions can + * then be loaded. If trying to load a serialised pipeline that uses functions + * that are not registered an error will be thrown. + * + * If not planning on serialising the pipeline then registering pipeline functions + * is not necessary. + * + * @constructor + */ +lunr.Pipeline = function () { + this._stack = [] +} + +lunr.Pipeline.registeredFunctions = Object.create(null) + +/** + * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token + * string as well as all known metadata. A pipeline function can mutate the token string + * or mutate (or add) metadata for a given token. + * + * A pipeline function can indicate that the passed token should be discarded by returning + * null, undefined or an empty string. This token will not be passed to any downstream pipeline + * functions and will not be added to the index. + * + * Multiple tokens can be returned by returning an array of tokens. Each token will be passed + * to any downstream pipeline functions and all will returned tokens will be added to the index. + * + * Any number of pipeline functions may be chained together using a lunr.Pipeline. + * + * @interface lunr.PipelineFunction + * @param {lunr.Token} token - A token from the document being processed. + * @param {number} i - The index of this token in the complete list of tokens for this document/field. + * @param {lunr.Token[]} tokens - All tokens for this document/field. + * @returns {(?lunr.Token|lunr.Token[])} + */ + +/** + * Register a function with the pipeline. + * + * Functions that are used in the pipeline should be registered if the pipeline + * needs to be serialised, or a serialised pipeline needs to be loaded. + * + * Registering a function does not add it to a pipeline, functions must still be + * added to instances of the pipeline for them to be used when running a pipeline. + * + * @param {lunr.PipelineFunction} fn - The function to check for. + * @param {String} label - The label to register this function with + */ +lunr.Pipeline.registerFunction = function (fn, label) { + if (label in this.registeredFunctions) { + lunr.utils.warn('Overwriting existing registered function: ' + label) + } + + fn.label = label + lunr.Pipeline.registeredFunctions[fn.label] = fn +} + +/** + * Warns if the function is not registered as a Pipeline function. + * + * @param {lunr.PipelineFunction} fn - The function to check for. + * @private + */ +lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) { + var isRegistered = fn.label && (fn.label in this.registeredFunctions) + + if (!isRegistered) { + lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn) + } +} + +/** + * Loads a previously serialised pipeline. + * + * All functions to be loaded must already be registered with lunr.Pipeline. + * If any function from the serialised data has not been registered then an + * error will be thrown. + * + * @param {Object} serialised - The serialised pipeline to load. + * @returns {lunr.Pipeline} + */ +lunr.Pipeline.load = function (serialised) { + var pipeline = new lunr.Pipeline + + serialised.forEach(function (fnName) { + var fn = lunr.Pipeline.registeredFunctions[fnName] + + if (fn) { + pipeline.add(fn) + } else { + throw new Error('Cannot load unregistered function: ' + fnName) + } + }) + + return pipeline +} + +/** + * Adds new functions to the end of the pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline. + */ +lunr.Pipeline.prototype.add = function () { + var fns = Array.prototype.slice.call(arguments) + + fns.forEach(function (fn) { + lunr.Pipeline.warnIfFunctionNotRegistered(fn) + this._stack.push(fn) + }, this) +} + +/** + * Adds a single function after a function that already exists in the + * pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. + * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. + */ +lunr.Pipeline.prototype.after = function (existingFn, newFn) { + lunr.Pipeline.warnIfFunctionNotRegistered(newFn) + + var pos = this._stack.indexOf(existingFn) + if (pos == -1) { + throw new Error('Cannot find existingFn') + } + + pos = pos + 1 + this._stack.splice(pos, 0, newFn) +} + +/** + * Adds a single function before a function that already exists in the + * pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. + * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. + */ +lunr.Pipeline.prototype.before = function (existingFn, newFn) { + lunr.Pipeline.warnIfFunctionNotRegistered(newFn) + + var pos = this._stack.indexOf(existingFn) + if (pos == -1) { + throw new Error('Cannot find existingFn') + } + + this._stack.splice(pos, 0, newFn) +} + +/** + * Removes a function from the pipeline. + * + * @param {lunr.PipelineFunction} fn The function to remove from the pipeline. + */ +lunr.Pipeline.prototype.remove = function (fn) { + var pos = this._stack.indexOf(fn) + if (pos == -1) { + return + } + + this._stack.splice(pos, 1) +} + +/** + * Runs the current list of functions that make up the pipeline against the + * passed tokens. + * + * @param {Array} tokens The tokens to run through the pipeline. + * @returns {Array} + */ +lunr.Pipeline.prototype.run = function (tokens) { + var stackLength = this._stack.length + + for (var i = 0; i < stackLength; i++) { + var fn = this._stack[i] + var memo = [] + + for (var j = 0; j < tokens.length; j++) { + var result = fn(tokens[j], j, tokens) + + if (result === null || result === void 0 || result === '') continue + + if (Array.isArray(result)) { + for (var k = 0; k < result.length; k++) { + memo.push(result[k]) + } + } else { + memo.push(result) + } + } + + tokens = memo + } + + return tokens +} + +/** + * Convenience method for passing a string through a pipeline and getting + * strings out. This method takes care of wrapping the passed string in a + * token and mapping the resulting tokens back to strings. + * + * @param {string} str - The string to pass through the pipeline. + * @param {?object} metadata - Optional metadata to associate with the token + * passed to the pipeline. + * @returns {string[]} + */ +lunr.Pipeline.prototype.runString = function (str, metadata) { + var token = new lunr.Token (str, metadata) + + return this.run([token]).map(function (t) { + return t.toString() + }) +} + +/** + * Resets the pipeline by removing any existing processors. + * + */ +lunr.Pipeline.prototype.reset = function () { + this._stack = [] +} + +/** + * Returns a representation of the pipeline ready for serialisation. + * + * Logs a warning if the function has not been registered. + * + * @returns {Array} + */ +lunr.Pipeline.prototype.toJSON = function () { + return this._stack.map(function (fn) { + lunr.Pipeline.warnIfFunctionNotRegistered(fn) + + return fn.label + }) +} +/*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A vector is used to construct the vector space of documents and queries. These + * vectors support operations to determine the similarity between two documents or + * a document and a query. + * + * Normally no parameters are required for initializing a vector, but in the case of + * loading a previously dumped vector the raw elements can be provided to the constructor. + * + * For performance reasons vectors are implemented with a flat array, where an elements + * index is immediately followed by its value. E.g. [index, value, index, value]. This + * allows the underlying array to be as sparse as possible and still offer decent + * performance when being used for vector calculations. + * + * @constructor + * @param {Number[]} [elements] - The flat list of element index and element value pairs. + */ +lunr.Vector = function (elements) { + this._magnitude = 0 + this.elements = elements || [] +} + + +/** + * Calculates the position within the vector to insert a given index. + * + * This is used internally by insert and upsert. If there are duplicate indexes then + * the position is returned as if the value for that index were to be updated, but it + * is the callers responsibility to check whether there is a duplicate at that index + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @returns {Number} + */ +lunr.Vector.prototype.positionForIndex = function (index) { + // For an empty vector the tuple can be inserted at the beginning + if (this.elements.length == 0) { + return 0 + } + + var start = 0, + end = this.elements.length / 2, + sliceLength = end - start, + pivotPoint = Math.floor(sliceLength / 2), + pivotIndex = this.elements[pivotPoint * 2] + + while (sliceLength > 1) { + if (pivotIndex < index) { + start = pivotPoint + } + + if (pivotIndex > index) { + end = pivotPoint + } + + if (pivotIndex == index) { + break + } + + sliceLength = end - start + pivotPoint = start + Math.floor(sliceLength / 2) + pivotIndex = this.elements[pivotPoint * 2] + } + + if (pivotIndex == index) { + return pivotPoint * 2 + } + + if (pivotIndex > index) { + return pivotPoint * 2 + } + + if (pivotIndex < index) { + return (pivotPoint + 1) * 2 + } +} + +/** + * Inserts an element at an index within the vector. + * + * Does not allow duplicates, will throw an error if there is already an entry + * for this index. + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @param {Number} val - The value to be inserted into the vector. + */ +lunr.Vector.prototype.insert = function (insertIdx, val) { + this.upsert(insertIdx, val, function () { + throw "duplicate index" + }) +} + +/** + * Inserts or updates an existing index within the vector. + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @param {Number} val - The value to be inserted into the vector. + * @param {function} fn - A function that is called for updates, the existing value and the + * requested value are passed as arguments + */ +lunr.Vector.prototype.upsert = function (insertIdx, val, fn) { + this._magnitude = 0 + var position = this.positionForIndex(insertIdx) + + if (this.elements[position] == insertIdx) { + this.elements[position + 1] = fn(this.elements[position + 1], val) + } else { + this.elements.splice(position, 0, insertIdx, val) + } +} + +/** + * Calculates the magnitude of this vector. + * + * @returns {Number} + */ +lunr.Vector.prototype.magnitude = function () { + if (this._magnitude) return this._magnitude + + var sumOfSquares = 0, + elementsLength = this.elements.length + + for (var i = 1; i < elementsLength; i += 2) { + var val = this.elements[i] + sumOfSquares += val * val + } + + return this._magnitude = Math.sqrt(sumOfSquares) +} + +/** + * Calculates the dot product of this vector and another vector. + * + * @param {lunr.Vector} otherVector - The vector to compute the dot product with. + * @returns {Number} + */ +lunr.Vector.prototype.dot = function (otherVector) { + var dotProduct = 0, + a = this.elements, b = otherVector.elements, + aLen = a.length, bLen = b.length, + aVal = 0, bVal = 0, + i = 0, j = 0 + + while (i < aLen && j < bLen) { + aVal = a[i], bVal = b[j] + if (aVal < bVal) { + i += 2 + } else if (aVal > bVal) { + j += 2 + } else if (aVal == bVal) { + dotProduct += a[i + 1] * b[j + 1] + i += 2 + j += 2 + } + } + + return dotProduct +} + +/** + * Calculates the similarity between this vector and another vector. + * + * @param {lunr.Vector} otherVector - The other vector to calculate the + * similarity with. + * @returns {Number} + */ +lunr.Vector.prototype.similarity = function (otherVector) { + return this.dot(otherVector) / this.magnitude() || 0 +} + +/** + * Converts the vector to an array of the elements within the vector. + * + * @returns {Number[]} + */ +lunr.Vector.prototype.toArray = function () { + var output = new Array (this.elements.length / 2) + + for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) { + output[j] = this.elements[i] + } + + return output +} + +/** + * A JSON serializable representation of the vector. + * + * @returns {Number[]} + */ +lunr.Vector.prototype.toJSON = function () { + return this.elements +} +/* eslint-disable */ +/*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ + +/** + * lunr.stemmer is an english language stemmer, this is a JavaScript + * implementation of the PorterStemmer taken from http://tartarus.org/~martin + * + * @static + * @implements {lunr.PipelineFunction} + * @param {lunr.Token} token - The string to stem + * @returns {lunr.Token} + * @see {@link lunr.Pipeline} + * @function + */ +lunr.stemmer = (function(){ + var step2list = { + "ational" : "ate", + "tional" : "tion", + "enci" : "ence", + "anci" : "ance", + "izer" : "ize", + "bli" : "ble", + "alli" : "al", + "entli" : "ent", + "eli" : "e", + "ousli" : "ous", + "ization" : "ize", + "ation" : "ate", + "ator" : "ate", + "alism" : "al", + "iveness" : "ive", + "fulness" : "ful", + "ousness" : "ous", + "aliti" : "al", + "iviti" : "ive", + "biliti" : "ble", + "logi" : "log" + }, + + step3list = { + "icate" : "ic", + "ative" : "", + "alize" : "al", + "iciti" : "ic", + "ical" : "ic", + "ful" : "", + "ness" : "" + }, + + c = "[^aeiou]", // consonant + v = "[aeiouy]", // vowel + C = c + "[^aeiouy]*", // consonant sequence + V = v + "[aeiou]*", // vowel sequence + + mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0 + meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1 + mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1 + s_v = "^(" + C + ")?" + v; // vowel in stem + + var re_mgr0 = new RegExp(mgr0); + var re_mgr1 = new RegExp(mgr1); + var re_meq1 = new RegExp(meq1); + var re_s_v = new RegExp(s_v); + + var re_1a = /^(.+?)(ss|i)es$/; + var re2_1a = /^(.+?)([^s])s$/; + var re_1b = /^(.+?)eed$/; + var re2_1b = /^(.+?)(ed|ing)$/; + var re_1b_2 = /.$/; + var re2_1b_2 = /(at|bl|iz)$/; + var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$"); + var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + + var re_1c = /^(.+?[^aeiou])y$/; + var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + + var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + + var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + var re2_4 = /^(.+?)(s|t)(ion)$/; + + var re_5 = /^(.+?)e$/; + var re_5_1 = /ll$/; + var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + + var porterStemmer = function porterStemmer(w) { + var stem, + suffix, + firstch, + re, + re2, + re3, + re4; + + if (w.length < 3) { return w; } + + firstch = w.substr(0,1); + if (firstch == "y") { + w = firstch.toUpperCase() + w.substr(1); + } + + // Step 1a + re = re_1a + re2 = re2_1a; + + if (re.test(w)) { w = w.replace(re,"$1$2"); } + else if (re2.test(w)) { w = w.replace(re2,"$1$2"); } + + // Step 1b + re = re_1b; + re2 = re2_1b; + if (re.test(w)) { + var fp = re.exec(w); + re = re_mgr0; + if (re.test(fp[1])) { + re = re_1b_2; + w = w.replace(re,""); + } + } else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = re_s_v; + if (re2.test(stem)) { + w = stem; + re2 = re2_1b_2; + re3 = re3_1b_2; + re4 = re4_1b_2; + if (re2.test(w)) { w = w + "e"; } + else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); } + else if (re4.test(w)) { w = w + "e"; } + } + } + + // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say) + re = re_1c; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem + "i"; + } + + // Step 2 + re = re_2; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = re_mgr0; + if (re.test(stem)) { + w = stem + step2list[suffix]; + } + } + + // Step 3 + re = re_3; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = re_mgr0; + if (re.test(stem)) { + w = stem + step3list[suffix]; + } + } + + // Step 4 + re = re_4; + re2 = re2_4; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = re_mgr1; + if (re.test(stem)) { + w = stem; + } + } else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = re_mgr1; + if (re2.test(stem)) { + w = stem; + } + } + + // Step 5 + re = re_5; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = re_mgr1; + re2 = re_meq1; + re3 = re3_5; + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) { + w = stem; + } + } + + re = re_5_1; + re2 = re_mgr1; + if (re.test(w) && re2.test(w)) { + re = re_1b_2; + w = w.replace(re,""); + } + + // and turn initial Y back to y + + if (firstch == "y") { + w = firstch.toLowerCase() + w.substr(1); + } + + return w; + }; + + return function (token) { + return token.update(porterStemmer); + } +})(); + +lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer') +/*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * lunr.generateStopWordFilter builds a stopWordFilter function from the provided + * list of stop words. + * + * The built in lunr.stopWordFilter is built using this generator and can be used + * to generate custom stopWordFilters for applications or non English languages. + * + * @function + * @param {Array} token The token to pass through the filter + * @returns {lunr.PipelineFunction} + * @see lunr.Pipeline + * @see lunr.stopWordFilter + */ +lunr.generateStopWordFilter = function (stopWords) { + var words = stopWords.reduce(function (memo, stopWord) { + memo[stopWord] = stopWord + return memo + }, {}) + + return function (token) { + if (token && words[token.toString()] !== token.toString()) return token + } +} + +/** + * lunr.stopWordFilter is an English language stop word list filter, any words + * contained in the list will not be passed through the filter. + * + * This is intended to be used in the Pipeline. If the token does not pass the + * filter then undefined will be returned. + * + * @function + * @implements {lunr.PipelineFunction} + * @params {lunr.Token} token - A token to check for being a stop word. + * @returns {lunr.Token} + * @see {@link lunr.Pipeline} + */ +lunr.stopWordFilter = lunr.generateStopWordFilter([ + 'a', + 'able', + 'about', + 'across', + 'after', + 'all', + 'almost', + 'also', + 'am', + 'among', + 'an', + 'and', + 'any', + 'are', + 'as', + 'at', + 'be', + 'because', + 'been', + 'but', + 'by', + 'can', + 'cannot', + 'could', + 'dear', + 'did', + 'do', + 'does', + 'either', + 'else', + 'ever', + 'every', + 'for', + 'from', + 'get', + 'got', + 'had', + 'has', + 'have', + 'he', + 'her', + 'hers', + 'him', + 'his', + 'how', + 'however', + 'i', + 'if', + 'in', + 'into', + 'is', + 'it', + 'its', + 'just', + 'least', + 'let', + 'like', + 'likely', + 'may', + 'me', + 'might', + 'most', + 'must', + 'my', + 'neither', + 'no', + 'nor', + 'not', + 'of', + 'off', + 'often', + 'on', + 'only', + 'or', + 'other', + 'our', + 'own', + 'rather', + 'said', + 'say', + 'says', + 'she', + 'should', + 'since', + 'so', + 'some', + 'than', + 'that', + 'the', + 'their', + 'them', + 'then', + 'there', + 'these', + 'they', + 'this', + 'tis', + 'to', + 'too', + 'twas', + 'us', + 'wants', + 'was', + 'we', + 'were', + 'what', + 'when', + 'where', + 'which', + 'while', + 'who', + 'whom', + 'why', + 'will', + 'with', + 'would', + 'yet', + 'you', + 'your' +]) + +lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter') +/*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * lunr.trimmer is a pipeline function for trimming non word + * characters from the beginning and end of tokens before they + * enter the index. + * + * This implementation may not work correctly for non latin + * characters and should either be removed or adapted for use + * with languages with non-latin characters. + * + * @static + * @implements {lunr.PipelineFunction} + * @param {lunr.Token} token The token to pass through the filter + * @returns {lunr.Token} + * @see lunr.Pipeline + */ +lunr.trimmer = function (token) { + return token.update(function (s) { + return s.replace(/^\W+/, '').replace(/\W+$/, '') + }) +} + +lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer') +/*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A token set is used to store the unique list of all tokens + * within an index. Token sets are also used to represent an + * incoming query to the index, this query token set and index + * token set are then intersected to find which tokens to look + * up in the inverted index. + * + * A token set can hold multiple tokens, as in the case of the + * index token set, or it can hold a single token as in the + * case of a simple query token set. + * + * Additionally token sets are used to perform wildcard matching. + * Leading, contained and trailing wildcards are supported, and + * from this edit distance matching can also be provided. + * + * Token sets are implemented as a minimal finite state automata, + * where both common prefixes and suffixes are shared between tokens. + * This helps to reduce the space used for storing the token set. + * + * @constructor + */ +lunr.TokenSet = function () { + this.final = false + this.edges = {} + this.id = lunr.TokenSet._nextId + lunr.TokenSet._nextId += 1 +} + +/** + * Keeps track of the next, auto increment, identifier to assign + * to a new tokenSet. + * + * TokenSets require a unique identifier to be correctly minimised. + * + * @private + */ +lunr.TokenSet._nextId = 1 + +/** + * Creates a TokenSet instance from the given sorted array of words. + * + * @param {String[]} arr - A sorted array of strings to create the set from. + * @returns {lunr.TokenSet} + * @throws Will throw an error if the input array is not sorted. + */ +lunr.TokenSet.fromArray = function (arr) { + var builder = new lunr.TokenSet.Builder + + for (var i = 0, len = arr.length; i < len; i++) { + builder.insert(arr[i]) + } + + builder.finish() + return builder.root +} + +/** + * Creates a token set from a query clause. + * + * @private + * @param {Object} clause - A single clause from lunr.Query. + * @param {string} clause.term - The query clause term. + * @param {number} [clause.editDistance] - The optional edit distance for the term. + * @returns {lunr.TokenSet} + */ +lunr.TokenSet.fromClause = function (clause) { + if ('editDistance' in clause) { + return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance) + } else { + return lunr.TokenSet.fromString(clause.term) + } +} + +/** + * Creates a token set representing a single string with a specified + * edit distance. + * + * Insertions, deletions, substitutions and transpositions are each + * treated as an edit distance of 1. + * + * Increasing the allowed edit distance will have a dramatic impact + * on the performance of both creating and intersecting these TokenSets. + * It is advised to keep the edit distance less than 3. + * + * @param {string} str - The string to create the token set from. + * @param {number} editDistance - The allowed edit distance to match. + * @returns {lunr.Vector} + */ +lunr.TokenSet.fromFuzzyString = function (str, editDistance) { + var root = new lunr.TokenSet + + var stack = [{ + node: root, + editsRemaining: editDistance, + str: str + }] + + while (stack.length) { + var frame = stack.pop() + + // no edit + if (frame.str.length > 0) { + var char = frame.str.charAt(0), + noEditNode + + if (char in frame.node.edges) { + noEditNode = frame.node.edges[char] + } else { + noEditNode = new lunr.TokenSet + frame.node.edges[char] = noEditNode + } + + if (frame.str.length == 1) { + noEditNode.final = true + } + + stack.push({ + node: noEditNode, + editsRemaining: frame.editsRemaining, + str: frame.str.slice(1) + }) + } + + if (frame.editsRemaining == 0) { + continue + } + + // insertion + if ("*" in frame.node.edges) { + var insertionNode = frame.node.edges["*"] + } else { + var insertionNode = new lunr.TokenSet + frame.node.edges["*"] = insertionNode + } + + if (frame.str.length == 0) { + insertionNode.final = true + } + + stack.push({ + node: insertionNode, + editsRemaining: frame.editsRemaining - 1, + str: frame.str + }) + + // deletion + // can only do a deletion if we have enough edits remaining + // and if there are characters left to delete in the string + if (frame.str.length > 1) { + stack.push({ + node: frame.node, + editsRemaining: frame.editsRemaining - 1, + str: frame.str.slice(1) + }) + } + + // deletion + // just removing the last character from the str + if (frame.str.length == 1) { + frame.node.final = true + } + + // substitution + // can only do a substitution if we have enough edits remaining + // and if there are characters left to substitute + if (frame.str.length >= 1) { + if ("*" in frame.node.edges) { + var substitutionNode = frame.node.edges["*"] + } else { + var substitutionNode = new lunr.TokenSet + frame.node.edges["*"] = substitutionNode + } + + if (frame.str.length == 1) { + substitutionNode.final = true + } + + stack.push({ + node: substitutionNode, + editsRemaining: frame.editsRemaining - 1, + str: frame.str.slice(1) + }) + } + + // transposition + // can only do a transposition if there are edits remaining + // and there are enough characters to transpose + if (frame.str.length > 1) { + var charA = frame.str.charAt(0), + charB = frame.str.charAt(1), + transposeNode + + if (charB in frame.node.edges) { + transposeNode = frame.node.edges[charB] + } else { + transposeNode = new lunr.TokenSet + frame.node.edges[charB] = transposeNode + } + + if (frame.str.length == 1) { + transposeNode.final = true + } + + stack.push({ + node: transposeNode, + editsRemaining: frame.editsRemaining - 1, + str: charA + frame.str.slice(2) + }) + } + } + + return root +} + +/** + * Creates a TokenSet from a string. + * + * The string may contain one or more wildcard characters (*) + * that will allow wildcard matching when intersecting with + * another TokenSet. + * + * @param {string} str - The string to create a TokenSet from. + * @returns {lunr.TokenSet} + */ +lunr.TokenSet.fromString = function (str) { + var node = new lunr.TokenSet, + root = node + + /* + * Iterates through all characters within the passed string + * appending a node for each character. + * + * When a wildcard character is found then a self + * referencing edge is introduced to continually match + * any number of any characters. + */ + for (var i = 0, len = str.length; i < len; i++) { + var char = str[i], + final = (i == len - 1) + + if (char == "*") { + node.edges[char] = node + node.final = final + + } else { + var next = new lunr.TokenSet + next.final = final + + node.edges[char] = next + node = next + } + } + + return root +} + +/** + * Converts this TokenSet into an array of strings + * contained within the TokenSet. + * + * This is not intended to be used on a TokenSet that + * contains wildcards, in these cases the results are + * undefined and are likely to cause an infinite loop. + * + * @returns {string[]} + */ +lunr.TokenSet.prototype.toArray = function () { + var words = [] + + var stack = [{ + prefix: "", + node: this + }] + + while (stack.length) { + var frame = stack.pop(), + edges = Object.keys(frame.node.edges), + len = edges.length + + if (frame.node.final) { + /* In Safari, at this point the prefix is sometimes corrupted, see: + * https://github.com/olivernn/lunr.js/issues/279 Calling any + * String.prototype method forces Safari to "cast" this string to what + * it's supposed to be, fixing the bug. */ + frame.prefix.charAt(0) + words.push(frame.prefix) + } + + for (var i = 0; i < len; i++) { + var edge = edges[i] + + stack.push({ + prefix: frame.prefix.concat(edge), + node: frame.node.edges[edge] + }) + } + } + + return words +} + +/** + * Generates a string representation of a TokenSet. + * + * This is intended to allow TokenSets to be used as keys + * in objects, largely to aid the construction and minimisation + * of a TokenSet. As such it is not designed to be a human + * friendly representation of the TokenSet. + * + * @returns {string} + */ +lunr.TokenSet.prototype.toString = function () { + // NOTE: Using Object.keys here as this.edges is very likely + // to enter 'hash-mode' with many keys being added + // + // avoiding a for-in loop here as it leads to the function + // being de-optimised (at least in V8). From some simple + // benchmarks the performance is comparable, but allowing + // V8 to optimize may mean easy performance wins in the future. + + if (this._str) { + return this._str + } + + var str = this.final ? '1' : '0', + labels = Object.keys(this.edges).sort(), + len = labels.length + + for (var i = 0; i < len; i++) { + var label = labels[i], + node = this.edges[label] + + str = str + label + node.id + } + + return str +} + +/** + * Returns a new TokenSet that is the intersection of + * this TokenSet and the passed TokenSet. + * + * This intersection will take into account any wildcards + * contained within the TokenSet. + * + * @param {lunr.TokenSet} b - An other TokenSet to intersect with. + * @returns {lunr.TokenSet} + */ +lunr.TokenSet.prototype.intersect = function (b) { + var output = new lunr.TokenSet, + frame = undefined + + var stack = [{ + qNode: b, + output: output, + node: this + }] + + while (stack.length) { + frame = stack.pop() + + // NOTE: As with the #toString method, we are using + // Object.keys and a for loop instead of a for-in loop + // as both of these objects enter 'hash' mode, causing + // the function to be de-optimised in V8 + var qEdges = Object.keys(frame.qNode.edges), + qLen = qEdges.length, + nEdges = Object.keys(frame.node.edges), + nLen = nEdges.length + + for (var q = 0; q < qLen; q++) { + var qEdge = qEdges[q] + + for (var n = 0; n < nLen; n++) { + var nEdge = nEdges[n] + + if (nEdge == qEdge || qEdge == '*') { + var node = frame.node.edges[nEdge], + qNode = frame.qNode.edges[qEdge], + final = node.final && qNode.final, + next = undefined + + if (nEdge in frame.output.edges) { + // an edge already exists for this character + // no need to create a new node, just set the finality + // bit unless this node is already final + next = frame.output.edges[nEdge] + next.final = next.final || final + + } else { + // no edge exists yet, must create one + // set the finality bit and insert it + // into the output + next = new lunr.TokenSet + next.final = final + frame.output.edges[nEdge] = next + } + + stack.push({ + qNode: qNode, + output: next, + node: node + }) + } + } + } + } + + return output +} +lunr.TokenSet.Builder = function () { + this.previousWord = "" + this.root = new lunr.TokenSet + this.uncheckedNodes = [] + this.minimizedNodes = {} +} + +lunr.TokenSet.Builder.prototype.insert = function (word) { + var node, + commonPrefix = 0 + + if (word < this.previousWord) { + throw new Error ("Out of order word insertion") + } + + for (var i = 0; i < word.length && i < this.previousWord.length; i++) { + if (word[i] != this.previousWord[i]) break + commonPrefix++ + } + + this.minimize(commonPrefix) + + if (this.uncheckedNodes.length == 0) { + node = this.root + } else { + node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child + } + + for (var i = commonPrefix; i < word.length; i++) { + var nextNode = new lunr.TokenSet, + char = word[i] + + node.edges[char] = nextNode + + this.uncheckedNodes.push({ + parent: node, + char: char, + child: nextNode + }) + + node = nextNode + } + + node.final = true + this.previousWord = word +} + +lunr.TokenSet.Builder.prototype.finish = function () { + this.minimize(0) +} + +lunr.TokenSet.Builder.prototype.minimize = function (downTo) { + for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) { + var node = this.uncheckedNodes[i], + childKey = node.child.toString() + + if (childKey in this.minimizedNodes) { + node.parent.edges[node.char] = this.minimizedNodes[childKey] + } else { + // Cache the key for this node since + // we know it can't change anymore + node.child._str = childKey + + this.minimizedNodes[childKey] = node.child + } + + this.uncheckedNodes.pop() + } +} +/*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * An index contains the built index of all documents and provides a query interface + * to the index. + * + * Usually instances of lunr.Index will not be created using this constructor, instead + * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be + * used to load previously built and serialized indexes. + * + * @constructor + * @param {Object} attrs - The attributes of the built search index. + * @param {Object} attrs.invertedIndex - An index of term/field to document reference. + * @param {Object} attrs.fieldVectors - Field vectors + * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens. + * @param {string[]} attrs.fields - The names of indexed document fields. + * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms. + */ +lunr.Index = function (attrs) { + this.invertedIndex = attrs.invertedIndex + this.fieldVectors = attrs.fieldVectors + this.tokenSet = attrs.tokenSet + this.fields = attrs.fields + this.pipeline = attrs.pipeline +} + +/** + * A result contains details of a document matching a search query. + * @typedef {Object} lunr.Index~Result + * @property {string} ref - The reference of the document this result represents. + * @property {number} score - A number between 0 and 1 representing how similar this document is to the query. + * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match. + */ + +/** + * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple + * query language which itself is parsed into an instance of lunr.Query. + * + * For programmatically building queries it is advised to directly use lunr.Query, the query language + * is best used for human entered text rather than program generated text. + * + * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported + * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello' + * or 'world', though those that contain both will rank higher in the results. + * + * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can + * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding + * wildcards will increase the number of documents that will be found but can also have a negative + * impact on query performance, especially with wildcards at the beginning of a term. + * + * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term + * hello in the title field will match this query. Using a field not present in the index will lead + * to an error being thrown. + * + * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term + * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported + * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2. + * Avoid large values for edit distance to improve query performance. + * + * Each term also supports a presence modifier. By default a term's presence in document is optional, however + * this can be changed to either required or prohibited. For a term's presence to be required in a document the + * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and + * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not + * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'. + * + * To escape special characters the backslash character '\' can be used, this allows searches to include + * characters that would normally be considered modifiers, e.g. `foo\~2` will search for a term "foo~2" instead + * of attempting to apply a boost of 2 to the search term "foo". + * + * @typedef {string} lunr.Index~QueryString + * @example Simple single term query + * hello + * @example Multiple term query + * hello world + * @example term scoped to a field + * title:hello + * @example term with a boost of 10 + * hello^10 + * @example term with an edit distance of 2 + * hello~2 + * @example terms with presence modifiers + * -foo +bar baz + */ + +/** + * Performs a search against the index using lunr query syntax. + * + * Results will be returned sorted by their score, the most relevant results + * will be returned first. For details on how the score is calculated, please see + * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}. + * + * For more programmatic querying use lunr.Index#query. + * + * @param {lunr.Index~QueryString} queryString - A string containing a lunr query. + * @throws {lunr.QueryParseError} If the passed query string cannot be parsed. + * @returns {lunr.Index~Result[]} + */ +lunr.Index.prototype.search = function (queryString) { + return this.query(function (query) { + var parser = new lunr.QueryParser(queryString, query) + parser.parse() + }) +} + +/** + * A query builder callback provides a query object to be used to express + * the query to perform on the index. + * + * @callback lunr.Index~queryBuilder + * @param {lunr.Query} query - The query object to build up. + * @this lunr.Query + */ + +/** + * Performs a query against the index using the yielded lunr.Query object. + * + * If performing programmatic queries against the index, this method is preferred + * over lunr.Index#search so as to avoid the additional query parsing overhead. + * + * A query object is yielded to the supplied function which should be used to + * express the query to be run against the index. + * + * Note that although this function takes a callback parameter it is _not_ an + * asynchronous operation, the callback is just yielded a query object to be + * customized. + * + * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query. + * @returns {lunr.Index~Result[]} + */ +lunr.Index.prototype.query = function (fn) { + // for each query clause + // * process terms + // * expand terms from token set + // * find matching documents and metadata + // * get document vectors + // * score documents + + var query = new lunr.Query(this.fields), + matchingFields = Object.create(null), + queryVectors = Object.create(null), + termFieldCache = Object.create(null), + requiredMatches = Object.create(null), + prohibitedMatches = Object.create(null) + + /* + * To support field level boosts a query vector is created per + * field. An empty vector is eagerly created to support negated + * queries. + */ + for (var i = 0; i < this.fields.length; i++) { + queryVectors[this.fields[i]] = new lunr.Vector + } + + fn.call(query, query) + + for (var i = 0; i < query.clauses.length; i++) { + /* + * Unless the pipeline has been disabled for this term, which is + * the case for terms with wildcards, we need to pass the clause + * term through the search pipeline. A pipeline returns an array + * of processed terms. Pipeline functions may expand the passed + * term, which means we may end up performing multiple index lookups + * for a single query term. + */ + var clause = query.clauses[i], + terms = null, + clauseMatches = lunr.Set.empty + + if (clause.usePipeline) { + terms = this.pipeline.runString(clause.term, { + fields: clause.fields + }) + } else { + terms = [clause.term] + } + + for (var m = 0; m < terms.length; m++) { + var term = terms[m] + + /* + * Each term returned from the pipeline needs to use the same query + * clause object, e.g. the same boost and or edit distance. The + * simplest way to do this is to re-use the clause object but mutate + * its term property. + */ + clause.term = term + + /* + * From the term in the clause we create a token set which will then + * be used to intersect the indexes token set to get a list of terms + * to lookup in the inverted index + */ + var termTokenSet = lunr.TokenSet.fromClause(clause), + expandedTerms = this.tokenSet.intersect(termTokenSet).toArray() + + /* + * If a term marked as required does not exist in the tokenSet it is + * impossible for the search to return any matches. We set all the field + * scoped required matches set to empty and stop examining any further + * clauses. + */ + if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) { + for (var k = 0; k < clause.fields.length; k++) { + var field = clause.fields[k] + requiredMatches[field] = lunr.Set.empty + } + + break + } + + for (var j = 0; j < expandedTerms.length; j++) { + /* + * For each term get the posting and termIndex, this is required for + * building the query vector. + */ + var expandedTerm = expandedTerms[j], + posting = this.invertedIndex[expandedTerm], + termIndex = posting._index + + for (var k = 0; k < clause.fields.length; k++) { + /* + * For each field that this query term is scoped by (by default + * all fields are in scope) we need to get all the document refs + * that have this term in that field. + * + * The posting is the entry in the invertedIndex for the matching + * term from above. + */ + var field = clause.fields[k], + fieldPosting = posting[field], + matchingDocumentRefs = Object.keys(fieldPosting), + termField = expandedTerm + "/" + field, + matchingDocumentsSet = new lunr.Set(matchingDocumentRefs) + + /* + * if the presence of this term is required ensure that the matching + * documents are added to the set of required matches for this clause. + * + */ + if (clause.presence == lunr.Query.presence.REQUIRED) { + clauseMatches = clauseMatches.union(matchingDocumentsSet) + + if (requiredMatches[field] === undefined) { + requiredMatches[field] = lunr.Set.complete + } + } + + /* + * if the presence of this term is prohibited ensure that the matching + * documents are added to the set of prohibited matches for this field, + * creating that set if it does not yet exist. + */ + if (clause.presence == lunr.Query.presence.PROHIBITED) { + if (prohibitedMatches[field] === undefined) { + prohibitedMatches[field] = lunr.Set.empty + } + + prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet) + + /* + * Prohibited matches should not be part of the query vector used for + * similarity scoring and no metadata should be extracted so we continue + * to the next field + */ + continue + } + + /* + * The query field vector is populated using the termIndex found for + * the term and a unit value with the appropriate boost applied. + * Using upsert because there could already be an entry in the vector + * for the term we are working with. In that case we just add the scores + * together. + */ + queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b }) + + /** + * If we've already seen this term, field combo then we've already collected + * the matching documents and metadata, no need to go through all that again + */ + if (termFieldCache[termField]) { + continue + } + + for (var l = 0; l < matchingDocumentRefs.length; l++) { + /* + * All metadata for this term/field/document triple + * are then extracted and collected into an instance + * of lunr.MatchData ready to be returned in the query + * results + */ + var matchingDocumentRef = matchingDocumentRefs[l], + matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field), + metadata = fieldPosting[matchingDocumentRef], + fieldMatch + + if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) { + matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata) + } else { + fieldMatch.add(expandedTerm, field, metadata) + } + + } + + termFieldCache[termField] = true + } + } + } + + /** + * If the presence was required we need to update the requiredMatches field sets. + * We do this after all fields for the term have collected their matches because + * the clause terms presence is required in _any_ of the fields not _all_ of the + * fields. + */ + if (clause.presence === lunr.Query.presence.REQUIRED) { + for (var k = 0; k < clause.fields.length; k++) { + var field = clause.fields[k] + requiredMatches[field] = requiredMatches[field].intersect(clauseMatches) + } + } + } + + /** + * Need to combine the field scoped required and prohibited + * matching documents into a global set of required and prohibited + * matches + */ + var allRequiredMatches = lunr.Set.complete, + allProhibitedMatches = lunr.Set.empty + + for (var i = 0; i < this.fields.length; i++) { + var field = this.fields[i] + + if (requiredMatches[field]) { + allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field]) + } + + if (prohibitedMatches[field]) { + allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field]) + } + } + + var matchingFieldRefs = Object.keys(matchingFields), + results = [], + matches = Object.create(null) + + /* + * If the query is negated (contains only prohibited terms) + * we need to get _all_ fieldRefs currently existing in the + * index. This is only done when we know that the query is + * entirely prohibited terms to avoid any cost of getting all + * fieldRefs unnecessarily. + * + * Additionally, blank MatchData must be created to correctly + * populate the results. + */ + if (query.isNegated()) { + matchingFieldRefs = Object.keys(this.fieldVectors) + + for (var i = 0; i < matchingFieldRefs.length; i++) { + var matchingFieldRef = matchingFieldRefs[i] + var fieldRef = lunr.FieldRef.fromString(matchingFieldRef) + matchingFields[matchingFieldRef] = new lunr.MatchData + } + } + + for (var i = 0; i < matchingFieldRefs.length; i++) { + /* + * Currently we have document fields that match the query, but we + * need to return documents. The matchData and scores are combined + * from multiple fields belonging to the same document. + * + * Scores are calculated by field, using the query vectors created + * above, and combined into a final document score using addition. + */ + var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]), + docRef = fieldRef.docRef + + if (!allRequiredMatches.contains(docRef)) { + continue + } + + if (allProhibitedMatches.contains(docRef)) { + continue + } + + var fieldVector = this.fieldVectors[fieldRef], + score = queryVectors[fieldRef.fieldName].similarity(fieldVector), + docMatch + + if ((docMatch = matches[docRef]) !== undefined) { + docMatch.score += score + docMatch.matchData.combine(matchingFields[fieldRef]) + } else { + var match = { + ref: docRef, + score: score, + matchData: matchingFields[fieldRef] + } + matches[docRef] = match + results.push(match) + } + } + + /* + * Sort the results objects by score, highest first. + */ + return results.sort(function (a, b) { + return b.score - a.score + }) +} + +/** + * Prepares the index for JSON serialization. + * + * The schema for this JSON blob will be described in a + * separate JSON schema file. + * + * @returns {Object} + */ +lunr.Index.prototype.toJSON = function () { + var invertedIndex = Object.keys(this.invertedIndex) + .sort() + .map(function (term) { + return [term, this.invertedIndex[term]] + }, this) + + var fieldVectors = Object.keys(this.fieldVectors) + .map(function (ref) { + return [ref, this.fieldVectors[ref].toJSON()] + }, this) + + return { + version: lunr.version, + fields: this.fields, + fieldVectors: fieldVectors, + invertedIndex: invertedIndex, + pipeline: this.pipeline.toJSON() + } +} + +/** + * Loads a previously serialized lunr.Index + * + * @param {Object} serializedIndex - A previously serialized lunr.Index + * @returns {lunr.Index} + */ +lunr.Index.load = function (serializedIndex) { + var attrs = {}, + fieldVectors = {}, + serializedVectors = serializedIndex.fieldVectors, + invertedIndex = Object.create(null), + serializedInvertedIndex = serializedIndex.invertedIndex, + tokenSetBuilder = new lunr.TokenSet.Builder, + pipeline = lunr.Pipeline.load(serializedIndex.pipeline) + + if (serializedIndex.version != lunr.version) { + lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + lunr.version + "' does not match serialized index '" + serializedIndex.version + "'") + } + + for (var i = 0; i < serializedVectors.length; i++) { + var tuple = serializedVectors[i], + ref = tuple[0], + elements = tuple[1] + + fieldVectors[ref] = new lunr.Vector(elements) + } + + for (var i = 0; i < serializedInvertedIndex.length; i++) { + var tuple = serializedInvertedIndex[i], + term = tuple[0], + posting = tuple[1] + + tokenSetBuilder.insert(term) + invertedIndex[term] = posting + } + + tokenSetBuilder.finish() + + attrs.fields = serializedIndex.fields + + attrs.fieldVectors = fieldVectors + attrs.invertedIndex = invertedIndex + attrs.tokenSet = tokenSetBuilder.root + attrs.pipeline = pipeline + + return new lunr.Index(attrs) +} +/*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * lunr.Builder performs indexing on a set of documents and + * returns instances of lunr.Index ready for querying. + * + * All configuration of the index is done via the builder, the + * fields to index, the document reference, the text processing + * pipeline and document scoring parameters are all set on the + * builder before indexing. + * + * @constructor + * @property {string} _ref - Internal reference to the document reference field. + * @property {string[]} _fields - Internal reference to the document fields to index. + * @property {object} invertedIndex - The inverted index maps terms to document fields. + * @property {object} documentTermFrequencies - Keeps track of document term frequencies. + * @property {object} documentLengths - Keeps track of the length of documents added to the index. + * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing. + * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing. + * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index. + * @property {number} documentCount - Keeps track of the total number of documents indexed. + * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75. + * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2. + * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space. + * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index. + */ +lunr.Builder = function () { + this._ref = "id" + this._fields = Object.create(null) + this._documents = Object.create(null) + this.invertedIndex = Object.create(null) + this.fieldTermFrequencies = {} + this.fieldLengths = {} + this.tokenizer = lunr.tokenizer + this.pipeline = new lunr.Pipeline + this.searchPipeline = new lunr.Pipeline + this.documentCount = 0 + this._b = 0.75 + this._k1 = 1.2 + this.termIndex = 0 + this.metadataWhitelist = [] +} + +/** + * Sets the document field used as the document reference. Every document must have this field. + * The type of this field in the document should be a string, if it is not a string it will be + * coerced into a string by calling toString. + * + * The default ref is 'id'. + * + * The ref should _not_ be changed during indexing, it should be set before any documents are + * added to the index. Changing it during indexing can lead to inconsistent results. + * + * @param {string} ref - The name of the reference field in the document. + */ +lunr.Builder.prototype.ref = function (ref) { + this._ref = ref +} + +/** + * A function that is used to extract a field from a document. + * + * Lunr expects a field to be at the top level of a document, if however the field + * is deeply nested within a document an extractor function can be used to extract + * the right field for indexing. + * + * @callback fieldExtractor + * @param {object} doc - The document being added to the index. + * @returns {?(string|object|object[])} obj - The object that will be indexed for this field. + * @example Extracting a nested field + * function (doc) { return doc.nested.field } + */ + +/** + * Adds a field to the list of document fields that will be indexed. Every document being + * indexed should have this field. Null values for this field in indexed documents will + * not cause errors but will limit the chance of that document being retrieved by searches. + * + * All fields should be added before adding documents to the index. Adding fields after + * a document has been indexed will have no effect on already indexed documents. + * + * Fields can be boosted at build time. This allows terms within that field to have more + * importance when ranking search results. Use a field boost to specify that matches within + * one field are more important than other fields. + * + * @param {string} fieldName - The name of a field to index in all documents. + * @param {object} attributes - Optional attributes associated with this field. + * @param {number} [attributes.boost=1] - Boost applied to all terms within this field. + * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document. + * @throws {RangeError} fieldName cannot contain unsupported characters '/' + */ +lunr.Builder.prototype.field = function (fieldName, attributes) { + if (/\//.test(fieldName)) { + throw new RangeError ("Field '" + fieldName + "' contains illegal character '/'") + } + + this._fields[fieldName] = attributes || {} +} + +/** + * A parameter to tune the amount of field length normalisation that is applied when + * calculating relevance scores. A value of 0 will completely disable any normalisation + * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b + * will be clamped to the range 0 - 1. + * + * @param {number} number - The value to set for this tuning parameter. + */ +lunr.Builder.prototype.b = function (number) { + if (number < 0) { + this._b = 0 + } else if (number > 1) { + this._b = 1 + } else { + this._b = number + } +} + +/** + * A parameter that controls the speed at which a rise in term frequency results in term + * frequency saturation. The default value is 1.2. Setting this to a higher value will give + * slower saturation levels, a lower value will result in quicker saturation. + * + * @param {number} number - The value to set for this tuning parameter. + */ +lunr.Builder.prototype.k1 = function (number) { + this._k1 = number +} + +/** + * Adds a document to the index. + * + * Before adding fields to the index the index should have been fully setup, with the document + * ref and all fields to index already having been specified. + * + * The document must have a field name as specified by the ref (by default this is 'id') and + * it should have all fields defined for indexing, though null or undefined values will not + * cause errors. + * + * Entire documents can be boosted at build time. Applying a boost to a document indicates that + * this document should rank higher in search results than other documents. + * + * @param {object} doc - The document to add to the index. + * @param {object} attributes - Optional attributes associated with this document. + * @param {number} [attributes.boost=1] - Boost applied to all terms within this document. + */ +lunr.Builder.prototype.add = function (doc, attributes) { + var docRef = doc[this._ref], + fields = Object.keys(this._fields) + + this._documents[docRef] = attributes || {} + this.documentCount += 1 + + for (var i = 0; i < fields.length; i++) { + var fieldName = fields[i], + extractor = this._fields[fieldName].extractor, + field = extractor ? extractor(doc) : doc[fieldName], + tokens = this.tokenizer(field, { + fields: [fieldName] + }), + terms = this.pipeline.run(tokens), + fieldRef = new lunr.FieldRef (docRef, fieldName), + fieldTerms = Object.create(null) + + this.fieldTermFrequencies[fieldRef] = fieldTerms + this.fieldLengths[fieldRef] = 0 + + // store the length of this field for this document + this.fieldLengths[fieldRef] += terms.length + + // calculate term frequencies for this field + for (var j = 0; j < terms.length; j++) { + var term = terms[j] + + if (fieldTerms[term] == undefined) { + fieldTerms[term] = 0 + } + + fieldTerms[term] += 1 + + // add to inverted index + // create an initial posting if one doesn't exist + if (this.invertedIndex[term] == undefined) { + var posting = Object.create(null) + posting["_index"] = this.termIndex + this.termIndex += 1 + + for (var k = 0; k < fields.length; k++) { + posting[fields[k]] = Object.create(null) + } + + this.invertedIndex[term] = posting + } + + // add an entry for this term/fieldName/docRef to the invertedIndex + if (this.invertedIndex[term][fieldName][docRef] == undefined) { + this.invertedIndex[term][fieldName][docRef] = Object.create(null) + } + + // store all whitelisted metadata about this token in the + // inverted index + for (var l = 0; l < this.metadataWhitelist.length; l++) { + var metadataKey = this.metadataWhitelist[l], + metadata = term.metadata[metadataKey] + + if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) { + this.invertedIndex[term][fieldName][docRef][metadataKey] = [] + } + + this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata) + } + } + + } +} + +/** + * Calculates the average document length for this index + * + * @private + */ +lunr.Builder.prototype.calculateAverageFieldLengths = function () { + + var fieldRefs = Object.keys(this.fieldLengths), + numberOfFields = fieldRefs.length, + accumulator = {}, + documentsWithField = {} + + for (var i = 0; i < numberOfFields; i++) { + var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), + field = fieldRef.fieldName + + documentsWithField[field] || (documentsWithField[field] = 0) + documentsWithField[field] += 1 + + accumulator[field] || (accumulator[field] = 0) + accumulator[field] += this.fieldLengths[fieldRef] + } + + var fields = Object.keys(this._fields) + + for (var i = 0; i < fields.length; i++) { + var fieldName = fields[i] + accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName] + } + + this.averageFieldLength = accumulator +} + +/** + * Builds a vector space model of every document using lunr.Vector + * + * @private + */ +lunr.Builder.prototype.createFieldVectors = function () { + var fieldVectors = {}, + fieldRefs = Object.keys(this.fieldTermFrequencies), + fieldRefsLength = fieldRefs.length, + termIdfCache = Object.create(null) + + for (var i = 0; i < fieldRefsLength; i++) { + var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), + fieldName = fieldRef.fieldName, + fieldLength = this.fieldLengths[fieldRef], + fieldVector = new lunr.Vector, + termFrequencies = this.fieldTermFrequencies[fieldRef], + terms = Object.keys(termFrequencies), + termsLength = terms.length + + + var fieldBoost = this._fields[fieldName].boost || 1, + docBoost = this._documents[fieldRef.docRef].boost || 1 + + for (var j = 0; j < termsLength; j++) { + var term = terms[j], + tf = termFrequencies[term], + termIndex = this.invertedIndex[term]._index, + idf, score, scoreWithPrecision + + if (termIdfCache[term] === undefined) { + idf = lunr.idf(this.invertedIndex[term], this.documentCount) + termIdfCache[term] = idf + } else { + idf = termIdfCache[term] + } + + score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf) + score *= fieldBoost + score *= docBoost + scoreWithPrecision = Math.round(score * 1000) / 1000 + // Converts 1.23456789 to 1.234. + // Reducing the precision so that the vectors take up less + // space when serialised. Doing it now so that they behave + // the same before and after serialisation. Also, this is + // the fastest approach to reducing a number's precision in + // JavaScript. + + fieldVector.insert(termIndex, scoreWithPrecision) + } + + fieldVectors[fieldRef] = fieldVector + } + + this.fieldVectors = fieldVectors +} + +/** + * Creates a token set of all tokens in the index using lunr.TokenSet + * + * @private + */ +lunr.Builder.prototype.createTokenSet = function () { + this.tokenSet = lunr.TokenSet.fromArray( + Object.keys(this.invertedIndex).sort() + ) +} + +/** + * Builds the index, creating an instance of lunr.Index. + * + * This completes the indexing process and should only be called + * once all documents have been added to the index. + * + * @returns {lunr.Index} + */ +lunr.Builder.prototype.build = function () { + this.calculateAverageFieldLengths() + this.createFieldVectors() + this.createTokenSet() + + return new lunr.Index({ + invertedIndex: this.invertedIndex, + fieldVectors: this.fieldVectors, + tokenSet: this.tokenSet, + fields: Object.keys(this._fields), + pipeline: this.searchPipeline + }) +} + +/** + * Applies a plugin to the index builder. + * + * A plugin is a function that is called with the index builder as its context. + * Plugins can be used to customise or extend the behaviour of the index + * in some way. A plugin is just a function, that encapsulated the custom + * behaviour that should be applied when building the index. + * + * The plugin function will be called with the index builder as its argument, additional + * arguments can also be passed when calling use. The function will be called + * with the index builder as its context. + * + * @param {Function} plugin The plugin to apply. + */ +lunr.Builder.prototype.use = function (fn) { + var args = Array.prototype.slice.call(arguments, 1) + args.unshift(this) + fn.apply(this, args) +} +/** + * Contains and collects metadata about a matching document. + * A single instance of lunr.MatchData is returned as part of every + * lunr.Index~Result. + * + * @constructor + * @param {string} term - The term this match data is associated with + * @param {string} field - The field in which the term was found + * @param {object} metadata - The metadata recorded about this term in this field + * @property {object} metadata - A cloned collection of metadata associated with this document. + * @see {@link lunr.Index~Result} + */ +lunr.MatchData = function (term, field, metadata) { + var clonedMetadata = Object.create(null), + metadataKeys = Object.keys(metadata || {}) + + // Cloning the metadata to prevent the original + // being mutated during match data combination. + // Metadata is kept in an array within the inverted + // index so cloning the data can be done with + // Array#slice + for (var i = 0; i < metadataKeys.length; i++) { + var key = metadataKeys[i] + clonedMetadata[key] = metadata[key].slice() + } + + this.metadata = Object.create(null) + + if (term !== undefined) { + this.metadata[term] = Object.create(null) + this.metadata[term][field] = clonedMetadata + } +} + +/** + * An instance of lunr.MatchData will be created for every term that matches a + * document. However only one instance is required in a lunr.Index~Result. This + * method combines metadata from another instance of lunr.MatchData with this + * objects metadata. + * + * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one. + * @see {@link lunr.Index~Result} + */ +lunr.MatchData.prototype.combine = function (otherMatchData) { + var terms = Object.keys(otherMatchData.metadata) + + for (var i = 0; i < terms.length; i++) { + var term = terms[i], + fields = Object.keys(otherMatchData.metadata[term]) + + if (this.metadata[term] == undefined) { + this.metadata[term] = Object.create(null) + } + + for (var j = 0; j < fields.length; j++) { + var field = fields[j], + keys = Object.keys(otherMatchData.metadata[term][field]) + + if (this.metadata[term][field] == undefined) { + this.metadata[term][field] = Object.create(null) + } + + for (var k = 0; k < keys.length; k++) { + var key = keys[k] + + if (this.metadata[term][field][key] == undefined) { + this.metadata[term][field][key] = otherMatchData.metadata[term][field][key] + } else { + this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key]) + } + + } + } + } +} + +/** + * Add metadata for a term/field pair to this instance of match data. + * + * @param {string} term - The term this match data is associated with + * @param {string} field - The field in which the term was found + * @param {object} metadata - The metadata recorded about this term in this field + */ +lunr.MatchData.prototype.add = function (term, field, metadata) { + if (!(term in this.metadata)) { + this.metadata[term] = Object.create(null) + this.metadata[term][field] = metadata + return + } + + if (!(field in this.metadata[term])) { + this.metadata[term][field] = metadata + return + } + + var metadataKeys = Object.keys(metadata) + + for (var i = 0; i < metadataKeys.length; i++) { + var key = metadataKeys[i] + + if (key in this.metadata[term][field]) { + this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key]) + } else { + this.metadata[term][field][key] = metadata[key] + } + } +} +/** + * A lunr.Query provides a programmatic way of defining queries to be performed + * against a {@link lunr.Index}. + * + * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method + * so the query object is pre-initialized with the right index fields. + * + * @constructor + * @property {lunr.Query~Clause[]} clauses - An array of query clauses. + * @property {string[]} allFields - An array of all available fields in a lunr.Index. + */ +lunr.Query = function (allFields) { + this.clauses = [] + this.allFields = allFields +} + +/** + * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause. + * + * This allows wildcards to be added to the beginning and end of a term without having to manually do any string + * concatenation. + * + * The wildcard constants can be bitwise combined to select both leading and trailing wildcards. + * + * @constant + * @default + * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour + * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists + * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists + * @see lunr.Query~Clause + * @see lunr.Query#clause + * @see lunr.Query#term + * @example query term with trailing wildcard + * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING }) + * @example query term with leading and trailing wildcard + * query.term('foo', { + * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING + * }) + */ + +lunr.Query.wildcard = new String ("*") +lunr.Query.wildcard.NONE = 0 +lunr.Query.wildcard.LEADING = 1 +lunr.Query.wildcard.TRAILING = 2 + +/** + * Constants for indicating what kind of presence a term must have in matching documents. + * + * @constant + * @enum {number} + * @see lunr.Query~Clause + * @see lunr.Query#clause + * @see lunr.Query#term + * @example query term with required presence + * query.term('foo', { presence: lunr.Query.presence.REQUIRED }) + */ +lunr.Query.presence = { + /** + * Term's presence in a document is optional, this is the default value. + */ + OPTIONAL: 1, + + /** + * Term's presence in a document is required, documents that do not contain + * this term will not be returned. + */ + REQUIRED: 2, + + /** + * Term's presence in a document is prohibited, documents that do contain + * this term will not be returned. + */ + PROHIBITED: 3 +} + +/** + * A single clause in a {@link lunr.Query} contains a term and details on how to + * match that term against a {@link lunr.Index}. + * + * @typedef {Object} lunr.Query~Clause + * @property {string[]} fields - The fields in an index this clause should be matched against. + * @property {number} [boost=1] - Any boost that should be applied when matching this clause. + * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be. + * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline. + * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended. + * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents. + */ + +/** + * Adds a {@link lunr.Query~Clause} to this query. + * + * Unless the clause contains the fields to be matched all fields will be matched. In addition + * a default boost of 1 is applied to the clause. + * + * @param {lunr.Query~Clause} clause - The clause to add to this query. + * @see lunr.Query~Clause + * @returns {lunr.Query} + */ +lunr.Query.prototype.clause = function (clause) { + if (!('fields' in clause)) { + clause.fields = this.allFields + } + + if (!('boost' in clause)) { + clause.boost = 1 + } + + if (!('usePipeline' in clause)) { + clause.usePipeline = true + } + + if (!('wildcard' in clause)) { + clause.wildcard = lunr.Query.wildcard.NONE + } + + if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) { + clause.term = "*" + clause.term + } + + if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) { + clause.term = "" + clause.term + "*" + } + + if (!('presence' in clause)) { + clause.presence = lunr.Query.presence.OPTIONAL + } + + this.clauses.push(clause) + + return this +} + +/** + * A negated query is one in which every clause has a presence of + * prohibited. These queries require some special processing to return + * the expected results. + * + * @returns boolean + */ +lunr.Query.prototype.isNegated = function () { + for (var i = 0; i < this.clauses.length; i++) { + if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) { + return false + } + } + + return true +} + +/** + * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause} + * to the list of clauses that make up this query. + * + * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion + * to a token or token-like string should be done before calling this method. + * + * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an + * array, each term in the array will share the same options. + * + * @param {object|object[]} term - The term(s) to add to the query. + * @param {object} [options] - Any additional properties to add to the query clause. + * @returns {lunr.Query} + * @see lunr.Query#clause + * @see lunr.Query~Clause + * @example adding a single term to a query + * query.term("foo") + * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard + * query.term("foo", { + * fields: ["title"], + * boost: 10, + * wildcard: lunr.Query.wildcard.TRAILING + * }) + * @example using lunr.tokenizer to convert a string to tokens before using them as terms + * query.term(lunr.tokenizer("foo bar")) + */ +lunr.Query.prototype.term = function (term, options) { + if (Array.isArray(term)) { + term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this) + return this + } + + var clause = options || {} + clause.term = term.toString() + + this.clause(clause) + + return this +} +lunr.QueryParseError = function (message, start, end) { + this.name = "QueryParseError" + this.message = message + this.start = start + this.end = end +} + +lunr.QueryParseError.prototype = new Error +lunr.QueryLexer = function (str) { + this.lexemes = [] + this.str = str + this.length = str.length + this.pos = 0 + this.start = 0 + this.escapeCharPositions = [] +} + +lunr.QueryLexer.prototype.run = function () { + var state = lunr.QueryLexer.lexText + + while (state) { + state = state(this) + } +} + +lunr.QueryLexer.prototype.sliceString = function () { + var subSlices = [], + sliceStart = this.start, + sliceEnd = this.pos + + for (var i = 0; i < this.escapeCharPositions.length; i++) { + sliceEnd = this.escapeCharPositions[i] + subSlices.push(this.str.slice(sliceStart, sliceEnd)) + sliceStart = sliceEnd + 1 + } + + subSlices.push(this.str.slice(sliceStart, this.pos)) + this.escapeCharPositions.length = 0 + + return subSlices.join('') +} + +lunr.QueryLexer.prototype.emit = function (type) { + this.lexemes.push({ + type: type, + str: this.sliceString(), + start: this.start, + end: this.pos + }) + + this.start = this.pos +} + +lunr.QueryLexer.prototype.escapeCharacter = function () { + this.escapeCharPositions.push(this.pos - 1) + this.pos += 1 +} + +lunr.QueryLexer.prototype.next = function () { + if (this.pos >= this.length) { + return lunr.QueryLexer.EOS + } + + var char = this.str.charAt(this.pos) + this.pos += 1 + return char +} + +lunr.QueryLexer.prototype.width = function () { + return this.pos - this.start +} + +lunr.QueryLexer.prototype.ignore = function () { + if (this.start == this.pos) { + this.pos += 1 + } + + this.start = this.pos +} + +lunr.QueryLexer.prototype.backup = function () { + this.pos -= 1 +} + +lunr.QueryLexer.prototype.acceptDigitRun = function () { + var char, charCode + + do { + char = this.next() + charCode = char.charCodeAt(0) + } while (charCode > 47 && charCode < 58) + + if (char != lunr.QueryLexer.EOS) { + this.backup() + } +} + +lunr.QueryLexer.prototype.more = function () { + return this.pos < this.length +} + +lunr.QueryLexer.EOS = 'EOS' +lunr.QueryLexer.FIELD = 'FIELD' +lunr.QueryLexer.TERM = 'TERM' +lunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE' +lunr.QueryLexer.BOOST = 'BOOST' +lunr.QueryLexer.PRESENCE = 'PRESENCE' + +lunr.QueryLexer.lexField = function (lexer) { + lexer.backup() + lexer.emit(lunr.QueryLexer.FIELD) + lexer.ignore() + return lunr.QueryLexer.lexText +} + +lunr.QueryLexer.lexTerm = function (lexer) { + if (lexer.width() > 1) { + lexer.backup() + lexer.emit(lunr.QueryLexer.TERM) + } + + lexer.ignore() + + if (lexer.more()) { + return lunr.QueryLexer.lexText + } +} + +lunr.QueryLexer.lexEditDistance = function (lexer) { + lexer.ignore() + lexer.acceptDigitRun() + lexer.emit(lunr.QueryLexer.EDIT_DISTANCE) + return lunr.QueryLexer.lexText +} + +lunr.QueryLexer.lexBoost = function (lexer) { + lexer.ignore() + lexer.acceptDigitRun() + lexer.emit(lunr.QueryLexer.BOOST) + return lunr.QueryLexer.lexText +} + +lunr.QueryLexer.lexEOS = function (lexer) { + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } +} + +// This matches the separator used when tokenising fields +// within a document. These should match otherwise it is +// not possible to search for some tokens within a document. +// +// It is possible for the user to change the separator on the +// tokenizer so it _might_ clash with any other of the special +// characters already used within the search string, e.g. :. +// +// This means that it is possible to change the separator in +// such a way that makes some words unsearchable using a search +// string. +lunr.QueryLexer.termSeparator = lunr.tokenizer.separator + +lunr.QueryLexer.lexText = function (lexer) { + while (true) { + var char = lexer.next() + + if (char == lunr.QueryLexer.EOS) { + return lunr.QueryLexer.lexEOS + } + + // Escape character is '\' + if (char.charCodeAt(0) == 92) { + lexer.escapeCharacter() + continue + } + + if (char == ":") { + return lunr.QueryLexer.lexField + } + + if (char == "~") { + lexer.backup() + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } + return lunr.QueryLexer.lexEditDistance + } + + if (char == "^") { + lexer.backup() + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } + return lunr.QueryLexer.lexBoost + } + + // "+" indicates term presence is required + // checking for length to ensure that only + // leading "+" are considered + if (char == "+" && lexer.width() === 1) { + lexer.emit(lunr.QueryLexer.PRESENCE) + return lunr.QueryLexer.lexText + } + + // "-" indicates term presence is prohibited + // checking for length to ensure that only + // leading "-" are considered + if (char == "-" && lexer.width() === 1) { + lexer.emit(lunr.QueryLexer.PRESENCE) + return lunr.QueryLexer.lexText + } + + if (char.match(lunr.QueryLexer.termSeparator)) { + return lunr.QueryLexer.lexTerm + } + } +} + +lunr.QueryParser = function (str, query) { + this.lexer = new lunr.QueryLexer (str) + this.query = query + this.currentClause = {} + this.lexemeIdx = 0 +} + +lunr.QueryParser.prototype.parse = function () { + this.lexer.run() + this.lexemes = this.lexer.lexemes + + var state = lunr.QueryParser.parseClause + + while (state) { + state = state(this) + } + + return this.query +} + +lunr.QueryParser.prototype.peekLexeme = function () { + return this.lexemes[this.lexemeIdx] +} + +lunr.QueryParser.prototype.consumeLexeme = function () { + var lexeme = this.peekLexeme() + this.lexemeIdx += 1 + return lexeme +} + +lunr.QueryParser.prototype.nextClause = function () { + var completedClause = this.currentClause + this.query.clause(completedClause) + this.currentClause = {} +} + +lunr.QueryParser.parseClause = function (parser) { + var lexeme = parser.peekLexeme() + + if (lexeme == undefined) { + return + } + + switch (lexeme.type) { + case lunr.QueryLexer.PRESENCE: + return lunr.QueryParser.parsePresence + case lunr.QueryLexer.FIELD: + return lunr.QueryParser.parseField + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expected either a field or a term, found " + lexeme.type + + if (lexeme.str.length >= 1) { + errorMessage += " with value '" + lexeme.str + "'" + } + + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } +} + +lunr.QueryParser.parsePresence = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + switch (lexeme.str) { + case "-": + parser.currentClause.presence = lunr.Query.presence.PROHIBITED + break + case "+": + parser.currentClause.presence = lunr.Query.presence.REQUIRED + break + default: + var errorMessage = "unrecognised presence operator'" + lexeme.str + "'" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + var errorMessage = "expecting term or field, found nothing" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.FIELD: + return lunr.QueryParser.parseField + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expecting term or field, found '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseField = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + if (parser.query.allFields.indexOf(lexeme.str) == -1) { + var possibleFields = parser.query.allFields.map(function (f) { return "'" + f + "'" }).join(', '), + errorMessage = "unrecognised field '" + lexeme.str + "', possible fields: " + possibleFields + + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.fields = [lexeme.str] + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + var errorMessage = "expecting term, found nothing" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expecting term, found '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseTerm = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + parser.currentClause.term = lexeme.str.toLowerCase() + + if (lexeme.str.indexOf("*") != -1) { + parser.currentClause.usePipeline = false + } + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseEditDistance = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + var editDistance = parseInt(lexeme.str, 10) + + if (isNaN(editDistance)) { + var errorMessage = "edit distance must be numeric" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.editDistance = editDistance + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseBoost = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + var boost = parseInt(lexeme.str, 10) + + if (isNaN(boost)) { + var errorMessage = "boost must be numeric" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.boost = boost + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + + /** + * export the module via AMD, CommonJS or as a browser global + * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js + */ + ;(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(factory) + } else if (typeof exports === 'object') { + /** + * Node. Does not work with strict CommonJS, but + * only CommonJS-like enviroments that support module.exports, + * like Node. + */ + module.exports = factory() + } else { + // Browser globals (root is window) + root.lunr = factory() + } + }(this, function () { + /** + * Just return a value to define the module export. + * This example returns an object, but the module + * can return a function as the exported value. + */ + return lunr + })) +})(); diff --git a/assets/js/lunr/lunr.min.js b/assets/js/lunr/lunr.min.js new file mode 100644 index 0000000..cdc94cd --- /dev/null +++ b/assets/js/lunr/lunr.min.js @@ -0,0 +1,6 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */ +!function(){var e=function(t){var r=new e.Builder;return r.pipeline.add(e.trimmer,e.stopWordFilter,e.stemmer),r.searchPipeline.add(e.stemmer),t.call(r,r),r.build()};e.version="2.3.9",e.utils={},e.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),e.utils.asString=function(e){return void 0===e||null===e?"":e.toString()},e.utils.clone=function(e){if(null===e||void 0===e)return e;for(var t=Object.create(null),r=Object.keys(e),i=0;i0){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(); diff --git a/assets/js/main.min.js b/assets/js/main.min.js new file mode 100644 index 0000000..0d05859 --- /dev/null +++ b/assets/js/main.min.js @@ -0,0 +1,7 @@ +/*! + * Minimal Mistakes Jekyll Theme 4.26.2 by Michael Rose + * Copyright 2013-2024 Michael Rose - mademistakes.com | @mmistakes + * Free for personal and commercial use under the MIT license + * https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE + */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(e.document)return t(e);throw new Error("jQuery requires a window with a document")}:t(e)}("undefined"!=typeof window?window:this,function(w,P){"use strict";function y(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item}function m(e){return null!=e&&e===e.window}var t=[],M=Object.getPrototypeOf,s=t.slice,_=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},R=t.push,B=t.indexOf,F={},$=F.toString,W=F.hasOwnProperty,z=W.toString,U=z.call(Object),g={},C=w.document,X={type:!0,src:!0,nonce:!0,noModule:!0};function Q(e,t,n){var r,o,i=(n=n||C).createElement("script");if(i.text=e,t)for(r in X)(o=t[r]||t.getAttribute&&t.getAttribute(r))&&i.setAttribute(r,o);n.head.appendChild(i).parentNode.removeChild(i)}function h(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?F[$.call(e)]||"object":typeof e}var e="3.6.0",T=function(e,t){return new T.fn.init(e,t)};function Y(e){var t=!!e&&"length"in e&&e.length,n=h(e);return!y(e)&&!m(e)&&("array"===n||0===t||"number"==typeof t&&0>10|55296,1023&e|56320))}function M(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}function _(){C()}var e,f,x,i,R,p,B,F,w,l,u,C,T,n,E,h,r,o,m,S="sizzle"+ +new Date,c=P.document,k=0,$=0,W=L(),z=L(),U=L(),g=L(),X=function(e,t){return e===t&&(u=!0),0},Q={}.hasOwnProperty,t=[],Y=t.pop,V=t.push,A=t.push,G=t.slice,y=function(e,t){for(var n=0,r=e.length;n+~]|"+a+")"+a+"*"),re=new RegExp(a+"|>"),oe=new RegExp(J),ie=new RegExp("^"+s+"$"),b={ID:new RegExp("^#("+s+")"),CLASS:new RegExp("^\\.("+s+")"),TAG:new RegExp("^("+s+"|[*])"),ATTR:new RegExp("^"+Z),PSEUDO:new RegExp("^"+J),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+a+"*(even|odd|(([+-]|)(\\d*)n|)"+a+"*(?:([+-]|)"+a+"*(\\d+)|))"+a+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+a+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+a+"*((?:-\\d)?\\d*)"+a+"*\\)|)(?=[^-]|$)","i")},ae=/HTML$/i,se=/^(?:input|select|textarea|button)$/i,le=/^h\d$/i,N=/^[^{]+\{\s*\[native \w/,ue=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ce=/[+~]/,j=new RegExp("\\\\[\\da-fA-F]{1,6}"+a+"?|\\\\([^\\r\\n\\f])","g"),de=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,fe=ye(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{A.apply(t=G.call(c.childNodes),c.childNodes),t[c.childNodes.length].nodeType}catch(e){A={apply:t.length?function(e,t){V.apply(e,G.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function I(t,e,n,r){var o,i,a,s,l,u,c=e&&e.ownerDocument,d=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==d&&9!==d&&11!==d)return n;if(!r&&(C(e),e=e||T,E)){if(11!==d&&(s=ue.exec(t)))if(o=s[1]){if(9===d){if(!(u=e.getElementById(o)))return n;if(u.id===o)return n.push(u),n}else if(c&&(u=c.getElementById(o))&&m(e,u)&&u.id===o)return n.push(u),n}else{if(s[2])return A.apply(n,e.getElementsByTagName(t)),n;if((o=s[3])&&f.getElementsByClassName&&e.getElementsByClassName)return A.apply(n,e.getElementsByClassName(o)),n}if(f.qsa&&!g[t+" "]&&(!h||!h.test(t))&&(1!==d||"object"!==e.nodeName.toLowerCase())){if(u=t,c=e,1===d&&(re.test(t)||ne.test(t))){for((c=ce.test(t)&&ge(e.parentNode)||e)===e&&f.scope||((a=e.getAttribute("id"))?a=a.replace(de,M):e.setAttribute("id",a=S)),i=(l=p(t)).length;i--;)l[i]=(a?"#"+a:":scope")+" "+H(l[i]);u=l.join(",")}try{return A.apply(n,c.querySelectorAll(u)),n}catch(e){g(t,!0)}finally{a===S&&e.removeAttribute("id")}}}return F(t.replace(v,"$1"),e,n,r)}function L(){var n=[];function r(e,t){return n.push(e+" ")>x.cacheLength&&delete r[n.shift()],r[e+" "]=t}return r}function D(e){return e[S]=!0,e}function O(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t)}}function pe(e,t){for(var n=e.split("|"),r=n.length;r--;)x.attrHandle[n[r]]=t}function he(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function me(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&fe(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function q(a){return D(function(i){return i=+i,D(function(e,t){for(var n,r=a([],e.length,i),o=r.length;o--;)e[n=r[o]]&&(e[n]=!(t[n]=e[n]))})})}function ge(e){return e&&void 0!==e.getElementsByTagName&&e}for(e in f=I.support={},R=I.isXML=function(e){var t=e&&e.namespaceURI,e=e&&(e.ownerDocument||e).documentElement;return!ae.test(t||e&&e.nodeName||"HTML")},C=I.setDocument=function(e){var e=e?e.ownerDocument||e:c;return e!=T&&9===e.nodeType&&e.documentElement&&(n=(T=e).documentElement,E=!R(T),c!=T&&(e=T.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",_,!1):e.attachEvent&&e.attachEvent("onunload",_)),f.scope=O(function(e){return n.appendChild(e).appendChild(T.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),f.attributes=O(function(e){return e.className="i",!e.getAttribute("className")}),f.getElementsByTagName=O(function(e){return e.appendChild(T.createComment("")),!e.getElementsByTagName("*").length}),f.getElementsByClassName=N.test(T.getElementsByClassName),f.getById=O(function(e){return n.appendChild(e).id=S,!T.getElementsByName||!T.getElementsByName(S).length}),f.getById?(x.filter.ID=function(e){var t=e.replace(j,d);return function(e){return e.getAttribute("id")===t}},x.find.ID=function(e,t){if(void 0!==t.getElementById&&E)return(t=t.getElementById(e))?[t]:[]}):(x.filter.ID=function(e){var t=e.replace(j,d);return function(e){e=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return e&&e.value===t}},x.find.ID=function(e,t){if(void 0!==t.getElementById&&E){var n,r,o,i=t.getElementById(e);if(i){if((n=i.getAttributeNode("id"))&&n.value===e)return[i];for(o=t.getElementsByName(e),r=0;i=o[r++];)if((n=i.getAttributeNode("id"))&&n.value===e)return[i]}return[]}}),x.find.TAG=f.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):f.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if("*"!==e)return i;for(;n=i[o++];)1===n.nodeType&&r.push(n);return r},x.find.CLASS=f.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&E)return t.getElementsByClassName(e)},r=[],h=[],(f.qsa=N.test(T.querySelectorAll))&&(O(function(e){var t;n.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&h.push("[*^$]="+a+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||h.push("\\["+a+"*(?:value|"+K+")"),e.querySelectorAll("[id~="+S+"-]").length||h.push("~="),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||h.push("\\["+a+"*name"+a+"*="+a+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||h.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||h.push(".#.+[+~]"),e.querySelectorAll("\\\f"),h.push("[\\r\\n\\f]")}),O(function(e){e.innerHTML="";var t=T.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&h.push("name"+a+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&h.push(":enabled",":disabled"),n.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(f.matchesSelector=N.test(o=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.oMatchesSelector||n.msMatchesSelector))&&O(function(e){f.disconnectedMatch=o.call(e,"*"),o.call(e,"[s!='']:x"),r.push("!=",J)}),h=h.length&&new RegExp(h.join("|")),r=r.length&&new RegExp(r.join("|")),e=N.test(n.compareDocumentPosition),m=e||N.test(n.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,t=t&&t.parentNode;return e===t||!(!t||1!==t.nodeType||!(n.contains?n.contains(t):e.compareDocumentPosition&&16&e.compareDocumentPosition(t)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},X=e?function(e,t){var n;return e===t?(u=!0,0):(n=!e.compareDocumentPosition-!t.compareDocumentPosition)||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!f.sortDetached&&t.compareDocumentPosition(e)===n?e==T||e.ownerDocument==c&&m(c,e)?-1:t==T||t.ownerDocument==c&&m(c,t)?1:l?y(l,e)-y(l,t):0:4&n?-1:1)}:function(e,t){if(e===t)return u=!0,0;var n,r=0,o=e.parentNode,i=t.parentNode,a=[e],s=[t];if(!o||!i)return e==T?-1:t==T?1:o?-1:i?1:l?y(l,e)-y(l,t):0;if(o===i)return he(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?he(a[r],s[r]):a[r]==c?-1:s[r]==c?1:0}),T},I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(C(e),f.matchesSelector&&E&&!g[t+" "]&&(!r||!r.test(t))&&(!h||!h.test(t)))try{var n=o.call(e,t);if(n||f.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){g(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(j,d),e[3]=(e[3]||e[4]||e[5]||"").replace(j,d),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return b.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&oe.test(n)&&(t=(t=p(n,!0))&&n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(j,d).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=W[e+" "];return t||(t=new RegExp("(^|"+a+")"+e+"("+a+"|$)"))&&W(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(t,n,r){return function(e){e=I.attr(e,t);return null==e?"!="===n:!n||(e+="","="===n?e===r:"!="===n?e!==r:"^="===n?r&&0===e.indexOf(r):"*="===n?r&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function Z(e,n,r){return y(n)?T.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?T.grep(e,function(e){return e===n!==r}):"string"!=typeof n?T.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/,te=((T.fn.init=function(e,t,n){if(e){if(n=n||J,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):y(e)?void 0!==n.ready?n.ready(e):e(T):T.makeArray(e,this);if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:ee.exec(e))||!r[1]&&t)return(!t||t.jquery?t||n:this.constructor(t)).find(e);if(r[1]){if(t=t instanceof T?t[0]:t,T.merge(this,T.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),K.test(r[1])&&T.isPlainObject(t))for(var r in t)y(this[r])?this[r](t[r]):this.attr(r,t[r])}else(n=C.getElementById(r[2]))&&(this[0]=n,this.length=1)}return this}).prototype=T.fn,J=T(C),/^(?:parents|prev(?:Until|All))/),ne={children:!0,contents:!0,next:!0,prev:!0};function re(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}T.fn.extend({has:function(e){var t=T(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Te=/^$|^module$|\/(?:java|ecma)script/i,N=(D=C.createDocumentFragment().appendChild(C.createElement("div")),(a=C.createElement("input")).setAttribute("type","radio"),a.setAttribute("checked","checked"),a.setAttribute("name","t"),D.appendChild(a),g.checkClone=D.cloneNode(!0).cloneNode(!0).lastChild.checked,D.innerHTML="",g.noCloneChecked=!!D.cloneNode(!0).lastChild.defaultValue,D.innerHTML="",g.option=!!D.lastChild,{thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]});function j(e,t){var n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&l(e,t)?T.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var Se=/<|&#?\w+;/;function ke(e,t,n,r,o){for(var i,a,s,l,u,c=t.createDocumentFragment(),d=[],f=0,p=e.length;f\s*$/g;function qe(e,t){return l(e,"table")&&l(11!==t.nodeType?t:t.firstChild,"tr")&&T(e).children("tbody")[0]||e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Pe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,o,i;if(1===t.nodeType){if(x.hasData(e)&&(i=x.get(e).events))for(o in x.remove(t,"handle events"),i)for(n=0,r=i[o].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",o=function(e){r.remove(),o=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){o&&o()}}}),[]),Vt=/(=)\?(?=&|$)|\?\?/,Gt=(T.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Yt.pop()||T.expando+"_"+At.guid++;return this[e]=!0,e}}),T.ajaxPrefilter("json jsonp",function(e,t,n){var r,o,i,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=y(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Nt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return i||T.error(r+" was not called"),i[0]},e.dataTypes[0]="json",o=w[r],w[r]=function(){i=arguments},n.always(function(){void 0===o?T(w).removeProp(r):w[r]=o,e[r]&&(e.jsonpCallback=t.jsonpCallback,Yt.push(r)),i&&y(o)&&o(i[0]),i=o=void 0}),"script"}),g.createHTMLDocument=((e=C.implementation.createHTMLDocument("").body).innerHTML="
",2===e.childNodes.length),T.parseHTML=function(e,t,n){var r;return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(g.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),r=!n&&[],(n=K.exec(e))?[t.createElement(n[1])]:(n=ke([e],t,r),r&&r.length&&T(r).remove(),T.merge([],n.childNodes)))},T.fn.load=function(e,t,n){var r,o,i,a=this,s=e.indexOf(" ");return-1").append(T.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,i||[e.responseText,t,e])})}),this},T.expr.pseudos.animated=function(t){return T.grep(T.timers,function(e){return t===e.elem}).length},T.offset={setOffset:function(e,t,n){var r,o,i,a,s=T.css(e,"position"),l=T(e),u={};"static"===s&&(e.style.position="relative"),i=l.offset(),r=T.css(e,"top"),a=T.css(e,"left"),s=("absolute"===s||"fixed"===s)&&-1<(r+a).indexOf("auto")?(o=(s=l.position()).top,s.left):(o=parseFloat(r)||0,parseFloat(a)||0),null!=(t=y(t)?t.call(e,n,T.extend({},i)):t).top&&(u.top=t.top-i.top+o),null!=t.left&&(u.left=t.left-i.left+s),"using"in t?t.using.call(e,u):l.css(u)}},T.fn.extend({offset:function(t){var e,n;return arguments.length?void 0===t?this:this.each(function(e){T.offset.setOffset(this,t,e)}):(n=this[0])?n.getClientRects().length?(e=n.getBoundingClientRect(),n=n.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],o={top:0,left:0};if("fixed"===T.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===T.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((o=T(e).offset()).top+=T.css(e,"borderTopWidth",!0),o.left+=T.css(e,"borderLeftWidth",!0))}return{top:t.top-o.top-T.css(r,"marginTop",!0),left:t.left-o.left-T.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===T.css(e,"position");)e=e.offsetParent;return e||S})}}),T.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,o){var i="pageYOffset"===o;T.fn[t]=function(e){return d(this,function(e,t,n){var r;if(m(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[o]:e[t];r?r.scrollTo(i?r.pageXOffset:n,i?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),T.each(["top","left"],function(e,n){T.cssHooks[n]=Je(g.pixelPosition,function(e,t){if(t)return t=Ze(e,n),Ye.test(t)?T(e).position()[n]+"px":t})}),T.each({Height:"height",Width:"width"},function(a,s){T.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,i){T.fn[i]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),o=r||(!0===e||!0===t?"margin":"border");return d(this,function(e,t,n){var r;return m(e)?0===i.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?T.css(e,t,o):T.style(e,t,n,o)},s,n?e:void 0,n)}})}),T.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){T.fn[t]=function(e){return this.on(t,e)}}),T.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),T.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){T.fn[n]=function(e,t){return 0=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)}function f(e,t){var n;e&&(n=e.nav.closest("li"))&&(n.classList.remove(t.navClass),e.content.classList.remove(t.contentClass),o(n,t),h("gumshoeDeactivate",n,{link:e.nav,content:e.content,settings:t}))}var p={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},h=function(e,t,n){n.settings.events&&(e=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:n}),t.dispatchEvent(e))},r=function(e){var t=0;if(e.offsetParent)for(;e;)t+=e.offsetTop,e=e.offsetParent;return 0<=t?t:0},m=function(e,t,n){e=e.getBoundingClientRect(),t="function"==typeof(t=t).offset?parseFloat(t.offset()):parseFloat(t.offset);return n?parseInt(e.bottom,10)<(c.innerHeight||document.documentElement.clientHeight):parseInt(e.top,10)<=t},g=function(e,t){return!(!n()||!m(e.content,t,!0))},o=function(e,t){t.nested&&(e=e.parentNode.closest("li"))&&(e.classList.remove(t.nestedClass),o(e,t))},v=function(e,t){t.nested&&(e=e.parentNode.closest("li"))&&(e.classList.add(t.nestedClass),v(e,t))};return function(e,t){function n(e){s&&c.cancelAnimationFrame(s),s=c.requestAnimationFrame(u.detect)}function r(e){s&&c.cancelAnimationFrame(s),s=c.requestAnimationFrame(function(){d(i),u.detect()})}var o,i,a,s,l,u={setup:function(){o=document.querySelectorAll(e),i=[],Array.prototype.forEach.call(o,function(e){var t=document.getElementById(decodeURIComponent(e.hash.substr(1)));t&&i.push({nav:e,content:t})}),d(i)}};u.detect=function(){var e,t,n,r=function(e,t){var n=e[e.length-1];if(g(n,t))return n;for(var r=e.length-1;0<=r;r--)if(m(e[r].content,t))return e[r]}(i,l);r?a&&r.content===a.content||(f(a,l),t=l,(e=r)&&(n=e.nav.closest("li"))&&(n.classList.add(t.navClass),e.content.classList.add(t.contentClass),v(n,t),h("gumshoeActivate",n,{link:e.nav,content:e.content,settings:t})),a=r):a&&(f(a,l),a=null)},u.destroy=function(){a&&f(a,l),c.removeEventListener("scroll",n,!1),l.reflow&&c.removeEventListener("resize",r,!1),l=s=a=o=i=null};return l=function(){var n={};return Array.prototype.forEach.call(arguments,function(e){for(var t in e){if(!e.hasOwnProperty(t))return;n[t]=e[t]}}),n}(p,t||{}),u.setup(),u.detect(),c.addEventListener("scroll",n,!1),l.reflow&&c.addEventListener("resize",r,!1),u}}),function(e,c){var r,t=e.jQuery||e.Cowboy||(e.Cowboy={});t.throttle=r=function(o,i,a,s){var l,u=0;function e(){var e=this,t=+new Date-u,n=arguments;function r(){u=+new Date,a.apply(e,n)}s&&!l&&r(),l&&clearTimeout(l),s===c&&ox

',t.appendChild(n.childNodes[1])),e&&i.extend(o,e),this.each(function(){var e=['iframe[src*="player.vimeo.com"]','iframe[src*="youtube.com"]','iframe[src*="youtube-nocookie.com"]','iframe[src*="kickstarter.com"][src*="video.html"]',"object","embed"],r=(o.customSelector&&e.push(o.customSelector),".fitvidsignore"),e=(o.ignore&&(r=r+", "+o.ignore),i(this).find(e.join(",")));(e=(e=e.not("object object")).not(r)).each(function(e){var t,n=i(this);0').parent(".fluid-width-video-wrapper").css("padding-top",100*t+"%"),n.removeAttr("height").removeAttr("width"))})})}}(window.jQuery||window.Zepto),$(function(){var n,r,e,o,t=$("nav.greedy-nav .greedy-nav__toggle"),i=$("nav.greedy-nav .visible-links"),a=$("nav.greedy-nav .hidden-links"),s=$("nav.greedy-nav"),l=$("nav.greedy-nav .site-logo"),u=$("nav.greedy-nav .site-logo img"),c=$("nav.greedy-nav .site-title"),d=$("nav.greedy-nav button.search__toggle");function f(){function t(e,t){r+=t,n+=1,o.push(r)}r=n=0,e=1e3,o=[],i.children().outerWidth(t),a.children().each(function(){var e;(e=(e=$(this)).clone()).css("visibility","hidden"),i.append(e),t(0,e.outerWidth()),e.remove()})}f();var p,h,m,g,v=$(window).width(),y=v<768?0:v<1024?1:v<1280?2:3;function b(){var e=(v=$(window).width())<768?0:v<1024?1:v<1280?2:3;e!==y&&f(),y=e,h=i.children().length,p=s.innerWidth()-(0!==l.length?l.outerWidth(!0):0)-c.outerWidth(!0)-(0!==d.length?d.outerWidth(!0):0)-(h!==o.length?t.outerWidth(!0):0),m=o[h-1],po[h]&&(a.children().first().appendTo(i),h+=1,b()),t.attr("count",n-h),h===n?t.addClass("hidden"):t.removeClass("hidden")}$(window).resize(function(){b()}),t.on("click",function(){a.toggleClass("hidden"),$(this).toggleClass("close"),clearTimeout(g)}),a.on("mouseleave",function(){g=setTimeout(function(){a.addClass("hidden"),$(".greedy-nav__toggle").removeClass("close")},e)}).on("mouseenter",function(){clearTimeout(g)}),0===u.length||u[0].complete||0!==u[0].naturalWidth?b():u.one("load error",b)}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?e(require("jquery")):e(window.jQuery||window.Zepto)}(function(u){function e(){}function c(e,t){h.ev.on("mfp"+e+T,t)}function d(e,t,n,r){var o=document.createElement("div");return o.className="mfp-"+e,n&&(o.innerHTML=n),r?t&&t.appendChild(o):(o=u(o),t&&o.appendTo(t)),o}function f(e,t){h.ev.triggerHandler("mfp"+e,t),h.st.callbacks&&(e=e.charAt(0).toLowerCase()+e.slice(1),h.st.callbacks[e])&&h.st.callbacks[e].apply(h,u.isArray(t)?t:[t])}function p(e){return e===n&&h.currTemplate.closeBtn||(h.currTemplate.closeBtn=u(h.st.closeMarkup.replace("%title%",h.st.tClose)),n=e),h.currTemplate.closeBtn}function i(){u.magnificPopup.instance||((h=new e).init(),u.magnificPopup.instance=h)}function a(){y&&(v.after(y.addClass(l)).detach(),y=null)}function o(){b&&u(document.body).removeClass(b)}function t(){o(),h.req&&h.req.abort()}var h,r,m,s,g,n,l,v,y,b,x="Close",P="BeforeClose",w="MarkupParse",C="Open",T=".mfp",E="mfp-ready",M="mfp-removing",S="mfp-prevent-close",k=!!window.jQuery,A=u(window),N=(u.magnificPopup={instance:null,proto:e.prototype={constructor:e,init:function(){var e=navigator.appVersion;h.isLowIE=h.isIE8=document.all&&!document.addEventListener,h.isAndroid=/android/gi.test(e),h.isIOS=/iphone|ipad|ipod/gi.test(e),h.supportsTransition=function(){var e=document.createElement("p").style,t=["ms","O","Moz","Webkit"];if(void 0!==e.transition)return!0;for(;t.length;)if(t.pop()+"Transition"in e)return!0;return!1}(),h.probablyMobile=h.isAndroid||h.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),m=u(document),h.popupsCache={}},open:function(e){if(!1===e.isObj){h.items=e.items.toArray(),h.index=0;for(var t,n=e.items,r=0;r(e||A.height())},_setFocus:function(){(h.st.focus?h.content.find(h.st.focus).eq(0):h.wrap).focus()},_onFocusIn:function(e){if(e.target!==h.wrap[0]&&!u.contains(h.wrap[0],e.target))return h._setFocus(),!1},_parseMarkup:function(o,e,t){var i;t.data&&(e=u.extend(t.data,e)),f(w,[o,e,t]),u.each(e,function(e,t){if(void 0===t||!1===t)return!0;var n,r;1<(i=e.split("_")).length?0<(n=o.find(T+"-"+i[0])).length&&("replaceWith"===(r=i[1])?n[0]!==t[0]&&n.replaceWith(t):"img"===r?n.is("img")?n.attr("src",t):n.replaceWith(u("").attr("src",t).attr("class",n.attr("class"))):n.attr(i[1],t)):o.find(T+"-"+e).html(t)})},_getScrollbarSize:function(){var e;return void 0===h.scrollbarSize&&((e=document.createElement("div")).style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(e),h.scrollbarSize=e.offsetWidth-e.clientWidth,document.body.removeChild(e)),h.scrollbarSize}},modules:[],open:function(e,t){return i(),(e=e?u.extend(!0,{},e):{}).isObj=!0,e.index=t||0,this.instance.open(e)},close:function(){return u.magnificPopup.instance&&u.magnificPopup.instance.close()},registerModule:function(e,t){t.options&&(u.magnificPopup.defaults[e]=t.options),u.extend(this.proto,t.proto),this.modules.push(e)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'',tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}},u.fn.magnificPopup=function(e){i();var t,n,r,o=u(this);return"string"==typeof e?"open"===e?(t=k?o.data("magnificPopup"):o[0].magnificPopup,n=parseInt(arguments[1],10)||0,r=t.items?t.items[n]:(r=o,(r=t.delegate?r.find(t.delegate):r).eq(n)),h._openClick({mfpEl:r},o,t)):h.isOpen&&h[e].apply(h,Array.prototype.slice.call(arguments,1)):(e=u.extend(!0,{},e),k?o.data("magnificPopup",e):o[0].magnificPopup=e,h.addGroup(o,e)),o},"inline"),j=(u.magnificPopup.registerModule(N,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){h.types.push(N),c(x+"."+N,function(){a()})},getInline:function(e,t){var n,r,o;return a(),e.src?(n=h.st.inline,(r=u(e.src)).length?((o=r[0].parentNode)&&o.tagName&&(v||(l=n.hiddenClass,v=d(l),l="mfp-"+l),y=r.after(v).detach().removeClass(l)),h.updateStatus("ready")):(h.updateStatus("error",n.tNotFound),r=u("
")),e.inlineElement=r):(h.updateStatus("ready"),h._parseMarkup(t,{},e),t)}}}),"ajax");u.magnificPopup.registerModule(j,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'The content could not be loaded.'},proto:{initAjax:function(){h.types.push(j),b=h.st.ajax.cursor,c(x+"."+j,t),c("BeforeChange."+j,t)},getAjax:function(r){b&&u(document.body).addClass(b),h.updateStatus("loading");var e=u.extend({url:r.src,success:function(e,t,n){e={data:e,xhr:n};f("ParseAjax",e),h.appendContent(u(e.data),j),r.finished=!0,o(),h._setFocus(),setTimeout(function(){h.wrap.addClass(E)},16),h.updateStatus("ready"),f("AjaxContentAdded")},error:function(){o(),r.finished=r.loadError=!0,h.updateStatus("error",h.st.ajax.tError.replace("%url%",r.src))}},h.st.ajax.settings);return h.req=u.ajax(e),""}}});var I;u.magnificPopup.registerModule("image",{options:{markup:'
',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'The image could not be loaded.'},proto:{initImage:function(){var e=h.st.image,t=".image";h.types.push("image"),c(C+t,function(){"image"===h.currItem.type&&e.cursor&&u(document.body).addClass(e.cursor)}),c(x+t,function(){e.cursor&&u(document.body).removeClass(e.cursor),A.off("resize"+T)}),c("Resize"+t,h.resizeImage),h.isLowIE&&c("AfterChange",h.resizeImage)},resizeImage:function(){var e,t=h.currItem;t&&t.img&&h.st.image.verticalFit&&(e=0,h.isLowIE&&(e=parseInt(t.img.css("padding-top"),10)+parseInt(t.img.css("padding-bottom"),10)),t.img.css("max-height",h.wH-e))},_onImageHasSize:function(e){e.img&&(e.hasSize=!0,I&&clearInterval(I),e.isCheckingImgSize=!1,f("ImageHasSize",e),e.imgHidden)&&(h.content&&h.content.removeClass("mfp-loading"),e.imgHidden=!1)},findImageSize:function(t){function n(e){I&&clearInterval(I),I=setInterval(function(){0
',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){h.types.push(q),c("BeforeChange",function(e,t,n){t!==n&&(t===q?L():n===q&&L(!0))}),c(x+"."+q,function(){L()})},getIframe:function(e,t){var n=e.src,r=h.st.iframe,o=(u.each(r.patterns,function(){if(-1',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var i=h.st.gallery,e=".mfp-gallery";if(h.direction=!0,!i||!i.enabled)return!1;g+=" mfp-gallery",c(C+e,function(){i.navigateByImgClick&&h.wrap.on("click"+e,".mfp-img",function(){if(1=h.index,h.index=e,h.updateItemHTML()},preloadNearbyImages:function(){for(var e=h.st.gallery.preload,t=Math.min(e[0],h.items.length),n=Math.min(e[1],h.items.length),r=1;r<=(h.direction?n:t);r++)h._preloadItem(h.index+r);for(r=1;r<=(h.direction?t:n);r++)h._preloadItem(h.index-r)},_preloadItem:function(e){var t;e=D(e),h.items[e].preloaded||((t=h.items[e]).parsed||(t=h.parseEl(e)),f("LazyLoad",t),"image"===t.type&&(t.img=u('').on("load.mfploader",function(){t.hasSize=!0}).on("error.mfploader",function(){t.hasSize=!0,t.loadError=!0,f("LazyLoadError",t)}).attr("src",t.src)),t.preloaded=!0)}}}),"retina");u.magnificPopup.registerModule(H,{options:{replaceSrc:function(e){return e.src.replace(/\.\w+$/,function(e){return"@2x"+e})},ratio:1},proto:{initRetina:function(){var n,r;1t.durationMax?t.durationMax:t.durationMin&&e=l)return x.cancelScroll(!0),e=t,n=g,0===(t=r)&&document.body.focus(),n||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),w.scrollTo(0,e)),T("scrollStop",m,r,o),!(b=d=null)},h=function(e){var t,n,r;u+=e-(d=d||e),f=i+s*(n=1<(f=0===c?0:u/c)?1:f,"easeInQuad"===(t=m).easing&&(r=n*n),"easeOutQuad"===t.easing&&(r=n*(2-n)),"easeInOutQuad"===t.easing&&(r=n<.5?2*n*n:(4-2*n)*n-1),"easeInCubic"===t.easing&&(r=n*n*n),"easeOutCubic"===t.easing&&(r=--n*n*n+1),"easeInOutCubic"===t.easing&&(r=n<.5?4*n*n*n:(n-1)*(2*n-2)*(2*n-2)+1),"easeInQuart"===t.easing&&(r=n*n*n*n),"easeOutQuart"===t.easing&&(r=1- --n*n*n*n),"easeInOutQuart"===t.easing&&(r=n<.5?8*n*n*n*n:1-8*--n*n*n*n),"easeInQuint"===t.easing&&(r=n*n*n*n*n),"easeOutQuint"===t.easing&&(r=1+--n*n*n*n*n),"easeInOutQuint"===t.easing&&(r=n<.5?16*n*n*n*n*n:1+16*--n*n*n*n*n),(r=t.customEasing?t.customEasing(n):r)||n),w.scrollTo(0,Math.floor(f)),p(f,a)||(b=w.requestAnimationFrame(h),d=e)},0===w.pageYOffset&&w.scrollTo(0,0),e=r,t=m,g||history.pushState&&t.updateURL&&history.pushState({smoothScroll:JSON.stringify(t),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id),"matchMedia"in w&&w.matchMedia("(prefers-reduced-motion)").matches?w.scrollTo(0,Math.floor(a)):(T("scrollStart",m,r,o),x.cancelScroll(!0),w.requestAnimationFrame(h)))},x.destroy=function(){v&&(document.removeEventListener("click",t,!1),w.removeEventListener("popstate",n,!1),x.cancelScroll(),b=y=o=v=null)};if("querySelector"in document&&"addEventListener"in w&&"requestAnimationFrame"in w&&"closest"in w.Element.prototype)return x.destroy(),v=C(E,e||{}),y=v.header?document.querySelector(v.header):null,document.addEventListener("click",t,!1),v.updateURL&&v.popstate&&w.addEventListener("popstate",n,!1),x;throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs."}}),$(document).ready(function(){$("#main").fitVids(),$(".author__urls-wrapper button").on("click",function(){$(".author__urls").toggleClass("is--visible"),$(".author__urls-wrapper").find("button").toggleClass("open")}),$(document).keyup(function(e){27===e.keyCode&&$(".initial-content").hasClass("is--hidden")&&($(".search-content").toggleClass("is--visible"),$(".initial-content").toggleClass("is--hidden"))}),$(".search__toggle").on("click",function(){$(".search-content").toggleClass("is--visible"),$(".initial-content").toggleClass("is--hidden"),setTimeout(function(){$(".search-content input").focus()},400)});function o(e){for(var t=e.target,n=t.nextElementSibling;n&&"code"!==n.tagName.toLowerCase();)n=n.nextElementSibling;if(n)return e=function(e){if(document.queryCommandEnabled("copy")&&navigator.clipboard)return navigator.clipboard.writeText(e).then(()=>!0,()=>console.error("Failed to copy text to clipboard: "+e)),!0;var t="rtl"===document.documentElement.getAttribute("dir"),n=document.createElement("textarea"),t=(n.className="clipboard-helper",n.style[t?"right":"left"]="-9999px",window.pageYOffset||document.documentElement.scrollTop),t=(n.style.top=t+"px",n.setAttribute("readonly",""),n.value=e,document.body.appendChild(n),!0);try{n.select(),t=document.execCommand("copy")}catch(e){t=!1}return n.parentNode.removeChild(n),t}((n=(e=n.querySelector("td.code, td.rouge-code"))?e:n).innerText),t.focus(),e&&(null!==t.interval&&clearInterval(t.interval),t.classList.add("copied"),t.interval=setTimeout(function(){t.classList.remove("copied"),clearInterval(t.interval),t.interval=null},1500)),e;throw console.warn(t),new Error("No code block found for this button.")}new SmoothScroll('a[href*="#"]',{offset:20,speed:400,speedAsDuration:!0,durationMax:500}),0<$("nav.toc").length&&new Gumshoe("nav.toc a",{navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:20,reflow:!0,events:!0}),window.chrome&&document.addEventListener("gumshoeActivate",function(e){var e=e.target,t={behavior:"auto",block:"nearest",inline:"start"},n=document.querySelector("aside.sidebar__right.sticky");n&&"sticky"===window.getComputedStyle(n).position&&(e.parentElement.classList.contains("toc__menu")&&e==e.parentElement.firstElementChild?document.querySelector("nav.toc header"):e).scrollIntoView(t)}),$("a[href$='.jpg'],a[href$='.jpeg'],a[href$='.JPG'],a[href$='.png'],a[href$='.gif'],a[href$='.webp']").has("> img").addClass("image-popup"),$(".image-popup").magnificPopup({type:"image",tLoading:"Loading image #%curr%...",gallery:{enabled:!0,navigateByImgClick:!0,preload:[0,1]},image:{tError:'Image #%curr% could not be loaded.'},removalDelay:500,mainClass:"mfp-zoom-in",callbacks:{beforeOpen:function(){this.st.image.markup=this.st.image.markup.replace("mfp-figure","mfp-figure mfp-with-anim")}},closeOnContentClick:!0,midClick:!0}),document.querySelector(".page__content").querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(function(e){var t,n=e.getAttribute("id");n&&((t=document.createElement("a")).className="header-link",t.href="#"+n,t.innerHTML='Permalink',t.title="Permalink",e.appendChild(t))});window.enable_copy_code_button&&document.querySelectorAll(".page__content pre.highlight > code").forEach(function(e,t,n){var r,e=e.parentElement;"code"===e.firstElementChild.tagName.toLowerCase()&&((r=document.createElement("button")).title="Copy to clipboard",r.className="clipboard-copy-button",r.innerHTML='Copy code',r.addEventListener("click",o),e.prepend(r))})}); \ No newline at end of file diff --git a/assets/js/main.min.js.map b/assets/js/main.min.js.map new file mode 100644 index 0000000..454db8c --- /dev/null +++ b/assets/js/main.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["assets/js/vendor/jquery/jquery-3.6.0.js","assets/js/plugins/gumshoe.js","assets/js/plugins/jquery.ba-throttle-debounce.js","assets/js/plugins/jquery.fitvids.js","assets/js/plugins/jquery.greedy-navigation.js","assets/js/plugins/jquery.magnific-popup.js","assets/js/plugins/smooth-scroll.js","assets/js/_main.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","isFunction","obj","nodeType","item","isWindow","arr","getProto","Object","getPrototypeOf","slice","flat","array","call","concat","apply","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","support","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","i","val","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","version","jQuery","selector","context","fn","init","isArrayLike","length","prototype","jquery","constructor","toArray","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","name","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","invert","matches","callbackExpect","arg","value","guid","Symbol","iterator","split","_i","toLowerCase","dir","until","matched","truncate","is","siblings","n","nextSibling","Sizzle","funescape","escape","nonHex","high","String","fromCharCode","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","setDocument","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","rcssescape","inDisabledFieldset","addCombinator","disabled","nodeName","next","childNodes","e","els","seed","m","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","testContext","scope","toSelector","join","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","tmp","input","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","hasCompare","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","not","matcher","unmatched","has","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","header","button","_matchIndexes","lt","gt","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","matcherIn","matcherOut","matcherFromGroupMatchers","elementMatchers","setMatchers","superMatcher","outermost","matchedCount","setMatched","contextBackup","byElement","dirrunsUnique","bySet","filters","parseOnly","soFar","preFilters","cached","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","token","compiled","_name","defaultValue","rneedsContext","unique","isXMLDoc","escapeSelector","rsingleTag","winnow","qualifier","self","rootjQuery","rparentsprev","ready","parseHTML","guaranteedUnique","children","contents","prev","sibling","targets","l","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","object","_","flag","fire","locked","once","fired","firing","queue","firingIndex","memory","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","catch","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","mightThrow","that","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","updateFunc","resolveContexts","resolveValues","remaining","primary","rerrorNames","readyList","stack","console","warn","message","readyException","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","defineProperty","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","isHiddenWithinTree","style","display","isAttached","css","pnum","source","rcssNum","cssExpand","composed","getRootNode","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","showHide","show","values","body","hide","toggle","rcheckableType","rtagName","rscriptType","wrapMap","div","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","expectSync","err","on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","t","handlers","namespaces","origType","elemData","create","handle","triggered","dispatch","bindType","handleObj","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","enumerable","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","getStyles","opener","getComputedStyle","swap","old","pixelPositionVal","boxSizingReliableVal","scrollboxSizeVal","pixelBoxStylesVal","reliableTrDimensionsVal","reliableMarginLeftVal","container","rnumnonpx","rboxStyle","computeStyleTests","divStyle","cssText","roundPixelMeasures","marginLeft","right","width","position","offsetWidth","measure","round","parseFloat","curCSS","computed","maxWidth","getPropertyValue","pixelBoxStyles","minWidth","addGetHookIf","conditionFn","hookFn","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trStyle","trChild","height","parseInt","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","opt","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","bind","complete","timer","anim","*","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","speeds","fadeTo","to","animate","doAnimation","optall","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","rfocusable","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","for","class","addClass","classes","clazz","finalValue","curValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","stopPropagationCallback","rreturn","rfocusMorph","valHooks","optionSet","focusin","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","rbracket","parseXML","parserErrorElem","DOMParser","parseFromString","rCRLF","rsubmitterTypes","rsubmittable","param","traditional","valueOrFunction","s","encodeURIComponent","buildParams","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","fireGlobals","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","urlAnchor","host","hasContent","uncached","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","response","isSuccess","ct","finalDataType","firstDataType","conv2","current","conv","dataFilter","throws","modified","getJSON","getScript","text script","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","oldCallbacks","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curCSSTop","curTop","curOffset","curCSSLeft","curElem","curLeft","curPosition","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","_jQuery","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","trim","define","amd","_$","$","noConflict","Gumshoe","sortContents","item1","item2","getOffsetTop","isAtBottom","innerHeight","scrollHeight","clientHeight","deactivate","items","li","nav","classList","navClass","contentClass","deactivateNested","emitEvent","link","defaults","nested","nestedClass","reflow","CustomEvent","dispatchEvent","offsetTop","isInView","bottom","bounds","useLastItem","activateNested","scrollHandler","cancelAnimationFrame","publicAPIs","detect","resizeHandler","navItems","forEach","decodeURIComponent","substr","destroy","merged","jq_throttle","Cowboy","throttle","no_trailing","debounce_mode","timeout_id","last_exec","wrapper","elapsed","debounce","at_begin","fitVids","customSelector","ignore","ignoreList","$allVideos","aspectRatio","$this","tagName","Zepto","numOfItems","totalSpace","closingTime","breakWidths","$btn","$vlinks","$hlinks","$nav","$logo","$logoImg","$title","$search","measureLinks","addWidth","outerWidth","availableSpace","numOfVisibleItems","requiredSpace","winWidth","lastBreakpoint","curBreakpoint","innerWidth","resize","naturalWidth","require","MagnificPopup","_mfpOn","f","mfp","ev","EVENT_NS","_getEl","_mfpTrigger","st","callbacks","charAt","_getCloseBtn","_currPopupType","currTemplate","closeBtn","closeMarkup","tClose","_checkInstance","magnificPopup","instance","_putInlineElementsBack","_lastInlineElement","_inlinePlaceholder","_hiddenClass","_removeAjaxCursor","_ajaxCur","_destroyAjaxRequest","req","_prevStatus","_document","_prevContentType","_wrapClasses","CLOSE_EVENT","BEFORE_CLOSE_EVENT","MARKUP_PARSE_EVENT","OPEN_EVENT","READY_CLASS","REMOVING_CLASS","PREVENT_CLOSE_CLASS","_isJQ","_window","INLINE_NS","appVersion","navigator","isLowIE","isIE8","all","isAndroid","isIOS","supportsTransition","probablyMobile","userAgent","popupsCache","isObj","isOpen","mainEl","fixedContentPos","modal","closeOnContentClick","closeOnBgClick","showCloseBtn","enableEscapeKey","bgOverlay","close","_checkIfClose","contentContainer","preloader","tLoading","modules","closeBtnInside","template","close_replaceWith","alignTop","fixedBgPos","updateSize","windowHeight","wH","windowStyles","classesToadd","_hasScrollBar","_getScrollbarSize","marginRight","isIE7","mainClass","_addClassToMFP","updateItemHTML","_lastFocusedEl","_setFocus","_onFocusIn","removalDelay","_close","classesToRemove","_removeClassFromMFP","currItem","autoFocusLast","prevHeight","winHeight","zoomLevel","clientWidth","parseEl","newContent","markup","appendContent","preloaded","addGroup","eHandler","mfpEl","_openClick","eName","midClick","disableOn","updateStatus","closeOnContent","closeOnBg","cName","_parseMarkup","scrollDiv","scrollbarSize","registerModule","itemOpts","jqEl","AJAX_NS","hiddenClass","tNotFound","initInline","getInline","inlineSt","inline","inlineElement","cursor","tError","initAjax","getAjax","textStatus","finished","loadError","_imgInterval","titleSrc","verticalFit","initImage","imgSt","ns","resizeImage","decr","img","_onImageHasSize","hasSize","clearInterval","isCheckingImgSize","imgHidden","findImageSize","mfpSetInterval","setInterval","counter","getImage","onLoadComplete","loaded","guard","onLoadError","alt","title","img_replaceWith","loading","_fixIframeBugs","isShowing","IFRAME_NS","_getLoopedId","numSlides","_replaceCurrTotal","curr","total","element","initZoom","getElToAnimate","showMainContent","openTimeout","animatedImg","zoomSt","newImg","transition","cssObj","-webkit-backface-visibility","_allowZoom","_getItemToZoom","_getOffset","isLarge","paddingTop","paddingBottom","hasMozTransform","MozTransform","RETINA_NS","srcAction","patterns","youtube","vimeo","gmaps","initIframe","prevType","newType","getIframe","embedSrc","iframeSt","iframe","dataObj","lastIndexOf","arrowMarkup","preload","navigateByImgClick","arrows","tPrev","tNext","tCounter","initGallery","gSt","gallery","direction","arrowLeft","arrowRight","_preloadTimeout","preloadNearbyImages","goTo","newIndex","preloadBefore","min","preloadAfter","_preloadItem","replaceSrc","ratio","initRetina","devicePixelRatio","retina","max-width","SmoothScroll","escapeCharacters","codeUnit","firstCodeUnit","InvalidCharacterError","anchor","emitEvents","topOnEmptyHash","speedAsDuration","durationMax","durationMin","clip","customEasing","updateURL","popstate","getHeight","getDocumentHeight","clickHandler","hostname","pathname","querySelector","history","replaceState","smoothScroll","stringify","animateScroll","popstateHandler","fixedHeader","animationInterval","cancelScroll","noEvent","startLocation","endLocation","distance","documentHeight","timeLapsed","stopAnimateScroll","loopAnimateScroll","_settings","isNum","anchorElem","headerHeight","abs","currentLocation","outline","timestamp","percentage","floor","pushState","matchMedia","Element","keyup","copyButtonEventListener","thisButton","codeBlock","nextElementSibling","queryCommandEnabled","clipboard","writeText","isRTL","textarea","yPosition","execCommand","realCodeBlock","innerText","chrome","scrollOptions","behavior","block","tocElement","parentElement","scrollIntoView","beforeOpen","enable_copy_code_button","parentList","copyButton"],"mappings":";;;;;GAaA;CAAA,SAAYA,EAAQC,GAEnB,aAEuB,UAAlB,OAAOC,QAAiD,UAA1B,OAAOA,OAAOC,QAShDD,OAAOC,QAAUH,EAAOI,SACvBH,EAASD,EAAQ,CAAA,CAAK,EACtB,SAAUK,GACT,GAAMA,EAAED,SAGR,OAAOH,EAASI,CAAE,EAFjB,MAAM,IAAIC,MAAO,0CAA2C,CAG9D,EAEDL,EAASD,CAAO,CAIhB,EAAqB,aAAlB,OAAOO,OAAyBA,OAASC,KAAM,SAAUD,EAAQE,GAMtE,aA+BiB,SAAbC,EAAkCC,GASpC,MAAsB,YAAf,OAAOA,GAA8C,UAAxB,OAAOA,EAAIC,UAC1B,YAApB,OAAOD,EAAIE,IACb,CAGc,SAAXC,EAA8BH,GAChC,OAAc,MAAPA,GAAeA,IAAQA,EAAIJ,MACnC,CA7CD,IAAIQ,EAAM,GAENC,EAAWC,OAAOC,eAElBC,EAAQJ,EAAII,MAEZC,EAAOL,EAAIK,KAAO,SAAUC,GAC/B,OAAON,EAAIK,KAAKE,KAAMD,CAAM,CAC7B,EAAI,SAAUA,GACb,OAAON,EAAIQ,OAAOC,MAAO,GAAIH,CAAM,CACpC,EAGII,EAAOV,EAAIU,KAEXC,EAAUX,EAAIW,QAEdC,EAAa,GAEbC,EAAWD,EAAWC,SAEtBC,EAASF,EAAWG,eAEpBC,EAAaF,EAAOD,SAEpBI,EAAuBD,EAAWT,KAAML,MAAO,EAE/CgB,EAAU,GAqBV7B,EAAWG,EAAOH,SAIjB8B,EAA4B,CAC/BC,KAAM,CAAA,EACNC,IAAK,CAAA,EACLC,MAAO,CAAA,EACPC,SAAU,CAAA,CACX,EAEA,SAASC,EAASC,EAAMC,EAAMC,GAG7B,IAAIC,EAAGC,EACNC,GAHDH,EAAMA,GAAOtC,GAGC0C,cAAe,QAAS,EAGtC,GADAD,EAAOE,KAAOP,EACTC,EACJ,IAAME,KAAKT,GAYVU,EAAMH,EAAME,IAAOF,EAAKO,cAAgBP,EAAKO,aAAcL,CAAE,IAE5DE,EAAOI,aAAcN,EAAGC,CAAI,EAI/BF,EAAIQ,KAAKC,YAAaN,CAAO,EAAEO,WAAWC,YAAaR,CAAO,CAC/D,CAGD,SAASS,EAAQ3C,GAChB,OAAY,MAAPA,EACGA,EAAM,GAIQ,UAAf,OAAOA,GAAmC,YAAf,OAAOA,EACxCgB,EAAYC,EAASN,KAAMX,CAAI,IAAO,SACtC,OAAOA,CACT,CAOA,IACC4C,EAAU,QAGVC,EAAS,SAAUC,EAAUC,GAI5B,OAAO,IAAIF,EAAOG,GAAGC,KAAMH,EAAUC,CAAQ,CAC9C,EAyVD,SAASG,EAAalD,GAMrB,IAAImD,EAAS,CAAC,CAACnD,GAAO,WAAYA,GAAOA,EAAImD,OAC5C3B,EAAOmB,EAAQ3C,CAAI,EAEpB,MAAKD,CAAAA,EAAYC,CAAI,GAAKG,CAAAA,EAAUH,CAAI,IAIxB,UAATwB,GAA+B,IAAX2B,GACR,UAAlB,OAAOA,GAAgC,EAATA,GAAgBA,EAAS,KAAOnD,EAChE,CAtWA6C,EAAOG,GAAKH,EAAOO,UAAY,CAG9BC,OAAQT,EAERU,YAAaT,EAGbM,OAAQ,EAERI,QAAS,WACR,OAAO/C,EAAMG,KAAMd,IAAK,CACzB,EAIA2D,IAAK,SAAUC,GAGd,OAAY,MAAPA,EACGjD,EAAMG,KAAMd,IAAK,EAIlB4D,EAAM,EAAI5D,KAAM4D,EAAM5D,KAAKsD,QAAWtD,KAAM4D,EACpD,EAIAC,UAAW,SAAUC,GAGhBC,EAAMf,EAAOgB,MAAOhE,KAAKyD,YAAY,EAAGK,CAAM,EAMlD,OAHAC,EAAIE,WAAajE,KAGV+D,CACR,EAGAG,KAAM,SAAUC,GACf,OAAOnB,EAAOkB,KAAMlE,KAAMmE,CAAS,CACpC,EAEAC,IAAK,SAAUD,GACd,OAAOnE,KAAK6D,UAAWb,EAAOoB,IAAKpE,KAAM,SAAUqE,EAAMlC,GACxD,OAAOgC,EAASrD,KAAMuD,EAAMlC,EAAGkC,CAAK,CACrC,CAAE,CAAE,CACL,EAEA1D,MAAO,WACN,OAAOX,KAAK6D,UAAWlD,EAAMK,MAAOhB,KAAMsE,SAAU,CAAE,CACvD,EAEAC,MAAO,WACN,OAAOvE,KAAKwE,GAAI,CAAE,CACnB,EAEAC,KAAM,WACL,OAAOzE,KAAKwE,GAAI,CAAC,CAAE,CACpB,EAEAE,KAAM,WACL,OAAO1E,KAAK6D,UAAWb,EAAO2B,KAAM3E,KAAM,SAAU4E,EAAOzC,GAC1D,OAASA,EAAI,GAAM,CACpB,CAAE,CAAE,CACL,EAEA0C,IAAK,WACJ,OAAO7E,KAAK6D,UAAWb,EAAO2B,KAAM3E,KAAM,SAAU4E,EAAOzC,GAC1D,OAAOA,EAAI,CACZ,CAAE,CAAE,CACL,EAEAqC,GAAI,SAAUrC,GACb,IAAI2C,EAAM9E,KAAKsD,OACdyB,EAAI,CAAC5C,GAAMA,EAAI,EAAI2C,EAAM,GAC1B,OAAO9E,KAAK6D,UAAgB,GAALkB,GAAUA,EAAID,EAAM,CAAE9E,KAAM+E,IAAQ,EAAG,CAC/D,EAEAC,IAAK,WACJ,OAAOhF,KAAKiE,YAAcjE,KAAKyD,YAAY,CAC5C,EAIAxC,KAAMA,EACNgE,KAAM1E,EAAI0E,KACVC,OAAQ3E,EAAI2E,MACb,EAEAlC,EAAOmC,OAASnC,EAAOG,GAAGgC,OAAS,WAClC,IAAIC,EAASC,EAAWC,EAAMC,EAAaC,EAC1CC,EAASnB,UAAW,IAAO,GAC3BnC,EAAI,EACJmB,EAASgB,UAAUhB,OACnBoC,EAAO,CAAA,EAsBR,IAnBuB,WAAlB,OAAOD,IACXC,EAAOD,EAGPA,EAASnB,UAAWnC,IAAO,GAC3BA,CAAC,IAIqB,UAAlB,OAAOsD,GAAwBvF,EAAYuF,CAAO,IACtDA,EAAS,IAILtD,IAAMmB,IACVmC,EAASzF,KACTmC,CAAC,IAGMA,EAAImB,EAAQnB,CAAC,GAGpB,GAAqC,OAA9BiD,EAAUd,UAAWnC,IAG3B,IAAMkD,KAAQD,EACbE,EAAOF,EAASC,GAIF,cAATA,GAAwBI,IAAWH,IAKnCI,GAAQJ,IAAUtC,EAAO2C,cAAeL,CAAK,IAC/CC,EAAcK,MAAMC,QAASP,CAAK,KACpC1D,EAAM6D,EAAQJ,GAIbG,EADID,GAAe,CAACK,MAAMC,QAASjE,CAAI,EAC/B,GACI2D,GAAgBvC,EAAO2C,cAAe/D,CAAI,EAG9CA,EAFA,GAIT2D,EAAc,CAAA,EAGdE,EAAQJ,GAASrC,EAAOmC,OAAQO,EAAMF,EAAOF,CAAK,GAG9BQ,KAAAA,IAATR,IACXG,EAAQJ,GAASC,IAOrB,OAAOG,CACR,EAEAzC,EAAOmC,OAAQ,CAGdY,QAAS,UAAahD,EAAUiD,KAAKC,OAAO,GAAIC,QAAS,MAAO,EAAG,EAGnEC,QAAS,CAAA,EAETC,MAAO,SAAUC,GAChB,MAAM,IAAIvG,MAAOuG,CAAI,CACtB,EAEAC,KAAM,aAENX,cAAe,SAAUxF,GAKxB,MAAA,EAAMA,CAAAA,GAAgC,oBAAzBiB,EAASN,KAAMX,CAAI,IAIhCoG,EAAQ/F,EAAUL,CAAI,KASC,YAAhB,OADPqG,EAAOnF,EAAOP,KAAMyF,EAAO,aAAc,GAAKA,EAAM9C,cACflC,EAAWT,KAAM0F,CAAK,IAAMhF,GAClE,EAEAiF,cAAe,SAAUtG,GAGxB,IAFA,IAAIkF,KAEUlF,EACb,MAAO,CAAA,EAER,MAAO,CAAA,CACR,EAIAuG,WAAY,SAAU1E,EAAMoD,EAASlD,GACpCH,EAASC,EAAM,CAAEH,MAAOuD,GAAWA,EAAQvD,KAAM,EAAGK,CAAI,CACzD,EAEAgC,KAAM,SAAU/D,EAAKgE,GACpB,IAAIb,EAAQnB,EAAI,EAEhB,GAAKkB,EAAalD,CAAI,EAErB,IADAmD,EAASnD,EAAImD,OACLnB,EAAImB,GACqC,CAAA,IAA3Ca,EAASrD,KAAMX,EAAKgC,GAAKA,EAAGhC,EAAKgC,EAAI,EADvBA,CAAC,SAMrB,IAAMA,KAAKhC,EACV,GAAgD,CAAA,IAA3CgE,EAASrD,KAAMX,EAAKgC,GAAKA,EAAGhC,EAAKgC,EAAI,EACzC,MAKH,OAAOhC,CACR,EAGAwG,UAAW,SAAUpG,EAAKqG,GACrB7C,EAAM6C,GAAW,GAarB,OAXY,MAAPrG,IACC8C,EAAa5C,OAAQF,CAAI,CAAE,EAC/ByC,EAAOgB,MAAOD,EACE,UAAf,OAAOxD,EACN,CAAEA,GAAQA,CACZ,EAEAU,EAAKH,KAAMiD,EAAKxD,CAAI,GAIfwD,CACR,EAEA8C,QAAS,SAAUxC,EAAM9D,EAAK4B,GAC7B,OAAc,MAAP5B,EAAc,CAAC,EAAIW,EAAQJ,KAAMP,EAAK8D,EAAMlC,CAAE,CACtD,EAIA6B,MAAO,SAAUO,EAAOuC,GAKvB,IAJA,IAAIhC,EAAM,CAACgC,EAAOxD,OACjByB,EAAI,EACJ5C,EAAIoC,EAAMjB,OAEHyB,EAAID,EAAKC,CAAC,GACjBR,EAAOpC,CAAC,IAAO2E,EAAQ/B,GAKxB,OAFAR,EAAMjB,OAASnB,EAERoC,CACR,EAEAI,KAAM,SAAUb,EAAOK,EAAU4C,GAShC,IARA,IACCC,EAAU,GACV7E,EAAI,EACJmB,EAASQ,EAAMR,OACf2D,EAAiB,CAACF,EAIX5E,EAAImB,EAAQnB,CAAC,GACF,CAACgC,EAAUL,EAAO3B,GAAKA,CAAE,GAClB8E,GACxBD,EAAQ/F,KAAM6C,EAAO3B,EAAI,EAI3B,OAAO6E,CACR,EAGA5C,IAAK,SAAUN,EAAOK,EAAU+C,GAC/B,IAAI5D,EAAQ6D,EACXhF,EAAI,EACJ4B,EAAM,GAGP,GAAKV,EAAaS,CAAM,EAEvB,IADAR,EAASQ,EAAMR,OACPnB,EAAImB,EAAQnB,CAAC,GAGN,OAFdgF,EAAQhD,EAAUL,EAAO3B,GAAKA,EAAG+E,CAAI,IAGpCnD,EAAI9C,KAAMkG,CAAM,OAMlB,IAAMhF,KAAK2B,EAGI,OAFdqD,EAAQhD,EAAUL,EAAO3B,GAAKA,EAAG+E,CAAI,IAGpCnD,EAAI9C,KAAMkG,CAAM,EAMnB,OAAOvG,EAAMmD,CAAI,CAClB,EAGAqD,KAAM,EAIN3F,QAASA,CACV,CAAE,EAEqB,YAAlB,OAAO4F,SACXrE,EAAOG,GAAIkE,OAAOC,UAAa/G,EAAK8G,OAAOC,WAI5CtE,EAAOkB,KAAM,uEAAuEqD,MAAO,GAAI,EAC9F,SAAUC,EAAInC,GACblE,EAAY,WAAakE,EAAO,KAAQA,EAAKoC,YAAY,CAC1D,CAAE,EA27EO,SAANC,EAAgBrD,EAAMqD,EAAKC,GAI9B,IAHA,IAAIC,EAAU,GACbC,EAAqB/B,KAAAA,IAAV6B,GAEFtD,EAAOA,EAAMqD,KAA6B,IAAlBrD,EAAKjE,UACtC,GAAuB,IAAlBiE,EAAKjE,SAAiB,CAC1B,GAAKyH,GAAY7E,EAAQqB,CAAK,EAAEyD,GAAIH,CAAM,EACzC,MAEDC,EAAQ3G,KAAMoD,CAAK,CACpB,CAED,OAAOuD,CACR,CAGe,SAAXG,EAAqBC,EAAG3D,GAG3B,IAFA,IAAIuD,EAAU,GAENI,EAAGA,EAAIA,EAAEC,YACI,IAAfD,EAAE5H,UAAkB4H,IAAM3D,GAC9BuD,EAAQ3G,KAAM+G,CAAE,EAIlB,OAAOJ,CACR,CAn8EA,IAAIM,EAWJ,SAAYnI,GA6IC,SAAZoI,EAAsBC,EAAQC,GAG7B,OAFIC,EAAO,KAAOF,EAAOzH,MAAO,CAAE,EAAI,MAE/B0H,IASNC,EAAO,EACNC,OAAOC,aAAqB,MAAPF,CAAe,EACpCC,OAAOC,aAAcF,GAAQ,GAAK,MAAe,KAAPA,EAAe,KAAO,EACnE,CAKa,SAAbG,EAAuBC,EAAIC,GAC1B,OAAKA,EAGQ,OAAPD,EACG,IAIDA,EAAG/H,MAAO,EAAG,CAAC,CAAE,EAAI,KAC1B+H,EAAGE,WAAYF,EAAGpF,OAAS,CAAE,EAAElC,SAAU,EAAG,EAAI,IAI3C,KAAOsH,CACf,CAMgB,SAAhBG,IACCC,EAAY,CACb,CAvLD,IAAI3G,EACHV,EACAsH,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGAT,EACAlJ,EACA4J,EACAC,EACAC,EACAC,EACA3C,EACA4C,EAGA7D,EAAU,UAAW,CAAI,IAAI8D,KAC7BC,EAAe/J,EAAOH,SACtBmK,EAAU,EACVC,EAAO,EACPC,EAAaC,EAAY,EACzBC,EAAaD,EAAY,EACzBE,EAAgBF,EAAY,EAC5BG,EAAyBH,EAAY,EACrCI,EAAY,SAAUC,EAAGC,GAIxB,OAHKD,IAAMC,IACVjB,EAAe,CAAA,GAET,CACR,EAGAlI,EAAS,GAAOC,eAChBf,EAAM,GACNkK,EAAMlK,EAAIkK,IACVC,EAAanK,EAAIU,KACjBA,EAAOV,EAAIU,KACXN,EAAQJ,EAAII,MAIZO,EAAU,SAAUyJ,EAAMtG,GAGzB,IAFA,IAAIlC,EAAI,EACP2C,EAAM6F,EAAKrH,OACJnB,EAAI2C,EAAK3C,CAAC,GACjB,GAAKwI,EAAMxI,KAAQkC,EAClB,OAAOlC,EAGT,MAAO,CAAC,CACT,EAEAyI,EAAW,6HAMXC,EAAa,sBAGbC,EAAa,0BAA4BD,EACxC,0CAGDE,EAAa,MAAQF,EAAa,KAAOC,EAAa,OAASD,EAG9D,gBAAkBA,EAIlB,2DAA6DC,EAAa,OAC1ED,EAAa,OAEdG,EAAU,KAAOF,EAOhB,wFAA6BC,EAI7B,eAGDE,GAAc,IAAIC,OAAQL,EAAa,IAAK,GAAI,EAChDM,EAAQ,IAAID,OAAQ,IAAML,EAAa,8BACtCA,EAAa,KAAM,GAAI,EAExBO,GAAS,IAAIF,OAAQ,IAAML,EAAa,KAAOA,EAAa,GAAI,EAChEQ,GAAe,IAAIH,OAAQ,IAAML,EAAa,WAAaA,EAAa,IAAMA,EAC7E,GAAI,EACLS,GAAW,IAAIJ,OAAQL,EAAa,IAAK,EAEzCU,GAAU,IAAIL,OAAQF,CAAQ,EAC9BQ,GAAc,IAAIN,OAAQ,IAAMJ,EAAa,GAAI,EAEjDW,EAAY,CACXC,GAAM,IAAIR,OAAQ,MAAQJ,EAAa,GAAI,EAC3Ca,MAAS,IAAIT,OAAQ,QAAUJ,EAAa,GAAI,EAChDc,IAAO,IAAIV,OAAQ,KAAOJ,EAAa,OAAQ,EAC/Ce,KAAQ,IAAIX,OAAQ,IAAMH,CAAW,EACrCe,OAAU,IAAIZ,OAAQ,IAAMF,CAAQ,EACpCe,MAAS,IAAIb,OAAQ,yDACpBL,EAAa,+BAAiCA,EAAa,cAC3DA,EAAa,aAAeA,EAAa,SAAU,GAAI,EACxDmB,KAAQ,IAAId,OAAQ,OAASN,EAAW,KAAM,GAAI,EAIlDqB,aAAgB,IAAIf,OAAQ,IAAML,EACjC,mDAAqDA,EACrD,mBAAqBA,EAAa,mBAAoB,GAAI,CAC5D,EAEAqB,GAAQ,SACRC,GAAU,sCACVC,GAAU,SAEVC,EAAU,yBAGVC,GAAa,mCAEbC,GAAW,OAIXC,EAAY,IAAItB,OAAQ,uBAAyBL,EAAa,uBAAwB,GAAI,EAoB1F4B,GAAa,sDA0BbC,GAAqBC,GACpB,SAAUtI,GACT,MAAyB,CAAA,IAAlBA,EAAKuI,UAAqD,aAAhCvI,EAAKwI,SAASpF,YAAY,CAC5D,EACA,CAAEC,IAAK,aAAcoF,KAAM,QAAS,CACrC,EAGD,IACC7L,EAAKD,MACFT,EAAMI,EAAMG,KAAMgJ,EAAaiD,UAAW,EAC5CjD,EAAaiD,UACd,EAKAxM,EAAKuJ,EAAaiD,WAAWzJ,QAASlD,QAoBvC,CAnBE,MAAQ4M,GACT/L,EAAO,CAAED,MAAOT,EAAI+C,OAGnB,SAAUmC,EAAQwH,GACjBvC,EAAW1J,MAAOyE,EAAQ9E,EAAMG,KAAMmM,CAAI,CAAE,CAC7C,EAIA,SAAUxH,EAAQwH,GAKjB,IAJA,IAAIlI,EAAIU,EAAOnC,OACdnB,EAAI,EAGKsD,EAAQV,CAAC,IAAOkI,EAAK9K,CAAC,MAChCsD,EAAOnC,OAASyB,EAAI,CACrB,CACD,CACD,CAEA,SAASmD,EAAQjF,EAAUC,EAAS0D,EAASsG,GAC5C,IAAIC,EAAGhL,EAASiL,EAAKC,EAAOC,EAAQC,EACnCC,EAAatK,GAAWA,EAAQuK,cAGhCrN,EAAW8C,EAAUA,EAAQ9C,SAAW,EAKzC,GAHAwG,EAAUA,GAAW,GAGI,UAApB,OAAO3D,GAAyB,CAACA,GACxB,IAAb7C,GAA+B,IAAbA,GAA+B,KAAbA,EAEpC,OAAOwG,EAIR,GAAK,CAACsG,IACLpE,EAAa5F,CAAQ,EACrBA,EAAUA,GAAWtD,EAEhB6J,GAAiB,CAIrB,GAAkB,KAAbrJ,IAAqBiN,EAAQf,GAAWoB,KAAMzK,CAAS,GAG3D,GAAOkK,EAAIE,EAAO,IAGjB,GAAkB,IAAbjN,EAAiB,CACrB,GAAK,EAAEiE,EAAOnB,EAAQyK,eAAgBR,CAAE,GAUvC,OAAOvG,EALP,GAAKvC,EAAKuJ,KAAOT,EAEhB,OADAvG,EAAQ3F,KAAMoD,CAAK,EACZuC,CAOV,MAKC,GAAK4G,IAAgBnJ,EAAOmJ,EAAWG,eAAgBR,CAAE,IACxDvD,EAAU1G,EAASmB,CAAK,GACxBA,EAAKuJ,KAAOT,EAGZ,OADAvG,EAAQ3F,KAAMoD,CAAK,EACZuC,CAET,KAGM,CAAA,GAAKyG,EAAO,GAElB,OADApM,EAAKD,MAAO4F,EAAS1D,EAAQ2K,qBAAsB5K,CAAS,CAAE,EACvD2D,EAGD,IAAOuG,EAAIE,EAAO,KAAS5L,EAAQqM,wBACzC5K,EAAQ4K,uBAGR,OADA7M,EAAKD,MAAO4F,EAAS1D,EAAQ4K,uBAAwBX,CAAE,CAAE,EAClDvG,CACR,CAID,GAAKnF,EAAQsM,KACZ,CAAC1D,EAAwBpH,EAAW,OAClC,CAACyG,GAAa,CAACA,EAAUsE,KAAM/K,CAAS,KAI3B,IAAb7C,GAAqD,WAAnC8C,EAAQ2J,SAASpF,YAAY,GAAmB,CAYpE,GAVA8F,EAActK,EACduK,EAAatK,EASK,IAAb9C,IACFkL,GAAS0C,KAAM/K,CAAS,GAAKoI,GAAa2C,KAAM/K,CAAS,GAAM,CAqBjE,KAlBAuK,EAAajB,GAASyB,KAAM/K,CAAS,GAAKgL,GAAa/K,EAAQN,UAAW,GACzEM,KAImBA,GAAYzB,EAAQyM,SAGhCd,EAAMlK,EAAQV,aAAc,IAAK,GACvC4K,EAAMA,EAAIlH,QAASuG,GAAYhE,CAAW,EAE1CvF,EAAQT,aAAc,KAAQ2K,EAAMrH,CAAU,GAMhD5D,GADAmL,EAASpE,EAAUjG,CAAS,GACjBK,OACHnB,CAAC,IACRmL,EAAQnL,IAAQiL,EAAM,IAAMA,EAAM,UAAa,IAC9Ce,EAAYb,EAAQnL,EAAI,EAE1BoL,EAAcD,EAAOc,KAAM,GAAI,CAChC,CAEA,IAIC,OAHAnN,EAAKD,MAAO4F,EACX4G,EAAWa,iBAAkBd,CAAY,CAC1C,EACO3G,CAOR,CANE,MAAQ0H,GACTjE,EAAwBpH,EAAU,CAAA,CAAK,CACxC,CAAE,QACImK,IAAQrH,GACZ7C,EAAQqL,gBAAiB,IAAK,CAEhC,CACD,CACD,CAID,OAAOnF,EAAQnG,EAASiD,QAASiF,EAAO,IAAK,EAAGjI,EAAS0D,EAASsG,CAAK,CACxE,CAQA,SAAShD,IACR,IAAIsE,EAAO,GAEX,SAASC,EAAOC,EAAKvH,GAQpB,OALKqH,EAAKvN,KAAMyN,EAAM,GAAI,EAAI3F,EAAK4F,aAGlC,OAAOF,EAAOD,EAAKI,MAAM,GAEjBH,EAAOC,EAAM,KAAQvH,CAC/B,CACA,OAAOsH,CACR,CAMA,SAASI,EAAc1L,GAEtB,OADAA,EAAI4C,GAAY,CAAA,EACT5C,CACR,CAMA,SAAS2L,EAAQ3L,GAChB,IAAI4L,EAAKnP,EAAS0C,cAAe,UAAW,EAE5C,IACC,MAAO,CAAC,CAACa,EAAI4L,CAAG,CAYjB,CAXE,MAAQ/B,GACT,MAAO,CAAA,CACR,CAAE,QAGI+B,EAAGnM,YACPmM,EAAGnM,WAAWC,YAAakM,CAAG,CAKhC,CACD,CAOA,SAASC,GAAWC,EAAOC,GAI1B,IAHA,IAAI3O,EAAM0O,EAAM1H,MAAO,GAAI,EAC1BpF,EAAI5B,EAAI+C,OAEDnB,CAAC,IACR4G,EAAKoG,WAAY5O,EAAK4B,IAAQ+M,CAEhC,CAQA,SAASE,GAAc7E,EAAGC,GACzB,IAAI6E,EAAM7E,GAAKD,EACd+E,EAAOD,GAAsB,IAAf9E,EAAEnK,UAAiC,IAAfoK,EAAEpK,UACnCmK,EAAEgF,YAAc/E,EAAE+E,YAGpB,GAAKD,EACJ,OAAOA,EAIR,GAAKD,EACJ,KAAUA,EAAMA,EAAIpH,aACnB,GAAKoH,IAAQ7E,EACZ,MAAO,CAAC,EAKX,OAAOD,EAAI,EAAI,CAAC,CACjB,CA4BA,SAASiF,GAAsB5C,GAG9B,OAAO,SAAUvI,GAKhB,MAAK,SAAUA,EASTA,EAAKzB,YAAgC,CAAA,IAAlByB,EAAKuI,SAGvB,UAAWvI,EACV,UAAWA,EAAKzB,WACbyB,EAAKzB,WAAWgK,WAAaA,EAE7BvI,EAAKuI,WAAaA,EAMpBvI,EAAKoL,aAAe7C,GAI1BvI,EAAKoL,aAAe,CAAC7C,GACrBF,GAAoBrI,CAAK,IAAMuI,EAG1BvI,EAAKuI,WAAaA,EAKd,UAAWvI,GACfA,EAAKuI,WAAaA,CAK3B,CACD,CAMA,SAAS8C,EAAwBvM,GAChC,OAAO0L,EAAc,SAAUc,GAE9B,OADAA,EAAW,CAACA,EACLd,EAAc,SAAU3B,EAAMlG,GAMpC,IALA,IAAIjC,EACH6K,EAAezM,EAAI,GAAI+J,EAAK5J,OAAQqM,CAAS,EAC7CxN,EAAIyN,EAAatM,OAGVnB,CAAC,IACH+K,EAAQnI,EAAI6K,EAAczN,MAC9B+K,EAAMnI,GAAM,EAAGiC,EAASjC,GAAMmI,EAAMnI,IAGvC,CAAE,CACH,CAAE,CACH,CAOA,SAASkJ,GAAa/K,GACrB,OAAOA,GAAmD,KAAA,IAAjCA,EAAQ2K,sBAAwC3K,CAC1E,CAirCA,IAAMf,KA9qCNV,EAAUyG,EAAOzG,QAAU,GAO3BwH,EAAQf,EAAOe,MAAQ,SAAU5E,GAChC,IAAIwL,EAAYxL,GAAQA,EAAKyL,aAC5BtG,EAAUnF,IAAUA,EAAKoJ,eAAiBpJ,GAAO0L,gBAKlD,MAAO,CAAC7D,GAAM8B,KAAM6B,GAAarG,GAAWA,EAAQqD,UAAY,MAAO,CACxE,EAOA/D,EAAcZ,EAAOY,YAAc,SAAU7G,GAC5C,IACCC,EAAMD,EAAOA,EAAKwL,eAAiBxL,EAAO6H,EAud3C,OAhdK5H,GAAOtC,GAA6B,IAAjBsC,EAAI9B,UAAmB8B,EAAI6N,kBAMnDvG,GADA5J,EAAWsC,GACQ6N,gBACnBtG,EAAiB,CAACR,EAAOrJ,CAAS,EAQ7BkK,GAAgBlK,IAClBoQ,EAAYpQ,EAASqQ,cAAiBD,EAAUE,MAAQF,IAGrDA,EAAUG,iBACdH,EAAUG,iBAAkB,SAAUtH,EAAe,CAAA,CAAM,EAGhDmH,EAAUI,aACrBJ,EAAUI,YAAa,WAAYvH,CAAc,GASnDpH,EAAQyM,MAAQY,EAAQ,SAAUC,GAEjC,OADAvF,EAAQ7G,YAAaoM,CAAG,EAAEpM,YAAa/C,EAAS0C,cAAe,KAAM,CAAE,EACjC,KAAA,IAAxByM,EAAGV,kBAChB,CAACU,EAAGV,iBAAkB,qBAAsB,EAAE/K,MAChD,CAAE,EAQF7B,EAAQsJ,WAAa+D,EAAQ,SAAUC,GAEtC,OADAA,EAAGsB,UAAY,IACR,CAACtB,EAAGvM,aAAc,WAAY,CACtC,CAAE,EAMFf,EAAQoM,qBAAuBiB,EAAQ,SAAUC,GAEhD,OADAA,EAAGpM,YAAa/C,EAAS0Q,cAAe,EAAG,CAAE,EACtC,CAACvB,EAAGlB,qBAAsB,GAAI,EAAEvK,MACxC,CAAE,EAGF7B,EAAQqM,uBAAyBzB,EAAQ2B,KAAMpO,EAASkO,sBAAuB,EAM/ErM,EAAQ8O,QAAUzB,EAAQ,SAAUC,GAEnC,OADAvF,EAAQ7G,YAAaoM,CAAG,EAAEnB,GAAK7H,EACxB,CAACnG,EAAS4Q,mBAAqB,CAAC5Q,EAAS4Q,kBAAmBzK,CAAQ,EAAEzC,MAC9E,CAAE,EAGG7B,EAAQ8O,SACZxH,EAAK0H,OAAa,GAAI,SAAU7C,GAC/B,IAAI8C,EAAS9C,EAAG1H,QAASsG,EAAWrE,CAAU,EAC9C,OAAO,SAAU9D,GAChB,OAAOA,EAAK7B,aAAc,IAAK,IAAMkO,CACtC,CACD,EACA3H,EAAK4H,KAAW,GAAI,SAAU/C,EAAI1K,GACjC,GAAuC,KAAA,IAA3BA,EAAQyK,gBAAkClE,EAErD,OADIpF,EAAOnB,EAAQyK,eAAgBC,CAAG,GACxB,CAAEvJ,GAAS,EAE3B,IAEA0E,EAAK0H,OAAa,GAAK,SAAU7C,GAChC,IAAI8C,EAAS9C,EAAG1H,QAASsG,EAAWrE,CAAU,EAC9C,OAAO,SAAU9D,GACZpC,EAAwC,KAAA,IAA1BoC,EAAKuM,kBACtBvM,EAAKuM,iBAAkB,IAAK,EAC7B,OAAO3O,GAAQA,EAAKkF,QAAUuJ,CAC/B,CACD,EAIA3H,EAAK4H,KAAW,GAAI,SAAU/C,EAAI1K,GACjC,GAAuC,KAAA,IAA3BA,EAAQyK,gBAAkClE,EAAiB,CACtE,IAAIxH,EAAME,EAAG2B,EACZO,EAAOnB,EAAQyK,eAAgBC,CAAG,EAEnC,GAAKvJ,EAAO,CAIX,IADApC,EAAOoC,EAAKuM,iBAAkB,IAAK,IACtB3O,EAAKkF,QAAUyG,EAC3B,MAAO,CAAEvJ,GAMV,IAFAP,EAAQZ,EAAQsN,kBAAmB5C,CAAG,EACtCzL,EAAI,EACMkC,EAAOP,EAAO3B,CAAC,KAExB,IADAF,EAAOoC,EAAKuM,iBAAkB,IAAK,IACtB3O,EAAKkF,QAAUyG,EAC3B,MAAO,CAAEvJ,EAGZ,CAEA,MAAO,EACR,CACD,GAID0E,EAAK4H,KAAY,IAAIlP,EAAQoM,qBAC5B,SAAUgD,EAAK3N,GACd,OAA6C,KAAA,IAAjCA,EAAQ2K,qBACZ3K,EAAQ2K,qBAAsBgD,CAAI,EAG9BpP,EAAQsM,IACZ7K,EAAQmL,iBAAkBwC,CAAI,EAD/B,KAAA,CAGR,EAEA,SAAUA,EAAK3N,GACd,IAAImB,EACHyM,EAAM,GACN3O,EAAI,EAGJyE,EAAU1D,EAAQ2K,qBAAsBgD,CAAI,EAG7C,GAAa,MAARA,EASL,OAAOjK,EARN,KAAUvC,EAAOuC,EAASzE,CAAC,KACH,IAAlBkC,EAAKjE,UACT0Q,EAAI7P,KAAMoD,CAAK,EAIjB,OAAOyM,CAGT,EAGD/H,EAAK4H,KAAc,MAAIlP,EAAQqM,wBAA0B,SAAUuC,EAAWnN,GAC7E,GAA+C,KAAA,IAAnCA,EAAQ4K,wBAA0CrE,EAC7D,OAAOvG,EAAQ4K,uBAAwBuC,CAAU,CAEnD,EAQA1G,EAAgB,GAOhBD,EAAY,IAELjI,EAAQsM,IAAM1B,EAAQ2B,KAAMpO,EAASyO,gBAAiB,KAI5DS,EAAQ,SAAUC,GAEjB,IAAIgC,EAOJvH,EAAQ7G,YAAaoM,CAAG,EAAEiC,UAAY,UAAYjL,EACjD,qBAAiBA,EACjB,kEAMIgJ,EAAGV,iBAAkB,sBAAuB,EAAE/K,QAClDoG,EAAUzI,KAAM,SAAW4J,EAAa,cAAe,EAKlDkE,EAAGV,iBAAkB,YAAa,EAAE/K,QACzCoG,EAAUzI,KAAM,MAAQ4J,EAAa,aAAeD,EAAW,GAAI,EAI9DmE,EAAGV,iBAAkB,QAAUtI,EAAU,IAAK,EAAEzC,QACrDoG,EAAUzI,KAAM,IAAK,GAQtB8P,EAAQnR,EAAS0C,cAAe,OAAQ,GAClCG,aAAc,OAAQ,EAAG,EAC/BsM,EAAGpM,YAAaoO,CAAM,EAChBhC,EAAGV,iBAAkB,WAAY,EAAE/K,QACxCoG,EAAUzI,KAAM,MAAQ4J,EAAa,QAAUA,EAAa,KAC3DA,EAAa,cAAe,EAMxBkE,EAAGV,iBAAkB,UAAW,EAAE/K,QACvCoG,EAAUzI,KAAM,UAAW,EAMtB8N,EAAGV,iBAAkB,KAAOtI,EAAU,IAAK,EAAEzC,QAClDoG,EAAUzI,KAAM,UAAW,EAK5B8N,EAAGV,iBAAkB,MAAO,EAC5B3E,EAAUzI,KAAM,aAAc,CAC/B,CAAE,EAEF6N,EAAQ,SAAUC,GACjBA,EAAGiC,UAAY,oFAKf,IAAID,EAAQnR,EAAS0C,cAAe,OAAQ,EAC5CyO,EAAMtO,aAAc,OAAQ,QAAS,EACrCsM,EAAGpM,YAAaoO,CAAM,EAAEtO,aAAc,OAAQ,GAAI,EAI7CsM,EAAGV,iBAAkB,UAAW,EAAE/K,QACtCoG,EAAUzI,KAAM,OAAS4J,EAAa,aAAc,EAKH,IAA7CkE,EAAGV,iBAAkB,UAAW,EAAE/K,QACtCoG,EAAUzI,KAAM,WAAY,WAAY,EAKzCuI,EAAQ7G,YAAaoM,CAAG,EAAEnC,SAAW,CAAA,EACc,IAA9CmC,EAAGV,iBAAkB,WAAY,EAAE/K,QACvCoG,EAAUzI,KAAM,WAAY,WAAY,EAKzC8N,EAAGV,iBAAkB,MAAO,EAC5B3E,EAAUzI,KAAM,MAAO,CACxB,CAAE,IAGIQ,EAAQwP,gBAAkB5E,EAAQ2B,KAAQhH,EAAUwC,EAAQxC,SAClEwC,EAAQ0H,uBACR1H,EAAQ2H,oBACR3H,EAAQ4H,kBACR5H,EAAQ6H,iBAAoB,IAE5BvC,EAAQ,SAAUC,GAIjBtN,EAAQ6P,kBAAoBtK,EAAQlG,KAAMiO,EAAI,GAAI,EAIlD/H,EAAQlG,KAAMiO,EAAI,WAAY,EAC9BpF,EAAc1I,KAAM,KAAM+J,CAAQ,CACnC,CAAE,EAGHtB,EAAYA,EAAUpG,QAAU,IAAI4H,OAAQxB,EAAU0E,KAAM,GAAI,CAAE,EAClEzE,EAAgBA,EAAcrG,QAAU,IAAI4H,OAAQvB,EAAcyE,KAAM,GAAI,CAAE,EAI9EmD,EAAalF,EAAQ2B,KAAMxE,EAAQgI,uBAAwB,EAK3D5H,EAAW2H,GAAclF,EAAQ2B,KAAMxE,EAAQI,QAAS,EACvD,SAAUW,EAAGC,GACZ,IAAIiH,EAAuB,IAAflH,EAAEnK,SAAiBmK,EAAEwF,gBAAkBxF,EAClDmH,EAAMlH,GAAKA,EAAE5H,WACd,OAAO2H,IAAMmH,GAAO,EAAIA,CAAAA,GAAwB,IAAjBA,EAAItR,UAAkB,EACpDqR,EAAM7H,SACL6H,EAAM7H,SAAU8H,CAAI,EACpBnH,EAAEiH,yBAA8D,GAAnCjH,EAAEiH,wBAAyBE,CAAI,GAE/D,EACA,SAAUnH,EAAGC,GACZ,GAAKA,EACJ,KAAUA,EAAIA,EAAE5H,YACf,GAAK4H,IAAMD,EACV,MAAO,CAAA,EAIV,MAAO,CAAA,CACR,EAMDD,EAAYiH,EACZ,SAAUhH,EAAGC,GAGZ,IAMImH,EANJ,OAAKpH,IAAMC,GACVjB,EAAe,CAAA,EACR,IAIJoI,EAAU,CAACpH,EAAEiH,wBAA0B,CAAChH,EAAEgH,2BAiB/B,GAPfG,GAAYpH,EAAEkD,eAAiBlD,KAASC,EAAEiD,eAAiBjD,GAC1DD,EAAEiH,wBAAyBhH,CAAE,EAG7B,IAIE,CAAC/I,EAAQmQ,cAAgBpH,EAAEgH,wBAAyBjH,CAAE,IAAMoH,EAOzDpH,GAAK3K,GAAY2K,EAAEkD,eAAiB3D,GACxCF,EAAUE,EAAcS,CAAE,EACnB,CAAC,EAOJC,GAAK5K,GAAY4K,EAAEiD,eAAiB3D,GACxCF,EAAUE,EAAcU,CAAE,EACnB,EAIDlB,EACJpI,EAASoI,EAAWiB,CAAE,EAAIrJ,EAASoI,EAAWkB,CAAE,EAClD,EAGe,EAAVmH,EAAc,CAAC,EAAI,EAC3B,EACA,SAAUpH,EAAGC,GAGZ,GAAKD,IAAMC,EAEV,OADAjB,EAAe,CAAA,EACR,EAGR,IAAI8F,EACHlN,EAAI,EACJ0P,EAAMtH,EAAE3H,WACR8O,EAAMlH,EAAE5H,WACRkP,EAAK,CAAEvH,GACPwH,EAAK,CAAEvH,GAGR,GAAMqH,CAAAA,GAAQH,CAAAA,EAMb,OAAOnH,GAAK3K,EAAW,CAAC,EACvB4K,GAAK5K,EAAW,EAEhBiS,EAAM,CAAC,EACPH,EAAM,EACNpI,EACEpI,EAASoI,EAAWiB,CAAE,EAAIrJ,EAASoI,EAAWkB,CAAE,EAClD,EAGK,GAAKqH,IAAQH,EACnB,OAAOtC,GAAc7E,EAAGC,CAAE,EAK3B,IADA6E,EAAM9E,EACI8E,EAAMA,EAAIzM,YACnBkP,EAAGE,QAAS3C,CAAI,EAGjB,IADAA,EAAM7E,EACI6E,EAAMA,EAAIzM,YACnBmP,EAAGC,QAAS3C,CAAI,EAIjB,KAAQyC,EAAI3P,KAAQ4P,EAAI5P,IACvBA,CAAC,GAGF,OAAOA,EAGNiN,GAAc0C,EAAI3P,GAAK4P,EAAI5P,EAAI,EAO/B2P,EAAI3P,IAAO2H,EAAe,CAAC,EAC3BiI,EAAI5P,IAAO2H,EAAe,EAE1B,CACF,GAEOlK,CACR,EAEAsI,EAAOlB,QAAU,SAAUiL,EAAMC,GAChC,OAAOhK,EAAQ+J,EAAM,KAAM,KAAMC,CAAS,CAC3C,EAEAhK,EAAO+I,gBAAkB,SAAU5M,EAAM4N,GAGxC,GAFAnJ,EAAazE,CAAK,EAEb5C,EAAQwP,iBAAmBxH,GAC/B,CAACY,EAAwB4H,EAAO,OAC9B,CAACtI,GAAiB,CAACA,EAAcqE,KAAMiE,CAAK,KAC5C,CAACvI,GAAiB,CAACA,EAAUsE,KAAMiE,CAAK,GAE1C,IACC,IAAIlO,EAAMiD,EAAQlG,KAAMuD,EAAM4N,CAAK,EAGnC,GAAKlO,GAAOtC,EAAQ6P,mBAInBjN,EAAKzE,UAAuC,KAA3ByE,EAAKzE,SAASQ,SAC/B,OAAO2D,CAIT,CAFE,MAAQiJ,GACT3C,EAAwB4H,EAAM,CAAA,CAAK,CACpC,CAGD,OAAyD,EAAlD/J,EAAQ+J,EAAMrS,EAAU,KAAM,CAAEyE,EAAO,EAAEf,MACjD,EAEA4E,EAAO0B,SAAW,SAAU1G,EAASmB,GAUpC,OAHOnB,EAAQuK,eAAiBvK,IAAatD,GAC5CkJ,EAAa5F,CAAQ,EAEf0G,EAAU1G,EAASmB,CAAK,CAChC,EAEA6D,EAAOiK,KAAO,SAAU9N,EAAMgB,IAOtBhB,EAAKoJ,eAAiBpJ,IAAUzE,GACtCkJ,EAAazE,CAAK,EAGnB,IAAIlB,EAAK4F,EAAKoG,WAAY9J,EAAKoC,YAAY,GAG1CrF,EAAMe,GAAM9B,EAAOP,KAAMiI,EAAKoG,WAAY9J,EAAKoC,YAAY,CAAE,EAC5DtE,EAAIkB,EAAMgB,EAAM,CAACoE,CAAe,EAChC3D,KAAAA,EAEF,OAAeA,KAAAA,IAAR1D,EACNA,EACAX,EAAQsJ,YAAc,CAACtB,EACtBpF,EAAK7B,aAAc6C,CAAK,GACtBjD,EAAMiC,EAAKuM,iBAAkBvL,CAAK,IAAOjD,EAAIgQ,UAC9ChQ,EAAI+E,MACJ,IACJ,EAEAe,EAAOE,OAAS,SAAUiK,GACzB,OAASA,EAAM,IAAKnM,QAASuG,GAAYhE,CAAW,CACrD,EAEAP,EAAO9B,MAAQ,SAAUC,GACxB,MAAM,IAAIvG,MAAO,0CAA4CuG,CAAI,CAClE,EAMA6B,EAAOoK,WAAa,SAAU1L,GAC7B,IAAIvC,EACHkO,EAAa,GACbxN,EAAI,EACJ5C,EAAI,EAOL,GAJAoH,EAAe,CAAC9H,EAAQ+Q,iBACxBlJ,EAAY,CAAC7H,EAAQgR,YAAc7L,EAAQjG,MAAO,CAAE,EACpDiG,EAAQ3B,KAAMqF,CAAU,EAEnBf,EAAe,CACnB,KAAUlF,EAAOuC,EAASzE,CAAC,KACrBkC,IAASuC,EAASzE,KACtB4C,EAAIwN,EAAWtR,KAAMkB,CAAE,GAGzB,KAAQ4C,CAAC,IACR6B,EAAQ1B,OAAQqN,EAAYxN,GAAK,CAAE,CAErC,CAMA,OAFAuE,EAAY,KAEL1C,CACR,EAMAoC,EAAUd,EAAOc,QAAU,SAAU3E,GACpC,IAAIpC,EACH8B,EAAM,GACN5B,EAAI,EACJ/B,EAAWiE,EAAKjE,SAEjB,GAAMA,GAQC,GAAkB,IAAbA,GAA+B,IAAbA,GAA+B,KAAbA,EAAkB,CAIjE,GAAiC,UAA5B,OAAOiE,EAAKqO,YAChB,OAAOrO,EAAKqO,YAIZ,IAAMrO,EAAOA,EAAKsO,WAAYtO,EAAMA,EAAOA,EAAK4D,YAC/ClE,GAAOiF,EAAS3E,CAAK,CAGxB,MAAO,GAAkB,IAAbjE,GAA+B,IAAbA,EAC7B,OAAOiE,EAAKuO,SACb,MApBC,KAAU3Q,EAAOoC,EAAMlC,CAAC,KAGvB4B,GAAOiF,EAAS/G,CAAK,EAqBvB,OAAO8B,CACR,GAEAgF,EAAOb,EAAO2K,UAAY,CAGzBlE,YAAa,GAEbmE,aAAcjE,EAEdxB,MAAO5B,EAEP0D,WAAY,GAEZwB,KAAM,GAENoC,SAAU,CACTC,IAAK,CAAEtL,IAAK,aAAcnD,MAAO,CAAA,CAAK,EACtC0O,IAAK,CAAEvL,IAAK,YAAa,EACzBwL,IAAK,CAAExL,IAAK,kBAAmBnD,MAAO,CAAA,CAAK,EAC3C4O,IAAK,CAAEzL,IAAK,iBAAkB,CAC/B,EAEA0L,UAAW,CACVvH,KAAQ,SAAUwB,GAWjB,OAVAA,EAAO,GAAMA,EAAO,GAAInH,QAASsG,EAAWrE,CAAU,EAGtDkF,EAAO,IAAQA,EAAO,IAAOA,EAAO,IACnCA,EAAO,IAAO,IAAKnH,QAASsG,EAAWrE,CAAU,EAE9B,OAAfkF,EAAO,KACXA,EAAO,GAAM,IAAMA,EAAO,GAAM,KAG1BA,EAAM1M,MAAO,EAAG,CAAE,CAC1B,EAEAoL,MAAS,SAAUsB,GAiClB,OArBAA,EAAO,GAAMA,EAAO,GAAI5F,YAAY,EAEF,QAA7B4F,EAAO,GAAI1M,MAAO,EAAG,CAAE,GAGrB0M,EAAO,IACZnF,EAAO9B,MAAOiH,EAAO,EAAI,EAK1BA,EAAO,GAAM,EAAGA,EAAO,GACtBA,EAAO,IAAQA,EAAO,IAAO,GAC7B,GAAqB,SAAfA,EAAO,IAAiC,QAAfA,EAAO,KACvCA,EAAO,GAAM,EAAKA,EAAO,GAAMA,EAAO,IAAwB,QAAfA,EAAO,KAG3CA,EAAO,IAClBnF,EAAO9B,MAAOiH,EAAO,EAAI,EAGnBA,CACR,EAEAvB,OAAU,SAAUuB,GACnB,IAAIgG,EACHC,EAAW,CAACjG,EAAO,IAAOA,EAAO,GAElC,OAAK5B,EAAmB,MAAEuC,KAAMX,EAAO,EAAI,EACnC,MAIHA,EAAO,GACXA,EAAO,GAAMA,EAAO,IAAOA,EAAO,IAAO,GAG9BiG,GAAY/H,GAAQyC,KAAMsF,CAAS,IAG5CD,GAAAA,EAASnK,EAAUoK,EAAU,CAAA,CAAK,IAGzBA,EAASpS,QAAS,IAAKoS,EAAShQ,OAAS+P,CAAO,EAAIC,EAAShQ,UAGxE+J,EAAO,GAAMA,EAAO,GAAI1M,MAAO,EAAG0S,CAAO,EACzChG,EAAO,GAAMiG,EAAS3S,MAAO,EAAG0S,CAAO,GAIjChG,EAAM1M,MAAO,EAAG,CAAE,EAC1B,CACD,EAEA8P,OAAQ,CAEP7E,IAAO,SAAU2H,GAChB,IAAI1G,EAAW0G,EAAiBrN,QAASsG,EAAWrE,CAAU,EAAEV,YAAY,EAC5E,MAA4B,MAArB8L,EACN,WACC,MAAO,CAAA,CACR,EACA,SAAUlP,GACT,OAAOA,EAAKwI,UAAYxI,EAAKwI,SAASpF,YAAY,IAAMoF,CACzD,CACF,EAEAlB,MAAS,SAAU0E,GAClB,IAAImD,EAAUvJ,EAAYoG,EAAY,KAEtC,OAAOmD,IACJA,EAAU,IAAItI,OAAQ,MAAQL,EAC/B,IAAMwF,EAAY,IAAMxF,EAAa,KAAM,IAAOZ,EACjDoG,EAAW,SAAUhM,GACpB,OAAOmP,EAAQxF,KACY,UAA1B,OAAO3J,EAAKgM,WAA0BhM,EAAKgM,WACd,KAAA,IAAtBhM,EAAK7B,cACX6B,EAAK7B,aAAc,OAAQ,GAC5B,EACD,CACH,CAAE,CACJ,EAEAqJ,KAAQ,SAAUxG,EAAMoO,EAAUC,GACjC,OAAO,SAAUrP,GACZsP,EAASzL,EAAOiK,KAAM9N,EAAMgB,CAAK,EAErC,OAAe,MAAVsO,EACgB,OAAbF,EAEFA,CAAAA,IAINE,GAAU,GAIU,MAAbF,EAAmBE,IAAWD,EACvB,OAAbD,EAAoBE,IAAWD,EAClB,OAAbD,EAAoBC,GAAqC,IAA5BC,EAAOzS,QAASwS,CAAM,EACtC,OAAbD,EAAoBC,GAAmC,CAAC,EAA3BC,EAAOzS,QAASwS,CAAM,EACtC,OAAbD,EAAoBC,GAASC,EAAOhT,MAAO,CAAC+S,EAAMpQ,MAAO,IAAMoQ,EAClD,OAAbD,EAA0F,CAAC,GAArE,IAAME,EAAOzN,QAAS+E,GAAa,GAAI,EAAI,KAAM/J,QAASwS,CAAM,EACzE,OAAbD,IAAoBE,IAAWD,GAASC,EAAOhT,MAAO,EAAG+S,EAAMpQ,OAAS,CAAE,IAAMoQ,EAAQ,KAI1F,CACD,EAEA3H,MAAS,SAAUpK,EAAMiS,EAAMC,EAAWtP,EAAOE,GAChD,IAAIqP,EAAgC,QAAvBnS,EAAKhB,MAAO,EAAG,CAAE,EAC7BoT,EAA+B,SAArBpS,EAAKhB,MAAO,CAAC,CAAE,EACzBqT,EAAkB,YAATJ,EAEV,OAAiB,IAAVrP,GAAwB,IAATE,EAGrB,SAAUJ,GACT,MAAO,CAAC,CAACA,EAAKzB,UACf,EAEA,SAAUyB,EAAM4P,EAAUC,GACzB,IAAIzF,EAAO0F,EAAaC,EAAYnS,EAAMoS,EAAWC,EACpD5M,EAAMoM,GAAWC,EAAU,cAAgB,kBAC3CQ,EAASlQ,EAAKzB,WACdyC,EAAO2O,GAAU3P,EAAKwI,SAASpF,YAAY,EAC3C+M,EAAW,CAACN,GAAO,CAACF,EACpB1E,EAAO,CAAA,EAER,GAAKiF,EAAS,CAGb,GAAKT,EAAS,CACb,KAAQpM,GAAM,CAEb,IADAzF,EAAOoC,EACGpC,EAAOA,EAAMyF,IACtB,GAAKsM,EACJ/R,EAAK4K,SAASpF,YAAY,IAAMpC,EACd,IAAlBpD,EAAK7B,SAEL,MAAO,CAAA,EAKTkU,EAAQ5M,EAAe,SAAT/F,GAAmB,CAAC2S,GAAS,aAC5C,CACA,MAAO,CAAA,CACR,CAKA,GAHAA,EAAQ,CAAEP,EAAUQ,EAAO5B,WAAa4B,EAAOE,WAG1CV,GAAWS,GAkBf,IAHAlF,GADA+E,GADA5F,GAHA0F,GAJAC,GADAnS,EAAOsS,GACYxO,KAAe9D,EAAM8D,GAAY,KAI1B9D,EAAKyS,YAC5BN,EAAYnS,EAAKyS,UAAa,KAEZ/S,IAAU,IACZ,KAAQoI,GAAW0E,EAAO,KACzBA,EAAO,GAC3BxM,EAAOoS,GAAaE,EAAOxH,WAAYsH,GAE7BpS,EAAO,EAAEoS,GAAapS,GAAQA,EAAMyF,KAG3C4H,EAAO+E,EAAY,EAAOC,EAAM7J,IAAI,IAGtC,GAAuB,IAAlBxI,EAAK7B,UAAkB,EAAEkP,GAAQrN,IAASoC,EAAO,CACrD8P,EAAaxS,GAAS,CAAEoI,EAASsK,EAAW/E,GAC5C,KACD,CACD,MAuBA,GAAc,CAAA,KALbA,EAbIkF,EAYJH,GADA5F,GAHA0F,GAJAC,GADAnS,EAAOoC,GACY0B,KAAe9D,EAAM8D,GAAY,KAI1B9D,EAAKyS,YAC5BN,EAAYnS,EAAKyS,UAAa,KAEZ/S,IAAU,IACZ,KAAQoI,GAAW0E,EAAO,GAMzCa,GAGJ,MAAUrN,EAAO,EAAEoS,GAAapS,GAAQA,EAAMyF,KAC3C4H,EAAO+E,EAAY,EAAOC,EAAM7J,IAAI,OAE/BuJ,EACN/R,EAAK4K,SAASpF,YAAY,IAAMpC,EACd,IAAlBpD,EAAK7B,WACL,CAAA,EAAEkP,IAGGkF,KAMJL,GALAC,EAAanS,EAAM8D,KAChB9D,EAAM8D,GAAY,KAIK9D,EAAKyS,YAC5BN,EAAYnS,EAAKyS,UAAa,KAEpB/S,GAAS,CAAEoI,EAASuF,IAG7BrN,IAASoC,MAUlB,OADAiL,GAAQ7K,KACQF,GAAW+K,EAAO/K,GAAU,GAAqB,GAAhB+K,EAAO/K,CACzD,CACD,CACF,EAEAuH,OAAU,SAAU6I,EAAQhF,GAM3B,IAAIiF,EACHzR,EAAK4F,EAAKiC,QAAS2J,IAAY5L,EAAK8L,WAAYF,EAAOlN,YAAY,IAClES,EAAO9B,MAAO,uBAAyBuO,CAAO,EAKhD,OAAKxR,EAAI4C,GACD5C,EAAIwM,CAAS,EAIJ,EAAZxM,EAAGG,QACPsR,EAAO,CAAED,EAAQA,EAAQ,GAAIhF,GACtB5G,EAAK8L,WAAWvT,eAAgBqT,EAAOlN,YAAY,CAAE,EAC3DoH,EAAc,SAAU3B,EAAMlG,GAI7B,IAHA,IAAI8N,EACHlN,EAAUzE,EAAI+J,EAAMyC,CAAS,EAC7BxN,EAAIyF,EAAQtE,OACLnB,CAAC,IAER+K,EADA4H,EAAM5T,EAASgM,EAAMtF,EAASzF,EAAI,GACpB,EAAG6E,EAAS8N,GAAQlN,EAASzF,GAE7C,CAAE,EACF,SAAUkC,GACT,OAAOlB,EAAIkB,EAAM,EAAGuQ,CAAK,CAC1B,GAGKzR,CACR,CACD,EAEA6H,QAAS,CAGR+J,IAAOlG,EAAc,SAAU5L,GAK9B,IAAI8N,EAAQ,GACXnK,EAAU,GACVoO,EAAU7L,EAASlG,EAASiD,QAASiF,EAAO,IAAK,CAAE,EAEpD,OAAO6J,EAASjP,GACf8I,EAAc,SAAU3B,EAAMlG,EAASiN,EAAUC,GAMhD,IALA,IAAI7P,EACH4Q,EAAYD,EAAS9H,EAAM,KAAMgH,EAAK,EAAG,EACzC/R,EAAI+K,EAAK5J,OAGFnB,CAAC,KACDkC,EAAO4Q,EAAW9S,MACxB+K,EAAM/K,GAAM,EAAG6E,EAAS7E,GAAMkC,GAGjC,CAAE,EACF,SAAUA,EAAM4P,EAAUC,GAMzB,OALAnD,EAAO,GAAM1M,EACb2Q,EAASjE,EAAO,KAAMmD,EAAKtN,CAAQ,EAGnCmK,EAAO,GAAM,KACN,CAACnK,EAAQ6D,IAAI,CACrB,CACF,CAAE,EAEFyK,IAAOrG,EAAc,SAAU5L,GAC9B,OAAO,SAAUoB,GAChB,OAAyC,EAAlC6D,EAAQjF,EAAUoB,CAAK,EAAEf,MACjC,CACD,CAAE,EAEFsG,SAAYiF,EAAc,SAAUtM,GAEnC,OADAA,EAAOA,EAAK2D,QAASsG,EAAWrE,CAAU,EACnC,SAAU9D,GAChB,MAAiE,CAAC,GAAzDA,EAAKqO,aAAe1J,EAAS3E,CAAK,GAAInD,QAASqB,CAAK,CAC9D,CACD,CAAE,EASF4S,KAAQtG,EAAc,SAAUsG,GAO/B,OAJM3J,GAAYwC,KAAMmH,GAAQ,EAAG,GAClCjN,EAAO9B,MAAO,qBAAuB+O,CAAK,EAE3CA,EAAOA,EAAKjP,QAASsG,EAAWrE,CAAU,EAAEV,YAAY,EACjD,SAAUpD,GAChB,IAAI+Q,EACJ,GACC,GAAOA,EAAW3L,EACjBpF,EAAK8Q,KACL9Q,EAAK7B,aAAc,UAAW,GAAK6B,EAAK7B,aAAc,MAAO,EAG7D,OADA4S,EAAWA,EAAS3N,YAAY,KACZ0N,GAA2C,IAAnCC,EAASlU,QAASiU,EAAO,GAAI,CAC1D,QACW9Q,EAAOA,EAAKzB,aAAkC,IAAlByB,EAAKjE,UAC7C,MAAO,CAAA,CACR,CACD,CAAE,EAGFqF,OAAU,SAAUpB,GACnB,IAAIgR,EAAOtV,EAAOuV,UAAYvV,EAAOuV,SAASD,KAC9C,OAAOA,GAAQA,EAAK1U,MAAO,CAAE,IAAM0D,EAAKuJ,EACzC,EAEA2H,KAAQ,SAAUlR,GACjB,OAAOA,IAASmF,CACjB,EAEAgM,MAAS,SAAUnR,GAClB,OAAOA,IAASzE,EAAS6V,gBACtB,CAAC7V,EAAS8V,UAAY9V,EAAS8V,SAAS,IAC1C,CAAC,EAAGrR,EAAK1C,MAAQ0C,EAAKsR,MAAQ,CAACtR,EAAKuR,SACtC,EAGAC,QAAWrG,GAAsB,CAAA,CAAM,EACvC5C,SAAY4C,GAAsB,CAAA,CAAK,EAEvCsG,QAAW,SAAUzR,GAIpB,IAAIwI,EAAWxI,EAAKwI,SAASpF,YAAY,EACzC,MAAsB,UAAboF,GAAwB,CAAC,CAACxI,EAAKyR,SACxB,WAAbjJ,GAAyB,CAAC,CAACxI,EAAK0R,QACpC,EAEAA,SAAY,SAAU1R,GASrB,OALKA,EAAKzB,YAETyB,EAAKzB,WAAWoT,cAGQ,CAAA,IAAlB3R,EAAK0R,QACb,EAGAE,MAAS,SAAU5R,GAMlB,IAAMA,EAAOA,EAAKsO,WAAYtO,EAAMA,EAAOA,EAAK4D,YAC/C,GAAK5D,EAAKjE,SAAW,EACpB,MAAO,CAAA,EAGT,MAAO,CAAA,CACR,EAEAmU,OAAU,SAAUlQ,GACnB,MAAO,CAAC0E,EAAKiC,QAAiB,MAAG3G,CAAK,CACvC,EAGA6R,OAAU,SAAU7R,GACnB,OAAO+H,GAAQ4B,KAAM3J,EAAKwI,QAAS,CACpC,EAEAkE,MAAS,SAAU1M,GAClB,OAAO8H,GAAQ6B,KAAM3J,EAAKwI,QAAS,CACpC,EAEAsJ,OAAU,SAAU9R,GACnB,IAAIgB,EAAOhB,EAAKwI,SAASpF,YAAY,EACrC,MAAgB,UAATpC,GAAkC,WAAdhB,EAAK1C,MAA8B,WAAT0D,CACtD,EAEA9C,KAAQ,SAAU8B,GAEjB,MAAuC,UAAhCA,EAAKwI,SAASpF,YAAY,GAClB,SAAdpD,EAAK1C,OAIuC,OAAxCwQ,EAAO9N,EAAK7B,aAAc,MAAO,IACb,SAAvB2P,EAAK1K,YAAY,EACpB,EAGAlD,MAASmL,EAAwB,WAChC,MAAO,CAAE,EACV,CAAE,EAEFjL,KAAQiL,EAAwB,SAAU0G,EAAe9S,GACxD,MAAO,CAAEA,EAAS,EACnB,CAAE,EAEFkB,GAAMkL,EAAwB,SAAU0G,EAAe9S,EAAQqM,GAC9D,MAAO,CAAEA,EAAW,EAAIA,EAAWrM,EAASqM,EAC7C,CAAE,EAEFjL,KAAQgL,EAAwB,SAAUE,EAActM,GAEvD,IADA,IAAInB,EAAI,EACAA,EAAImB,EAAQnB,GAAK,EACxByN,EAAa3O,KAAMkB,CAAE,EAEtB,OAAOyN,CACR,CAAE,EAEF/K,IAAO6K,EAAwB,SAAUE,EAActM,GAEtD,IADA,IAAInB,EAAI,EACAA,EAAImB,EAAQnB,GAAK,EACxByN,EAAa3O,KAAMkB,CAAE,EAEtB,OAAOyN,CACR,CAAE,EAEFyG,GAAM3G,EAAwB,SAAUE,EAActM,EAAQqM,GAM7D,IALA,IAAIxN,EAAIwN,EAAW,EAClBA,EAAWrM,EACAA,EAAXqM,EACCrM,EACAqM,EACa,GAAP,EAAExN,GACTyN,EAAa3O,KAAMkB,CAAE,EAEtB,OAAOyN,CACR,CAAE,EAEF0G,GAAM5G,EAAwB,SAAUE,EAActM,EAAQqM,GAE7D,IADA,IAAIxN,EAAIwN,EAAW,EAAIA,EAAWrM,EAASqM,EACnC,EAAExN,EAAImB,GACbsM,EAAa3O,KAAMkB,CAAE,EAEtB,OAAOyN,CACR,CAAE,CACH,CACD,GAEK5E,QAAe,IAAIjC,EAAKiC,QAAc,GAGhC,CAAEuL,MAAO,CAAA,EAAMC,SAAU,CAAA,EAAMC,KAAM,CAAA,EAAMC,SAAU,CAAA,EAAMC,MAAO,CAAA,CAAK,EACjF5N,EAAKiC,QAAS7I,GAzxCf,SAA4BR,GAC3B,OAAO,SAAU0C,GAEhB,MAAgB,UADLA,EAAKwI,SAASpF,YAAY,GACVpD,EAAK1C,OAASA,CAC1C,CACD,EAoxCwCQ,CAAE,EAE1C,IAAMA,IAAK,CAAEyU,OAAQ,CAAA,EAAMC,MAAO,CAAA,CAAK,EACtC9N,EAAKiC,QAAS7I,GAjxCf,SAA6BR,GAC5B,OAAO,SAAU0C,GAChB,IAAIgB,EAAOhB,EAAKwI,SAASpF,YAAY,EACrC,OAAkB,UAATpC,GAA6B,WAATA,IAAuBhB,EAAK1C,OAASA,CACnE,CACD,EA4wCyCQ,CAAE,EAI3C,SAAS0S,MA0ET,SAAS1G,EAAY2I,GAIpB,IAHA,IAAI3U,EAAI,EACP2C,EAAMgS,EAAOxT,OACbL,EAAW,GACJd,EAAI2C,EAAK3C,CAAC,GACjBc,GAAY6T,EAAQ3U,GAAIgF,MAEzB,OAAOlE,CACR,CAEA,SAAS0J,GAAeqI,EAAS+B,EAAYC,GAC5C,IAAItP,EAAMqP,EAAWrP,IACpBuP,EAAOF,EAAWjK,KAClB4B,EAAMuI,GAAQvP,EACdwP,EAAmBF,GAAgB,eAARtI,EAC3ByI,EAAWnN,CAAI,GAEhB,OAAO+M,EAAWxS,MAGjB,SAAUF,EAAMnB,EAASgR,GACxB,KAAU7P,EAAOA,EAAMqD,IACtB,GAAuB,IAAlBrD,EAAKjE,UAAkB8W,EAC3B,OAAOlC,EAAS3Q,EAAMnB,EAASgR,CAAI,EAGrC,MAAO,CAAA,CACR,EAGA,SAAU7P,EAAMnB,EAASgR,GACxB,IAAIkD,EAAuBhD,EAC1BiD,EAAW,CAAEtN,EAASoN,GAGvB,GAAKjD,GACJ,KAAU7P,EAAOA,EAAMqD,IACtB,IAAuB,IAAlBrD,EAAKjE,UAAkB8W,IACtBlC,EAAS3Q,EAAMnB,EAASgR,CAAI,EAChC,MAAO,CAAA,CAGV,MAEA,KAAU7P,EAAOA,EAAMqD,IACtB,GAAuB,IAAlBrD,EAAKjE,UAAkB8W,EAQ3B,GAHA/C,GAJAC,EAAa/P,EAAM0B,KAAe1B,EAAM0B,GAAY,KAI1B1B,EAAKqQ,YAC5BN,EAAY/P,EAAKqQ,UAAa,IAE5BuC,GAAQA,IAAS5S,EAAKwI,SAASpF,YAAY,EAC/CpD,EAAOA,EAAMqD,IAASrD,MAChB,CAAA,IAAO+S,EAAWjD,EAAazF,KACrC0I,EAAU,KAAQrN,GAAWqN,EAAU,KAAQD,EAG/C,OAASE,EAAU,GAAMD,EAAU,GAOnC,IAHAjD,EAAazF,GAAQ2I,GAGJ,GAAMrC,EAAS3Q,EAAMnB,EAASgR,CAAI,EAClD,MAAO,CAAA,CAET,CAIH,MAAO,CAAA,CACR,CACF,CAEA,SAASoD,GAAgBC,GACxB,OAAyB,EAAlBA,EAASjU,OACf,SAAUe,EAAMnB,EAASgR,GAExB,IADA,IAAI/R,EAAIoV,EAASjU,OACTnB,CAAC,IACR,GAAK,CAACoV,EAAUpV,GAAKkC,EAAMnB,EAASgR,CAAI,EACvC,MAAO,CAAA,EAGT,MAAO,CAAA,CACR,EACAqD,EAAU,EACZ,CAWA,SAASC,GAAUvC,EAAW7Q,EAAKqM,EAAQvN,EAASgR,GAOnD,IANA,IAAI7P,EACHoT,EAAe,GACftV,EAAI,EACJ2C,EAAMmQ,EAAU3R,OAChBoU,EAAgB,MAAPtT,EAEFjC,EAAI2C,EAAK3C,CAAC,GACZ,EAAEkC,EAAO4Q,EAAW9S,KAClBsO,GAAUA,CAAAA,EAAQpM,EAAMnB,EAASgR,CAAI,IAC1CuD,EAAaxW,KAAMoD,CAAK,EACnBqT,GACJtT,EAAInD,KAAMkB,CAAE,GAMhB,OAAOsV,CACR,CAEA,SAASE,GAAYvE,EAAWnQ,EAAU+R,EAAS4C,EAAYC,EAAYC,GAO1E,OANKF,GAAc,CAACA,EAAY7R,KAC/B6R,EAAaD,GAAYC,CAAW,GAEhCC,GAAc,CAACA,EAAY9R,KAC/B8R,EAAaF,GAAYE,EAAYC,CAAa,GAE5CjJ,EAAc,SAAU3B,EAAMtG,EAAS1D,EAASgR,GACtD,IAAI6D,EAAM5V,EAAGkC,EACZ2T,EAAS,GACTC,EAAU,GACVC,EAActR,EAAQtD,OAGtBQ,EAAQoJ,GA5CX,SAA2BjK,EAAUkV,EAAUvR,GAG9C,IAFA,IAAIzE,EAAI,EACP2C,EAAMqT,EAAS7U,OACRnB,EAAI2C,EAAK3C,CAAC,GACjB+F,EAAQjF,EAAUkV,EAAUhW,GAAKyE,CAAQ,EAE1C,OAAOA,CACR,EAsCI3D,GAAY,IACZC,EAAQ9C,SAAW,CAAE8C,GAAYA,EACjC,EACD,EAGAkV,EAAYhF,CAAAA,GAAelG,CAAAA,GAASjK,EAEnCa,EADA0T,GAAU1T,EAAOkU,EAAQ5E,EAAWlQ,EAASgR,CAAI,EAGlDmE,EAAarD,EAGZ6C,IAAgB3K,EAAOkG,EAAY8E,GAAeN,GAGjD,GAGAhR,EACDwR,EAQF,GALKpD,GACJA,EAASoD,EAAWC,EAAYnV,EAASgR,CAAI,EAIzC0D,EAMJ,IALAG,EAAOP,GAAUa,EAAYJ,CAAQ,EACrCL,EAAYG,EAAM,GAAI7U,EAASgR,CAAI,EAGnC/R,EAAI4V,EAAKzU,OACDnB,CAAC,KACDkC,EAAO0T,EAAM5V,MACnBkW,EAAYJ,EAAS9V,IAAQ,EAAGiW,EAAWH,EAAS9V,IAAQkC,IAK/D,GAAK6I,GACJ,GAAK2K,GAAczE,EAAY,CAC9B,GAAKyE,EAAa,CAKjB,IAFAE,EAAO,GACP5V,EAAIkW,EAAW/U,OACPnB,CAAC,KACDkC,EAAOgU,EAAYlW,KAGzB4V,EAAK9W,KAAQmX,EAAWjW,GAAMkC,CAAO,EAGvCwT,EAAY,KAAQQ,EAAa,GAAMN,EAAM7D,CAAI,CAClD,CAIA,IADA/R,EAAIkW,EAAW/U,OACPnB,CAAC,KACDkC,EAAOgU,EAAYlW,KACqC,CAAC,GAA7D4V,EAAOF,EAAa3W,EAASgM,EAAM7I,CAAK,EAAI2T,EAAQ7V,MAEtD+K,EAAM6K,GAAS,EAAGnR,EAASmR,GAAS1T,GAGvC,CAAA,MAIAgU,EAAab,GACZa,IAAezR,EACdyR,EAAWnT,OAAQgT,EAAaG,EAAW/U,MAAO,EAClD+U,CACF,EACKR,EACJA,EAAY,KAAMjR,EAASyR,EAAYnE,CAAI,EAE3CjT,EAAKD,MAAO4F,EAASyR,CAAW,CAGnC,CAAE,CACH,CAiEA,SAASC,GAA0BC,EAAiBC,GAGnC,SAAfC,EAAyBvL,EAAMhK,EAASgR,EAAKtN,EAAS8R,GACrD,IAAIrU,EAAMU,EAAGiQ,EACZ2D,EAAe,EACfxW,EAAI,IACJ8S,EAAY/H,GAAQ,GACpB0L,EAAa,GACbC,EAAgBxP,EAGhBvF,EAAQoJ,GAAQ4L,GAAa/P,EAAK4H,KAAY,IAAG,IAAK+H,CAAU,EAGhEK,EAAkBhP,GAA4B,MAAjB8O,EAAwB,EAAI7S,KAAKC,OAAO,GAAK,GAC1EnB,EAAMhB,EAAMR,OAcb,IAZKoV,IAMJrP,EAAmBnG,GAAWtD,GAAYsD,GAAWwV,GAM9CvW,IAAM2C,GAAgC,OAAvBT,EAAOP,EAAO3B,IAAeA,CAAC,GAAK,CACzD,GAAK2W,GAAazU,EAAO,CAWxB,IAVAU,EAAI,EAME7B,GAAWmB,EAAKoJ,eAAiB7N,IACtCkJ,EAAazE,CAAK,EAClB6P,EAAM,CAACzK,GAEEuL,EAAUuD,EAAiBxT,CAAC,KACrC,GAAKiQ,EAAS3Q,EAAMnB,GAAWtD,EAAUsU,CAAI,EAAI,CAChDtN,EAAQ3F,KAAMoD,CAAK,EACnB,KACD,CAEIqU,IACJ3O,EAAUgP,EAEZ,CAGKC,KAGG3U,EAAO,CAAC2Q,GAAW3Q,IACzBsU,CAAY,GAIRzL,IACJ+H,EAAUhU,KAAMoD,CAAK,CAGxB,CAaA,GATAsU,GAAgBxW,EASX6W,GAAS7W,IAAMwW,EAAe,CAElC,IADA5T,EAAI,EACMiQ,EAAUwD,EAAazT,CAAC,KACjCiQ,EAASC,EAAW2D,EAAY1V,EAASgR,CAAI,EAG9C,GAAKhH,EAAO,CAGX,GAAoB,EAAfyL,EACJ,KAAQxW,CAAC,IACA8S,EAAW9S,IAAOyW,EAAYzW,KACrCyW,EAAYzW,GAAMsI,EAAI3J,KAAM8F,CAAQ,GAMvCgS,EAAapB,GAAUoB,CAAW,CACnC,CAGA3X,EAAKD,MAAO4F,EAASgS,CAAW,EAG3BF,GAAa,CAACxL,GAA4B,EAApB0L,EAAWtV,QACG,EAAtCqV,EAAeH,EAAYlV,QAE7B4E,EAAOoK,WAAY1L,CAAQ,CAE7B,CAQA,OALK8R,IACJ3O,EAAUgP,EACV1P,EAAmBwP,GAGb5D,CACR,CArHD,IAAI+D,EAA6B,EAArBR,EAAYlV,OACvBwV,EAAqC,EAAzBP,EAAgBjV,OAsH7B,OAAO0V,EACNnK,EAAc4J,CAAa,EAC3BA,CACF,CAsLA,OAtpBA5D,GAAWtR,UAAYwF,EAAKkQ,QAAUlQ,EAAKiC,QAC3CjC,EAAK8L,WAAa,IAAIA,GAEtB3L,EAAWhB,EAAOgB,SAAW,SAAUjG,EAAUiW,GAChD,IAAItR,EAASyF,EAAOyJ,EAAQnV,EAC3BwX,EAAO7L,EAAQ8L,EACfC,EAASlP,EAAYlH,EAAW,KAEjC,GAAKoW,EACJ,OAAOH,EAAY,EAAIG,EAAO1Y,MAAO,CAAE,EAOxC,IAJAwY,EAAQlW,EACRqK,EAAS,GACT8L,EAAarQ,EAAKqK,UAEV+F,GAAQ,CA2Bf,IAAMxX,KAxBAiG,GAAW,EAAEyF,EAAQjC,GAAOsC,KAAMyL,CAAM,KACxC9L,IAGJ8L,EAAQA,EAAMxY,MAAO0M,EAAO,GAAI/J,MAAO,GAAK6V,GAE7C7L,EAAOrM,KAAQ6V,EAAS,EAAK,GAG9BlP,EAAU,CAAA,GAGHyF,EAAQhC,GAAaqC,KAAMyL,CAAM,KACvCvR,EAAUyF,EAAMuB,MAAM,EACtBkI,EAAO7V,KAAM,CACZkG,MAAOS,EAGPjG,KAAM0L,EAAO,GAAInH,QAASiF,EAAO,GAAI,CACtC,CAAE,EACFgO,EAAQA,EAAMxY,MAAOiH,EAAQtE,MAAO,GAIvByF,EAAK0H,OACb,EAAEpD,EAAQ5B,EAAW9J,GAAO+L,KAAMyL,CAAM,IAAUC,EAAYzX,IAClE,EAAE0L,EAAQ+L,EAAYzX,GAAQ0L,CAAM,KACpCzF,EAAUyF,EAAMuB,MAAM,EACtBkI,EAAO7V,KAAM,CACZkG,MAAOS,EACPjG,KAAMA,EACNqF,QAASqG,CACV,CAAE,EACF8L,EAAQA,EAAMxY,MAAOiH,EAAQtE,MAAO,GAItC,GAAK,CAACsE,EACL,KAEF,CAKA,OAAOsR,EACNC,EAAM7V,OACN6V,EACCjR,EAAO9B,MAAOnD,CAAS,EAGvBkH,EAAYlH,EAAUqK,CAAO,EAAE3M,MAAO,CAAE,CAC3C,EA2ZAwI,EAAUjB,EAAOiB,QAAU,SAAUlG,EAAUoK,GAC9C,IAAIlL,EACHqW,EAAc,GACdD,EAAkB,GAClBc,EAASjP,EAAenH,EAAW,KAEpC,GAAK,CAACoW,EAAS,CAOd,IADAlX,GAHMkL,EAAAA,GACGnE,EAAUjG,CAAS,GAElBK,OACFnB,CAAC,MACRkX,EA1MH,SAASC,EAAmBxC,GAyB3B,IAxBA,IAAIyC,EAAcvE,EAASjQ,EAC1BD,EAAMgS,EAAOxT,OACbkW,EAAkBzQ,EAAKgK,SAAU+D,EAAQ,GAAInV,MAC7C8X,EAAmBD,GAAmBzQ,EAAKgK,SAAU,KACrD5Q,EAAIqX,EAAkB,EAAI,EAG1BE,EAAe/M,GAAe,SAAUtI,GACvC,OAAOA,IAASkV,CACjB,EAAGE,EAAkB,CAAA,CAAK,EAC1BE,EAAkBhN,GAAe,SAAUtI,GAC1C,MAAuC,CAAC,EAAjCnD,EAASqY,EAAclV,CAAK,CACpC,EAAGoV,EAAkB,CAAA,CAAK,EAC1BlC,EAAW,CAAE,SAAUlT,EAAMnB,EAASgR,GAQrC,OAPInQ,EAAQ,CAACyV,IAAqBtF,GAAOhR,IAAYmG,MAClDkQ,EAAerW,GAAU9C,SAC1BsZ,EACAC,GADctV,EAAMnB,EAASgR,CAAI,EAInCqF,EAAe,KACRxV,CACR,GAEO5B,EAAI2C,EAAK3C,CAAC,GACjB,GAAO6S,EAAUjM,EAAKgK,SAAU+D,EAAQ3U,GAAIR,MAC3C4V,EAAW,CAAE5K,GAAe2K,GAAgBC,CAAS,EAAGvC,CAAQ,OAC1D,CAIN,IAHAA,EAAUjM,EAAK0H,OAAQqG,EAAQ3U,GAAIR,MAAOX,MAAO,KAAM8V,EAAQ3U,GAAI6E,OAAQ,GAG7DjB,GAAY,CAIzB,IADAhB,EAAI,EAAE5C,EACE4C,EAAID,GACNiE,CAAAA,EAAKgK,SAAU+D,EAAQ/R,GAAIpD,MADhBoD,CAAC,IAKlB,OAAO4S,GACF,EAAJxV,GAASmV,GAAgBC,CAAS,EAC9B,EAAJpV,GAASgM,EAGT2I,EACEnW,MAAO,EAAGwB,EAAI,CAAE,EAChBpB,OAAQ,CAAEoG,MAAgC,MAAzB2P,EAAQ3U,EAAI,GAAIR,KAAe,IAAM,EAAG,CAAE,CAC7D,EAAEuE,QAASiF,EAAO,IAAK,EACvB6J,EACA7S,EAAI4C,GAAKuU,EAAmBxC,EAAOnW,MAAOwB,EAAG4C,CAAE,CAAE,EACjDA,EAAID,GAAOwU,EAAqBxC,EAASA,EAAOnW,MAAOoE,CAAE,CAAI,EAC7DA,EAAID,GAAOqJ,EAAY2I,CAAO,CAC/B,CACD,CACAS,EAAStW,KAAM+T,CAAQ,CACxB,CAGD,OAAOsC,GAAgBC,CAAS,CACjC,EA6I+BlK,EAAOlL,EAAI,GAC1B4D,GACZyS,EAEAD,GAFYtX,KAAMoY,CAAO,GAO3BA,EAASjP,EACRnH,EACAqV,GAA0BC,EAAiBC,CAAY,CACxD,GAGOvV,SAAWA,CACnB,CACA,OAAOoW,CACR,EAWAjQ,EAASlB,EAAOkB,OAAS,SAAUnG,EAAUC,EAAS0D,EAASsG,GAC9D,IAAI/K,EAAG2U,EAAQ8C,EAAOjY,EAAMgP,EAC3BkJ,EAA+B,YAApB,OAAO5W,GAA2BA,EAC7CoK,EAAQ,CAACH,GAAQhE,EAAYjG,EAAW4W,EAAS5W,UAAYA,CAAW,EAMzE,GAJA2D,EAAUA,GAAW,GAIC,IAAjByG,EAAM/J,OAAe,CAIzB,GAAqB,GADrBwT,EAASzJ,EAAO,GAAMA,EAAO,GAAI1M,MAAO,CAAE,GAC9B2C,QAA+C,QAA/BsW,EAAQ9C,EAAQ,IAAMnV,MAC5B,IAArBuB,EAAQ9C,UAAkBqJ,GAAkBV,EAAKgK,SAAU+D,EAAQ,GAAInV,MAAS,CAIhF,GAAMuB,EAFNA,GAAY6F,EAAK4H,KAAW,GAAGiJ,EAAM5S,QAAS,GAC5Cd,QAASsG,EAAWrE,CAAU,EAAGjF,CAAQ,GAAK,IAAM,IAErD,OAAO0D,EAGIiT,IACX3W,EAAUA,EAAQN,YAGnBK,EAAWA,EAAStC,MAAOmW,EAAOlI,MAAM,EAAEzH,MAAM7D,MAAO,CACxD,CAIA,IADAnB,EAAIsJ,EAA0B,aAAEuC,KAAM/K,CAAS,EAAI,EAAI6T,EAAOxT,OACtDnB,CAAC,KACRyX,EAAQ9C,EAAQ3U,GAGX4G,CAAAA,EAAKgK,SAAYpR,EAAOiY,EAAMjY,QAGnC,IAAOgP,EAAO5H,EAAK4H,KAAMhP,MAGjBuL,EAAOyD,EACbiJ,EAAM5S,QAAS,GAAId,QAASsG,EAAWrE,CAAU,EACjDoE,GAASyB,KAAM8I,EAAQ,GAAInV,IAAK,GAAKsM,GAAa/K,EAAQN,UAAW,GACpEM,CACF,GAAM,CAKL,GAFA4T,EAAO5R,OAAQ/C,EAAG,CAAE,EACpBc,EAAWiK,EAAK5J,QAAU6K,EAAY2I,CAAO,EAM7C,MAHC,OADA7V,EAAKD,MAAO4F,EAASsG,CAAK,EACnBtG,CAIT,CAGH,CAWA,OAPEiT,GAAY1Q,EAASlG,EAAUoK,CAAM,GACtCH,EACAhK,EACA,CAACuG,EACD7C,EACA,CAAC1D,GAAWqJ,GAASyB,KAAM/K,CAAS,GAAKgL,GAAa/K,EAAQN,UAAW,GAAKM,CAC/E,EACO0D,CACR,EAKAnF,EAAQgR,WAAa1M,EAAQwB,MAAO,EAAG,EAAEtC,KAAMqF,CAAU,EAAE8D,KAAM,EAAG,IAAMrI,EAI1EtE,EAAQ+Q,iBAAmB,CAAC,CAACjJ,EAG7BT,EAAY,EAIZrH,EAAQmQ,aAAe9C,EAAQ,SAAUC,GAGxC,OAA4E,EAArEA,EAAGyC,wBAAyB5R,EAAS0C,cAAe,UAAW,CAAE,CACzE,CAAE,EAKIwM,EAAQ,SAAUC,GAEvB,OADAA,EAAGiC,UAAY,mBACiC,MAAzCjC,EAAG4D,WAAWnQ,aAAc,MAAO,CAC3C,CAAE,GACDwM,GAAW,yBAA0B,SAAU3K,EAAMgB,EAAM4D,GAC1D,GAAK,CAACA,EACL,OAAO5E,EAAK7B,aAAc6C,EAA6B,SAAvBA,EAAKoC,YAAY,EAAe,EAAI,CAAE,CAExE,CAAE,EAKGhG,EAAQsJ,YAAe+D,EAAQ,SAAUC,GAG9C,OAFAA,EAAGiC,UAAY,WACfjC,EAAG4D,WAAWlQ,aAAc,QAAS,EAAG,EACS,KAA1CsM,EAAG4D,WAAWnQ,aAAc,OAAQ,CAC5C,CAAE,GACDwM,GAAW,QAAS,SAAU3K,EAAMyV,EAAO7Q,GAC1C,GAAK,CAACA,GAAyC,UAAhC5E,EAAKwI,SAASpF,YAAY,EACxC,OAAOpD,EAAK0V,YAEd,CAAE,EAKGjL,EAAQ,SAAUC,GACvB,OAAwC,MAAjCA,EAAGvM,aAAc,UAAW,CACpC,CAAE,GACDwM,GAAWpE,EAAU,SAAUvG,EAAMgB,EAAM4D,GAE1C,GAAK,CAACA,EACL,MAAwB,CAAA,IAAjB5E,EAAMgB,GAAkBA,EAAKoC,YAAY,GAC7CrF,EAAMiC,EAAKuM,iBAAkBvL,CAAK,IAAOjD,EAAIgQ,UAC9ChQ,EAAI+E,MACJ,IAEJ,CAAE,EAGIe,CAEL,EAAGnI,CAAO,EA+CRia,GA3CJhX,EAAO2N,KAAOzI,EACdlF,EAAOiP,KAAO/J,EAAO2K,UAGrB7P,EAAOiP,KAAM,KAAQjP,EAAOiP,KAAKjH,QACjChI,EAAOsP,WAAatP,EAAOiX,OAAS/R,EAAOoK,WAC3CtP,EAAOT,KAAO2F,EAAOc,QACrBhG,EAAOkX,SAAWhS,EAAOe,MACzBjG,EAAO4G,SAAW1B,EAAO0B,SACzB5G,EAAOmX,eAAiBjS,EAAOE,OAkCXpF,EAAOiP,KAAK5E,MAAMpB,cAItC,SAASY,EAAUxI,EAAMgB,GAExB,OAAOhB,EAAKwI,UAAYxI,EAAKwI,SAASpF,YAAY,IAAMpC,EAAKoC,YAAY,CAE1E,CACA,IAAI2S,EAAa,kEAKjB,SAASC,EAAQnI,EAAUoI,EAAWvF,GACrC,OAAK7U,EAAYoa,CAAU,EACnBtX,EAAO2B,KAAMuN,EAAU,SAAU7N,EAAMlC,GAC7C,MAAO,CAAC,CAACmY,EAAUxZ,KAAMuD,EAAMlC,EAAGkC,CAAK,IAAM0Q,CAC9C,CAAE,EAIEuF,EAAUla,SACP4C,EAAO2B,KAAMuN,EAAU,SAAU7N,GACvC,OAASA,IAASiW,IAAgBvF,CACnC,CAAE,EAIuB,UAArB,OAAOuF,EACJtX,EAAO2B,KAAMuN,EAAU,SAAU7N,GACvC,MAA2C,CAAC,EAAnCnD,EAAQJ,KAAMwZ,EAAWjW,CAAK,IAAa0Q,CACrD,CAAE,EAII/R,EAAOyN,OAAQ6J,EAAWpI,EAAU6C,CAAI,CAChD,CAEA/R,EAAOyN,OAAS,SAAUwB,EAAMnO,EAAOiR,GACtC,IAAI1Q,EAAOP,EAAO,GAMlB,OAJKiR,IACJ9C,EAAO,QAAUA,EAAO,KAGH,IAAjBnO,EAAMR,QAAkC,IAAlBe,EAAKjE,SACxB4C,EAAO2N,KAAKM,gBAAiB5M,EAAM4N,CAAK,EAAI,CAAE5N,GAAS,GAGxDrB,EAAO2N,KAAK3J,QAASiL,EAAMjP,EAAO2B,KAAMb,EAAO,SAAUO,GAC/D,OAAyB,IAAlBA,EAAKjE,QACb,CAAE,CAAE,CACL,EAEA4C,EAAOG,GAAGgC,OAAQ,CACjBwL,KAAM,SAAU1N,GACf,IAAId,EAAG4B,EACNe,EAAM9E,KAAKsD,OACXiX,EAAOva,KAER,GAAyB,UAApB,OAAOiD,EACX,OAAOjD,KAAK6D,UAAWb,EAAQC,CAAS,EAAEwN,OAAQ,WACjD,IAAMtO,EAAI,EAAGA,EAAI2C,EAAK3C,CAAC,GACtB,GAAKa,EAAO4G,SAAU2Q,EAAMpY,GAAKnC,IAAK,EACrC,MAAO,CAAA,CAGV,CAAE,CAAE,EAKL,IAFA+D,EAAM/D,KAAK6D,UAAW,EAAG,EAEnB1B,EAAI,EAAGA,EAAI2C,EAAK3C,CAAC,GACtBa,EAAO2N,KAAM1N,EAAUsX,EAAMpY,GAAK4B,CAAI,EAGvC,OAAa,EAANe,EAAU9B,EAAOsP,WAAYvO,CAAI,EAAIA,CAC7C,EACA0M,OAAQ,SAAUxN,GACjB,OAAOjD,KAAK6D,UAAWwW,EAAQra,KAAMiD,GAAY,GAAI,CAAA,CAAM,CAAE,CAC9D,EACA8R,IAAK,SAAU9R,GACd,OAAOjD,KAAK6D,UAAWwW,EAAQra,KAAMiD,GAAY,GAAI,CAAA,CAAK,CAAE,CAC7D,EACA6E,GAAI,SAAU7E,GACb,MAAO,CAAC,CAACoX,EACRra,KAIoB,UAApB,OAAOiD,GAAyB+W,EAAchM,KAAM/K,CAAS,EAC5DD,EAAQC,CAAS,EACjBA,GAAY,GACb,CAAA,CACD,EAAEK,MACH,CACD,CAAE,EAOF,IAAIkX,EAMHlO,GAAa,sCA4GVmO,KA1GIzX,EAAOG,GAAGC,KAAO,SAAUH,EAAUC,EAASqS,GAIpD,GAAMtS,EAAN,CASA,GAHAsS,EAAOA,GAAQiF,EAGU,UAApB,OAAOvX,EAoEL,OAAKA,EAAS7C,UACpBJ,KAAM,GAAMiD,EACZjD,KAAKsD,OAAS,EACPtD,MAIIE,EAAY+C,CAAS,EACV6C,KAAAA,IAAfyP,EAAKmF,MACXnF,EAAKmF,MAAOzX,CAAS,EAGrBA,EAAUD,CAAO,EAGZA,EAAO2D,UAAW1D,EAAUjD,IAAK,EAtEvC,GAAKqN,EAPJA,EALsB,MAAlBpK,EAAU,IACsB,MAApCA,EAAUA,EAASK,OAAS,IACT,GAAnBL,EAASK,OAGD,CAAE,KAAML,EAAU,MAGlBqJ,GAAWoB,KAAMzK,CAAS,IAInBoK,CAAAA,EAAO,IAAQnK,EA6CxB,OAAK,CAACA,GAAWA,EAAQM,OACtBN,GAAWqS,EAKbvV,KAAKyD,YAAaP,CAAQ,GALNyN,KAAM1N,CAAS,EA3C1C,GAAKoK,EAAO,IAYX,GAXAnK,EAAUA,aAAmBF,EAASE,EAAS,GAAMA,EAIrDF,EAAOgB,MAAOhE,KAAMgD,EAAO2X,UAC1BtN,EAAO,GACPnK,GAAWA,EAAQ9C,SAAW8C,EAAQuK,eAAiBvK,EAAUtD,EACjE,CAAA,CACD,CAAE,EAGGwa,EAAWpM,KAAMX,EAAO,EAAI,GAAKrK,EAAO2C,cAAezC,CAAQ,EACnE,IAzCJ,IAAImK,KAyCenK,EAGThD,EAAYF,KAAMqN,EAAQ,EAC9BrN,KAAMqN,GAASnK,EAASmK,EAAQ,EAIhCrN,KAAKmS,KAAM9E,EAAOnK,EAASmK,EAAQ,CAGtC,MAMAhJ,EAAOzE,EAAS+N,eAAgBN,EAAO,EAAI,KAK1CrN,KAAM,GAAMqE,EACZrE,KAAKsD,OAAS,EA3DlB,CA6DG,OAAOtD,IA8BX,GAGIuD,UAAYP,EAAOG,GAGxBqX,EAAaxX,EAAQpD,CAAS,EAGX,kCAGlBgb,GAAmB,CAClBC,SAAU,CAAA,EACVC,SAAU,CAAA,EACVhO,KAAM,CAAA,EACNiO,KAAM,CAAA,CACP,EAmFD,SAASC,GAAS3L,EAAK3H,GACtB,MAAU2H,EAAMA,EAAK3H,KAA4B,IAAjB2H,EAAIjP,WACpC,OAAOiP,CACR,CApFArM,EAAOG,GAAGgC,OAAQ,CACjB+P,IAAK,SAAUzP,GACd,IAAIwV,EAAUjY,EAAQyC,EAAQzF,IAAK,EAClCkb,EAAID,EAAQ3X,OAEb,OAAOtD,KAAKyQ,OAAQ,WAEnB,IADA,IAAItO,EAAI,EACAA,EAAI+Y,EAAG/Y,CAAC,GACf,GAAKa,EAAO4G,SAAU5J,KAAMib,EAAS9Y,EAAI,EACxC,MAAO,CAAA,CAGV,CAAE,CACH,EAEAgZ,QAAS,SAAUtI,EAAW3P,GAC7B,IAAImM,EACHlN,EAAI,EACJ+Y,EAAIlb,KAAKsD,OACTsE,EAAU,GACVqT,EAA+B,UAArB,OAAOpI,GAA0B7P,EAAQ6P,CAAU,EAG9D,GAAK,CAACmH,EAAchM,KAAM6E,CAAU,EACnC,KAAQ1Q,EAAI+Y,EAAG/Y,CAAC,GACf,IAAMkN,EAAMrP,KAAMmC,GAAKkN,GAAOA,IAAQnM,EAASmM,EAAMA,EAAIzM,WAGxD,GAAKyM,EAAIjP,SAAW,KAAQ6a,EACJ,CAAC,EAAxBA,EAAQG,MAAO/L,CAAI,EAGF,IAAjBA,EAAIjP,UACH4C,EAAO2N,KAAKM,gBAAiB5B,EAAKwD,CAAU,GAAM,CAEnDjL,EAAQ3G,KAAMoO,CAAI,EAClB,KACD,CAKH,OAAOrP,KAAK6D,UAA4B,EAAjB+D,EAAQtE,OAAaN,EAAOsP,WAAY1K,CAAQ,EAAIA,CAAQ,CACpF,EAGAwT,MAAO,SAAU/W,GAGhB,OAAMA,EAKe,UAAhB,OAAOA,EACJnD,EAAQJ,KAAMkC,EAAQqB,CAAK,EAAGrE,KAAM,EAAI,EAIzCkB,EAAQJ,KAAMd,KAGpBqE,EAAKb,OAASa,EAAM,GAAMA,CAC3B,EAbUrE,KAAM,IAAOA,KAAM,GAAI4C,WAAe5C,KAAKuE,MAAM,EAAE8W,QAAQ,EAAE/X,OAAS,CAAC,CAclF,EAEAgY,IAAK,SAAUrY,EAAUC,GACxB,OAAOlD,KAAK6D,UACXb,EAAOsP,WACNtP,EAAOgB,MAAOhE,KAAK2D,IAAI,EAAGX,EAAQC,EAAUC,CAAQ,CAAE,CACvD,CACD,CACD,EAEAqY,QAAS,SAAUtY,GAClB,OAAOjD,KAAKsb,IAAiB,MAAZrY,EAChBjD,KAAKiE,WAAajE,KAAKiE,WAAWwM,OAAQxN,CAAS,CACpD,CACD,CACD,CAAE,EAOFD,EAAOkB,KAAM,CACZqQ,OAAQ,SAAUlQ,GACbkQ,EAASlQ,EAAKzB,WAClB,OAAO2R,GAA8B,KAApBA,EAAOnU,SAAkBmU,EAAS,IACpD,EACAiH,QAAS,SAAUnX,GAClB,OAAOqD,EAAKrD,EAAM,YAAa,CAChC,EACAoX,aAAc,SAAUpX,EAAMmD,EAAIG,GACjC,OAAOD,EAAKrD,EAAM,aAAcsD,CAAM,CACvC,EACAmF,KAAM,SAAUzI,GACf,OAAO2W,GAAS3W,EAAM,aAAc,CACrC,EACA0W,KAAM,SAAU1W,GACf,OAAO2W,GAAS3W,EAAM,iBAAkB,CACzC,EACAqX,QAAS,SAAUrX,GAClB,OAAOqD,EAAKrD,EAAM,aAAc,CACjC,EACAgX,QAAS,SAAUhX,GAClB,OAAOqD,EAAKrD,EAAM,iBAAkB,CACrC,EACAsX,UAAW,SAAUtX,EAAMmD,EAAIG,GAC9B,OAAOD,EAAKrD,EAAM,cAAesD,CAAM,CACxC,EACAiU,UAAW,SAAUvX,EAAMmD,EAAIG,GAC9B,OAAOD,EAAKrD,EAAM,kBAAmBsD,CAAM,CAC5C,EACAI,SAAU,SAAU1D,GACnB,OAAO0D,GAAY1D,EAAKzB,YAAc,IAAK+P,WAAYtO,CAAK,CAC7D,EACAwW,SAAU,SAAUxW,GACnB,OAAO0D,EAAU1D,EAAKsO,UAAW,CAClC,EACAmI,SAAU,SAAUzW,GACnB,OAA6B,MAAxBA,EAAKwX,iBAKTrb,EAAU6D,EAAKwX,eAAgB,EAExBxX,EAAKwX,iBAMRhP,EAAUxI,EAAM,UAAW,IAC/BA,EAAOA,EAAKyX,SAAWzX,GAGjBrB,EAAOgB,MAAO,GAAIK,EAAK0I,UAAW,EAC1C,CACD,EAAG,SAAU1H,EAAMlC,GAClBH,EAAOG,GAAIkC,GAAS,SAAUsC,EAAO1E,GACpC,IAAI2E,EAAU5E,EAAOoB,IAAKpE,KAAMmD,EAAIwE,CAAM,EAuB1C,OApBC1E,EADyB,UAArBoC,EAAK1E,MAAO,CAAC,CAAE,EACRgH,EAGP1E,IAAgC,UAApB,OAAOA,IACvB2E,EAAU5E,EAAOyN,OAAQxN,EAAU2E,CAAQ,GAGzB,EAAd5H,KAAKsD,SAGHsX,GAAkBvV,IACvBrC,EAAOsP,WAAY1K,CAAQ,EAIvB6S,GAAazM,KAAM3I,CAAK,IAC5BuC,EAAQmU,QAAQ,EAIX/b,KAAK6D,UAAW+D,CAAQ,CAChC,CACD,CAAE,EACF,IAAIoU,EAAgB,oBAsOpB,SAASC,EAAUC,GAClB,OAAOA,CACR,CACA,SAASC,GAASC,GACjB,MAAMA,CACP,CAEA,SAASC,GAAYlV,EAAOmV,EAASC,EAAQC,GAC5C,IAAIC,EAEJ,IAGMtV,GAASjH,EAAcuc,EAAStV,EAAMuV,OAAU,EACpDD,EAAO3b,KAAMqG,CAAM,EAAE6C,KAAMsS,CAAQ,EAAEK,KAAMJ,CAAO,EAGvCpV,GAASjH,EAAcuc,EAAStV,EAAMyV,IAAO,EACxDH,EAAO3b,KAAMqG,EAAOmV,EAASC,CAAO,EAQpCD,EAAQtb,MAAO8E,KAAAA,EAAW,CAAEqB,GAAQxG,MAAO6b,CAAQ,CAAE,CAWvD,CALE,MAAQrV,GAIToV,EAAOvb,MAAO8E,KAAAA,EAAW,CAAEqB,EAAQ,CACpC,CACD,CAzOAnE,EAAO6Z,UAAY,SAAUzX,GA9B7B,IAAwBA,EACnB0X,EAiCJ1X,EAA6B,UAAnB,OAAOA,GAlCMA,EAmCPA,EAlCZ0X,EAAS,GACb9Z,EAAOkB,KAAMkB,EAAQiI,MAAO2O,CAAc,GAAK,GAAI,SAAUe,EAAGC,GAC/DF,EAAQE,GAAS,CAAA,CAClB,CAAE,EACKF,GA+BN9Z,EAAOmC,OAAQ,GAAIC,CAAQ,EAwBpB,SAAP6X,IAQC,IALAC,EAASA,GAAU9X,EAAQ+X,KAI3BC,EAAQC,EAAS,CAAA,EACTC,EAAMha,OAAQia,EAAc,CAAC,EAEpC,IADAC,EAASF,EAAM1O,MAAM,EACb,EAAE2O,EAAc5S,EAAKrH,QAGmC,CAAA,IAA1DqH,EAAM4S,GAAcvc,MAAOwc,EAAQ,GAAKA,EAAQ,EAAI,GACxDpY,EAAQqY,cAGRF,EAAc5S,EAAKrH,OACnBka,EAAS,CAAA,GAMNpY,EAAQoY,SACbA,EAAS,CAAA,GAGVH,EAAS,CAAA,EAGJH,IAIHvS,EADI6S,EACG,GAIA,GAGV,CAhED,IACCH,EAGAG,EAGAJ,EAGAF,EAGAvS,EAAO,GAGP2S,EAAQ,GAGRC,EAAc,CAAC,EAgDfhD,EAAO,CAGNe,IAAK,WA2BJ,OA1BK3Q,IAGC6S,GAAU,CAACH,IACfE,EAAc5S,EAAKrH,OAAS,EAC5Bga,EAAMrc,KAAMuc,CAAO,GAGpB,SAAWlC,EAAK1G,GACf5R,EAAOkB,KAAM0Q,EAAM,SAAUmI,EAAG7V,GAC1BhH,EAAYgH,CAAI,EACd9B,EAAQ6U,QAAWM,EAAKrF,IAAKhO,CAAI,GACtCyD,EAAK1J,KAAMiG,CAAI,EAELA,GAAOA,EAAI5D,QAA4B,WAAlBR,EAAQoE,CAAI,GAG5CoU,EAAKpU,CAAI,CAEX,CAAE,CACD,EAAG5C,SAAU,EAEVkZ,IAAU,CAACH,GACfJ,EAAK,EAGAjd,IACR,EAGA0d,OAAQ,WAYP,OAXA1a,EAAOkB,KAAMI,UAAW,SAAUyY,EAAG7V,GAEpC,IADA,IAAIkU,EACqD,CAAC,GAAhDA,EAAQpY,EAAO6D,QAASK,EAAKyD,EAAMyQ,CAAM,IAClDzQ,EAAKzF,OAAQkW,EAAO,CAAE,EAGjBA,GAASmC,GACbA,CAAW,EAGd,CAAE,EACKvd,IACR,EAIAkV,IAAK,SAAU/R,GACd,OAAOA,EACuB,CAAC,EAA9BH,EAAO6D,QAAS1D,EAAIwH,CAAK,EACX,EAAdA,EAAKrH,MACP,EAGA2S,MAAO,WAIN,OAHKtL,EAAAA,GACG,GAED3K,IACR,EAKA2d,QAAS,WAGR,OAFAT,EAASI,EAAQ,GACjB3S,EAAO6S,EAAS,GACTxd,IACR,EACA4M,SAAU,WACT,MAAO,CAACjC,CACT,EAKAiT,KAAM,WAKL,OAJAV,EAASI,EAAQ,GACXE,GAAWH,IAChB1S,EAAO6S,EAAS,IAEVxd,IACR,EACAkd,OAAQ,WACP,MAAO,CAAC,CAACA,CACV,EAGAW,SAAU,SAAU3a,EAAS0R,GAS5B,OARMsI,IAELtI,EAAO,CAAE1R,GADT0R,EAAOA,GAAQ,IACQjU,MAAQiU,EAAKjU,MAAM,EAAIiU,GAC9C0I,EAAMrc,KAAM2T,CAAK,EACXyI,IACLJ,EAAK,EAGAjd,IACR,EAGAid,KAAM,WAEL,OADA1C,EAAKsD,SAAU7d,KAAMsE,SAAU,EACxBtE,IACR,EAGAod,MAAO,WACN,MAAO,CAAC,CAACA,CACV,CACD,EAED,OAAO7C,CACR,EA2CAvX,EAAOmC,OAAQ,CAEd2Y,SAAU,SAAUC,GACnB,IAAIC,EAAS,CAIX,CAAE,SAAU,WAAYhb,EAAO6Z,UAAW,QAAS,EAClD7Z,EAAO6Z,UAAW,QAAS,EAAG,GAC/B,CAAE,UAAW,OAAQ7Z,EAAO6Z,UAAW,aAAc,EACpD7Z,EAAO6Z,UAAW,aAAc,EAAG,EAAG,YACvC,CAAE,SAAU,OAAQ7Z,EAAO6Z,UAAW,aAAc,EACnD7Z,EAAO6Z,UAAW,aAAc,EAAG,EAAG,aAExCoB,EAAQ,UACRvB,EAAU,CACTuB,MAAO,WACN,OAAOA,CACR,EACAC,OAAQ,WAEP,OADAC,EAASnU,KAAM1F,SAAU,EAAEqY,KAAMrY,SAAU,EACpCtE,IACR,EACAoe,MAAS,SAAUjb,GAClB,OAAOuZ,EAAQE,KAAM,KAAMzZ,CAAG,CAC/B,EAGAkb,KAAM,WACL,IAAIC,EAAMha,UAEV,OAAOtB,EAAO8a,SAAU,SAAUS,GACjCvb,EAAOkB,KAAM8Z,EAAQ,SAAUxW,EAAIgX,GAGlC,IAAIrb,EAAKjD,EAAYoe,EAAKE,EAAO,GAAM,GAAKF,EAAKE,EAAO,IAKxDL,EAAUK,EAAO,IAAO,WACvB,IAAIC,EAAWtb,GAAMA,EAAGnC,MAAOhB,KAAMsE,SAAU,EAC1Cma,GAAYve,EAAYue,EAAS/B,OAAQ,EAC7C+B,EAAS/B,QAAQ,EACfgC,SAAUH,EAASI,MAAO,EAC1B3U,KAAMuU,EAASjC,OAAQ,EACvBK,KAAM4B,EAAShC,MAAO,EAExBgC,EAAUC,EAAO,GAAM,QACtBxe,KACAmD,EAAK,CAAEsb,GAAana,SACrB,CAEF,CAAE,CACH,CAAE,EACFga,EAAM,IACP,CAAE,EAAE5B,QAAQ,CACb,EACAE,KAAM,SAAUgC,EAAaC,EAAYC,GACxC,IAAIC,EAAW,EACf,SAASzC,EAAS0C,EAAOb,EAAUjP,EAAS+P,GAC3C,OAAO,WAGQ,SAAbC,IACC,IAAIT,EAAU7B,EAKd,GAAKoC,EAAAA,EAAQD,GAAb,CAQA,IAJAN,EAAWvP,EAAQlO,MAAOme,EAAMvK,CAAK,KAInBuJ,EAASzB,QAAQ,EAClC,MAAM,IAAI0C,UAAW,0BAA2B,EAOjDxC,EAAO6B,IAKgB,UAApB,OAAOA,GACY,YAApB,OAAOA,IACRA,EAAS7B,KAGL1c,EAAY0c,CAAK,EAGhBqC,EACJrC,EAAK9b,KACJ2d,EACAnC,EAASyC,EAAUZ,EAAUlC,EAAUgD,CAAQ,EAC/C3C,EAASyC,EAAUZ,EAAUhC,GAAS8C,CAAQ,CAC/C,GAMAF,CAAQ,GAERnC,EAAK9b,KACJ2d,EACAnC,EAASyC,EAAUZ,EAAUlC,EAAUgD,CAAQ,EAC/C3C,EAASyC,EAAUZ,EAAUhC,GAAS8C,CAAQ,EAC9C3C,EAASyC,EAAUZ,EAAUlC,EAC5BkC,EAASkB,UAAW,CACtB,IAQInQ,IAAY+M,IAChBkD,EAAOrZ,KAAAA,EACP8O,EAAO,CAAE6J,KAKRQ,GAAWd,EAASmB,aAAeH,EAAMvK,CAAK,EA7DjD,CA+DD,CAzED,IAAIuK,EAAOnf,KACV4U,EAAOtQ,UA2EPib,EAAUN,EACTC,EACA,WACC,IACCA,EAAW,CAsBZ,CArBE,MAAQlS,GAEJhK,EAAO8a,SAAS0B,eACpBxc,EAAO8a,SAAS0B,cAAexS,EAC9BuS,EAAQE,UAAW,EAMHV,GAAbC,EAAQ,IAIP9P,IAAYiN,KAChBgD,EAAOrZ,KAAAA,EACP8O,EAAO,CAAE5H,IAGVmR,EAASuB,WAAYP,EAAMvK,CAAK,EAElC,CACD,EAMGoK,EACJO,EAAQ,GAKHvc,EAAO8a,SAAS6B,eACpBJ,EAAQE,WAAazc,EAAO8a,SAAS6B,aAAa,GAEnD5f,EAAO6f,WAAYL,CAAQ,EAE7B,CACD,CAEA,OAAOvc,EAAO8a,SAAU,SAAUS,GAGjCP,EAAQ,GAAK,GAAI1C,IAChBgB,EACC,EACAiC,EACAre,EAAY4e,CAAW,EACtBA,EACA7C,EACDsC,EAASc,UACV,CACD,EAGArB,EAAQ,GAAK,GAAI1C,IAChBgB,EACC,EACAiC,EACAre,EAAY0e,CAAY,EACvBA,EACA3C,CACF,CACD,EAGA+B,EAAQ,GAAK,GAAI1C,IAChBgB,EACC,EACAiC,EACAre,EAAY2e,CAAW,EACtBA,EACA1C,EACF,CACD,CACD,CAAE,EAAEO,QAAQ,CACb,EAIAA,QAAS,SAAUvc,GAClB,OAAc,MAAPA,EAAc6C,EAAOmC,OAAQhF,EAAKuc,CAAQ,EAAIA,CACtD,CACD,EACAyB,EAAW,GAkEZ,OA/DAnb,EAAOkB,KAAM8Z,EAAQ,SAAU7b,EAAGqc,GACjC,IAAI7T,EAAO6T,EAAO,GACjBqB,EAAcrB,EAAO,GAKtB9B,EAAS8B,EAAO,IAAQ7T,EAAK2Q,IAGxBuE,GACJlV,EAAK2Q,IACJ,WAIC2C,EAAQ4B,CACT,EAIA7B,EAAQ,EAAI7b,GAAK,GAAIwb,QAIrBK,EAAQ,EAAI7b,GAAK,GAAIwb,QAGrBK,EAAQ,GAAK,GAAIJ,KAGjBI,EAAQ,GAAK,GAAIJ,IAClB,EAMDjT,EAAK2Q,IAAKkD,EAAO,GAAIvB,IAAK,EAK1BkB,EAAUK,EAAO,IAAQ,WAExB,OADAL,EAAUK,EAAO,GAAM,QAAUxe,OAASme,EAAWrY,KAAAA,EAAY9F,KAAMsE,SAAU,EAC1EtE,IACR,EAKAme,EAAUK,EAAO,GAAM,QAAW7T,EAAKkT,QACxC,CAAE,EAGFnB,EAAQA,QAASyB,CAAS,EAGrBJ,GACJA,EAAKjd,KAAMqd,EAAUA,CAAS,EAIxBA,CACR,EAGA2B,KAAM,SAAUC,GAiBD,SAAbC,EAAuB7d,GACtB,OAAO,SAAUgF,GAChB8Y,EAAiB9d,GAAMnC,KACvBkgB,EAAe/d,GAAyB,EAAnBmC,UAAUhB,OAAa3C,EAAMG,KAAMwD,SAAU,EAAI6C,EAChE,EAAIgZ,GACTC,EAAQd,YAAaW,EAAiBC,CAAc,CAEtD,CACD,CAxBD,IAGCC,EAAY7b,UAAUhB,OAGtBnB,EAAIge,EAGJF,EAAkBra,MAAOzD,CAAE,EAC3B+d,EAAgBvf,EAAMG,KAAMwD,SAAU,EAGtC8b,EAAUpd,EAAO8a,SAAS,EAc3B,GAAKqC,GAAa,IACjB9D,GAAY0D,EAAaK,EAAQpW,KAAMgW,EAAY7d,CAAE,CAAE,EAAEma,QAAS8D,EAAQ7D,OACzE,CAAC4D,CAAU,EAGa,YAApBC,EAAQnC,MAAM,GAClB/d,EAAYggB,EAAe/d,IAAO+d,EAAe/d,GAAIya,IAAK,GAE1D,OAAOwD,EAAQxD,KAAK,EAKtB,KAAQza,CAAC,IACRka,GAAY6D,EAAe/d,GAAK6d,EAAY7d,CAAE,EAAGie,EAAQ7D,MAAO,EAGjE,OAAO6D,EAAQ1D,QAAQ,CACxB,CACD,CAAE,EAKF,IAAI2D,GAAc,yDAwBdC,IAtBJtd,EAAO8a,SAAS0B,cAAgB,SAAUpZ,EAAOma,GAI3CxgB,EAAOygB,SAAWzgB,EAAOygB,QAAQC,MAAQra,GAASia,GAAYrS,KAAM5H,EAAMf,IAAK,GACnFtF,EAAOygB,QAAQC,KAAM,8BAAgCra,EAAMsa,QAASta,EAAMma,MAAOA,CAAM,CAEzF,EAKAvd,EAAO2d,eAAiB,SAAUva,GACjCrG,EAAO6f,WAAY,WAClB,MAAMxZ,CACP,CAAE,CACH,EAMgBpD,EAAO8a,SAAS,GAkDhC,SAAS8C,KACRhhB,EAASihB,oBAAqB,mBAAoBD,EAAU,EAC5D7gB,EAAO8gB,oBAAqB,OAAQD,EAAU,EAC9C5d,EAAO0X,MAAM,CACd,CApDA1X,EAAOG,GAAGuX,MAAQ,SAAUvX,GAY3B,OAVAmd,GACE1D,KAAMzZ,CAAG,EAKTib,MAAO,SAAUhY,GACjBpD,EAAO2d,eAAgBva,CAAM,CAC9B,CAAE,EAEIpG,IACR,EAEAgD,EAAOmC,OAAQ,CAGdgB,QAAS,CAAA,EAIT2a,UAAW,EAGXpG,MAAO,SAAUqG,IAGF,CAAA,IAATA,EAAgB,EAAE/d,EAAO8d,UAAY9d,EAAOmD,WAKjDnD,EAAOmD,QAAU,CAAA,KAGZ4a,GAAsC,EAArB,EAAE/d,EAAO8d,WAK/BR,GAAUhB,YAAa1f,EAAU,CAAEoD,EAAS,CAC7C,CACD,CAAE,EAEFA,EAAO0X,MAAMkC,KAAO0D,GAAU1D,KAaD,aAAxBhd,EAASohB,YACa,YAAxBphB,EAASohB,YAA4B,CAACphB,EAASmQ,gBAAgBkR,SAGjElhB,EAAO6f,WAAY5c,EAAO0X,KAAM,GAKhC9a,EAASuQ,iBAAkB,mBAAoByQ,EAAU,EAGzD7gB,EAAOoQ,iBAAkB,OAAQyQ,EAAU,GAQ/B,SAATM,EAAmBpd,EAAOX,EAAIuL,EAAKvH,EAAOga,EAAWC,EAAUC,GAClE,IAAIlf,EAAI,EACP2C,EAAMhB,EAAMR,OACZge,EAAc,MAAP5S,EAGR,GAAuB,WAAlB5L,EAAQ4L,CAAI,EAEhB,IAAMvM,KADNgf,EAAY,CAAA,EACDzS,EACVwS,EAAQpd,EAAOX,EAAIhB,EAAGuM,EAAKvM,GAAK,CAAA,EAAMif,EAAUC,CAAI,OAI/C,GAAevb,KAAAA,IAAVqB,IACXga,EAAY,CAAA,EAENjhB,EAAYiH,CAAM,IACvBka,EAAM,CAAA,GAQLle,EALGme,EAGCD,GACJle,EAAGrC,KAAMgD,EAAOqD,CAAM,EACjB,OAILma,EAAOne,EACF,SAAUkB,EAAMkd,EAAMpa,GAC1B,OAAOma,EAAKxgB,KAAMkC,EAAQqB,CAAK,EAAG8C,CAAM,CACzC,GAIGhE,GACJ,KAAQhB,EAAI2C,EAAK3C,CAAC,GACjBgB,EACCW,EAAO3B,GAAKuM,EAAK2S,EAChBla,EACAA,EAAMrG,KAAMgD,EAAO3B,GAAKA,EAAGgB,EAAIW,EAAO3B,GAAKuM,CAAI,CAAE,CACnD,EAKH,OAAKyS,EACGrd,EAIHwd,EACGne,EAAGrC,KAAMgD,CAAM,EAGhBgB,EAAM3B,EAAIW,EAAO,GAAK4K,CAAI,EAAI0S,CACtC,CAzDA,IA6DII,GAAY,QACfC,GAAa,YAGd,SAASC,GAAYC,EAAMC,GAC1B,OAAOA,EAAOC,YAAY,CAC3B,CAKA,SAASC,EAAWC,GACnB,OAAOA,EAAO7b,QAASsb,GAAW,KAAM,EAAEtb,QAASub,GAAYC,EAAW,CAC3E,CACiB,SAAbM,EAAuBC,GAQ1B,OAA0B,IAAnBA,EAAM7hB,UAAqC,IAAnB6hB,EAAM7hB,UAAkB,CAAC,CAAG6hB,EAAM7hB,QAClE,CAKA,SAAS8hB,KACRliB,KAAK+F,QAAU/C,EAAO+C,QAAUmc,GAAKC,GAAG,EACzC,CAEAD,GAAKC,IAAM,EAEXD,GAAK3e,UAAY,CAEhBkL,MAAO,SAAUwT,GAGhB,IAAI9a,EAAQ8a,EAAOjiB,KAAK+F,SA4BxB,OAzBMoB,IACLA,EAAQ,GAKH6a,EAAYC,CAAM,IAIjBA,EAAM7hB,SACV6hB,EAAOjiB,KAAK+F,SAAYoB,EAMxB1G,OAAO2hB,eAAgBH,EAAOjiB,KAAK+F,QAAS,CAC3CoB,MAAOA,EACPkb,aAAc,CAAA,CACf,CAAE,IAKElb,CACR,EACAmb,IAAK,SAAUL,EAAOM,EAAMpb,GAC3B,IAAIqb,EACH/T,EAAQzO,KAAKyO,MAAOwT,CAAM,EAI3B,GAAqB,UAAhB,OAAOM,EACX9T,EAAOqT,EAAWS,CAAK,GAAMpb,OAM7B,IAAMqb,KAAQD,EACb9T,EAAOqT,EAAWU,CAAK,GAAMD,EAAMC,GAGrC,OAAO/T,CACR,EACA9K,IAAK,SAAUse,EAAOvT,GACrB,OAAe5I,KAAAA,IAAR4I,EACN1O,KAAKyO,MAAOwT,CAAM,EAGlBA,EAAOjiB,KAAK+F,UAAakc,EAAOjiB,KAAK+F,SAAW+b,EAAWpT,CAAI,EACjE,EACAwS,OAAQ,SAAUe,EAAOvT,EAAKvH,GAa7B,OAAarB,KAAAA,IAAR4I,GACCA,GAAsB,UAAf,OAAOA,GAAgC5I,KAAAA,IAAVqB,EAElCnH,KAAK2D,IAAKse,EAAOvT,CAAI,GAS7B1O,KAAKsiB,IAAKL,EAAOvT,EAAKvH,CAAM,EAIXrB,KAAAA,IAAVqB,EAAsBA,EAAQuH,EACtC,EACAgP,OAAQ,SAAUuE,EAAOvT,GACxB,IAAIvM,EACHsM,EAAQwT,EAAOjiB,KAAK+F,SAErB,GAAeD,KAAAA,IAAV2I,EAAL,CAIA,GAAa3I,KAAAA,IAAR4I,EAAoB,CAkBxBvM,GAXCuM,EAJI9I,MAAMC,QAAS6I,CAAI,EAIjBA,EAAItK,IAAK0d,CAAU,GAEzBpT,EAAMoT,EAAWpT,CAAI,KAIRD,EACZ,CAAEC,GACAA,EAAIrB,MAAO2O,CAAc,GAAK,IAG1B1Y,OAER,KAAQnB,CAAC,IACR,OAAOsM,EAAOC,EAAKvM,GAErB,CAGa2D,KAAAA,IAAR4I,GAAqB1L,CAAAA,EAAOyD,cAAegI,CAAM,IAMhDwT,EAAM7hB,SACV6hB,EAAOjiB,KAAK+F,SAAYD,KAAAA,EAExB,OAAOmc,EAAOjiB,KAAK+F,SArCrB,CAwCD,EACA0c,QAAS,SAAUR,GACdxT,EAAQwT,EAAOjiB,KAAK+F,SACxB,OAAiBD,KAAAA,IAAV2I,GAAuB,CAACzL,EAAOyD,cAAegI,CAAM,CAC5D,CACD,EACA,IAAIiU,EAAW,IAAIR,GAEfS,EAAW,IAAIT,GAcfU,GAAS,gCACZC,GAAa,SA2Bd,SAASC,GAAUze,EAAMqK,EAAK6T,GAC7B,IAAIld,EA1Bakd,EA8BjB,GAAczc,KAAAA,IAATyc,GAAwC,IAAlBle,EAAKjE,SAI/B,GAHAiF,EAAO,QAAUqJ,EAAIxI,QAAS2c,GAAY,KAAM,EAAEpb,YAAY,EAGzC,UAAhB,OAFL8a,EAAOle,EAAK7B,aAAc6C,CAAK,GAEC,CAC/B,IACCkd,EAnCW,UADGA,EAoCEA,IA/BL,UAATA,IAIS,SAATA,EACG,KAIHA,IAAS,CAACA,EAAO,GACd,CAACA,EAGJK,GAAO5U,KAAMuU,CAAK,EACfQ,KAAKC,MAAOT,CAAK,EAGlBA,EAeU,CAAb,MAAQvV,IAGV2V,EAASL,IAAKje,EAAMqK,EAAK6T,CAAK,CAC/B,MACCA,EAAOzc,KAAAA,EAGT,OAAOyc,CACR,CAEAvf,EAAOmC,OAAQ,CACdsd,QAAS,SAAUpe,GAClB,OAAOse,EAASF,QAASpe,CAAK,GAAKqe,EAASD,QAASpe,CAAK,CAC3D,EAEAke,KAAM,SAAUle,EAAMgB,EAAMkd,GAC3B,OAAOI,EAASzB,OAAQ7c,EAAMgB,EAAMkd,CAAK,CAC1C,EAEAU,WAAY,SAAU5e,EAAMgB,GAC3Bsd,EAASjF,OAAQrZ,EAAMgB,CAAK,CAC7B,EAIA6d,MAAO,SAAU7e,EAAMgB,EAAMkd,GAC5B,OAAOG,EAASxB,OAAQ7c,EAAMgB,EAAMkd,CAAK,CAC1C,EAEAY,YAAa,SAAU9e,EAAMgB,GAC5Bqd,EAAShF,OAAQrZ,EAAMgB,CAAK,CAC7B,CACD,CAAE,EAEFrC,EAAOG,GAAGgC,OAAQ,CACjBod,KAAM,SAAU7T,EAAKvH,GACpB,IAAIhF,EAAGkD,EAAMkd,EACZle,EAAOrE,KAAM,GACbiP,EAAQ5K,GAAQA,EAAK0G,WAGtB,GAAajF,KAAAA,IAAR4I,EA0BL,MAAoB,UAAf,OAAOA,EACJ1O,KAAKkE,KAAM,WACjBye,EAASL,IAAKtiB,KAAM0O,CAAI,CACzB,CAAE,EAGIwS,EAAQlhB,KAAM,SAAUmH,GAC9B,IAAIob,EAOJ,GAAKle,GAAkByB,KAAAA,IAAVqB,EAKZ,OAAcrB,KAAAA,KADdyc,EAAOI,EAAShf,IAAKU,EAAMqK,CAAI,IAQjB5I,KAAAA,KADdyc,EAAOO,GAAUze,EAAMqK,CAAI,GAEnB6T,EAIR,KAAA,EAIDviB,KAAKkE,KAAM,WAGVye,EAASL,IAAKtiB,KAAM0O,EAAKvH,CAAM,CAChC,CAAE,CACH,EAAG,KAAMA,EAA0B,EAAnB7C,UAAUhB,OAAY,KAAM,CAAA,CAAK,EAjEhD,GAAKtD,KAAKsD,SACTif,EAAOI,EAAShf,IAAKU,CAAK,EAEH,IAAlBA,EAAKjE,WAAkB,CAACsiB,EAAS/e,IAAKU,EAAM,cAAe,EAAI,CAEnE,IADAlC,EAAI8M,EAAM3L,OACFnB,CAAC,IAIH8M,EAAO9M,IAEsB,KADjCkD,EAAO4J,EAAO9M,GAAIkD,MACRnE,QAAS,OAAQ,IAC1BmE,EAAOyc,EAAWzc,EAAK1E,MAAO,CAAE,CAAE,EAClCmiB,GAAUze,EAAMgB,EAAMkd,EAAMld,EAAO,GAItCqd,EAASJ,IAAKje,EAAM,eAAgB,CAAA,CAAK,CAC1C,CAGD,OAAOke,CA6CT,EAEAU,WAAY,SAAUvU,GACrB,OAAO1O,KAAKkE,KAAM,WACjBye,EAASjF,OAAQ1d,KAAM0O,CAAI,CAC5B,CAAE,CACH,CACD,CAAE,EAGF1L,EAAOmC,OAAQ,CACdmY,MAAO,SAAUjZ,EAAM1C,EAAM4gB,GAC5B,IAAIjF,EAEJ,GAAKjZ,EAYJ,OAVAiZ,EAAQoF,EAAS/e,IAAKU,EADtB1C,GAASA,GAAQ,MAAS,OACO,EAG5B4gB,IACC,CAACjF,GAAS1X,MAAMC,QAAS0c,CAAK,EAClCjF,EAAQoF,EAASxB,OAAQ7c,EAAM1C,EAAMqB,EAAO2D,UAAW4b,CAAK,CAAE,EAE9DjF,EAAMrc,KAAMshB,CAAK,GAGZjF,GAAS,EAElB,EAEA8F,QAAS,SAAU/e,EAAM1C,GACxBA,EAAOA,GAAQ,KAEf,IAAI2b,EAAQta,EAAOsa,MAAOjZ,EAAM1C,CAAK,EACpC0hB,EAAc/F,EAAMha,OACpBH,EAAKma,EAAM1O,MAAM,EACjB0U,EAAQtgB,EAAOugB,YAAalf,EAAM1C,CAAK,EAM5B,eAAPwB,IACJA,EAAKma,EAAM1O,MAAM,EACjByU,CAAW,IAGPlgB,IAIU,OAATxB,GACJ2b,EAAMtL,QAAS,YAAa,EAI7B,OAAOsR,EAAME,KACbrgB,EAAGrC,KAAMuD,EApBF,WACNrB,EAAOogB,QAAS/e,EAAM1C,CAAK,CAC5B,EAkBqB2hB,CAAM,GAGvB,CAACD,GAAeC,GACpBA,EAAMrN,MAAMgH,KAAK,CAEnB,EAGAsG,YAAa,SAAUlf,EAAM1C,GAC5B,IAAI+M,EAAM/M,EAAO,aACjB,OAAO+gB,EAAS/e,IAAKU,EAAMqK,CAAI,GAAKgU,EAASxB,OAAQ7c,EAAMqK,EAAK,CAC/DuH,MAAOjT,EAAO6Z,UAAW,aAAc,EAAEvB,IAAK,WAC7CoH,EAAShF,OAAQrZ,EAAM,CAAE1C,EAAO,QAAS+M,EAAM,CAChD,CAAE,CACH,CAAE,CACH,CACD,CAAE,EAEF1L,EAAOG,GAAGgC,OAAQ,CACjBmY,MAAO,SAAU3b,EAAM4gB,GACtB,IAAIkB,EAAS,EAQb,MANqB,UAAhB,OAAO9hB,IACX4gB,EAAO5gB,EACPA,EAAO,KACP8hB,CAAM,IAGFnf,UAAUhB,OAASmgB,EAChBzgB,EAAOsa,MAAOtd,KAAM,GAAK2B,CAAK,EAGtBmE,KAAAA,IAATyc,EACNviB,KACAA,KAAKkE,KAAM,WACV,IAAIoZ,EAAQta,EAAOsa,MAAOtd,KAAM2B,EAAM4gB,CAAK,EAG3Cvf,EAAOugB,YAAavjB,KAAM2B,CAAK,EAEjB,OAATA,GAAgC,eAAf2b,EAAO,IAC5Bta,EAAOogB,QAASpjB,KAAM2B,CAAK,CAE7B,CAAE,CACJ,EACAyhB,QAAS,SAAUzhB,GAClB,OAAO3B,KAAKkE,KAAM,WACjBlB,EAAOogB,QAASpjB,KAAM2B,CAAK,CAC5B,CAAE,CACH,EACA+hB,WAAY,SAAU/hB,GACrB,OAAO3B,KAAKsd,MAAO3b,GAAQ,KAAM,EAAG,CACrC,EAIA+a,QAAS,SAAU/a,EAAMxB,GAMb,SAAVmc,IACO,EAAIqH,GACTC,EAAMtE,YAAapN,EAAU,CAAEA,EAAW,CAE5C,CATD,IAAIpB,EACH6S,EAAQ,EACRC,EAAQ5gB,EAAO8a,SAAS,EACxB5L,EAAWlS,KACXmC,EAAInC,KAAKsD,OAaV,IANqB,UAAhB,OAAO3B,IACXxB,EAAMwB,EACNA,EAAOmE,KAAAA,GAERnE,EAAOA,GAAQ,KAEPQ,CAAC,KACR2O,EAAM4R,EAAS/e,IAAKuO,EAAU/P,GAAKR,EAAO,YAAa,IAC3CmP,EAAImF,QACf0N,CAAK,GACL7S,EAAImF,MAAMqF,IAAKgB,CAAQ,GAIzB,OADAA,EAAQ,EACDsH,EAAMlH,QAASvc,CAAI,CAC3B,CACD,CAAE,EA4BuB,SAArB0jB,GAA+Bxf,EAAM0K,GAOvC,MAA8B,UAH9B1K,EAAO0K,GAAM1K,GAGDyf,MAAMC,SACM,KAAvB1f,EAAKyf,MAAMC,SAMXC,EAAY3f,CAAK,GAEiB,SAAlCrB,EAAOihB,IAAK5f,EAAM,SAAU,CAC9B,CA5CD,IAAI6f,EAAO,sCAA0CC,OAEjDC,GAAU,IAAIlZ,OAAQ,iBAAmBgZ,EAAO,cAAe,GAAI,EAGnEG,EAAY,CAAE,MAAO,QAAS,SAAU,QAExCtU,EAAkBnQ,EAASmQ,gBAI1BiU,EAAa,SAAU3f,GACzB,OAAOrB,EAAO4G,SAAUvF,EAAKoJ,cAAepJ,CAAK,CAClD,EACAigB,GAAW,CAAEA,SAAU,CAAA,CAAK,EAOxBvU,EAAgBwU,cACpBP,EAAa,SAAU3f,GACtB,OAAOrB,EAAO4G,SAAUvF,EAAKoJ,cAAepJ,CAAK,GAChDA,EAAKkgB,YAAaD,EAAS,IAAMjgB,EAAKoJ,aACxC,GAuBF,SAAS+W,GAAWngB,EAAMme,EAAMiC,EAAYC,GAC3C,IAAIC,EAAUC,EACbC,EAAgB,GAChBC,EAAeJ,EACd,WACC,OAAOA,EAAMrV,IAAI,CAClB,EACA,WACC,OAAOrM,EAAOihB,IAAK5f,EAAMme,EAAM,EAAG,CACnC,EACDuC,EAAUD,EAAa,EACvBE,EAAOP,GAAcA,EAAY,KAASzhB,EAAOiiB,UAAWzC,GAAS,GAAK,MAG1E0C,EAAgB7gB,EAAKjE,WAClB4C,EAAOiiB,UAAWzC,IAAmB,OAATwC,GAAiB,CAACD,IAChDX,GAAQ1W,KAAM1K,EAAOihB,IAAK5f,EAAMme,CAAK,CAAE,EAEzC,GAAK0C,GAAiBA,EAAe,KAAQF,EAAO,CAYnD,IALAA,EAAOA,GAAQE,EAAe,GAG9BA,EAAgB,EANhBH,GAAoB,IAMQ,EAEpBF,CAAa,IAIpB7hB,EAAO8gB,MAAOzf,EAAMme,EAAM0C,EAAgBF,CAAK,GACxC,EAAIJ,IAAY,GAAMA,EAAQE,EAAa,EAAIC,GAAW,MAAW,IAC3EF,EAAgB,GAEjBK,GAAgCN,EAKjC5hB,EAAO8gB,MAAOzf,EAAMme,GADpB0C,GAAgC,GACUF,CAAK,EAG/CP,EAAaA,GAAc,EAC5B,CAeA,OAbKA,IACJS,EAAgB,CAACA,GAAiB,CAACH,GAAW,EAG9CJ,EAAWF,EAAY,GACtBS,GAAkBT,EAAY,GAAM,GAAMA,EAAY,GACtD,CAACA,EAAY,GACTC,KACJA,EAAMM,KAAOA,EACbN,EAAMpQ,MAAQ4Q,EACdR,EAAM1f,IAAM2f,GAGPA,CACR,CAGA,IAAIQ,GAAoB,GAyBxB,SAASC,EAAUlT,EAAUmT,GAO5B,IANA,IAAItB,EAAS1f,EAxBcA,EAE1BnC,EAEA6hB,EAqBAuB,EAAS,GACTlK,EAAQ,EACR9X,EAAS4O,EAAS5O,OAGX8X,EAAQ9X,EAAQ8X,CAAK,IAC5B/W,EAAO6N,EAAUkJ,IACN0I,QAIXC,EAAU1f,EAAKyf,MAAMC,QAChBsB,GAKa,SAAZtB,IACJuB,EAAQlK,GAAUsH,EAAS/e,IAAKU,EAAM,SAAU,GAAK,KAC/CihB,EAAQlK,KACb/W,EAAKyf,MAAMC,QAAU,KAGK,KAAvB1f,EAAKyf,MAAMC,SAAkBF,GAAoBxf,CAAK,IAC1DihB,EAAQlK,IA7CV2I,EAFA7hB,EAAAA,KAAAA,EAAAA,GAF0BmC,EAiDaA,GA/C5BoJ,cACXZ,EAAWxI,EAAKwI,UAChBkX,EAAUoB,GAAmBtY,MAM9BkL,EAAO7V,EAAIqjB,KAAK5iB,YAAaT,EAAII,cAAeuK,CAAS,CAAE,EAC3DkX,EAAU/gB,EAAOihB,IAAKlM,EAAM,SAAU,EAEtCA,EAAKnV,WAAWC,YAAakV,CAAK,EAKlCoN,GAAmBtY,GAFlBkX,EADgB,SAAZA,EACM,QAEqBA,GAEzBA,KAgCY,SAAZA,IACJuB,EAAQlK,GAAU,OAGlBsH,EAASJ,IAAKje,EAAM,UAAW0f,CAAQ,IAM1C,IAAM3I,EAAQ,EAAGA,EAAQ9X,EAAQ8X,CAAK,GACb,MAAnBkK,EAAQlK,KACZlJ,EAAUkJ,GAAQ0I,MAAMC,QAAUuB,EAAQlK,IAI5C,OAAOlJ,CACR,CAEAlP,EAAOG,GAAGgC,OAAQ,CACjBkgB,KAAM,WACL,OAAOD,EAAUplB,KAAM,CAAA,CAAK,CAC7B,EACAwlB,KAAM,WACL,OAAOJ,EAAUplB,IAAK,CACvB,EACAylB,OAAQ,SAAUxH,GACjB,MAAsB,WAAjB,OAAOA,EACJA,EAAQje,KAAKqlB,KAAK,EAAIrlB,KAAKwlB,KAAK,EAGjCxlB,KAAKkE,KAAM,WACZ2f,GAAoB7jB,IAAK,EAC7BgD,EAAQhD,IAAK,EAAEqlB,KAAK,EAEpBriB,EAAQhD,IAAK,EAAEwlB,KAAK,CAEtB,CAAE,CACH,CACD,CAAE,EACF,IAAIE,GAAiB,wBAEjBC,GAAW,iCAEXC,GAAc,qCAqCdC,GA/BFC,EADclmB,EAASmmB,uBAAuB,EAC/BpjB,YAAa/C,EAAS0C,cAAe,KAAM,CAAE,GAC5DyO,EAAQnR,EAAS0C,cAAe,OAAQ,GAMnCG,aAAc,OAAQ,OAAQ,EACpCsO,EAAMtO,aAAc,UAAW,SAAU,EACzCsO,EAAMtO,aAAc,OAAQ,GAAI,EAEhCqjB,EAAInjB,YAAaoO,CAAM,EAIvBtP,EAAQukB,WAAaF,EAAIG,UAAW,CAAA,CAAK,EAAEA,UAAW,CAAA,CAAK,EAAExR,UAAUqB,QAIvEgQ,EAAI9U,UAAY,yBAChBvP,EAAQykB,eAAiB,CAAC,CAACJ,EAAIG,UAAW,CAAA,CAAK,EAAExR,UAAUsF,aAK3D+L,EAAI9U,UAAY,oBAChBvP,EAAQ0kB,OAAS,CAAC,CAACL,EAAIrR,UAKV,CAKb2R,MAAO,CAAE,EAAG,UAAW,YACvBC,IAAK,CAAE,EAAG,oBAAqB,uBAC/BC,GAAI,CAAE,EAAG,iBAAkB,oBAC3BC,GAAI,CAAE,EAAG,qBAAsB,yBAE/BC,SAAU,CAAE,EAAG,GAAI,GACpB,GAWA,SAASC,EAAQvjB,EAAS2N,GAIzB,IAGC9M,EAD4C,KAAA,IAAjCb,EAAQ2K,qBACb3K,EAAQ2K,qBAAsBgD,GAAO,GAAI,EAEA,KAAA,IAA7B3N,EAAQmL,iBACpBnL,EAAQmL,iBAAkBwC,GAAO,GAAI,EAGrC,GAGP,OAAa/K,KAAAA,IAAR+K,GAAqBA,GAAOhE,EAAU3J,EAAS2N,CAAI,EAChD7N,EAAOgB,MAAO,CAAEd,GAAWa,CAAI,EAGhCA,CACR,CAIA,SAAS2iB,GAAe5iB,EAAO6iB,GAI9B,IAHA,IAAIxkB,EAAI,EACP+Y,EAAIpX,EAAMR,OAEHnB,EAAI+Y,EAAG/Y,CAAC,GACfugB,EAASJ,IACRxe,EAAO3B,GACP,aACA,CAACwkB,GAAejE,EAAS/e,IAAKgjB,EAAaxkB,GAAK,YAAa,CAC9D,CAEF,CA7CA0jB,EAAQe,MAAQf,EAAQgB,MAAQhB,EAAQiB,SAAWjB,EAAQkB,QAAUlB,EAAQO,MAC7EP,EAAQmB,GAAKnB,EAAQU,GAGf9kB,EAAQ0kB,SACbN,EAAQoB,SAAWpB,EAAQM,OAAS,CAAE,EAAG,+BAAgC,cA2C1E,IAAIja,GAAQ,YAEZ,SAASgb,GAAepjB,EAAOZ,EAASikB,EAASC,EAAWC,GAO3D,IANA,IAAIhjB,EAAMyM,EAAUwW,EAAMC,EAAUxiB,EACnCyiB,EAAWtkB,EAAQ6iB,uBAAuB,EAC1C0B,EAAQ,GACRtlB,EAAI,EACJ+Y,EAAIpX,EAAMR,OAEHnB,EAAI+Y,EAAG/Y,CAAC,GAGf,IAFAkC,EAAOP,EAAO3B,KAEQ,IAATkC,EAGZ,GAAwB,WAAnBvB,EAAQuB,CAAK,EAIjBrB,EAAOgB,MAAOyjB,EAAOpjB,EAAKjE,SAAW,CAAEiE,GAASA,CAAK,OAG/C,GAAM6H,GAAM8B,KAAM3J,CAAK,EAIvB,CAUN,IATAyM,EAAMA,GAAO0W,EAAS7kB,YAAaO,EAAQZ,cAAe,KAAM,CAAE,EAGlEuO,GAAQ8U,GAASjY,KAAMrJ,CAAK,GAAK,CAAE,GAAI,KAAQ,GAAIoD,YAAY,EAC/D6f,EAAOzB,EAAShV,IAASgV,EAAQW,SACjC1V,EAAIE,UAAYsW,EAAM,GAAMtkB,EAAO0kB,cAAerjB,CAAK,EAAIijB,EAAM,GAGjEviB,EAAIuiB,EAAM,GACFviB,CAAC,IACR+L,EAAMA,EAAI2D,UAKXzR,EAAOgB,MAAOyjB,EAAO3W,EAAI/D,UAAW,GAGpC+D,EAAM0W,EAAS7U,YAGXD,YAAc,EACnB,MA1BC+U,EAAMxmB,KAAMiC,EAAQykB,eAAgBtjB,CAAK,CAAE,EAkC9C,IAHAmjB,EAAS9U,YAAc,GAEvBvQ,EAAI,EACMkC,EAAOojB,EAAOtlB,CAAC,KAGxB,GAAKilB,GAAiD,CAAC,EAArCpkB,EAAO6D,QAASxC,EAAM+iB,CAAU,EAC5CC,GACJA,EAAQpmB,KAAMoD,CAAK,OAgBrB,GAXAkjB,EAAWvD,EAAY3f,CAAK,EAG5ByM,EAAM2V,EAAQe,EAAS7kB,YAAa0B,CAAK,EAAG,QAAS,EAGhDkjB,GACJb,GAAe5V,CAAI,EAIfqW,EAEJ,IADApiB,EAAI,EACMV,EAAOyM,EAAK/L,CAAC,KACjB6gB,GAAY5X,KAAM3J,EAAK1C,MAAQ,EAAG,GACtCwlB,EAAQlmB,KAAMoD,CAAK,EAMvB,OAAOmjB,CACR,CAGA,IAAII,GAAiB,sBAErB,SAASC,IACR,MAAO,CAAA,CACR,CAEA,SAASC,IACR,MAAO,CAAA,CACR,CAQA,SAASC,GAAY1jB,EAAM1C,GAC1B,OAAS0C,IAMV,WACC,IACC,OAAOzE,EAAS6V,aACC,CAAhB,MAAQuS,IACX,EAVqC,IAAmB,UAATrmB,EAC/C,CAWA,SAASsmB,GAAI5jB,EAAM6jB,EAAOjlB,EAAUsf,EAAMpf,EAAIglB,GAC7C,IAAIC,EAAQzmB,EAGZ,GAAsB,UAAjB,OAAOumB,EAAqB,CAShC,IAAMvmB,IANmB,UAApB,OAAOsB,IAGXsf,EAAOA,GAAQtf,EACfA,EAAW6C,KAAAA,GAEEoiB,EACbD,GAAI5jB,EAAM1C,EAAMsB,EAAUsf,EAAM2F,EAAOvmB,GAAQwmB,CAAI,EAEpD,OAAO9jB,CACR,CAqBA,GAnBa,MAARke,GAAsB,MAANpf,GAGpBA,EAAKF,EACLsf,EAAOtf,EAAW6C,KAAAA,GACD,MAAN3C,IACc,UAApB,OAAOF,GAGXE,EAAKof,EACLA,EAAOzc,KAAAA,IAIP3C,EAAKof,EACLA,EAAOtf,EACPA,EAAW6C,KAAAA,IAGD,CAAA,IAAP3C,EACJA,EAAK2kB,OACC,GAAK,CAAC3kB,EACZ,OAAOkB,EAeR,OAZa,IAAR8jB,IACJC,EAASjlB,GACTA,EAAK,SAAUklB,GAId,OADArlB,EAAO,EAAEslB,IAAKD,CAAM,EACbD,EAAOpnB,MAAOhB,KAAMsE,SAAU,CACtC,GAGG8C,KAAOghB,EAAOhhB,OAAUghB,EAAOhhB,KAAOpE,EAAOoE,IAAI,KAE9C/C,EAAKH,KAAM,WACjBlB,EAAOqlB,MAAM/M,IAAKtb,KAAMkoB,EAAO/kB,EAAIof,EAAMtf,CAAS,CACnD,CAAE,CACH,CA6aA,SAASslB,GAAgBxZ,EAAIpN,EAAMomB,GAG5BA,GAQNrF,EAASJ,IAAKvT,EAAIpN,EAAM,CAAA,CAAM,EAC9BqB,EAAOqlB,MAAM/M,IAAKvM,EAAIpN,EAAM,CAC3BkO,UAAW,CAAA,EACXX,QAAS,SAAUmZ,GAClB,IAAIG,EAAU7U,EACb8U,EAAQ/F,EAAS/e,IAAK3D,KAAM2B,CAAK,EAElC,GAAyB,EAAlB0mB,EAAMK,WAAmB1oB,KAAM2B,IAKrC,GAAM8mB,EAAMnlB,QAuCEN,EAAOqlB,MAAMpJ,QAAStd,IAAU,IAAKgnB,cAClDN,EAAMO,gBAAgB,OArBtB,GAdAH,EAAQ9nB,EAAMG,KAAMwD,SAAU,EAC9Boe,EAASJ,IAAKtiB,KAAM2B,EAAM8mB,CAAM,EAKhCD,EAAWT,EAAY/nB,KAAM2B,CAAK,EAClC3B,KAAM2B,GAAO,EAER8mB,KADL9U,EAAS+O,EAAS/e,IAAK3D,KAAM2B,CAAK,IACT6mB,EACxB9F,EAASJ,IAAKtiB,KAAM2B,EAAM,CAAA,CAAM,EAEhCgS,EAAS,GAEL8U,IAAU9U,EAWd,OARA0U,EAAMQ,yBAAyB,EAC/BR,EAAMS,eAAe,EAOdnV,GAAUA,EAAOxM,KAW1B,MAIWshB,EAAMnlB,SAGjBof,EAASJ,IAAKtiB,KAAM2B,EAAM,CACzBwF,MAAOnE,EAAOqlB,MAAMU,QAInB/lB,EAAOmC,OAAQsjB,EAAO,GAAKzlB,EAAOgmB,MAAMzlB,SAAU,EAClDklB,EAAM9nB,MAAO,CAAE,EACfX,IACD,CACD,CAAE,EAGFqoB,EAAMQ,yBAAyB,EAEjC,CACD,CAAE,GAlFiC/iB,KAAAA,IAA7B4c,EAAS/e,IAAKoL,EAAIpN,CAAK,GAC3BqB,EAAOqlB,MAAM/M,IAAKvM,EAAIpN,EAAMkmB,CAAW,CAkF1C,CA9fA7kB,EAAOqlB,MAAQ,CAEd7oB,OAAQ,GAER8b,IAAK,SAAUjX,EAAM6jB,EAAOhZ,EAASqT,EAAMtf,GAE1C,IAAIgmB,EAAaC,EAChBC,EAAQC,EACRnK,EAASoK,EAAU1nB,EAAM2nB,EAAYC,EACrCC,EAAW9G,EAAS/e,IAAKU,CAAK,EAG/B,GAAM2d,EAAY3d,CAAK,EAuCvB,IAlCK6K,EAAQA,UAEZA,GADA+Z,EAAc/Z,GACQA,QACtBjM,EAAWgmB,EAAYhmB,UAKnBA,GACJD,EAAO2N,KAAKM,gBAAiBlB,EAAiB9M,CAAS,EAIlDiM,EAAQ9H,OACb8H,EAAQ9H,KAAOpE,EAAOoE,IAAI,IAInB+hB,GAAAA,EAASK,EAASL,UAChBK,EAASL,OAAS1oB,OAAOgpB,OAAQ,IAAK,GAExCP,GAAAA,EAAcM,EAASE,UAChBF,EAASE,OAAS,SAAU1c,GAIzC,OAAyB,KAAA,IAAXhK,GAA0BA,EAAOqlB,MAAMsB,YAAc3c,EAAErL,KACpEqB,EAAOqlB,MAAMuB,SAAS5oB,MAAOqD,EAAMC,SAAU,EAAIwB,KAAAA,CACnD,GAKDsjB,GADAlB,GAAUA,GAAS,IAAK7a,MAAO2O,CAAc,GAAK,CAAE,KAC1C1Y,OACF8lB,CAAC,IAERznB,EAAO4nB,GADPzY,EAAM8W,GAAela,KAAMwa,EAAOkB,EAAI,GAAK,IACpB,GACvBE,GAAexY,EAAK,IAAO,IAAKvJ,MAAO,GAAI,EAAEtC,KAAK,EAG5CtD,IAKNsd,EAAUjc,EAAOqlB,MAAMpJ,QAAStd,IAAU,GAG1CA,GAASsB,EAAWgc,EAAQ0J,aAAe1J,EAAQ4K,WAAcloB,EAGjEsd,EAAUjc,EAAOqlB,MAAMpJ,QAAStd,IAAU,GAG1CmoB,EAAY9mB,EAAOmC,OAAQ,CAC1BxD,KAAMA,EACN4nB,SAAUA,EACVhH,KAAMA,EACNrT,QAASA,EACT9H,KAAM8H,EAAQ9H,KACdnE,SAAUA,EACVgJ,aAAchJ,GAAYD,EAAOiP,KAAK5E,MAAMpB,aAAa+B,KAAM/K,CAAS,EACxE4M,UAAWyZ,EAAWlb,KAAM,GAAI,CACjC,EAAG6a,CAAY,GAGPI,EAAWF,EAAQxnB,OAC1B0nB,EAAWF,EAAQxnB,GAAS,IACnBooB,cAAgB,EAGnB9K,EAAQ+K,OACiD,CAAA,IAA9D/K,EAAQ+K,MAAMlpB,KAAMuD,EAAMke,EAAM+G,EAAYJ,CAAY,IAEnD7kB,EAAK8L,kBACT9L,EAAK8L,iBAAkBxO,EAAMunB,CAAY,EAKvCjK,EAAQ3D,MACZ2D,EAAQ3D,IAAIxa,KAAMuD,EAAMylB,CAAU,EAE5BA,EAAU5a,QAAQ9H,OACvB0iB,EAAU5a,QAAQ9H,KAAO8H,EAAQ9H,OAK9BnE,EACJomB,EAASnkB,OAAQmkB,EAASU,aAAa,GAAI,EAAGD,CAAU,EAExDT,EAASpoB,KAAM6oB,CAAU,EAI1B9mB,EAAOqlB,MAAM7oB,OAAQmC,GAAS,CAAA,EAGhC,EAGA+b,OAAQ,SAAUrZ,EAAM6jB,EAAOhZ,EAASjM,EAAUgnB,GAEjD,IAAIllB,EAAGmlB,EAAWpZ,EACjBqY,EAAQC,EAAGU,EACX7K,EAASoK,EAAU1nB,EAAM2nB,EAAYC,EACrCC,EAAW9G,EAASD,QAASpe,CAAK,GAAKqe,EAAS/e,IAAKU,CAAK,EAE3D,GAAMmlB,IAAeL,EAASK,EAASL,QAAvC,CAOA,IADAC,GADAlB,GAAUA,GAAS,IAAK7a,MAAO2O,CAAc,GAAK,CAAE,KAC1C1Y,OACF8lB,CAAC,IAMR,GAJAznB,EAAO4nB,GADPzY,EAAM8W,GAAela,KAAMwa,EAAOkB,EAAI,GAAK,IACpB,GACvBE,GAAexY,EAAK,IAAO,IAAKvJ,MAAO,GAAI,EAAEtC,KAAK,EAG5CtD,EAAN,CAeA,IARAsd,EAAUjc,EAAOqlB,MAAMpJ,QAAStd,IAAU,GAE1C0nB,EAAWF,EADXxnB,GAASsB,EAAWgc,EAAQ0J,aAAe1J,EAAQ4K,WAAcloB,IACpC,GAC7BmP,EAAMA,EAAK,IACV,IAAI5F,OAAQ,UAAYoe,EAAWlb,KAAM,eAAgB,EAAI,SAAU,EAGxE8b,EAAYnlB,EAAIskB,EAAS/lB,OACjByB,CAAC,IACR+kB,EAAYT,EAAUtkB,GAEfklB,CAAAA,GAAeV,IAAaO,EAAUP,UACzCra,GAAWA,EAAQ9H,OAAS0iB,EAAU1iB,MACtC0J,GAAOA,CAAAA,EAAI9C,KAAM8b,EAAUja,SAAU,GACrC5M,GAAYA,IAAa6mB,EAAU7mB,WACxB,OAAbA,GAAqB6mB,CAAAA,EAAU7mB,YAChComB,EAASnkB,OAAQH,EAAG,CAAE,EAEjB+kB,EAAU7mB,UACdomB,EAASU,aAAa,GAElB9K,EAAQvB,QACZuB,EAAQvB,OAAO5c,KAAMuD,EAAMylB,CAAU,GAOnCI,GAAa,CAACb,EAAS/lB,SACrB2b,EAAQkL,UACkD,CAAA,IAA/DlL,EAAQkL,SAASrpB,KAAMuD,EAAMilB,EAAYE,EAASE,MAAO,GAEzD1mB,EAAOonB,YAAa/lB,EAAM1C,EAAM6nB,EAASE,MAAO,EAGjD,OAAOP,EAAQxnB,GAtChB,MAJC,IAAMA,KAAQwnB,EACbnmB,EAAOqlB,MAAM3K,OAAQrZ,EAAM1C,EAAOumB,EAAOkB,GAAKla,EAASjM,EAAU,CAAA,CAAK,EA8CpED,EAAOyD,cAAe0iB,CAAO,GACjCzG,EAAShF,OAAQrZ,EAAM,eAAgB,CA5DxC,CA8DD,EAEAulB,SAAU,SAAUS,GAEnB,IAAIloB,EAAG4C,EAAQ6C,EAASkiB,EAAWQ,EAClC1V,EAAO,IAAIhP,MAAOtB,UAAUhB,MAAO,EAGnC+kB,EAAQrlB,EAAOqlB,MAAMkC,IAAKF,CAAY,EAEtChB,GACC3G,EAAS/e,IAAK3D,KAAM,QAAS,GAAKS,OAAOgpB,OAAQ,IAAK,GACpDpB,EAAM1mB,OAAU,GACnBsd,EAAUjc,EAAOqlB,MAAMpJ,QAASoJ,EAAM1mB,OAAU,GAKjD,IAFAiT,EAAM,GAAMyT,EAENlmB,EAAI,EAAGA,EAAImC,UAAUhB,OAAQnB,CAAC,GACnCyS,EAAMzS,GAAMmC,UAAWnC,GAMxB,GAHAkmB,EAAMmC,eAAiBxqB,KAGlBif,CAAAA,EAAQwL,aAA2D,CAAA,IAA5CxL,EAAQwL,YAAY3pB,KAAMd,KAAMqoB,CAAM,EAAlE,CASA,IAJAiC,EAAetnB,EAAOqlB,MAAMgB,SAASvoB,KAAMd,KAAMqoB,EAAOgB,CAAS,EAGjElnB,EAAI,GACMyF,EAAU0iB,EAAcnoB,CAAC,MAAU,CAACkmB,EAAMqC,qBAAqB,GAIxE,IAHArC,EAAMsC,cAAgB/iB,EAAQvD,KAE9BU,EAAI,GACM+kB,EAAYliB,EAAQyhB,SAAUtkB,CAAC,MACxC,CAACsjB,EAAMuC,8BAA8B,GAI/BvC,EAAMwC,YAAsC,CAAA,IAAxBf,EAAUja,WACnCwY,CAAAA,EAAMwC,WAAW7c,KAAM8b,EAAUja,SAAU,IAE3CwY,EAAMyB,UAAYA,EAClBzB,EAAM9F,KAAOuH,EAAUvH,KAKVzc,KAAAA,KAHb/B,IAAUf,EAAOqlB,MAAMpJ,QAAS6K,EAAUP,WAAc,IAAKG,QAC5DI,EAAU5a,SAAUlO,MAAO4G,EAAQvD,KAAMuQ,CAAK,IAGd,CAAA,KAAzByT,EAAM1U,OAAS5P,KACrBskB,EAAMS,eAAe,EACrBT,EAAMO,gBAAgB,IAY3B,OAJK3J,EAAQ6L,cACZ7L,EAAQ6L,aAAahqB,KAAMd,KAAMqoB,CAAM,EAGjCA,EAAM1U,MAxCb,CAyCD,EAEA0V,SAAU,SAAUhB,EAAOgB,GAC1B,IAAIlnB,EAAG2nB,EAAWzX,EAAK0Y,EAAiBC,EACvCV,EAAe,GACfP,EAAgBV,EAASU,cACzB1a,EAAMgZ,EAAM5iB,OAGb,GAAKskB,GAIJ1a,EAAIjP,UAOJ,EAAkB,UAAfioB,EAAM1mB,MAAoC,GAAhB0mB,EAAMlS,QAEnC,KAAQ9G,IAAQrP,KAAMqP,EAAMA,EAAIzM,YAAc5C,KAI7C,GAAsB,IAAjBqP,EAAIjP,WAAoC,UAAfioB,EAAM1mB,MAAqC,CAAA,IAAjB0N,EAAIzC,UAAsB,CAGjF,IAFAme,EAAkB,GAClBC,EAAmB,GACb7oB,EAAI,EAAGA,EAAI4nB,EAAe5nB,CAAC,GAMC2D,KAAAA,IAA5BklB,EAFL3Y,GAHAyX,EAAYT,EAAUlnB,IAGNc,SAAW,OAG1B+nB,EAAkB3Y,GAAQyX,EAAU7d,aACA,CAAC,EAApCjJ,EAAQqP,EAAKrS,IAAK,EAAEob,MAAO/L,CAAI,EAC/BrM,EAAO2N,KAAM0B,EAAKrS,KAAM,KAAM,CAAEqP,EAAM,EAAE/L,QAErC0nB,EAAkB3Y,IACtB0Y,EAAgB9pB,KAAM6oB,CAAU,EAG7BiB,EAAgBznB,QACpBgnB,EAAarpB,KAAM,CAAEoD,KAAMgL,EAAKga,SAAU0B,CAAgB,CAAE,CAE9D,CAUF,OALA1b,EAAMrP,KACD+pB,EAAgBV,EAAS/lB,QAC7BgnB,EAAarpB,KAAM,CAAEoD,KAAMgL,EAAKga,SAAUA,EAAS1oB,MAAOopB,CAAc,CAAE,CAAE,EAGtEO,CACR,EAEAW,QAAS,SAAU5lB,EAAM6lB,GACxBzqB,OAAO2hB,eAAgBpf,EAAOgmB,MAAMzlB,UAAW8B,EAAM,CACpD8lB,WAAY,CAAA,EACZ9I,aAAc,CAAA,EAEd1e,IAAKzD,EAAYgrB,CAAK,EACrB,WACC,GAAKlrB,KAAKorB,cACT,OAAOF,EAAMlrB,KAAKorB,aAAc,CAElC,EACA,WACC,GAAKprB,KAAKorB,cACT,OAAOprB,KAAKorB,cAAe/lB,EAE7B,EAEDid,IAAK,SAAUnb,GACd1G,OAAO2hB,eAAgBpiB,KAAMqF,EAAM,CAClC8lB,WAAY,CAAA,EACZ9I,aAAc,CAAA,EACdgJ,SAAU,CAAA,EACVlkB,MAAOA,CACR,CAAE,CACH,CACD,CAAE,CACH,EAEAojB,IAAK,SAAUa,GACd,OAAOA,EAAepoB,EAAO+C,SAC5BqlB,EACA,IAAIpoB,EAAOgmB,MAAOoC,CAAc,CAClC,EAEAnM,QAAS,CACRqM,KAAM,CAGLC,SAAU,CAAA,CACX,EACAC,MAAO,CAGNxB,MAAO,SAAUzH,GAIZxT,EAAK/O,MAAQuiB,EAWjB,OARKmD,GAAe1X,KAAMe,EAAGpN,IAAK,GACjCoN,EAAGyc,OAAS3e,EAAUkC,EAAI,OAAQ,GAGlCwZ,GAAgBxZ,EAAI,QAAS8Y,CAAW,EAIlC,CAAA,CACR,EACAkB,QAAS,SAAUxG,GAIdxT,EAAK/O,MAAQuiB,EAUjB,OAPKmD,GAAe1X,KAAMe,EAAGpN,IAAK,GACjCoN,EAAGyc,OAAS3e,EAAUkC,EAAI,OAAQ,GAElCwZ,GAAgBxZ,EAAI,OAAQ,EAItB,CAAA,CACR,EAIAyX,SAAU,SAAU6B,GACf5iB,EAAS4iB,EAAM5iB,OACnB,OAAOigB,GAAe1X,KAAMvI,EAAO9D,IAAK,GACvC8D,EAAO+lB,OAAS3e,EAAUpH,EAAQ,OAAQ,GAC1Cid,EAAS/e,IAAK8B,EAAQ,OAAQ,GAC9BoH,EAAUpH,EAAQ,GAAI,CACxB,CACD,EAEAgmB,aAAc,CACbX,aAAc,SAAUzC,GAIDviB,KAAAA,IAAjBuiB,EAAM1U,QAAwB0U,EAAM+C,gBACxC/C,EAAM+C,cAAcM,YAAcrD,EAAM1U,OAE1C,CACD,CACD,CACD,EA+FA3Q,EAAOonB,YAAc,SAAU/lB,EAAM1C,EAAM+nB,GAGrCrlB,EAAKwc,qBACTxc,EAAKwc,oBAAqBlf,EAAM+nB,CAAO,CAEzC,EAEA1mB,EAAOgmB,MAAQ,SAAUpnB,EAAK+pB,GAG7B,GAAK,EAAG3rB,gBAAgBgD,EAAOgmB,OAC9B,OAAO,IAAIhmB,EAAOgmB,MAAOpnB,EAAK+pB,CAAM,EAIhC/pB,GAAOA,EAAID,MACf3B,KAAKorB,cAAgBxpB,EACrB5B,KAAK2B,KAAOC,EAAID,KAIhB3B,KAAK4rB,mBAAqBhqB,EAAIiqB,kBACH/lB,KAAAA,IAAzBlE,EAAIiqB,kBAGgB,CAAA,IAApBjqB,EAAI8pB,YACL7D,EACAC,EAKD9nB,KAAKyF,OAAW7D,EAAI6D,QAAkC,IAAxB7D,EAAI6D,OAAOrF,SACxCwB,EAAI6D,OAAO7C,WACXhB,EAAI6D,OAELzF,KAAK2qB,cAAgB/oB,EAAI+oB,cACzB3qB,KAAK8rB,cAAgBlqB,EAAIkqB,eAIzB9rB,KAAK2B,KAAOC,EAIR+pB,GACJ3oB,EAAOmC,OAAQnF,KAAM2rB,CAAM,EAI5B3rB,KAAK+rB,UAAYnqB,GAAOA,EAAImqB,WAAaliB,KAAKmiB,IAAI,EAGlDhsB,KAAMgD,EAAO+C,SAAY,CAAA,CAC1B,EAIA/C,EAAOgmB,MAAMzlB,UAAY,CACxBE,YAAaT,EAAOgmB,MACpB4C,mBAAoB9D,EACpB4C,qBAAsB5C,EACtB8C,8BAA+B9C,EAC/BmE,YAAa,CAAA,EAEbnD,eAAgB,WACf,IAAI9b,EAAIhN,KAAKorB,cAEbprB,KAAK4rB,mBAAqB/D,EAErB7a,GAAK,CAAChN,KAAKisB,aACfjf,EAAE8b,eAAe,CAEnB,EACAF,gBAAiB,WAChB,IAAI5b,EAAIhN,KAAKorB,cAEbprB,KAAK0qB,qBAAuB7C,EAEvB7a,GAAK,CAAChN,KAAKisB,aACfjf,EAAE4b,gBAAgB,CAEpB,EACAC,yBAA0B,WACzB,IAAI7b,EAAIhN,KAAKorB,cAEbprB,KAAK4qB,8BAAgC/C,EAEhC7a,GAAK,CAAChN,KAAKisB,aACfjf,EAAE6b,yBAAyB,EAG5B7oB,KAAK4oB,gBAAgB,CACtB,CACD,EAGA5lB,EAAOkB,KAAM,CACZgoB,OAAQ,CAAA,EACRC,QAAS,CAAA,EACTC,WAAY,CAAA,EACZC,eAAgB,CAAA,EAChBC,QAAS,CAAA,EACTC,OAAQ,CAAA,EACRC,WAAY,CAAA,EACZC,QAAS,CAAA,EACTC,MAAO,CAAA,EACPC,MAAO,CAAA,EACPC,SAAU,CAAA,EACVC,KAAM,CAAA,EACNC,KAAQ,CAAA,EACR9qB,KAAM,CAAA,EACN+qB,SAAU,CAAA,EACVre,IAAK,CAAA,EACLse,QAAS,CAAA,EACT7W,OAAQ,CAAA,EACR8W,QAAS,CAAA,EACTC,QAAS,CAAA,EACTC,QAAS,CAAA,EACTC,QAAS,CAAA,EACTC,QAAS,CAAA,EACTC,UAAW,CAAA,EACXC,YAAa,CAAA,EACbC,QAAS,CAAA,EACTC,QAAS,CAAA,EACTC,cAAe,CAAA,EACfC,UAAW,CAAA,EACXC,QAAS,CAAA,EACTC,MAAO,CAAA,CACR,EAAG7qB,EAAOqlB,MAAM4C,OAAQ,EAExBjoB,EAAOkB,KAAM,CAAEsR,MAAO,UAAWsY,KAAM,UAAW,EAAG,SAAUnsB,EAAMgnB,GACpE3lB,EAAOqlB,MAAMpJ,QAAStd,GAAS,CAG9BqoB,MAAO,WAQN,OAHAzB,GAAgBvoB,KAAM2B,EAAMomB,EAAW,EAGhC,CAAA,CACR,EACAgB,QAAS,WAMR,OAHAR,GAAgBvoB,KAAM2B,CAAK,EAGpB,CAAA,CACR,EAIA6kB,SAAU,WACT,MAAO,CAAA,CACR,EAEAmC,aAAcA,CACf,CACD,CAAE,EAUF3lB,EAAOkB,KAAM,CACZ6pB,WAAY,YACZC,WAAY,WACZC,aAAc,cACdC,aAAc,YACf,EAAG,SAAUC,EAAM5D,GAClBvnB,EAAOqlB,MAAMpJ,QAASkP,GAAS,CAC9BxF,aAAc4B,EACdV,SAAUU,EAEVb,OAAQ,SAAUrB,GACjB,IAAItkB,EAEHqqB,EAAU/F,EAAMyD,cAChBhC,EAAYzB,EAAMyB,UASnB,OALMsE,IAAaA,IANTpuB,MAMgCgD,EAAO4G,SANvC5J,KAMyDouB,CAAQ,KAC1E/F,EAAM1mB,KAAOmoB,EAAUP,SACvBxlB,EAAM+lB,EAAU5a,QAAQlO,MAAOhB,KAAMsE,SAAU,EAC/C+jB,EAAM1mB,KAAO4oB,GAEPxmB,CACR,CACD,CACD,CAAE,EAEFf,EAAOG,GAAGgC,OAAQ,CAEjB8iB,GAAI,SAAUC,EAAOjlB,EAAUsf,EAAMpf,GACpC,OAAO8kB,GAAIjoB,KAAMkoB,EAAOjlB,EAAUsf,EAAMpf,CAAG,CAC5C,EACAglB,IAAK,SAAUD,EAAOjlB,EAAUsf,EAAMpf,GACrC,OAAO8kB,GAAIjoB,KAAMkoB,EAAOjlB,EAAUsf,EAAMpf,EAAI,CAAE,CAC/C,EACAmlB,IAAK,SAAUJ,EAAOjlB,EAAUE,GAC/B,IAAI2mB,EAAWnoB,EACf,GAAKumB,GAASA,EAAMY,gBAAkBZ,EAAM4B,UAG3CA,EAAY5B,EAAM4B,UAClB9mB,EAAQklB,EAAMsC,cAAe,EAAElC,IAC9BwB,EAAUja,UACTia,EAAUP,SAAW,IAAMO,EAAUja,UACrCia,EAAUP,SACXO,EAAU7mB,SACV6mB,EAAU5a,OACX,MAVD,CAaA,GAAsB,UAAjB,OAAOgZ,EAiBZ,MATkB,CAAA,IAAbjlB,GAA0C,YAApB,OAAOA,IAGjCE,EAAKF,EACLA,EAAW6C,KAAAA,GAEA,CAAA,IAAP3C,IACJA,EAAK2kB,GAEC9nB,KAAKkE,KAAM,WACjBlB,EAAOqlB,MAAM3K,OAAQ1d,KAAMkoB,EAAO/kB,EAAIF,CAAS,CAChD,CAAE,EAhBD,IAAMtB,KAAQumB,EACbloB,KAAKsoB,IAAK3mB,EAAMsB,EAAUilB,EAAOvmB,EAAO,CAL1C,CAOC,OAAO3B,IAcT,CACD,CAAE,EAGF,IAKCquB,GAAe,wBAGfC,GAAW,oCACXC,GAAe,2CAGhB,SAASC,GAAoBnqB,EAAMyX,GAClC,OAAKjP,EAAUxI,EAAM,OAAQ,GAC5BwI,EAA+B,KAArBiP,EAAQ1b,SAAkB0b,EAAUA,EAAQnJ,WAAY,IAAK,GAEhE3P,EAAQqB,CAAK,EAAEwW,SAAU,OAAQ,EAAG,IAGrCxW,CACR,CAGA,SAASoqB,GAAepqB,GAEvB,OADAA,EAAK1C,MAAyC,OAAhC0C,EAAK7B,aAAc,MAAO,GAAe,IAAM6B,EAAK1C,KAC3D0C,CACR,CACA,SAASqqB,GAAerqB,GAOvB,MAN2C,WAApCA,EAAK1C,MAAQ,IAAKhB,MAAO,EAAG,CAAE,EACpC0D,EAAK1C,KAAO0C,EAAK1C,KAAKhB,MAAO,CAAE,EAE/B0D,EAAKkK,gBAAiB,MAAO,EAGvBlK,CACR,CAEA,SAASsqB,GAAgB/sB,EAAKgtB,GAC7B,IAAIzsB,EAAG+Y,EAAGvZ,EAAoCwnB,EAE9C,GAAuB,IAAlByF,EAAKxuB,SAAV,CAKA,GAAKsiB,EAASD,QAAS7gB,CAAI,IAE1BunB,EADWzG,EAAS/e,IAAK/B,CAAI,EACXunB,QAKjB,IAAMxnB,KAFN+gB,EAAShF,OAAQkR,EAAM,eAAgB,EAEzBzF,EACb,IAAMhnB,EAAI,EAAG+Y,EAAIiO,EAAQxnB,GAAO2B,OAAQnB,EAAI+Y,EAAG/Y,CAAC,GAC/Ca,EAAOqlB,MAAM/M,IAAKsT,EAAMjtB,EAAMwnB,EAAQxnB,GAAQQ,EAAI,EAOjDwgB,EAASF,QAAS7gB,CAAI,IAC1BitB,EAAWlM,EAASzB,OAAQtf,CAAI,EAChCktB,EAAW9rB,EAAOmC,OAAQ,GAAI0pB,CAAS,EAEvClM,EAASL,IAAKsM,EAAME,CAAS,EAvB9B,CAyBD,CAgBA,SAASC,EAAUC,EAAYpa,EAAMzQ,EAAUkjB,GAG9CzS,EAAOhU,EAAMgU,CAAK,EAElB,IAAI4S,EAAUjjB,EAAO4iB,EAAS8H,EAAYhtB,EAAMC,EAC/CC,EAAI,EACJ+Y,EAAI8T,EAAW1rB,OACf4rB,EAAWhU,EAAI,EACf/T,EAAQyN,EAAM,GACdua,EAAkBjvB,EAAYiH,CAAM,EAGrC,GAAKgoB,GACG,EAAJjU,GAA0B,UAAjB,OAAO/T,GACjB,CAAC1F,EAAQukB,YAAcsI,GAAStgB,KAAM7G,CAAM,EAC9C,OAAO6nB,EAAW9qB,KAAM,SAAUkX,GACjC,IAAIb,EAAOyU,EAAWxqB,GAAI4W,CAAM,EAC3B+T,IACJva,EAAM,GAAMzN,EAAMrG,KAAMd,KAAMob,EAAOb,EAAK6U,KAAK,CAAE,GAElDL,EAAUxU,EAAM3F,EAAMzQ,EAAUkjB,CAAQ,CACzC,CAAE,EAGH,GAAKnM,IAEJ3W,GADAijB,EAAWN,GAAetS,EAAMoa,EAAY,GAAIvhB,cAAe,CAAA,EAAOuhB,EAAY3H,CAAQ,GACzE1U,WAEmB,IAA/B6U,EAASza,WAAWzJ,SACxBkkB,EAAWjjB,GAIPA,GAAS8iB,GAAU,CAOvB,IALA4H,GADA9H,EAAUnkB,EAAOoB,IAAKqiB,EAAQe,EAAU,QAAS,EAAGiH,EAAc,GAC7CnrB,OAKbnB,EAAI+Y,EAAG/Y,CAAC,GACfF,EAAOulB,EAEFrlB,IAAM+sB,IACVjtB,EAAOe,EAAOwC,MAAOvD,EAAM,CAAA,EAAM,CAAA,CAAK,EAGjCgtB,IAIJjsB,EAAOgB,MAAOmjB,EAASV,EAAQxkB,EAAM,QAAS,CAAE,EAIlDkC,EAASrD,KAAMkuB,EAAY7sB,GAAKF,EAAME,CAAE,EAGzC,GAAK8sB,EAOJ,IANA/sB,EAAMilB,EAASA,EAAQ7jB,OAAS,GAAImK,cAGpCzK,EAAOoB,IAAK+iB,EAASuH,EAAc,EAG7BvsB,EAAI,EAAGA,EAAI8sB,EAAY9sB,CAAC,GAC7BF,EAAOklB,EAAShlB,GACXyjB,GAAY5X,KAAM/L,EAAKN,MAAQ,EAAG,GACtC,CAAC+gB,EAASxB,OAAQjf,EAAM,YAAa,GACrCe,EAAO4G,SAAU1H,EAAKD,CAAK,IAEtBA,EAAKL,KAA8C,YAArCK,EAAKN,MAAQ,IAAK8F,YAAY,EAG3CzE,EAAOqsB,UAAY,CAACptB,EAAKH,UAC7BkB,EAAOqsB,SAAUptB,EAAKL,IAAK,CAC1BC,MAAOI,EAAKJ,OAASI,EAAKO,aAAc,OAAQ,CACjD,EAAGN,CAAI,EAGRH,EAASE,EAAKyQ,YAAYxM,QAASqoB,GAAc,EAAG,EAAGtsB,EAAMC,CAAI,EAKtE,CAGD,OAAO8sB,CACR,CAEA,SAAStR,GAAQrZ,EAAMpB,EAAUqsB,GAKhC,IAJA,IAAIrtB,EACHwlB,EAAQxkB,EAAWD,EAAOyN,OAAQxN,EAAUoB,CAAK,EAAIA,EACrDlC,EAAI,EAE4B,OAAvBF,EAAOwlB,EAAOtlB,IAAeA,CAAC,GACjCmtB,GAA8B,IAAlBrtB,EAAK7B,UACtB4C,EAAOusB,UAAW9I,EAAQxkB,CAAK,CAAE,EAG7BA,EAAKW,aACJ0sB,GAAYtL,EAAY/hB,CAAK,GACjCykB,GAAeD,EAAQxkB,EAAM,QAAS,CAAE,EAEzCA,EAAKW,WAAWC,YAAaZ,CAAK,GAIpC,OAAOoC,CACR,CAEArB,EAAOmC,OAAQ,CACduiB,cAAe,SAAU0H,GACxB,OAAOA,CACR,EAEA5pB,MAAO,SAAUnB,EAAMmrB,EAAeC,GACrC,IAAIttB,EAAG+Y,EAAGwU,EAAaC,EApIN/tB,EAAKgtB,EACnB/hB,EAoIFrH,EAAQnB,EAAK4hB,UAAW,CAAA,CAAK,EAC7B2J,EAAS5L,EAAY3f,CAAK,EAG3B,GAAK,EAAC5C,EAAQykB,gBAAsC,IAAlB7hB,EAAKjE,UAAoC,KAAlBiE,EAAKjE,UAC3D4C,EAAOkX,SAAU7V,CAAK,GAMxB,IAHAsrB,EAAelJ,EAAQjhB,CAAM,EAGvBrD,EAAI,EAAG+Y,GAFbwU,EAAcjJ,EAAQpiB,CAAK,GAEEf,OAAQnB,EAAI+Y,EAAG/Y,CAAC,GAhJ7BP,EAiJL8tB,EAAavtB,GAjJHysB,EAiJQe,EAAcxtB,GAhJzC0K,EAAAA,KAAAA,EAGc,WAHdA,EAAW+hB,EAAK/hB,SAASpF,YAAY,IAGZie,GAAe1X,KAAMpM,EAAID,IAAK,EAC1DitB,EAAK9Y,QAAUlU,EAAIkU,QAGK,UAAbjJ,GAAqC,aAAbA,IACnC+hB,EAAK7U,aAAenY,EAAImY,cA6IxB,GAAKyV,EACJ,GAAKC,EAIJ,IAHAC,EAAcA,GAAejJ,EAAQpiB,CAAK,EAC1CsrB,EAAeA,GAAgBlJ,EAAQjhB,CAAM,EAEvCrD,EAAI,EAAG+Y,EAAIwU,EAAYpsB,OAAQnB,EAAI+Y,EAAG/Y,CAAC,GAC5CwsB,GAAgBe,EAAavtB,GAAKwtB,EAAcxtB,EAAI,OAGrDwsB,GAAgBtqB,EAAMmB,CAAM,EAW9B,OAL2B,GAD3BmqB,EAAelJ,EAAQjhB,EAAO,QAAS,GACrBlC,QACjBojB,GAAeiJ,EAAc,CAACC,GAAUnJ,EAAQpiB,EAAM,QAAS,CAAE,EAI3DmB,CACR,EAEA+pB,UAAW,SAAUzrB,GAKpB,IAJA,IAAIye,EAAMle,EAAM1C,EACfsd,EAAUjc,EAAOqlB,MAAMpJ,QACvB9c,EAAI,EAE6B2D,KAAAA,KAAxBzB,EAAOP,EAAO3B,IAAqBA,CAAC,GAC7C,GAAK6f,EAAY3d,CAAK,EAAI,CACzB,GAAOke,EAAOle,EAAMqe,EAAS3c,SAAc,CAC1C,GAAKwc,EAAK4G,OACT,IAAMxnB,KAAQ4gB,EAAK4G,OACblK,EAAStd,GACbqB,EAAOqlB,MAAM3K,OAAQrZ,EAAM1C,CAAK,EAIhCqB,EAAOonB,YAAa/lB,EAAM1C,EAAM4gB,EAAKmH,MAAO,EAO/CrlB,EAAMqe,EAAS3c,SAAYD,KAAAA,CAC5B,CACKzB,EAAMse,EAAS5c,WAInB1B,EAAMse,EAAS5c,SAAYD,KAAAA,EAE7B,CAEF,CACD,CAAE,EAEF9C,EAAOG,GAAGgC,OAAQ,CACjB0qB,OAAQ,SAAU5sB,GACjB,OAAOya,GAAQ1d,KAAMiD,EAAU,CAAA,CAAK,CACrC,EAEAya,OAAQ,SAAUza,GACjB,OAAOya,GAAQ1d,KAAMiD,CAAS,CAC/B,EAEAV,KAAM,SAAU4E,GACf,OAAO+Z,EAAQlhB,KAAM,SAAUmH,GAC9B,OAAiBrB,KAAAA,IAAVqB,EACNnE,EAAOT,KAAMvC,IAAK,EAClBA,KAAKiW,MAAM,EAAE/R,KAAM,WACK,IAAlBlE,KAAKI,UAAoC,KAAlBJ,KAAKI,UAAqC,IAAlBJ,KAAKI,WACxDJ,KAAK0S,YAAcvL,EAErB,CAAE,CACJ,EAAG,KAAMA,EAAO7C,UAAUhB,MAAO,CAClC,EAEAwsB,OAAQ,WACP,OAAOf,EAAU/uB,KAAMsE,UAAW,SAAUD,GACpB,IAAlBrE,KAAKI,UAAoC,KAAlBJ,KAAKI,UAAqC,IAAlBJ,KAAKI,UAC3CouB,GAAoBxuB,KAAMqE,CAAK,EACrC1B,YAAa0B,CAAK,CAE3B,CAAE,CACH,EAEA0rB,QAAS,WACR,OAAOhB,EAAU/uB,KAAMsE,UAAW,SAAUD,GAC3C,IACKoB,EADkB,IAAlBzF,KAAKI,UAAoC,KAAlBJ,KAAKI,UAAqC,IAAlBJ,KAAKI,WACpDqF,EAAS+oB,GAAoBxuB,KAAMqE,CAAK,GACrC2rB,aAAc3rB,EAAMoB,EAAOkN,UAAW,CAE/C,CAAE,CACH,EAEAsd,OAAQ,WACP,OAAOlB,EAAU/uB,KAAMsE,UAAW,SAAUD,GACtCrE,KAAK4C,YACT5C,KAAK4C,WAAWotB,aAAc3rB,EAAMrE,IAAK,CAE3C,CAAE,CACH,EAEAkwB,MAAO,WACN,OAAOnB,EAAU/uB,KAAMsE,UAAW,SAAUD,GACtCrE,KAAK4C,YACT5C,KAAK4C,WAAWotB,aAAc3rB,EAAMrE,KAAKiI,WAAY,CAEvD,CAAE,CACH,EAEAgO,MAAO,WAIN,IAHA,IAAI5R,EACHlC,EAAI,EAE2B,OAAtBkC,EAAOrE,KAAMmC,IAAeA,CAAC,GACf,IAAlBkC,EAAKjE,WAGT4C,EAAOusB,UAAW9I,EAAQpiB,EAAM,CAAA,CAAM,CAAE,EAGxCA,EAAKqO,YAAc,IAIrB,OAAO1S,IACR,EAEAwF,MAAO,SAAUgqB,EAAeC,GAI/B,OAHAD,EAAiC,MAAjBA,GAAgCA,EAChDC,EAAyC,MAArBA,EAA4BD,EAAgBC,EAEzDzvB,KAAKoE,IAAK,WAChB,OAAOpB,EAAOwC,MAAOxF,KAAMwvB,EAAeC,CAAkB,CAC7D,CAAE,CACH,EAEAL,KAAM,SAAUjoB,GACf,OAAO+Z,EAAQlhB,KAAM,SAAUmH,GAC9B,IAAI9C,EAAOrE,KAAM,IAAO,GACvBmC,EAAI,EACJ+Y,EAAIlb,KAAKsD,OAEV,GAAewC,KAAAA,IAAVqB,GAAyC,IAAlB9C,EAAKjE,SAChC,OAAOiE,EAAK2M,UAIb,GAAsB,UAAjB,OAAO7J,GAAsB,CAACknB,GAAargB,KAAM7G,CAAM,GAC3D,CAAC0e,GAAWF,GAASjY,KAAMvG,CAAM,GAAK,CAAE,GAAI,KAAQ,GAAIM,YAAY,GAAM,CAE1EN,EAAQnE,EAAO0kB,cAAevgB,CAAM,EAEpC,IACC,KAAQhF,EAAI+Y,EAAG/Y,CAAC,GAIQ,KAHvBkC,EAAOrE,KAAMmC,IAAO,IAGV/B,WACT4C,EAAOusB,UAAW9I,EAAQpiB,EAAM,CAAA,CAAM,CAAE,EACxCA,EAAK2M,UAAY7J,GAInB9C,EAAO,CAGO,CAAb,MAAQ2I,IACX,CAEK3I,GACJrE,KAAKiW,MAAM,EAAE6Z,OAAQ3oB,CAAM,CAE7B,EAAG,KAAMA,EAAO7C,UAAUhB,MAAO,CAClC,EAEA6sB,YAAa,WACZ,IAAI9I,EAAU,GAGd,OAAO0H,EAAU/uB,KAAMsE,UAAW,SAAUD,GAC3C,IAAIkQ,EAASvU,KAAK4C,WAEbI,EAAO6D,QAAS7G,KAAMqnB,CAAQ,EAAI,IACtCrkB,EAAOusB,UAAW9I,EAAQzmB,IAAK,CAAE,EAC5BuU,IACJA,EAAO6b,aAAc/rB,EAAMrE,IAAK,CAKnC,EAAGqnB,CAAQ,CACZ,CACD,CAAE,EAEFrkB,EAAOkB,KAAM,CACZmsB,SAAU,SACVC,UAAW,UACXN,aAAc,SACdO,YAAa,QACbC,WAAY,aACb,EAAG,SAAUnrB,EAAMorB,GAClBztB,EAAOG,GAAIkC,GAAS,SAAUpC,GAO7B,IANA,IAAIa,EACHC,EAAM,GACN2sB,EAAS1tB,EAAQC,CAAS,EAC1BwB,EAAOisB,EAAOptB,OAAS,EACvBnB,EAAI,EAEGA,GAAKsC,EAAMtC,CAAC,GACnB2B,EAAQ3B,IAAMsC,EAAOzE,KAAOA,KAAKwF,MAAO,CAAA,CAAK,EAC7CxC,EAAQ0tB,EAAQvuB,EAAI,EAAGsuB,GAAY3sB,CAAM,EAIzC7C,EAAKD,MAAO+C,EAAKD,EAAMH,IAAI,CAAE,EAG9B,OAAO3D,KAAK6D,UAAWE,CAAI,CAC5B,CACD,CAAE,EAGc,SAAZ4sB,GAAsBtsB,GAKxB,IAAIwoB,EAAOxoB,EAAKoJ,cAAcwC,YAM9B,OAHC4c,EADKA,GAASA,EAAK+D,OAIb/D,EAHC9sB,GAGI8wB,iBAAkBxsB,CAAK,CACpC,CAEU,SAAPysB,GAAiBzsB,EAAMe,EAASjB,GACnC,IAASkB,EACR0rB,EAAM,GAGP,IAAM1rB,KAAQD,EACb2rB,EAAK1rB,GAAShB,EAAKyf,MAAOze,GAC1BhB,EAAKyf,MAAOze,GAASD,EAASC,GAM/B,IAAMA,KAHNtB,EAAMI,EAASrD,KAAMuD,CAAK,EAGZe,EACbf,EAAKyf,MAAOze,GAAS0rB,EAAK1rB,GAG3B,OAAOtB,CACR,CAlCA,IA6FKitB,GAAkBC,GAAsBC,GAAkBC,GAC7DC,GAAyBC,GACzBC,GACAxL,EAhGEyL,GAAY,IAAIrmB,OAAQ,KAAOgZ,EAAO,kBAAmB,GAAI,EAqC7DsN,GAAY,IAAItmB,OAAQmZ,EAAUjW,KAAM,GAAI,EAAG,GAAI,EAQtD,SAASqjB,KAGR,IAYIC,EAZE5L,IAINwL,GAAUxN,MAAM6N,QAAU,+EAE1B7L,EAAIhC,MAAM6N,QACT,4HAGD5hB,EAAgBpN,YAAa2uB,EAAU,EAAE3uB,YAAamjB,CAAI,EAEtD4L,EAAW3xB,EAAO8wB,iBAAkB/K,CAAI,EAC5CkL,GAAoC,OAAjBU,EAASxhB,IAG5BmhB,GAAsE,KAA9CO,GAAoBF,EAASG,UAAW,EAIhE/L,EAAIhC,MAAMgO,MAAQ,MAClBX,GAA6D,KAAzCS,GAAoBF,EAASI,KAAM,EAIvDb,GAAgE,KAAzCW,GAAoBF,EAASK,KAAM,EAM1DjM,EAAIhC,MAAMkO,SAAW,WACrBd,GAAiE,KAA9CU,GAAoB9L,EAAImM,YAAc,CAAE,EAE3DliB,EAAgBlN,YAAayuB,EAAU,EAIvCxL,EAAM,KACP,CAEA,SAAS8L,GAAoBM,GAC5B,OAAOlsB,KAAKmsB,MAAOC,WAAYF,CAAQ,CAAE,CAC1C,CA2FD,SAASG,GAAQhuB,EAAMgB,EAAMitB,GAC5B,IAAqBC,EAAUxuB,EAM9B+f,EAAQzf,EAAKyf,MAqCd,OAnCAwO,EAAWA,GAAY3B,GAAWtsB,CAAK,KAQzB,MAFbN,EAAMuuB,EAASE,iBAAkBntB,CAAK,GAAKitB,EAAUjtB,KAEjC2e,EAAY3f,CAAK,IACpCN,EAAMf,EAAO8gB,MAAOzf,EAAMgB,CAAK,GAQ3B,CAAC5D,EAAQgxB,eAAe,IAAKlB,GAAUvjB,KAAMjK,CAAI,GAAKytB,GAAUxjB,KAAM3I,CAAK,IAG/E0sB,EAAQjO,EAAMiO,MACdW,EAAW5O,EAAM4O,SACjBH,EAAWzO,EAAMyO,SAGjBzO,EAAM4O,SAAW5O,EAAMyO,SAAWzO,EAAMiO,MAAQhuB,EAChDA,EAAMuuB,EAASP,MAGfjO,EAAMiO,MAAQA,EACdjO,EAAM4O,SAAWA,EACjB5O,EAAMyO,SAAWA,GAIJzsB,KAAAA,IAAR/B,EAINA,EAAM,GACNA,CACF,CAGA,SAAS4uB,GAAcC,EAAaC,GAGnC,MAAO,CACNlvB,IAAK,WACJ,GAAKivB,CAAAA,EAAY,EASjB,OAAS5yB,KAAK2D,IAAMkvB,GAAS7xB,MAAOhB,KAAMsE,SAAU,EALnD,OAAOtE,KAAK2D,GAMd,CACD,CACD,CA7JE2tB,GAAY1xB,EAAS0C,cAAe,KAAM,GAC1CwjB,EAAMlmB,EAAS0C,cAAe,KAAM,GAG3BwhB,QAMVgC,EAAIhC,MAAMgP,eAAiB,cAC3BhN,EAAIG,UAAW,CAAA,CAAK,EAAEnC,MAAMgP,eAAiB,GAC7CrxB,EAAQsxB,gBAA+C,gBAA7BjN,EAAIhC,MAAMgP,eAEpC9vB,EAAOmC,OAAQ1D,EAAS,CACvBuxB,kBAAmB,WAElB,OADAvB,GAAkB,EACXR,EACR,EACAwB,eAAgB,WAEf,OADAhB,GAAkB,EACXN,EACR,EACA8B,cAAe,WAEd,OADAxB,GAAkB,EACXT,EACR,EACAkC,mBAAoB,WAEnB,OADAzB,GAAkB,EACXJ,EACR,EACA8B,cAAe,WAEd,OADA1B,GAAkB,EACXP,EACR,EAWAkC,qBAAsB,WACrB,IAAIC,EAAO/M,EAAagN,EAmCxB,OAlCgC,MAA3BlC,KACJiC,EAAQzzB,EAAS0C,cAAe,OAAQ,EACxCgkB,EAAK1mB,EAAS0C,cAAe,IAAK,EAClCixB,EAAU3zB,EAAS0C,cAAe,KAAM,EAExC+wB,EAAMvP,MAAM6N,QAAU,2DACtBrL,EAAGxC,MAAM6N,QAAU,mBAKnBrL,EAAGxC,MAAM0P,OAAS,MAClBD,EAAQzP,MAAM0P,OAAS,MAQvBD,EAAQzP,MAAMC,QAAU,QAExBhU,EACEpN,YAAa0wB,CAAM,EACnB1wB,YAAa2jB,CAAG,EAChB3jB,YAAa4wB,CAAQ,EAEvBD,EAAUvzB,EAAO8wB,iBAAkBvK,CAAG,EACtC8K,GAA4BqC,SAAUH,EAAQE,OAAQ,EAAG,EACxDC,SAAUH,EAAQI,eAAgB,EAAG,EACrCD,SAAUH,EAAQK,kBAAmB,EAAG,IAAQrN,EAAGsN,aAEpD7jB,EAAgBlN,YAAawwB,CAAM,GAE7BjC,EACR,CACD,CAAE,GA6EH,IAAIyC,GAAc,CAAE,SAAU,MAAO,MACpCC,GAAal0B,EAAS0C,cAAe,KAAM,EAAEwhB,MAC7CiQ,GAAc,GAkBf,SAASC,GAAe3uB,GACvB,IAAI4uB,EAAQjxB,EAAOkxB,SAAU7uB,IAAU0uB,GAAa1uB,GAEpD,OAAK4uB,IAGA5uB,KAAQyuB,GACLzuB,EAED0uB,GAAa1uB,GAxBrB,SAAyBA,GAMxB,IAHA,IAAI8uB,EAAU9uB,EAAM,GAAIwc,YAAY,EAAIxc,EAAK1E,MAAO,CAAE,EACrDwB,EAAI0xB,GAAYvwB,OAETnB,CAAC,IAER,IADAkD,EAAOwuB,GAAa1xB,GAAMgyB,KACbL,GACZ,OAAOzuB,CAGV,EAY8CA,CAAK,GAAKA,EACxD,CAGA,IAKC+uB,GAAe,4BACfC,GAAc,MACdC,GAAU,CAAEtC,SAAU,WAAYuC,WAAY,SAAUxQ,QAAS,OAAQ,EACzEyQ,GAAqB,CACpBC,cAAe,IACfC,WAAY,KACb,EAED,SAASC,GAAmB/vB,EAAOuC,EAAOytB,GAIzC,IAAI5tB,EAAUod,GAAQ1W,KAAMvG,CAAM,EAClC,OAAOH,EAGNhB,KAAK6uB,IAAK,EAAG7tB,EAAS,IAAQ4tB,GAAY,EAAI,GAAM5tB,EAAS,IAAO,MACpEG,CACF,CAEA,SAAS2tB,GAAoBzwB,EAAM0wB,EAAWC,EAAKC,EAAaC,EAAQC,GACvE,IAAIhzB,EAAkB,UAAd4yB,EAAwB,EAAI,EACnCK,EAAQ,EACRC,EAAQ,EAGT,GAAKL,KAAUC,EAAc,SAAW,WACvC,OAAO,EAGR,KAAQ9yB,EAAI,EAAGA,GAAK,EAGN,WAAR6yB,IACJK,GAASryB,EAAOihB,IAAK5f,EAAM2wB,EAAM3Q,EAAWliB,GAAK,CAAA,EAAM+yB,CAAO,GAIzDD,GAmBQ,YAARD,IACJK,GAASryB,EAAOihB,IAAK5f,EAAM,UAAYggB,EAAWliB,GAAK,CAAA,EAAM+yB,CAAO,GAIxD,WAARF,IACJK,GAASryB,EAAOihB,IAAK5f,EAAM,SAAWggB,EAAWliB,GAAM,QAAS,CAAA,EAAM+yB,CAAO,KAtB9EG,GAASryB,EAAOihB,IAAK5f,EAAM,UAAYggB,EAAWliB,GAAK,CAAA,EAAM+yB,CAAO,EAGvD,YAARF,EACJK,GAASryB,EAAOihB,IAAK5f,EAAM,SAAWggB,EAAWliB,GAAM,QAAS,CAAA,EAAM+yB,CAAO,EAI7EE,GAASpyB,EAAOihB,IAAK5f,EAAM,SAAWggB,EAAWliB,GAAM,QAAS,CAAA,EAAM+yB,CAAO,GAoChF,MAhBK,CAACD,GAA8B,GAAfE,IAIpBE,GAASrvB,KAAK6uB,IAAK,EAAG7uB,KAAKsvB,KAC1BjxB,EAAM,SAAW0wB,EAAW,GAAIlT,YAAY,EAAIkT,EAAUp0B,MAAO,CAAE,GACnEw0B,EACAE,EACAD,EACA,EAID,CAAE,GAAK,GAGDC,CACR,CAEA,SAASE,GAAkBlxB,EAAM0wB,EAAWK,GAG3C,IAAIF,EAASvE,GAAWtsB,CAAK,EAK5B4wB,GADkB,CAACxzB,EAAQuxB,kBAAkB,GAAKoC,IAEE,eAAnDpyB,EAAOihB,IAAK5f,EAAM,YAAa,CAAA,EAAO6wB,CAAO,EAC9CM,EAAmBP,EAEnB7yB,EAAMiwB,GAAQhuB,EAAM0wB,EAAWG,CAAO,EACtCO,EAAa,SAAWV,EAAW,GAAIlT,YAAY,EAAIkT,EAAUp0B,MAAO,CAAE,EAI3E,GAAK4wB,GAAUvjB,KAAM5L,CAAI,EAAI,CAC5B,GAAK,CAACgzB,EACL,OAAOhzB,EAERA,EAAM,MACP,CAwCA,OAlCO,CAACX,EAAQuxB,kBAAkB,GAAKiC,GAMtC,CAACxzB,EAAQ2xB,qBAAqB,GAAKvmB,EAAUxI,EAAM,IAAK,GAIhD,SAARjC,GAIA,CAACgwB,WAAYhwB,CAAI,GAAsD,WAAjDY,EAAOihB,IAAK5f,EAAM,UAAW,CAAA,EAAO6wB,CAAO,IAGjE7wB,EAAKqxB,eAAe,EAAEpyB,SAEtB2xB,EAAiE,eAAnDjyB,EAAOihB,IAAK5f,EAAM,YAAa,CAAA,EAAO6wB,CAAO,EAK3DM,EAAmBC,KAAcpxB,KAEhCjC,EAAMiC,EAAMoxB,KAKdrzB,EAAMgwB,WAAYhwB,CAAI,GAAK,GAI1B0yB,GACCzwB,EACA0wB,EACAK,IAAWH,EAAc,SAAW,WACpCO,EACAN,EAGA9yB,CACD,EACG,IACL,CA8SA,SAASuzB,EAAOtxB,EAAMe,EAASod,EAAMxd,EAAK4wB,GACzC,OAAO,IAAID,EAAMpyB,UAAUH,KAAMiB,EAAMe,EAASod,EAAMxd,EAAK4wB,CAAO,CACnE,CA9SA5yB,EAAOmC,OAAQ,CAId0wB,SAAU,CACTC,QAAS,CACRnyB,IAAK,SAAUU,EAAMiuB,GACpB,GAAKA,EAIJ,MAAe,MADXvuB,EAAMsuB,GAAQhuB,EAAM,SAAU,GACd,IAAMN,CAE5B,CACD,CACD,EAGAkhB,UAAW,CACV8Q,wBAA2B,CAAA,EAC3BC,YAAe,CAAA,EACfC,YAAe,CAAA,EACfC,SAAY,CAAA,EACZC,WAAc,CAAA,EACdzB,WAAc,CAAA,EACd0B,SAAY,CAAA,EACZC,WAAc,CAAA,EACdC,cAAiB,CAAA,EACjBC,gBAAmB,CAAA,EACnBC,QAAW,CAAA,EACXC,WAAc,CAAA,EACdC,aAAgB,CAAA,EAChBC,WAAc,CAAA,EACdb,QAAW,CAAA,EACXc,MAAS,CAAA,EACTC,QAAW,CAAA,EACXC,OAAU,CAAA,EACVC,OAAU,CAAA,EACVC,KAAQ,CAAA,CACT,EAIA9C,SAAU,GAGVpQ,MAAO,SAAUzf,EAAMgB,EAAM8B,EAAOiuB,GAGnC,GAAM/wB,GAA0B,IAAlBA,EAAKjE,UAAoC,IAAlBiE,EAAKjE,UAAmBiE,EAAKyf,MAAlE,CAKA,IAAI/f,EAAKpC,EAAM2hB,EACd2T,EAAWnV,EAAWzc,CAAK,EAC3B6xB,EAAe7C,GAAYrmB,KAAM3I,CAAK,EACtCye,EAAQzf,EAAKyf,MAad,GARMoT,IACL7xB,EAAO2uB,GAAeiD,CAAS,GAIhC3T,EAAQtgB,EAAO6yB,SAAUxwB,IAAUrC,EAAO6yB,SAAUoB,GAGrCnxB,KAAAA,IAAVqB,EA0CJ,OAAKmc,GAAS,QAASA,GACwBxd,KAAAA,KAA5C/B,EAAMuf,EAAM3f,IAAKU,EAAM,CAAA,EAAO+wB,CAAM,GAE/BrxB,EAID+f,EAAOze,GA7CA,YAHd1D,EAAO,OAAOwF,KAGcpD,EAAMqgB,GAAQ1W,KAAMvG,CAAM,IAAOpD,EAAK,KACjEoD,EAAQqd,GAAWngB,EAAMgB,EAAMtB,CAAI,EAGnCpC,EAAO,UAIM,MAATwF,GAAiBA,GAAUA,IAOlB,WAATxF,GAAsBu1B,IAC1B/vB,GAASpD,GAAOA,EAAK,KAASf,EAAOiiB,UAAWgS,GAAa,GAAK,OAI7Dx1B,EAAQsxB,iBAA6B,KAAV5rB,GAAiD,IAAjC9B,EAAKnE,QAAS,YAAa,IAC3E4iB,EAAOze,GAAS,WAIXie,GAAY,QAASA,GACsBxd,KAAAA,KAA9CqB,EAAQmc,EAAMhB,IAAKje,EAAM8C,EAAOiuB,CAAM,MAEnC8B,EACJpT,EAAMqT,YAAa9xB,EAAM8B,CAAM,EAE/B2c,EAAOze,GAAS8B,EAtDnB,CAsED,EAEA8c,IAAK,SAAU5f,EAAMgB,EAAM+vB,EAAOF,GACjC,IAAI9yB,EACH60B,EAAWnV,EAAWzc,CAAK,EA6B5B,OA5BgBgvB,GAAYrmB,KAAM3I,CAAK,IAMtCA,EAAO2uB,GAAeiD,CAAS,GAiBnB,YAJZ70B,EADY0D,KAAAA,KAJZ1D,GAJDkhB,EAAQtgB,EAAO6yB,SAAUxwB,IAAUrC,EAAO6yB,SAAUoB,KAGtC,QAAS3T,EAChBA,EAAM3f,IAAKU,EAAM,CAAA,EAAM+wB,CAAM,EAI/BhzB,GACEiwB,GAAQhuB,EAAMgB,EAAM6vB,CAAO,EAI7B9yB,IAAoBiD,KAAQmvB,KAChCpyB,EAAMoyB,GAAoBnvB,KAIZ,KAAV+vB,GAAgBA,KACpBxxB,EAAMwuB,WAAYhwB,CAAI,EACL,CAAA,IAAVgzB,GAAkBgC,SAAUxzB,CAAI,GAAIA,GAAO,EAG5CxB,CACR,CACD,CAAE,EAEFY,EAAOkB,KAAM,CAAE,SAAU,SAAW,SAAUsD,EAAIutB,GACjD/xB,EAAO6yB,SAAUd,GAAc,CAC9BpxB,IAAK,SAAUU,EAAMiuB,EAAU8C,GAC9B,GAAK9C,EAIJ,MAAO8B,CAAAA,GAAapmB,KAAMhL,EAAOihB,IAAK5f,EAAM,SAAU,CAAE,GAQpDA,EAAKqxB,eAAe,EAAEpyB,QAAWe,EAAKgzB,sBAAsB,EAAEtF,MAIjEwD,GAAkBlxB,EAAM0wB,EAAWK,CAAM,EAHzCtE,GAAMzsB,EAAMiwB,GAAS,WACpB,OAAOiB,GAAkBlxB,EAAM0wB,EAAWK,CAAM,CACjD,CAAE,CAGL,EAEA9S,IAAK,SAAUje,EAAM8C,EAAOiuB,GAC3B,IACCF,EAASvE,GAAWtsB,CAAK,EAIzBizB,EAAqB,CAAC71B,EAAQ0xB,cAAc,GACvB,aAApB+B,EAAOlD,SAIRiD,GADkBqC,GAAsBlC,IAEY,eAAnDpyB,EAAOihB,IAAK5f,EAAM,YAAa,CAAA,EAAO6wB,CAAO,EAC9CN,EAAWQ,EACVN,GACCzwB,EACA0wB,EACAK,EACAH,EACAC,CACD,EACA,EAqBF,OAjBKD,GAAeqC,IACnB1C,GAAY5uB,KAAKsvB,KAChBjxB,EAAM,SAAW0wB,EAAW,GAAIlT,YAAY,EAAIkT,EAAUp0B,MAAO,CAAE,GACnEyxB,WAAY8C,EAAQH,EAAY,EAChCD,GAAoBzwB,EAAM0wB,EAAW,SAAU,CAAA,EAAOG,CAAO,EAC7D,EACD,GAIIN,IAAc5tB,EAAUod,GAAQ1W,KAAMvG,CAAM,IACnB,QAA3BH,EAAS,IAAO,QAElB3C,EAAKyf,MAAOiR,GAAc5tB,EAC1BA,EAAQnE,EAAOihB,IAAK5f,EAAM0wB,CAAU,GAG9BJ,GAAmBtwB,EAAM8C,EAAOytB,CAAS,CACjD,CACD,CACD,CAAE,EAEF5xB,EAAO6yB,SAAShE,WAAac,GAAclxB,EAAQyxB,mBAClD,SAAU7uB,EAAMiuB,GACf,GAAKA,EACJ,OAASF,WAAYC,GAAQhuB,EAAM,YAAa,CAAE,GACjDA,EAAKgzB,sBAAsB,EAAEE,KAC5BzG,GAAMzsB,EAAM,CAAEwtB,WAAY,CAAE,EAAG,WAC9B,OAAOxtB,EAAKgzB,sBAAsB,EAAEE,IACrC,CAAE,GACA,IAEN,CACD,EAGAv0B,EAAOkB,KAAM,CACZszB,OAAQ,GACRC,QAAS,GACTC,OAAQ,OACT,EAAG,SAAUC,EAAQC,GACpB50B,EAAO6yB,SAAU8B,EAASC,GAAW,CACpCC,OAAQ,SAAU1wB,GAOjB,IANA,IAAIhF,EAAI,EACP21B,EAAW,GAGXC,EAAyB,UAAjB,OAAO5wB,EAAqBA,EAAMI,MAAO,GAAI,EAAI,CAAEJ,GAEpDhF,EAAI,EAAGA,CAAC,GACf21B,EAAUH,EAAStT,EAAWliB,GAAMy1B,GACnCG,EAAO51B,IAAO41B,EAAO51B,EAAI,IAAO41B,EAAO,GAGzC,OAAOD,CACR,CACD,EAEgB,WAAXH,IACJ30B,EAAO6yB,SAAU8B,EAASC,GAAStV,IAAMqS,GAE3C,CAAE,EAEF3xB,EAAOG,GAAGgC,OAAQ,CACjB8e,IAAK,SAAU5e,EAAM8B,GACpB,OAAO+Z,EAAQlhB,KAAM,SAAUqE,EAAMgB,EAAM8B,GAC1C,IAAI+tB,EAAQpwB,EACXV,EAAM,GACNjC,EAAI,EAEL,GAAKyD,MAAMC,QAASR,CAAK,EAAI,CAI5B,IAHA6vB,EAASvE,GAAWtsB,CAAK,EACzBS,EAAMO,EAAK/B,OAEHnB,EAAI2C,EAAK3C,CAAC,GACjBiC,EAAKiB,EAAMlD,IAAQa,EAAOihB,IAAK5f,EAAMgB,EAAMlD,GAAK,CAAA,EAAO+yB,CAAO,EAG/D,OAAO9wB,CACR,CAEA,OAAiB0B,KAAAA,IAAVqB,EACNnE,EAAO8gB,MAAOzf,EAAMgB,EAAM8B,CAAM,EAChCnE,EAAOihB,IAAK5f,EAAMgB,CAAK,CACzB,EAAGA,EAAM8B,EAA0B,EAAnB7C,UAAUhB,MAAW,CACtC,CACD,CAAE,IAMFN,EAAO2yB,MAAQA,GAETpyB,UAAY,CACjBE,YAAakyB,EACbvyB,KAAM,SAAUiB,EAAMe,EAASod,EAAMxd,EAAK4wB,EAAQ5Q,GACjDhlB,KAAKqE,KAAOA,EACZrE,KAAKwiB,KAAOA,EACZxiB,KAAK41B,OAASA,GAAU5yB,EAAO4yB,OAAOpP,SACtCxmB,KAAKoF,QAAUA,EACfpF,KAAKsU,MAAQtU,KAAKgsB,IAAMhsB,KAAKqP,IAAI,EACjCrP,KAAKgF,IAAMA,EACXhF,KAAKglB,KAAOA,IAAUhiB,EAAOiiB,UAAWzC,GAAS,GAAK,KACvD,EACAnT,IAAK,WACJ,IAAIiU,EAAQqS,EAAMqC,UAAWh4B,KAAKwiB,MAElC,OAAOc,GAASA,EAAM3f,IACrB2f,EACAqS,EAAMqC,UAAUxR,UADV7iB,IAAK3D,IAAK,CAElB,EACAi4B,IAAK,SAAUC,GACd,IAAIC,EACH7U,EAAQqS,EAAMqC,UAAWh4B,KAAKwiB,MAoB/B,OAlBKxiB,KAAKoF,QAAQgzB,SACjBp4B,KAAKq4B,IAAMF,EAAQn1B,EAAO4yB,OAAQ51B,KAAK41B,QACtCsC,EAASl4B,KAAKoF,QAAQgzB,SAAWF,EAAS,EAAG,EAAGl4B,KAAKoF,QAAQgzB,QAC9D,EAEAp4B,KAAKq4B,IAAMF,EAAQD,EAEpBl4B,KAAKgsB,KAAQhsB,KAAKgF,IAAMhF,KAAKsU,OAAU6jB,EAAQn4B,KAAKsU,MAE/CtU,KAAKoF,QAAQkzB,MACjBt4B,KAAKoF,QAAQkzB,KAAKx3B,KAAMd,KAAKqE,KAAMrE,KAAKgsB,IAAKhsB,IAAK,GAG9CsjB,GAASA,EAAMhB,IACnBgB,EAEAqS,EAAMqC,UAAUxR,UAFVlE,IAAKtiB,IAAK,EAIVA,IACR,CACD,GAEgBoD,KAAKG,UAAYoyB,EAAMpyB,WAEvCoyB,EAAMqC,UAAY,CACjBxR,SAAU,CACT7iB,IAAK,SAAU+gB,GAKd,OAA6B,IAAxBA,EAAMrgB,KAAKjE,UACa,MAA5BskB,EAAMrgB,KAAMqgB,EAAMlC,OAAoD,MAAlCkC,EAAMrgB,KAAKyf,MAAOY,EAAMlC,MACrDkC,EAAMrgB,KAAMqgB,EAAMlC,OAO1B7O,EAAS3Q,EAAOihB,IAAKS,EAAMrgB,KAAMqgB,EAAMlC,KAAM,EAAG,IAGnB,SAAX7O,EAAwBA,EAAJ,CACvC,EACA2O,IAAK,SAAUoC,GAKT1hB,EAAOu1B,GAAGD,KAAM5T,EAAMlC,MAC1Bxf,EAAOu1B,GAAGD,KAAM5T,EAAMlC,MAAQkC,CAAM,EACD,IAAxBA,EAAMrgB,KAAKjE,UACtB4C,CAAAA,EAAO6yB,SAAUnR,EAAMlC,OAC6B,MAAnDkC,EAAMrgB,KAAKyf,MAAOkQ,GAAetP,EAAMlC,IAAK,GAG7CkC,EAAMrgB,KAAMqgB,EAAMlC,MAASkC,EAAMsH,IAFjChpB,EAAO8gB,MAAOY,EAAMrgB,KAAMqgB,EAAMlC,KAAMkC,EAAMsH,IAAMtH,EAAMM,IAAK,CAI/D,CACD,CACD,GAIgBwT,UAAY7C,EAAMqC,UAAUS,WAAa,CACxDnW,IAAK,SAAUoC,GACTA,EAAMrgB,KAAKjE,UAAYskB,EAAMrgB,KAAKzB,aACtC8hB,EAAMrgB,KAAMqgB,EAAMlC,MAASkC,EAAMsH,IAEnC,CACD,EAEAhpB,EAAO4yB,OAAS,CACf8C,OAAQ,SAAUC,GACjB,OAAOA,CACR,EACAC,MAAO,SAAUD,GAChB,MAAO,GAAM3yB,KAAK6yB,IAAKF,EAAI3yB,KAAK8yB,EAAG,EAAI,CACxC,EACAtS,SAAU,OACX,EAEAxjB,EAAOu1B,GAAK5C,EAAMpyB,UAAUH,KAG5BJ,EAAOu1B,GAAGD,KAAO,GAKjB,IACCS,EAAOC,GAmrBHjoB,EAEHkoB,EAprBDC,GAAW,yBACXC,GAAO,cAER,SAASC,KACHJ,KACqB,CAAA,IAApBp5B,EAASy5B,QAAoBt5B,EAAOu5B,sBACxCv5B,EAAOu5B,sBAAuBF,EAAS,EAEvCr5B,EAAO6f,WAAYwZ,GAAUp2B,EAAOu1B,GAAGgB,QAAS,EAGjDv2B,EAAOu1B,GAAGiB,KAAK,EAEjB,CAGA,SAASC,KAIR,OAHA15B,EAAO6f,WAAY,WAClBmZ,EAAQjzB,KAAAA,CACT,CAAE,EACOizB,EAAQlvB,KAAKmiB,IAAI,CAC3B,CAGA,SAAS0N,GAAO/3B,EAAMg4B,GACrB,IAAI9L,EACH1rB,EAAI,EACJ8M,EAAQ,CAAEukB,OAAQ7xB,CAAK,EAKxB,IADAg4B,EAAeA,EAAe,EAAI,EAC1Bx3B,EAAI,EAAGA,GAAK,EAAIw3B,EAEvB1qB,EAAO,UADP4e,EAAQxJ,EAAWliB,KACS8M,EAAO,UAAY4e,GAAUlsB,EAO1D,OAJKg4B,IACJ1qB,EAAM6mB,QAAU7mB,EAAM8iB,MAAQpwB,GAGxBsN,CACR,CAEA,SAAS2qB,GAAazyB,EAAOqb,EAAMqX,GAKlC,IAJA,IAAInV,EACHsK,GAAe8K,EAAUC,SAAUvX,IAAU,IAAKzhB,OAAQ+4B,EAAUC,SAAU,IAAM,EACpF3e,EAAQ,EACR9X,EAAS0rB,EAAW1rB,OACb8X,EAAQ9X,EAAQ8X,CAAK,GAC5B,GAAOsJ,EAAQsK,EAAY5T,GAAQta,KAAM+4B,EAAWrX,EAAMrb,CAAM,EAG/D,OAAOud,CAGV,CAmNA,SAASoV,EAAWz1B,EAAM21B,EAAY50B,GACrC,IAAIuO,EACHsmB,EAtCG7e,EAAO/V,EAAMuwB,EAAQzuB,EAAOmc,EAuC/BlI,EAAQ,EACR9X,EAASw2B,EAAUI,WAAW52B,OAC9B6a,EAAWnb,EAAO8a,SAAS,EAAEI,OAAQ,WAGpC,OAAOsb,EAAKn1B,IACb,CAAE,EACFm1B,EAAO,WACN,GAAKS,CAAAA,EAAL,CAaA,IAVA,IAAIE,EAAcpB,GAASU,GAAY,EACtCtZ,EAAYna,KAAK6uB,IAAK,EAAGgF,EAAUO,UAAYP,EAAUzB,SAAW+B,CAAY,EAKhFjC,EAAU,GADH/X,EAAY0Z,EAAUzB,UAAY,GAEzChd,EAAQ,EACR9X,EAASu2B,EAAUQ,OAAO/2B,OAEnB8X,EAAQ9X,EAAQ8X,CAAK,GAC5Bye,EAAUQ,OAAQjf,GAAQ6c,IAAKC,CAAQ,EAMxC,GAHA/Z,EAASkB,WAAYhb,EAAM,CAAEw1B,EAAW3B,EAAS/X,EAAY,EAGxD+X,EAAU,GAAK50B,EACnB,OAAO6c,EAIF7c,GACL6a,EAASkB,WAAYhb,EAAM,CAAEw1B,EAAW,EAAG,EAAI,EAIhD1b,EAASmB,YAAajb,EAAM,CAAEw1B,EAAY,CA5B1C,CA6BA,MAAO,CAAA,CACR,EACAA,EAAY1b,EAASzB,QAAS,CAC7BrY,KAAMA,EACNsnB,MAAO3oB,EAAOmC,OAAQ,GAAI60B,CAAW,EACrCM,KAAMt3B,EAAOmC,OAAQ,CAAA,EAAM,CAC1Bo1B,cAAe,GACf3E,OAAQ5yB,EAAO4yB,OAAOpP,QACvB,EAAGphB,CAAQ,EACXo1B,mBAAoBR,EACpBS,gBAAiBr1B,EACjBg1B,UAAWrB,GAASU,GAAY,EAChCrB,SAAUhzB,EAAQgzB,SAClBiC,OAAQ,GACRT,YAAa,SAAUpX,EAAMxd,GACxB0f,EAAQ1hB,EAAO2yB,MAAOtxB,EAAMw1B,EAAUS,KAAM9X,EAAMxd,EACrD60B,EAAUS,KAAKC,cAAe/X,IAAUqX,EAAUS,KAAK1E,MAAO,EAE/D,OADAiE,EAAUQ,OAAOp5B,KAAMyjB,CAAM,EACtBA,CACR,EACAlB,KAAM,SAAUkX,GACf,IAAItf,EAAQ,EAIX9X,EAASo3B,EAAUb,EAAUQ,OAAO/2B,OAAS,EAC9C,GAAK22B,CAAAA,EAAL,CAIA,IADAA,EAAU,CAAA,EACF7e,EAAQ9X,EAAQ8X,CAAK,GAC5Bye,EAAUQ,OAAQjf,GAAQ6c,IAAK,CAAE,EAI7ByC,GACJvc,EAASkB,WAAYhb,EAAM,CAAEw1B,EAAW,EAAG,EAAI,EAC/C1b,EAASmB,YAAajb,EAAM,CAAEw1B,EAAWa,EAAU,GAEnDvc,EAASuB,WAAYrb,EAAM,CAAEw1B,EAAWa,EAAU,CAXnD,CAaA,OAAO16B,IACR,CACD,CAAE,EACF2rB,EAAQkO,EAAUlO,MA3HCA,EA6HRA,EA7He4O,EA6HRV,EAAUS,KAAKC,cAzHlC,IAAMnf,KAASuQ,EAed,GAbAiK,EAAS2E,EADTl1B,EAAOyc,EAAW1G,CAAM,GAExBjU,EAAQwkB,EAAOvQ,GACVxV,MAAMC,QAASsB,CAAM,IACzByuB,EAASzuB,EAAO,GAChBA,EAAQwkB,EAAOvQ,GAAUjU,EAAO,IAG5BiU,IAAU/V,IACdsmB,EAAOtmB,GAAS8B,EAChB,OAAOwkB,EAAOvQ,KAGfkI,EAAQtgB,EAAO6yB,SAAUxwB,KACX,WAAYie,EAMzB,IAAMlI,KALNjU,EAAQmc,EAAMuU,OAAQ1wB,CAAM,EAC5B,OAAOwkB,EAAOtmB,GAIC8B,EACNiU,KAASuQ,IAChBA,EAAOvQ,GAAUjU,EAAOiU,GACxBmf,EAAenf,GAAUwa,QAI3B2E,EAAel1B,GAASuwB,EA+F1B,KAAQxa,EAAQ9X,EAAQ8X,CAAK,GAE5B,GADAzH,EAASmmB,EAAUI,WAAY9e,GAAQta,KAAM+4B,EAAWx1B,EAAMsnB,EAAOkO,EAAUS,IAAK,EAMnF,OAJKp6B,EAAYyT,EAAO6P,IAAK,IAC5BxgB,EAAOugB,YAAasW,EAAUx1B,KAAMw1B,EAAUS,KAAKhd,KAAM,EAAEkG,KAC1D7P,EAAO6P,KAAKmX,KAAMhnB,CAAO,GAEpBA,EAyBT,OArBA3Q,EAAOoB,IAAKunB,EAAOiO,GAAaC,CAAU,EAErC35B,EAAY25B,EAAUS,KAAKhmB,KAAM,GACrCulB,EAAUS,KAAKhmB,MAAMxT,KAAMuD,EAAMw1B,CAAU,EAI5CA,EACEnb,SAAUmb,EAAUS,KAAK5b,QAAS,EAClC1U,KAAM6vB,EAAUS,KAAKtwB,KAAM6vB,EAAUS,KAAKM,QAAS,EACnDje,KAAMkd,EAAUS,KAAK3d,IAAK,EAC1BuB,OAAQ2b,EAAUS,KAAKpc,MAAO,EAEhClb,EAAOu1B,GAAGsC,MACT73B,EAAOmC,OAAQq0B,EAAM,CACpBn1B,KAAMA,EACNy2B,KAAMjB,EACNvc,MAAOuc,EAAUS,KAAKhd,KACvB,CAAE,CACH,EAEOuc,CACR,CAEA72B,EAAO82B,UAAY92B,EAAOmC,OAAQ20B,EAAW,CAE5CC,SAAU,CACTgB,IAAK,CAAE,SAAUvY,EAAMrb,GACtB,IAAIud,EAAQ1kB,KAAK45B,YAAapX,EAAMrb,CAAM,EAE1C,OADAqd,GAAWE,EAAMrgB,KAAMme,EAAM4B,GAAQ1W,KAAMvG,CAAM,EAAGud,CAAM,EACnDA,CACR,EACD,EAEAsW,QAAS,SAAUrP,EAAOxnB,GAYzB,IAJA,IAAIqe,EACHpH,EAAQ,EACR9X,GAPAqoB,EAFIzrB,EAAYyrB,CAAM,GACtBxnB,EAAWwnB,EACH,CAAE,MAEFA,EAAMte,MAAO2O,CAAc,GAKpB1Y,OAER8X,EAAQ9X,EAAQ8X,CAAK,GAC5BoH,EAAOmJ,EAAOvQ,GACd0e,EAAUC,SAAUvX,GAASsX,EAAUC,SAAUvX,IAAU,GAC3DsX,EAAUC,SAAUvX,GAAOxQ,QAAS7N,CAAS,CAE/C,EAEA+1B,WAAY,CA3Wb,SAA2B71B,EAAMsnB,EAAO2O,GACvC,IAAI9X,EAAMrb,EAAOse,EAAQnC,EAAO2X,EAASC,EAAWC,EACnDC,EAAQ,UAAWzP,GAAS,WAAYA,EACxCmP,EAAO96B,KACPmuB,EAAO,GACPrK,EAAQzf,EAAKyf,MACbuV,EAASh1B,EAAKjE,UAAYyjB,GAAoBxf,CAAK,EACnDg3B,EAAW3Y,EAAS/e,IAAKU,EAAM,QAAS,EA6BzC,IAAMme,KA1BA8X,EAAKhd,QAEa,OADvBgG,EAAQtgB,EAAOugB,YAAalf,EAAM,IAAK,GAC5Bi3B,WACVhY,EAAMgY,SAAW,EACjBL,EAAU3X,EAAMrN,MAAMgH,KACtBqG,EAAMrN,MAAMgH,KAAO,WACZqG,EAAMgY,UACXL,EAAQ,CAEV,GAED3X,EAAMgY,QAAQ,GAEdR,EAAK5c,OAAQ,WAGZ4c,EAAK5c,OAAQ,WACZoF,EAAMgY,QAAQ,GACRt4B,EAAOsa,MAAOjZ,EAAM,IAAK,EAAEf,QAChCggB,EAAMrN,MAAMgH,KAAK,CAEnB,CAAE,CACH,CAAE,GAIW0O,EAEb,GADAxkB,EAAQwkB,EAAOnJ,GACV0W,GAASlrB,KAAM7G,CAAM,EAAI,CAG7B,GAFA,OAAOwkB,EAAOnJ,GACdiD,EAASA,GAAoB,WAAVte,EACdA,KAAYkyB,EAAS,OAAS,QAAW,CAI7C,GAAe,SAAVlyB,GAAoBk0B,CAAAA,GAAiCv1B,KAAAA,IAArBu1B,EAAU7Y,GAK9C,SAJA6W,EAAS,CAAA,CAMX,CACAlL,EAAM3L,GAAS6Y,GAAYA,EAAU7Y,IAAUxf,EAAO8gB,MAAOzf,EAAMme,CAAK,CACzE,CAKD,IADA0Y,EAAY,CAACl4B,EAAOyD,cAAeklB,CAAM,IACtB3oB,CAAAA,EAAOyD,cAAe0nB,CAAK,EA8D9C,IAAM3L,KAzDD4Y,GAA2B,IAAlB/2B,EAAKjE,WAMlBk6B,EAAKiB,SAAW,CAAEzX,EAAMyX,SAAUzX,EAAM0X,UAAW1X,EAAM2X,WAIlC,OADvBN,EAAiBE,GAAYA,EAAStX,WAErCoX,EAAiBzY,EAAS/e,IAAKU,EAAM,SAAU,GAG/B,UADjB0f,EAAU/gB,EAAOihB,IAAK5f,EAAM,SAAU,KAEhC82B,EACJpX,EAAUoX,GAIV/V,EAAU,CAAE/gB,GAAQ,CAAA,CAAK,EACzB82B,EAAiB92B,EAAKyf,MAAMC,SAAWoX,EACvCpX,EAAU/gB,EAAOihB,IAAK5f,EAAM,SAAU,EACtC+gB,EAAU,CAAE/gB,EAAO,IAKJ,WAAZ0f,GAAoC,iBAAZA,GAAgD,MAAlBoX,IACrB,SAAhCn4B,EAAOihB,IAAK5f,EAAM,OAAQ,IAGxB62B,IACLJ,EAAK9wB,KAAM,WACV8Z,EAAMC,QAAUoX,CACjB,CAAE,EACqB,MAAlBA,IACJpX,EAAUD,EAAMC,QAChBoX,EAA6B,SAAZpX,EAAqB,GAAKA,IAG7CD,EAAMC,QAAU,gBAKduW,EAAKiB,WACTzX,EAAMyX,SAAW,SACjBT,EAAK5c,OAAQ,WACZ4F,EAAMyX,SAAWjB,EAAKiB,SAAU,GAChCzX,EAAM0X,UAAYlB,EAAKiB,SAAU,GACjCzX,EAAM2X,UAAYnB,EAAKiB,SAAU,EAClC,CAAE,GAIHL,EAAY,CAAA,EACE/M,EAGP+M,IACAG,EACC,WAAYA,IAChBhC,EAASgC,EAAShC,QAGnBgC,EAAW3Y,EAASxB,OAAQ7c,EAAM,SAAU,CAAE0f,QAASoX,CAAe,CAAE,EAIpE1V,IACJ4V,EAAShC,OAAS,CAACA,GAIfA,GACJjU,EAAU,CAAE/gB,GAAQ,CAAA,CAAK,EAK1By2B,EAAK9wB,KAAM,WASV,IAAMwY,KAJA6W,GACLjU,EAAU,CAAE/gB,EAAO,EAEpBqe,EAAShF,OAAQrZ,EAAM,QAAS,EAClB8pB,EACbnrB,EAAO8gB,MAAOzf,EAAMme,EAAM2L,EAAM3L,EAAO,CAEzC,CAAE,GAIH0Y,EAAYtB,GAAaP,EAASgC,EAAU7Y,GAAS,EAAGA,EAAMsY,CAAK,EAC3DtY,KAAQ6Y,IACfA,EAAU7Y,GAAS0Y,EAAU5mB,MACxB+kB,IACJ6B,EAAUl2B,IAAMk2B,EAAU5mB,MAC1B4mB,EAAU5mB,MAAQ,GAItB,GAmMConB,UAAW,SAAUv3B,EAAU4rB,GACzBA,EACJ+J,EAAUI,WAAWloB,QAAS7N,CAAS,EAEvC21B,EAAUI,WAAWj5B,KAAMkD,CAAS,CAEtC,CACD,CAAE,EAEFnB,EAAO24B,MAAQ,SAAUA,EAAO/F,EAAQzyB,GACvC,IAAI81B,EAAM0C,GAA0B,UAAjB,OAAOA,EAAqB34B,EAAOmC,OAAQ,GAAIw2B,CAAM,EAAI,CAC3Ef,SAAUz3B,GAAM,CAACA,GAAMyyB,GACtB11B,EAAYy7B,CAAM,GAAKA,EACxBvD,SAAUuD,EACV/F,OAAQzyB,GAAMyyB,GAAUA,GAAU,CAAC11B,EAAY01B,CAAO,GAAKA,CAC5D,EAmCA,OAhCK5yB,EAAOu1B,GAAGjQ,IACd2Q,EAAIb,SAAW,EAGc,UAAxB,OAAOa,EAAIb,WACVa,EAAIb,YAAYp1B,EAAOu1B,GAAGqD,OAC9B3C,EAAIb,SAAWp1B,EAAOu1B,GAAGqD,OAAQ3C,EAAIb,UAGrCa,EAAIb,SAAWp1B,EAAOu1B,GAAGqD,OAAOpV,UAMjB,MAAbyS,EAAI3b,OAA+B,CAAA,IAAd2b,EAAI3b,QAC7B2b,EAAI3b,MAAQ,MAIb2b,EAAIlI,IAAMkI,EAAI2B,SAEd3B,EAAI2B,SAAW,WACT16B,EAAY+4B,EAAIlI,GAAI,GACxBkI,EAAIlI,IAAIjwB,KAAMd,IAAK,EAGfi5B,EAAI3b,OACRta,EAAOogB,QAASpjB,KAAMi5B,EAAI3b,KAAM,CAElC,EAEO2b,CACR,EAEAj2B,EAAOG,GAAGgC,OAAQ,CACjB02B,OAAQ,SAAUF,EAAOG,EAAIlG,EAAQzxB,GAGpC,OAAOnE,KAAKyQ,OAAQoT,EAAmB,EAAEI,IAAK,UAAW,CAAE,EAAEoB,KAAK,EAGhErgB,IAAI,EAAE+2B,QAAS,CAAEjG,QAASgG,CAAG,EAAGH,EAAO/F,EAAQzxB,CAAS,CAC3D,EACA43B,QAAS,SAAUvZ,EAAMmZ,EAAO/F,EAAQzxB,GAGxB,SAAd63B,IAGC,IAAIlB,EAAOhB,EAAW95B,KAAMgD,EAAOmC,OAAQ,GAAIqd,CAAK,EAAGyZ,CAAO,GAGzDhmB,GAASyM,EAAS/e,IAAK3D,KAAM,QAAS,IAC1C86B,EAAKtX,KAAM,CAAA,CAAK,CAElB,CAXD,IAAIvN,EAAQjT,EAAOyD,cAAe+b,CAAK,EACtCyZ,EAASj5B,EAAO24B,MAAOA,EAAO/F,EAAQzxB,CAAS,EAchD,OAFA63B,EAAYE,OAASF,EAEd/lB,GAA0B,CAAA,IAAjBgmB,EAAO3e,MACtBtd,KAAKkE,KAAM83B,CAAY,EACvBh8B,KAAKsd,MAAO2e,EAAO3e,MAAO0e,CAAY,CACxC,EACAxY,KAAM,SAAU7hB,EAAM+hB,EAAYgX,GACjB,SAAZyB,EAAsB7Y,GACzB,IAAIE,EAAOF,EAAME,KACjB,OAAOF,EAAME,KACbA,EAAMkX,CAAQ,CACf,CAWA,MATqB,UAAhB,OAAO/4B,IACX+4B,EAAUhX,EACVA,EAAa/hB,EACbA,EAAOmE,KAAAA,GAEH4d,GACJ1jB,KAAKsd,MAAO3b,GAAQ,KAAM,EAAG,EAGvB3B,KAAKkE,KAAM,WACjB,IAAIkf,EAAU,CAAA,EACbhI,EAAgB,MAARzZ,GAAgBA,EAAO,aAC/By6B,EAASp5B,EAAOo5B,OAChB7Z,EAAOG,EAAS/e,IAAK3D,IAAK,EAE3B,GAAKob,EACCmH,EAAMnH,IAAWmH,EAAMnH,GAAQoI,MACnC2Y,EAAW5Z,EAAMnH,EAAQ,OAG1B,IAAMA,KAASmH,EACTA,EAAMnH,IAAWmH,EAAMnH,GAAQoI,MAAQ2V,GAAKnrB,KAAMoN,CAAM,GAC5D+gB,EAAW5Z,EAAMnH,EAAQ,EAK5B,IAAMA,EAAQghB,EAAO94B,OAAQ8X,CAAK,IAC5BghB,EAAQhhB,GAAQ/W,OAASrE,MACnB,MAAR2B,GAAgBy6B,EAAQhhB,GAAQkC,QAAU3b,IAE5Cy6B,EAAQhhB,GAAQ0f,KAAKtX,KAAMkX,CAAQ,EACnCtX,EAAU,CAAA,EACVgZ,EAAOl3B,OAAQkW,EAAO,CAAE,GAOrBgI,CAAAA,GAAYsX,GAChB13B,EAAOogB,QAASpjB,KAAM2B,CAAK,CAE7B,CAAE,CACH,EACAu6B,OAAQ,SAAUv6B,GAIjB,MAHc,CAAA,IAATA,IACJA,EAAOA,GAAQ,MAET3B,KAAKkE,KAAM,WACjB,IAAIkX,EACHmH,EAAOG,EAAS/e,IAAK3D,IAAK,EAC1Bsd,EAAQiF,EAAM5gB,EAAO,SACrB2hB,EAAQf,EAAM5gB,EAAO,cACrBy6B,EAASp5B,EAAOo5B,OAChB94B,EAASga,EAAQA,EAAMha,OAAS,EAajC,IAVAif,EAAK2Z,OAAS,CAAA,EAGdl5B,EAAOsa,MAAOtd,KAAM2B,EAAM,EAAG,EAExB2hB,GAASA,EAAME,MACnBF,EAAME,KAAK1iB,KAAMd,KAAM,CAAA,CAAK,EAIvBob,EAAQghB,EAAO94B,OAAQ8X,CAAK,IAC5BghB,EAAQhhB,GAAQ/W,OAASrE,MAAQo8B,EAAQhhB,GAAQkC,QAAU3b,IAC/Dy6B,EAAQhhB,GAAQ0f,KAAKtX,KAAM,CAAA,CAAK,EAChC4Y,EAAOl3B,OAAQkW,EAAO,CAAE,GAK1B,IAAMA,EAAQ,EAAGA,EAAQ9X,EAAQ8X,CAAK,GAChCkC,EAAOlC,IAAWkC,EAAOlC,GAAQ8gB,QACrC5e,EAAOlC,GAAQ8gB,OAAOp7B,KAAMd,IAAK,EAKnC,OAAOuiB,EAAK2Z,MACb,CAAE,CACH,CACD,CAAE,EAEFl5B,EAAOkB,KAAM,CAAE,SAAU,OAAQ,QAAU,SAAUsD,EAAInC,GACxD,IAAIg3B,EAAQr5B,EAAOG,GAAIkC,GACvBrC,EAAOG,GAAIkC,GAAS,SAAUs2B,EAAO/F,EAAQzxB,GAC5C,OAAgB,MAATw3B,GAAkC,WAAjB,OAAOA,EAC9BU,EAAMr7B,MAAOhB,KAAMsE,SAAU,EAC7BtE,KAAK+7B,QAASrC,GAAOr0B,EAAM,CAAA,CAAK,EAAGs2B,EAAO/F,EAAQzxB,CAAS,CAC7D,CACD,CAAE,EAGFnB,EAAOkB,KAAM,CACZo4B,UAAW5C,GAAO,MAAO,EACzB6C,QAAS7C,GAAO,MAAO,EACvB8C,YAAa9C,GAAO,QAAS,EAC7B+C,OAAQ,CAAE3G,QAAS,MAAO,EAC1B4G,QAAS,CAAE5G,QAAS,MAAO,EAC3B6G,WAAY,CAAE7G,QAAS,QAAS,CACjC,EAAG,SAAUzwB,EAAMsmB,GAClB3oB,EAAOG,GAAIkC,GAAS,SAAUs2B,EAAO/F,EAAQzxB,GAC5C,OAAOnE,KAAK+7B,QAASpQ,EAAOgQ,EAAO/F,EAAQzxB,CAAS,CACrD,CACD,CAAE,EAEFnB,EAAOo5B,OAAS,GAChBp5B,EAAOu1B,GAAGiB,KAAO,WAChB,IAAIqB,EACH14B,EAAI,EACJi6B,EAASp5B,EAAOo5B,OAIjB,IAFArD,EAAQlvB,KAAKmiB,IAAI,EAET7pB,EAAIi6B,EAAO94B,OAAQnB,CAAC,IAC3B04B,EAAQuB,EAAQj6B,IAGJ,GAAKi6B,EAAQj6B,KAAQ04B,GAChCuB,EAAOl3B,OAAQ/C,CAAC,GAAI,CAAE,EAIlBi6B,EAAO94B,QACZN,EAAOu1B,GAAG/U,KAAK,EAEhBuV,EAAQjzB,KAAAA,CACT,EAEA9C,EAAOu1B,GAAGsC,MAAQ,SAAUA,GAC3B73B,EAAOo5B,OAAOn7B,KAAM45B,CAAM,EAC1B73B,EAAOu1B,GAAGjkB,MAAM,CACjB,EAEAtR,EAAOu1B,GAAGgB,SAAW,GACrBv2B,EAAOu1B,GAAGjkB,MAAQ,WACZ0kB,KAILA,GAAa,CAAA,EACbI,GAAS,EACV,EAEAp2B,EAAOu1B,GAAG/U,KAAO,WAChBwV,GAAa,IACd,EAEAh2B,EAAOu1B,GAAGqD,OAAS,CAClBgB,KAAM,IACNC,KAAM,IAGNrW,SAAU,GACX,EAKAxjB,EAAOG,GAAG25B,MAAQ,SAAUC,EAAMp7B,GAIjC,OAHAo7B,EAAO/5B,EAAOu1B,IAAKv1B,EAAOu1B,GAAGqD,OAAQmB,IAAiBA,EAG/C/8B,KAAKsd,MAFZ3b,EAAOA,GAAQ,KAEU,SAAUmL,EAAMwW,GACxC,IAAI0Z,EAAUj9B,EAAO6f,WAAY9S,EAAMiwB,CAAK,EAC5CzZ,EAAME,KAAO,WACZzjB,EAAOk9B,aAAcD,CAAQ,CAC9B,CACD,CAAE,CACH,EAIKjsB,EAAQnR,EAAS0C,cAAe,OAAQ,EAE3C22B,EADSr5B,EAAS0C,cAAe,QAAS,EAC7BK,YAAa/C,EAAS0C,cAAe,QAAS,CAAE,EAE9DyO,EAAMpP,KAAO,WAIbF,EAAQy7B,QAA0B,KAAhBnsB,EAAM5J,MAIxB1F,EAAQ07B,YAAclE,EAAIljB,UAI1BhF,EAAQnR,EAAS0C,cAAe,OAAQ,GAClC6E,MAAQ,IACd4J,EAAMpP,KAAO,QACbF,EAAQ27B,WAA6B,MAAhBrsB,EAAM5J,MAI5B,IAAIk2B,GACHluB,GAAanM,EAAOiP,KAAK9C,WAmItBmuB,IAjIJt6B,EAAOG,GAAGgC,OAAQ,CACjBgN,KAAM,SAAU9M,EAAM8B,GACrB,OAAO+Z,EAAQlhB,KAAMgD,EAAOmP,KAAM9M,EAAM8B,EAA0B,EAAnB7C,UAAUhB,MAAW,CACrE,EAEAi6B,WAAY,SAAUl4B,GACrB,OAAOrF,KAAKkE,KAAM,WACjBlB,EAAOu6B,WAAYv9B,KAAMqF,CAAK,CAC/B,CAAE,CACH,CACD,CAAE,EAEFrC,EAAOmC,OAAQ,CACdgN,KAAM,SAAU9N,EAAMgB,EAAM8B,GAC3B,IAAIpD,EAAKuf,EACRka,EAAQn5B,EAAKjE,SAGd,GAAe,IAAVo9B,GAAyB,IAAVA,GAAyB,IAAVA,EAKnC,OAAkC,KAAA,IAAtBn5B,EAAK7B,aACTQ,EAAOwf,KAAMne,EAAMgB,EAAM8B,CAAM,GAKxB,IAAVq2B,GAAgBx6B,EAAOkX,SAAU7V,CAAK,IAC1Cif,EAAQtgB,EAAOy6B,UAAWp4B,EAAKoC,YAAY,KACxCzE,EAAOiP,KAAK5E,MAAMrB,KAAKgC,KAAM3I,CAAK,EAAIg4B,GAAWv3B,KAAAA,IAGtCA,KAAAA,IAAVqB,EACW,OAAVA,EACJnE,KAAAA,EAAOu6B,WAAYl5B,EAAMgB,CAAK,EAI1Bie,GAAS,QAASA,GACuBxd,KAAAA,KAA3C/B,EAAMuf,EAAMhB,IAAKje,EAAM8C,EAAO9B,CAAK,GAC9BtB,GAGRM,EAAK5B,aAAc4C,EAAM8B,EAAQ,EAAG,EAC7BA,GAGHmc,EAAAA,GAAS,QAASA,GAA+C,QAApCvf,EAAMuf,EAAM3f,IAAKU,EAAMgB,CAAK,KAOhD,OAHdtB,EAAMf,EAAO2N,KAAKwB,KAAM9N,EAAMgB,CAAK,GAGdS,KAAAA,EAAY/B,EAClC,EAEA05B,UAAW,CACV97B,KAAM,CACL2gB,IAAK,SAAUje,EAAM8C,GACpB,IAEK/E,EAFL,GAAK,CAACX,EAAQ27B,YAAwB,UAAVj2B,GAC3B0F,EAAUxI,EAAM,OAAQ,EAMxB,OALIjC,EAAMiC,EAAK8C,MACf9C,EAAK5B,aAAc,OAAQ0E,CAAM,EAC5B/E,IACJiC,EAAK8C,MAAQ/E,GAEP+E,CAET,CACD,CACD,EAEAo2B,WAAY,SAAUl5B,EAAM8C,GAC3B,IAAI9B,EACHlD,EAAI,EAIJu7B,EAAYv2B,GAASA,EAAMkG,MAAO2O,CAAc,EAEjD,GAAK0hB,GAA+B,IAAlBr5B,EAAKjE,SACtB,KAAUiF,EAAOq4B,EAAWv7B,CAAC,KAC5BkC,EAAKkK,gBAAiBlJ,CAAK,CAG9B,CACD,CAAE,EAGFg4B,GAAW,CACV/a,IAAK,SAAUje,EAAM8C,EAAO9B,GAQ3B,MAPe,CAAA,IAAV8B,EAGJnE,EAAOu6B,WAAYl5B,EAAMgB,CAAK,EAE9BhB,EAAK5B,aAAc4C,EAAMA,CAAK,EAExBA,CACR,CACD,EAEArC,EAAOkB,KAAMlB,EAAOiP,KAAK5E,MAAMrB,KAAKmY,OAAO9W,MAAO,MAAO,EAAG,SAAU7F,EAAInC,GACzE,IAAIs4B,EAASxuB,GAAY9J,IAAUrC,EAAO2N,KAAKwB,KAE/ChD,GAAY9J,GAAS,SAAUhB,EAAMgB,EAAM4D,GAC1C,IAAIlF,EAAK2lB,EACRkU,EAAgBv4B,EAAKoC,YAAY,EAYlC,OAVMwB,IAGLygB,EAASva,GAAYyuB,GACrBzuB,GAAYyuB,GAAkB75B,EAC9BA,EAAqC,MAA/B45B,EAAQt5B,EAAMgB,EAAM4D,CAAM,EAC/B20B,EACA,KACDzuB,GAAYyuB,GAAkBlU,GAExB3lB,CACR,CACD,CAAE,EAKe,uCAChB85B,GAAa,gBAyIb,SAASC,EAAkB32B,GAE1B,OADaA,EAAMkG,MAAO2O,CAAc,GAAK,IAC/B5N,KAAM,GAAI,CACzB,CAGD,SAAS2vB,EAAU15B,GAClB,OAAOA,EAAK7B,cAAgB6B,EAAK7B,aAAc,OAAQ,GAAK,EAC7D,CAEA,SAASw7B,GAAgB72B,GACxB,OAAKvB,MAAMC,QAASsB,CAAM,EAClBA,EAEc,UAAjB,OAAOA,GACJA,EAAMkG,MAAO2O,CAAc,GAE5B,EACR,CAzJAhZ,EAAOG,GAAGgC,OAAQ,CACjBqd,KAAM,SAAUnd,EAAM8B,GACrB,OAAO+Z,EAAQlhB,KAAMgD,EAAOwf,KAAMnd,EAAM8B,EAA0B,EAAnB7C,UAAUhB,MAAW,CACrE,EAEA26B,WAAY,SAAU54B,GACrB,OAAOrF,KAAKkE,KAAM,WACjB,OAAOlE,KAAMgD,EAAOk7B,QAAS74B,IAAUA,EACxC,CAAE,CACH,CACD,CAAE,EAEFrC,EAAOmC,OAAQ,CACdqd,KAAM,SAAUne,EAAMgB,EAAM8B,GAC3B,IAAIpD,EAAKuf,EACRka,EAAQn5B,EAAKjE,SAGd,GAAe,IAAVo9B,GAAyB,IAAVA,GAAyB,IAAVA,EAWnC,OAPe,IAAVA,GAAgBx6B,EAAOkX,SAAU7V,CAAK,IAG1CgB,EAAOrC,EAAOk7B,QAAS74B,IAAUA,EACjCie,EAAQtgB,EAAOg1B,UAAW3yB,IAGZS,KAAAA,IAAVqB,EACCmc,GAAS,QAASA,GACuBxd,KAAAA,KAA3C/B,EAAMuf,EAAMhB,IAAKje,EAAM8C,EAAO9B,CAAK,GAC9BtB,EAGCM,EAAMgB,GAAS8B,EAGpBmc,GAAS,QAASA,GAA+C,QAApCvf,EAAMuf,EAAM3f,IAAKU,EAAMgB,CAAK,GACtDtB,EAGDM,EAAMgB,EACd,EAEA2yB,UAAW,CACVpiB,SAAU,CACTjS,IAAK,SAAUU,GAOd,IAAI85B,EAAWn7B,EAAO2N,KAAKwB,KAAM9N,EAAM,UAAW,EAElD,OAAK85B,EACG1K,SAAU0K,EAAU,EAAG,EAI9Bb,GAAWtvB,KAAM3J,EAAKwI,QAAS,GAC/BgxB,GAAW7vB,KAAM3J,EAAKwI,QAAS,GAC/BxI,EAAKsR,KAEE,EAGD,CAAC,CACT,CACD,CACD,EAEAuoB,QAAS,CACRE,IAAO,UACPC,MAAS,WACV,CACD,CAAE,EAUI58B,EAAQ07B,cACbn6B,EAAOg1B,UAAUjiB,SAAW,CAC3BpS,IAAK,SAAUU,GAIVkQ,EAASlQ,EAAKzB,WAIlB,OAHK2R,GAAUA,EAAO3R,YACrB2R,EAAO3R,WAAWoT,cAEZ,IACR,EACAsM,IAAK,SAAUje,GAIVkQ,EAASlQ,EAAKzB,WACb2R,IACJA,EAAOyB,cAEFzB,EAAO3R,aACX2R,EAAO3R,WAAWoT,aAGrB,CACD,GAGDhT,EAAOkB,KAAM,CACZ,WACA,WACA,YACA,cACA,cACA,UACA,UACA,SACA,cACA,mBACE,WACFlB,EAAOk7B,QAASl+B,KAAKyH,YAAY,GAAMzH,IACxC,CAAE,EA2BFgD,EAAOG,GAAGgC,OAAQ,CACjBm5B,SAAU,SAAUn3B,GACnB,IAAIo3B,EAASl6B,EAAMgL,EAAemvB,EAAOz5B,EAAG05B,EAC3Ct8B,EAAI,EAEL,GAAKjC,EAAYiH,CAAM,EACtB,OAAOnH,KAAKkE,KAAM,SAAUa,GAC3B/B,EAAQhD,IAAK,EAAEs+B,SAAUn3B,EAAMrG,KAAMd,KAAM+E,EAAGg5B,EAAU/9B,IAAK,CAAE,CAAE,CAClE,CAAE,EAKH,IAFAu+B,EAAUP,GAAgB72B,CAAM,GAEnB7D,OACZ,KAAUe,EAAOrE,KAAMmC,CAAC,KAIvB,GAHAu8B,EAAWX,EAAU15B,CAAK,EAC1BgL,EAAwB,IAAlBhL,EAAKjE,UAAoB,IAAM09B,EAAkBY,CAAS,EAAI,IAEzD,CAEV,IADA35B,EAAI,EACMy5B,EAAQD,EAASx5B,CAAC,KACtBsK,EAAInO,QAAS,IAAMs9B,EAAQ,GAAI,EAAI,IACvCnvB,GAAOmvB,EAAQ,KAMZE,KADLD,EAAaX,EAAkBzuB,CAAI,IAElChL,EAAK5B,aAAc,QAASg8B,CAAW,CAEzC,CAIF,OAAOz+B,IACR,EAEA2+B,YAAa,SAAUx3B,GACtB,IAAIo3B,EAASl6B,EAAMgL,EAAemvB,EAAOz5B,EAAG05B,EAC3Ct8B,EAAI,EAEL,GAAKjC,EAAYiH,CAAM,EACtB,OAAOnH,KAAKkE,KAAM,SAAUa,GAC3B/B,EAAQhD,IAAK,EAAE2+B,YAAax3B,EAAMrG,KAAMd,KAAM+E,EAAGg5B,EAAU/9B,IAAK,CAAE,CAAE,CACrE,CAAE,EAGH,GAAK,CAACsE,UAAUhB,OACf,OAAOtD,KAAKmS,KAAM,QAAS,EAAG,EAK/B,IAFAosB,EAAUP,GAAgB72B,CAAM,GAEnB7D,OACZ,KAAUe,EAAOrE,KAAMmC,CAAC,KAMvB,GALAu8B,EAAWX,EAAU15B,CAAK,EAG1BgL,EAAwB,IAAlBhL,EAAKjE,UAAoB,IAAM09B,EAAkBY,CAAS,EAAI,IAEzD,CAEV,IADA35B,EAAI,EACMy5B,EAAQD,EAASx5B,CAAC,KAG3B,KAA2C,CAAC,EAApCsK,EAAInO,QAAS,IAAMs9B,EAAQ,GAAI,GACtCnvB,EAAMA,EAAInJ,QAAS,IAAMs4B,EAAQ,IAAK,GAAI,EAMvCE,KADLD,EAAaX,EAAkBzuB,CAAI,IAElChL,EAAK5B,aAAc,QAASg8B,CAAW,CAEzC,CAIF,OAAOz+B,IACR,EAEA4+B,YAAa,SAAUz3B,EAAO03B,GAC7B,IAAIl9B,EAAO,OAAOwF,EACjB23B,EAAwB,UAATn9B,GAAqBiE,MAAMC,QAASsB,CAAM,EAE1D,MAAyB,WAApB,OAAO03B,GAA0BC,EAC9BD,EAAW7+B,KAAKs+B,SAAUn3B,CAAM,EAAInH,KAAK2+B,YAAax3B,CAAM,EAG/DjH,EAAYiH,CAAM,EACfnH,KAAKkE,KAAM,SAAU/B,GAC3Ba,EAAQhD,IAAK,EAAE4+B,YACdz3B,EAAMrG,KAAMd,KAAMmC,EAAG47B,EAAU/9B,IAAK,EAAG6+B,CAAS,EAChDA,CACD,CACD,CAAE,EAGI7+B,KAAKkE,KAAM,WACjB,IAAImM,EAAWlO,EAAGoY,EAAMwkB,EAExB,GAAKD,EAOJ,IAJA38B,EAAI,EACJoY,EAAOvX,EAAQhD,IAAK,EACpB++B,EAAaf,GAAgB72B,CAAM,EAEzBkJ,EAAY0uB,EAAY58B,CAAC,KAG7BoY,EAAKykB,SAAU3uB,CAAU,EAC7BkK,EAAKokB,YAAatuB,CAAU,EAE5BkK,EAAK+jB,SAAUjuB,CAAU,OAKNvK,KAAAA,IAAVqB,GAAgC,WAATxF,KAClC0O,EAAY0tB,EAAU/9B,IAAK,IAI1B0iB,EAASJ,IAAKtiB,KAAM,gBAAiBqQ,CAAU,EAO3CrQ,KAAKyC,cACTzC,KAAKyC,aAAc,QAClB4N,CAAAA,GAAuB,CAAA,IAAVlJ,GAEZub,EAAS/e,IAAK3D,KAAM,eAAgB,GAAK,EAC3C,EAGH,CAAE,CACH,EAEAg/B,SAAU,SAAU/7B,GAKnB,IAJA,IAAeoB,EACdlC,EAAI,EAELkO,EAAY,IAAMpN,EAAW,IACnBoB,EAAOrE,KAAMmC,CAAC,KACvB,GAAuB,IAAlBkC,EAAKjE,UACmE,CAAC,GAA3E,IAAM09B,EAAkBC,EAAU15B,CAAK,CAAE,EAAI,KAAMnD,QAASmP,CAAU,EACxE,MAAO,CAAA,EAIT,MAAO,CAAA,CACR,CACD,CAAE,EAiMyB,SAA1B4uB,GAAoCjyB,GACnCA,EAAE4b,gBAAgB,CACnB,CA9LD,IAAIsW,GAAU,MA2LVC,IAzLJn8B,EAAOG,GAAGgC,OAAQ,CACjB/C,IAAK,SAAU+E,GACd,IAAImc,EAAOvf,EAAKorB,EACf9qB,EAAOrE,KAAM,GAEd,OAAMsE,UAAUhB,QA0BhB6rB,EAAkBjvB,EAAYiH,CAAM,EAE7BnH,KAAKkE,KAAM,SAAU/B,GAGJ,IAAlBnC,KAAKI,WAWE,OANXgC,EADI+sB,EACEhoB,EAAMrG,KAAMd,KAAMmC,EAAGa,EAAQhD,IAAK,EAAEoC,IAAI,CAAE,EAE1C+E,GAKN/E,EAAM,GAEoB,UAAf,OAAOA,EAClBA,GAAO,GAEIwD,MAAMC,QAASzD,CAAI,IAC9BA,EAAMY,EAAOoB,IAAKhC,EAAK,SAAU+E,GAChC,OAAgB,MAATA,EAAgB,GAAKA,EAAQ,EACrC,CAAE,IAGHmc,EAAQtgB,EAAOo8B,SAAUp/B,KAAK2B,OAAUqB,EAAOo8B,SAAUp/B,KAAK6M,SAASpF,YAAY,KAGjE,QAAS6b,GAA+Cxd,KAAAA,IAApCwd,EAAMhB,IAAKtiB,KAAMoC,EAAK,OAAQ,KACnEpC,KAAKmH,MAAQ/E,EAEf,CAAE,GA3DIiC,GACJif,EAAQtgB,EAAOo8B,SAAU/6B,EAAK1C,OAC7BqB,EAAOo8B,SAAU/6B,EAAKwI,SAASpF,YAAY,KAG3C,QAAS6b,GACgCxd,KAAAA,KAAvC/B,EAAMuf,EAAM3f,IAAKU,EAAM,OAAQ,GAE1BN,EAMY,UAAf,OAHLA,EAAMM,EAAK8C,OAIHpD,EAAImC,QAASg5B,GAAS,EAAG,EAInB,MAAPn7B,EAAc,GAAKA,EAG3B,KAAA,CAsCF,CACD,CAAE,EAEFf,EAAOmC,OAAQ,CACdi6B,SAAU,CACTjZ,OAAQ,CACPxiB,IAAK,SAAUU,GAEd,IAAIjC,EAAMY,EAAO2N,KAAKwB,KAAM9N,EAAM,OAAQ,EAC1C,OAAc,MAAPjC,EACNA,EAMA07B,EAAkB96B,EAAOT,KAAM8B,CAAK,CAAE,CACxC,CACD,EACA+E,OAAQ,CACPzF,IAAK,SAAUU,GAgBd,IAfA,IAAW8hB,EACV/gB,EAAUf,EAAKe,QACfgW,EAAQ/W,EAAK2R,cACbmS,EAAoB,eAAd9jB,EAAK1C,KACX2jB,EAAS6C,EAAM,KAAO,GACtB0M,EAAM1M,EAAM/M,EAAQ,EAAIhW,EAAQ9B,OAGhCnB,EADIiZ,EAAQ,EACRyZ,EAGA1M,EAAM/M,EAAQ,EAIXjZ,EAAI0yB,EAAK1yB,CAAC,GAKjB,KAJAgkB,EAAS/gB,EAASjD,IAIJ4T,UAAY5T,IAAMiZ,IAG9B,CAAC+K,EAAOvZ,WACN,CAACuZ,EAAOvjB,WAAWgK,UACpB,CAACC,EAAUsZ,EAAOvjB,WAAY,UAAW,GAAM,CAMjD,GAHAuE,EAAQnE,EAAQmjB,CAAO,EAAE/jB,IAAI,EAGxB+lB,EACJ,OAAOhhB,EAIRme,EAAOrkB,KAAMkG,CAAM,CACpB,CAGD,OAAOme,CACR,EAEAhD,IAAK,SAAUje,EAAM8C,GAMpB,IALA,IAAIk4B,EAAWlZ,EACd/gB,EAAUf,EAAKe,QACfkgB,EAAStiB,EAAO2D,UAAWQ,CAAM,EACjChF,EAAIiD,EAAQ9B,OAELnB,CAAC,MACRgkB,EAAS/gB,EAASjD,IAIN4T,SACsD,CAAC,EAAlE/S,EAAO6D,QAAS7D,EAAOo8B,SAASjZ,OAAOxiB,IAAKwiB,CAAO,EAAGb,CAAO,KAE7D+Z,EAAY,CAAA,GAUd,OAHMA,IACLh7B,EAAK2R,cAAgB,CAAC,GAEhBsP,CACR,CACD,CACD,CACD,CAAE,EAGFtiB,EAAOkB,KAAM,CAAE,QAAS,YAAc,WACrClB,EAAOo8B,SAAUp/B,MAAS,CACzBsiB,IAAK,SAAUje,EAAM8C,GACpB,GAAKvB,MAAMC,QAASsB,CAAM,EACzB,OAAS9C,EAAKyR,QAA0D,CAAC,EAAjD9S,EAAO6D,QAAS7D,EAAQqB,CAAK,EAAEjC,IAAI,EAAG+E,CAAM,CAEtE,CACD,EACM1F,EAAQy7B,UACbl6B,EAAOo8B,SAAUp/B,MAAO2D,IAAM,SAAUU,GACvC,OAAwC,OAAjCA,EAAK7B,aAAc,OAAQ,EAAa,KAAO6B,EAAK8C,KAC5D,EAEF,CAAE,EAQF1F,EAAQ69B,QAAU,cAAev/B,EAGf,mCAqOduV,IAhOJtS,EAAOmC,OAAQnC,EAAOqlB,MAAO,CAE5BU,QAAS,SAAUV,EAAO9F,EAAMle,EAAMk7B,GAErC,IAAIp9B,EAAQ2O,EAAK0uB,EAAYC,EAAQ/V,EAAQzK,EAASygB,EACrDC,EAAY,CAAEt7B,GAAQzE,GACtB+B,EAAON,EAAOP,KAAMunB,EAAO,MAAO,EAAIA,EAAM1mB,KAAO0mB,EACnDiB,EAAajoB,EAAOP,KAAMunB,EAAO,WAAY,EAAIA,EAAMxY,UAAUtI,MAAO,GAAI,EAAI,GAEjF8H,EAAMqwB,EAAc5uB,EAAMzM,EAAOA,GAAQzE,EAGzC,GAAuB,IAAlByE,EAAKjE,UAAoC,IAAlBiE,EAAKjE,UAK5B++B,CAAAA,GAAYnxB,KAAMrM,EAAOqB,EAAOqlB,MAAMsB,SAAU,IAI1B,CAAC,EAAvBhoB,EAAKT,QAAS,GAAI,IAItBS,GADA2nB,EAAa3nB,EAAK4F,MAAO,GAAI,GACXqH,MAAM,EACxB0a,EAAWrkB,KAAK,GAEjBw6B,EAAS99B,EAAKT,QAAS,GAAI,EAAI,GAAK,KAAOS,GAG3C0mB,EAAQA,EAAOrlB,EAAO+C,SACrBsiB,EACA,IAAIrlB,EAAOgmB,MAAOrnB,EAAuB,UAAjB,OAAO0mB,GAAsBA,CAAM,GAGtDK,UAAY6W,EAAe,EAAI,EACrClX,EAAMxY,UAAYyZ,EAAWlb,KAAM,GAAI,EACvCia,EAAMwC,WAAaxC,EAAMxY,UACxB,IAAI3E,OAAQ,UAAYoe,EAAWlb,KAAM,eAAgB,EAAI,SAAU,EACvE,KAGDia,EAAM1U,OAAS7N,KAAAA,EACTuiB,EAAM5iB,SACX4iB,EAAM5iB,OAASpB,GAIhBke,EAAe,MAARA,EACN,CAAE8F,GACFrlB,EAAO2D,UAAW4b,EAAM,CAAE8F,EAAQ,EAGnCpJ,EAAUjc,EAAOqlB,MAAMpJ,QAAStd,IAAU,GACpC49B,GAAgBtgB,CAAAA,EAAQ8J,SAAmD,CAAA,IAAxC9J,EAAQ8J,QAAQ/nB,MAAOqD,EAAMke,CAAK,GAA3E,CAMA,GAAK,CAACgd,GAAgB,CAACtgB,EAAQsM,UAAY,CAACjrB,EAAU+D,CAAK,EAAI,CAM9D,IAJAm7B,EAAavgB,EAAQ0J,cAAgBhnB,EAC/Bw9B,GAAYnxB,KAAMwxB,EAAa79B,CAAK,IACzC0N,EAAMA,EAAIzM,YAEHyM,EAAKA,EAAMA,EAAIzM,WACtB+8B,EAAU1+B,KAAMoO,CAAI,EACpByB,EAAMzB,EAIFyB,KAAUzM,EAAKoJ,eAAiB7N,IACpC+/B,EAAU1+B,KAAM6P,EAAIb,aAAea,EAAI8uB,cAAgB7/B,CAAO,CAEhE,CAIA,IADAoC,EAAI,GACMkN,EAAMswB,EAAWx9B,CAAC,MAAU,CAACkmB,EAAMqC,qBAAqB,GACjEgV,EAAcrwB,EACdgZ,EAAM1mB,KAAW,EAAJQ,EACZq9B,EACAvgB,EAAQ4K,UAAYloB,GAGrB+nB,GAAWhH,EAAS/e,IAAK0L,EAAK,QAAS,GAAK5O,OAAOgpB,OAAQ,IAAK,GAAKpB,EAAM1mB,OAC1E+gB,EAAS/e,IAAK0L,EAAK,QAAS,IAE5Bqa,EAAO1oB,MAAOqO,EAAKkT,CAAK,GAIzBmH,EAAS+V,GAAUpwB,EAAKowB,KACT/V,EAAO1oB,OAASghB,EAAY3S,CAAI,IAC9CgZ,EAAM1U,OAAS+V,EAAO1oB,MAAOqO,EAAKkT,CAAK,EACjB,CAAA,IAAjB8F,EAAM1U,SACV0U,EAAMS,eAAe,EA8CxB,OA1CAT,EAAM1mB,KAAOA,EAGP49B,GAAiBlX,EAAMuD,mBAAmB,GAEvC3M,EAAQuH,UACqC,CAAA,IAApDvH,EAAQuH,SAASxlB,MAAO2+B,EAAUl1B,IAAI,EAAG8X,CAAK,GAC9CP,CAAAA,EAAY3d,CAAK,GAIZo7B,GAAUv/B,EAAYmE,EAAM1C,EAAO,GAAK,CAACrB,EAAU+D,CAAK,KAG5DyM,EAAMzM,EAAMo7B,MAGXp7B,EAAMo7B,GAAW,MAIlBz8B,EAAOqlB,MAAMsB,UAAYhoB,EAEpB0mB,EAAMqC,qBAAqB,GAC/BgV,EAAYvvB,iBAAkBxO,EAAMs9B,EAAwB,EAG7D56B,EAAM1C,GAAO,EAER0mB,EAAMqC,qBAAqB,GAC/BgV,EAAY7e,oBAAqBlf,EAAMs9B,EAAwB,EAGhEj8B,EAAOqlB,MAAMsB,UAAY7jB,KAAAA,EAEpBgL,KACJzM,EAAMo7B,GAAW3uB,GAMduX,EAAM1U,MAvFb,CAwFD,EAIAksB,SAAU,SAAUl+B,EAAM0C,EAAMgkB,GAC3Brb,EAAIhK,EAAOmC,OACd,IAAInC,EAAOgmB,MACXX,EACA,CACC1mB,KAAMA,EACNsqB,YAAa,CAAA,CACd,CACD,EAEAjpB,EAAOqlB,MAAMU,QAAS/b,EAAG,KAAM3I,CAAK,CACrC,CAED,CAAE,EAEFrB,EAAOG,GAAGgC,OAAQ,CAEjB4jB,QAAS,SAAUpnB,EAAM4gB,GACxB,OAAOviB,KAAKkE,KAAM,WACjBlB,EAAOqlB,MAAMU,QAASpnB,EAAM4gB,EAAMviB,IAAK,CACxC,CAAE,CACH,EACA8/B,eAAgB,SAAUn+B,EAAM4gB,GAC/B,IAAIle,EAAOrE,KAAM,GACjB,GAAKqE,EACJ,OAAOrB,EAAOqlB,MAAMU,QAASpnB,EAAM4gB,EAAMle,EAAM,CAAA,CAAK,CAEtD,CACD,CAAE,EAWI5C,EAAQ69B,SACbt8B,EAAOkB,KAAM,CAAEsR,MAAO,UAAWsY,KAAM,UAAW,EAAG,SAAUK,EAAM5D,GAGtD,SAAVrb,EAAoBmZ,GACvBrlB,EAAOqlB,MAAMwX,SAAUtV,EAAKlC,EAAM5iB,OAAQzC,EAAOqlB,MAAMkC,IAAKlC,CAAM,CAAE,CACrE,CAEArlB,EAAOqlB,MAAMpJ,QAASsL,GAAQ,CAC7BP,MAAO,WAIN,IAAI9nB,EAAMlC,KAAKyN,eAAiBzN,KAAKJ,UAAYI,KAChD+/B,EAAWrd,EAASxB,OAAQhf,EAAKqoB,CAAI,EAEhCwV,GACL79B,EAAIiO,iBAAkBge,EAAMjf,EAAS,CAAA,CAAK,EAE3CwT,EAASxB,OAAQhf,EAAKqoB,GAAOwV,GAAY,GAAM,CAAE,CAClD,EACA5V,SAAU,WACT,IAAIjoB,EAAMlC,KAAKyN,eAAiBzN,KAAKJ,UAAYI,KAChD+/B,EAAWrd,EAASxB,OAAQhf,EAAKqoB,CAAI,EAAI,EAEpCwV,EAKLrd,EAASxB,OAAQhf,EAAKqoB,EAAKwV,CAAS,GAJpC79B,EAAI2e,oBAAqBsN,EAAMjf,EAAS,CAAA,CAAK,EAC7CwT,EAAShF,OAAQxb,EAAKqoB,CAAI,EAK5B,CACD,CACD,CAAE,EAEYxqB,EAAOuV,UAElBzT,GAAQ,CAAEuF,KAAMyC,KAAKmiB,IAAI,CAAE,EAE3BgU,GAAS,KAgCZC,IA3BDj9B,EAAOk9B,SAAW,SAAU3d,GAC3B,IAAIrO,EAAKisB,EACT,GAAK,CAAC5d,GAAwB,UAAhB,OAAOA,EACpB,OAAO,KAKR,IACCrO,GAAM,IAAMnU,EAAOqgC,WAAcC,gBAAiB9d,EAAM,UAAW,CACrD,CAAb,MAAQvV,IAYV,OAVAmzB,EAAkBjsB,GAAOA,EAAIrG,qBAAsB,aAAc,EAAG,GAC9DqG,GAAOisB,CAAAA,GACZn9B,EAAOoD,MAAO,iBACb+5B,EACCn9B,EAAOoB,IAAK+7B,EAAgBpzB,WAAY,SAAUgC,GACjD,OAAOA,EAAG2D,WACX,CAAE,EAAEtE,KAAM,IAAK,EACfmU,EACA,EAEIrO,CACR,EAIY,SACXosB,GAAQ,SACRC,GAAkB,wCAClBC,GAAe,qCA0ChBx9B,EAAOy9B,MAAQ,SAAUl2B,EAAGm2B,GAGpB,SAANplB,EAAgB5M,EAAKiyB,GAGhBx5B,EAAQjH,EAAYygC,CAAgB,EACvCA,EAAgB,EAChBA,EAEDC,EAAGA,EAAEt9B,QAAWu9B,mBAAoBnyB,CAAI,EAAI,IAC3CmyB,mBAA6B,MAAT15B,EAAgB,GAAKA,CAAM,CACjD,CAXD,IAAIwwB,EACHiJ,EAAI,GAYL,GAAU,MAALr2B,EACJ,MAAO,GAIR,GAAK3E,MAAMC,QAAS0E,CAAE,GAAOA,EAAE/G,QAAU,CAACR,EAAO2C,cAAe4E,CAAE,EAGjEvH,EAAOkB,KAAMqG,EAAG,WACf+Q,EAAKtb,KAAKqF,KAAMrF,KAAKmH,KAAM,CAC5B,CAAE,OAMF,IAAMwwB,KAAUptB,EACfu2B,CAvEH,SAASA,EAAanJ,EAAQx3B,EAAKugC,EAAaplB,GAG/C,GAAK1V,MAAMC,QAAS1F,CAAI,EAGvB6C,EAAOkB,KAAM/D,EAAK,SAAUgC,EAAG+Z,GACzBwkB,GAAeT,GAASjyB,KAAM2pB,CAAO,EAGzCrc,EAAKqc,EAAQzb,CAAE,EAKf4kB,EACCnJ,EAAS,KAAqB,UAAb,OAAOzb,GAAuB,MAALA,EAAY/Z,EAAI,IAAO,IACjE+Z,EACAwkB,EACAplB,CACD,CAEF,CAAE,OAEI,GAAMolB,GAAiC,WAAlB59B,EAAQ3C,CAAI,EAUvCmb,EAAKqc,EAAQx3B,CAAI,OAPjB,IA1BD,IAAIkF,KA0BWlF,EACb2gC,EAAanJ,EAAS,IAAMtyB,EAAO,IAAKlF,EAAKkF,GAAQq7B,EAAaplB,CAAI,CAQzE,EAmCgBqc,EAAQptB,EAAGotB,GAAU+I,EAAaplB,CAAI,EAKrD,OAAOslB,EAAExyB,KAAM,GAAI,CACpB,EAEApL,EAAOG,GAAGgC,OAAQ,CACjB47B,UAAW,WACV,OAAO/9B,EAAOy9B,MAAOzgC,KAAKghC,eAAe,CAAE,CAC5C,EACAA,eAAgB,WACf,OAAOhhC,KAAKoE,IAAK,WAGhB,IAAI8N,EAAWlP,EAAOwf,KAAMxiB,KAAM,UAAW,EAC7C,OAAOkS,EAAWlP,EAAO2D,UAAWuL,CAAS,EAAIlS,IAClD,CAAE,EAAEyQ,OAAQ,WACX,IAAI9O,EAAO3B,KAAK2B,KAGhB,OAAO3B,KAAKqF,MAAQ,CAACrC,EAAQhD,IAAK,EAAE8H,GAAI,WAAY,GACnD04B,GAAaxyB,KAAMhO,KAAK6M,QAAS,GAAK,CAAC0zB,GAAgBvyB,KAAMrM,CAAK,IAChE3B,KAAK8V,SAAW,CAAC4P,GAAe1X,KAAMrM,CAAK,EAC/C,CAAE,EAAEyC,IAAK,SAAUoD,EAAInD,GACtB,IAAIjC,EAAMY,EAAQhD,IAAK,EAAEoC,IAAI,EAE7B,OAAY,MAAPA,EACG,KAGHwD,MAAMC,QAASzD,CAAI,EAChBY,EAAOoB,IAAKhC,EAAK,SAAUA,GACjC,MAAO,CAAEiD,KAAMhB,EAAKgB,KAAM8B,MAAO/E,EAAI8D,QAASo6B,GAAO,MAAO,CAAE,CAC/D,CAAE,EAGI,CAAEj7B,KAAMhB,EAAKgB,KAAM8B,MAAO/E,EAAI8D,QAASo6B,GAAO,MAAO,CAAE,CAC/D,CAAE,EAAE38B,IAAI,CACT,CACD,CAAE,EAGF,IACCs9B,GAAM,OACNC,GAAQ,OACRC,GAAa,gBACbC,GAAW,6BAIXC,GAAa,iBACbC,GAAY,QAWZpH,GAAa,GAObqH,GAAa,GAGbC,GAAW,KAAKzgC,OAAQ,GAAI,EAG5B0gC,GAAe7hC,EAAS0C,cAAe,GAAI,EAK5C,SAASo/B,GAA6BC,GAGrC,OAAO,SAAUC,EAAoB7jB,GAED,UAA9B,OAAO6jB,IACX7jB,EAAO6jB,EACPA,EAAqB,KAGtB,IAAIC,EACH1/B,EAAI,EACJ2/B,EAAYF,EAAmBn6B,YAAY,EAAE4F,MAAO2O,CAAc,GAAK,GAExE,GAAK9b,EAAY6d,CAAK,EAGrB,KAAU8jB,EAAWC,EAAW3/B,CAAC,KAGT,MAAlB0/B,EAAU,IACdA,EAAWA,EAASlhC,MAAO,CAAE,GAAK,KAChCghC,EAAWE,GAAaF,EAAWE,IAAc,IAAK7vB,QAAS+L,CAAK,IAIpE4jB,EAAWE,GAAaF,EAAWE,IAAc,IAAK5gC,KAAM8c,CAAK,CAIvE,CACD,CAGA,SAASgkB,GAA+BJ,EAAWv8B,EAASq1B,EAAiBuH,GAE5E,IAAIC,EAAY,GACfC,EAAqBP,IAAcJ,GAEpC,SAASY,EAASN,GACjB,IAAI9rB,EAcJ,OAbAksB,EAAWJ,GAAa,CAAA,EACxB7+B,EAAOkB,KAAMy9B,EAAWE,IAAc,GAAI,SAAU9kB,EAAGqlB,GAClDC,EAAsBD,EAAoBh9B,EAASq1B,EAAiBuH,CAAM,EAC9E,MAAoC,UAA/B,OAAOK,GACVH,GAAqBD,EAAWI,GAKtBH,EACJ,EAAGnsB,EAAWssB,GADf,KAAA,GAHNj9B,EAAQ08B,UAAU9vB,QAASqwB,CAAoB,EAC/CF,EAASE,CAAoB,EACtB,CAAA,EAIT,CAAE,EACKtsB,CACR,CAEA,OAAOosB,EAAS/8B,EAAQ08B,UAAW,EAAI,GAAK,CAACG,EAAW,MAASE,EAAS,GAAI,CAC/E,CAKA,SAASG,GAAY78B,EAAQ7D,GAC5B,IAAI8M,EAAKhJ,EACR68B,EAAcv/B,EAAOw/B,aAAaD,aAAe,GAElD,IAAM7zB,KAAO9M,EACQkE,KAAAA,IAAflE,EAAK8M,MACP6zB,EAAa7zB,GAAQjJ,EAAWC,EAAAA,GAAiB,IAAUgJ,GAAQ9M,EAAK8M,IAO5E,OAJKhJ,GACJ1C,EAAOmC,OAAQ,CAAA,EAAMM,EAAQC,CAAK,EAG5BD,CACR,CAhFAg8B,GAAa9rB,KAAOL,GAASK,KAgP7B3S,EAAOmC,OAAQ,CAGds9B,OAAQ,EAGRC,aAAc,GACdC,KAAM,GAENH,aAAc,CACbI,IAAKttB,GAASK,KACdhU,KAAM,MACNkhC,QAxRgB,4DAwRQ70B,KAAMsH,GAASwtB,QAAS,EAChDtjC,OAAQ,CAAA,EACRujC,YAAa,CAAA,EACbC,MAAO,CAAA,EACPC,YAAa,mDAcbC,QAAS,CACRnI,IAAKyG,GACLj/B,KAAM,aACN6sB,KAAM,YACNlb,IAAK,4BACLivB,KAAM,mCACP,EAEAroB,SAAU,CACT5G,IAAK,UACLkb,KAAM,SACN+T,KAAM,UACP,EAEAC,eAAgB,CACflvB,IAAK,cACL3R,KAAM,eACN4gC,KAAM,cACP,EAIAE,WAAY,CAGXC,SAAU/6B,OAGVg7B,YAAa,CAAA,EAGbC,YAAazgB,KAAKC,MAGlBygB,WAAYzgC,EAAOk9B,QACpB,EAMAqC,YAAa,CACZK,IAAK,CAAA,EACL1/B,QAAS,CAAA,CACV,CACD,EAKAwgC,UAAW,SAAUj+B,EAAQk+B,GAC5B,OAAOA,EAGNrB,GAAYA,GAAY78B,EAAQzC,EAAOw/B,YAAa,EAAGmB,CAAS,EAGhErB,GAAYt/B,EAAOw/B,aAAc/8B,CAAO,CAC1C,EAEAm+B,cAAelC,GAA6BxH,EAAW,EACvD2J,cAAenC,GAA6BH,EAAW,EAGvDuC,KAAM,SAAUlB,EAAKx9B,GAGA,UAAf,OAAOw9B,IACXx9B,EAAUw9B,EACVA,EAAM98B,KAAAA,GAMP,IAAIi+B,EAGHC,EAGAC,EACAC,EAGAC,EAMAvjB,EAGAwjB,EAGAjiC,EAMAy+B,EAAI59B,EAAO0gC,UAAW,GA9BvBt+B,EAAUA,GAAW,EA8Bc,EAGlCi/B,EAAkBzD,EAAE19B,SAAW09B,EAG/B0D,EAAqB1D,EAAE19B,UACpBmhC,EAAgBjkC,UAAYikC,EAAgB7gC,QAC9CR,EAAQqhC,CAAgB,EACxBrhC,EAAOqlB,MAGRlK,EAAWnb,EAAO8a,SAAS,EAC3BymB,EAAmBvhC,EAAO6Z,UAAW,aAAc,EAGnD2nB,EAAa5D,EAAE4D,YAAc,GAG7BC,EAAiB,GACjBC,EAAsB,GAGtBC,EAAW,WAGX3C,EAAQ,CACPhhB,WAAY,EAGZ4jB,kBAAmB,SAAUl2B,GAC5B,IAAIrB,EACJ,GAAKuT,EAAY,CAChB,GAAK,CAACsjB,EAEL,IADAA,EAAkB,GACR72B,EAAQ+zB,GAAS1zB,KAAMu2B,CAAsB,GACtDC,EAAiB72B,EAAO,GAAI5F,YAAY,EAAI,MACzCy8B,EAAiB72B,EAAO,GAAI5F,YAAY,EAAI,MAAS,IACrD1G,OAAQsM,EAAO,EAAI,EAGxBA,EAAQ62B,EAAiBx1B,EAAIjH,YAAY,EAAI,IAC9C,CACA,OAAgB,MAAT4F,EAAgB,KAAOA,EAAMe,KAAM,IAAK,CAChD,EAGAy2B,sBAAuB,WACtB,OAAOjkB,EAAYqjB,EAAwB,IAC5C,EAGAa,iBAAkB,SAAUz/B,EAAM8B,GAMjC,OALkB,MAAbyZ,IACJvb,EAAOq/B,EAAqBr/B,EAAKoC,YAAY,GAC5Ci9B,EAAqBr/B,EAAKoC,YAAY,IAAOpC,EAC9Co/B,EAAgBp/B,GAAS8B,GAEnBnH,IACR,EAGA+kC,iBAAkB,SAAUpjC,GAI3B,OAHkB,MAAbif,IACJggB,EAAEoE,SAAWrjC,GAEP3B,IACR,EAGAwkC,WAAY,SAAUpgC,GAErB,GAAKA,EACJ,GAAKwc,EAGJohB,EAAM9jB,OAAQ9Z,EAAK49B,EAAMiD,OAAS,OAIlC,IATF,IAAIjjC,KASYoC,EACbogC,EAAYxiC,GAAS,CAAEwiC,EAAYxiC,GAAQoC,EAAKpC,IAInD,OAAOhC,IACR,EAGAklC,MAAO,SAAUC,GACZC,EAAYD,GAAcR,EAK9B,OAJKZ,GACJA,EAAUmB,MAAOE,CAAU,EAE5Bp7B,EAAM,EAAGo7B,CAAU,EACZplC,IACR,CACD,EAkBD,GAfAme,EAASzB,QAASslB,CAAM,EAKxBpB,EAAEgC,MAAUA,GAAOhC,EAAEgC,KAAOttB,GAASK,MAAS,IAC5CzP,QAASo7B,GAAWhsB,GAASwtB,SAAW,IAAK,EAG/ClC,EAAEj/B,KAAOyD,EAAQqX,QAAUrX,EAAQzD,MAAQi/B,EAAEnkB,QAAUmkB,EAAEj/B,KAGzDi/B,EAAEkB,WAAclB,EAAEiB,UAAY,KAAMp6B,YAAY,EAAE4F,MAAO2O,CAAc,GAAK,CAAE,IAGxD,MAAjB4kB,EAAEyE,YAAsB,CAC5BC,EAAY1lC,EAAS0C,cAAe,GAAI,EAKxC,IACCgjC,EAAU3vB,KAAOirB,EAAEgC,IAInB0C,EAAU3vB,KAAO2vB,EAAU3vB,KAC3BirB,EAAEyE,YAAc5D,GAAaqB,SAAW,KAAOrB,GAAa8D,MAC3DD,EAAUxC,SAAW,KAAOwC,EAAUC,IAMxC,CALE,MAAQv4B,GAIT4zB,EAAEyE,YAAc,CAAA,CACjB,CACD,CAWA,GARKzE,EAAEre,MAAQqe,EAAEmC,aAAiC,UAAlB,OAAOnC,EAAEre,OACxCqe,EAAEre,KAAOvf,EAAOy9B,MAAOG,EAAEre,KAAMqe,EAAEF,WAAY,GAI9CqB,GAA+B7H,GAAY0G,EAAGx7B,EAAS48B,CAAM,EAGxDphB,CAAAA,EAAL,CA+EA,IAAMze,KAzENiiC,EAAcphC,EAAOqlB,OAASuY,EAAEphC,SAGQ,GAApBwD,EAAOy/B,MAAM,IAChCz/B,EAAOqlB,MAAMU,QAAS,WAAY,EAInC6X,EAAEj/B,KAAOi/B,EAAEj/B,KAAKkgB,YAAY,EAG5B+e,EAAE4E,WAAa,CAACnE,GAAWrzB,KAAM4yB,EAAEj/B,IAAK,EAKxCqiC,EAAWpD,EAAEgC,IAAI18B,QAASg7B,GAAO,EAAG,EAG9BN,EAAE4E,WAwBI5E,EAAEre,MAAQqe,EAAEmC,aACoD,KAAzEnC,EAAEqC,aAAe,IAAK/hC,QAAS,mCAAoC,IACrE0/B,EAAEre,KAAOqe,EAAEre,KAAKrc,QAAS+6B,GAAK,GAAI,IAvBlCwE,EAAW7E,EAAEgC,IAAIjiC,MAAOqjC,EAAS1gC,MAAO,EAGnCs9B,EAAEre,OAAUqe,EAAEmC,aAAiC,UAAlB,OAAOnC,EAAEre,QAC1CyhB,IAAchE,GAAOhyB,KAAMg2B,CAAS,EAAI,IAAM,KAAQpD,EAAEre,KAGxD,OAAOqe,EAAEre,MAIO,CAAA,IAAZqe,EAAEnyB,QACNu1B,EAAWA,EAAS99B,QAASi7B,GAAY,IAAK,EAC9CsE,GAAazF,GAAOhyB,KAAMg2B,CAAS,EAAI,IAAM,KAAQ,KAASniC,GAAMuF,IAAO,GAC1Eq+B,GAIF7E,EAAEgC,IAAMoB,EAAWyB,GASf7E,EAAE8E,aACD1iC,EAAO0/B,aAAcsB,IACzBhC,EAAM8C,iBAAkB,oBAAqB9hC,EAAO0/B,aAAcsB,EAAW,EAEzEhhC,EAAO2/B,KAAMqB,KACjBhC,EAAM8C,iBAAkB,gBAAiB9hC,EAAO2/B,KAAMqB,EAAW,GAK9DpD,EAAEre,MAAQqe,EAAE4E,YAAgC,CAAA,IAAlB5E,EAAEqC,aAAyB79B,EAAQ69B,cACjEjB,EAAM8C,iBAAkB,eAAgBlE,EAAEqC,WAAY,EAIvDjB,EAAM8C,iBACL,SACAlE,EAAEkB,UAAW,IAAOlB,EAAEsC,QAAStC,EAAEkB,UAAW,IAC3ClB,EAAEsC,QAAStC,EAAEkB,UAAW,KACA,MAArBlB,EAAEkB,UAAW,GAAc,KAAON,GAAW,WAAa,IAC7DZ,EAAEsC,QAAS,IACb,EAGWtC,EAAE+E,QACZ3D,EAAM8C,iBAAkB3iC,EAAGy+B,EAAE+E,QAASxjC,EAAI,EAI3C,GAAKy+B,EAAEgF,aAC+C,CAAA,IAAnDhF,EAAEgF,WAAW9kC,KAAMujC,EAAiBrC,EAAOpB,CAAE,GAAehgB,GAG9D,OAAOohB,EAAMkD,MAAM,EAepB,GAXAP,EAAW,QAGXJ,EAAiBjpB,IAAKslB,EAAEhG,QAAS,EACjCoH,EAAMh4B,KAAM42B,EAAEiF,OAAQ,EACtB7D,EAAMrlB,KAAMikB,EAAEx6B,KAAM,EAGpB29B,EAAYhC,GAA+BR,GAAYX,EAAGx7B,EAAS48B,CAAM,EAKlE,CASN,GARAA,EAAMhhB,WAAa,EAGdojB,GACJE,EAAmBvb,QAAS,WAAY,CAAEiZ,EAAOpB,EAAI,EAIjDhgB,EACJ,OAAOohB,EAIHpB,EAAEoC,OAAqB,EAAZpC,EAAE5D,UACjBmH,EAAepkC,EAAO6f,WAAY,WACjCoiB,EAAMkD,MAAO,SAAU,CACxB,EAAGtE,EAAE5D,OAAQ,GAGd,IACCpc,EAAY,CAAA,EACZmjB,EAAU+B,KAAMrB,EAAgBz6B,CAAK,CAUtC,CATE,MAAQgD,GAGT,GAAK4T,EACJ,MAAM5T,EAIPhD,EAAM,CAAC,EAAGgD,CAAE,CACb,CACD,MAlCChD,EAAM,CAAC,EAAG,cAAe,CAtG1B,CAkQA,OAAOg4B,EAvHP,SAASh4B,EAAMi7B,EAAQc,EAAkBC,EAAWL,GACnD,IAAeE,EAASz/B,EAAO6/B,EAC9Bd,EAAaY,EAGTnlB,IAILA,EAAY,CAAA,EAGPujB,GACJpkC,EAAOk9B,aAAckH,CAAa,EAKnCJ,EAAYj+B,KAAAA,EAGZm+B,EAAwB0B,GAAW,GAGnC3D,EAAMhhB,WAAsB,EAATikB,EAAa,EAAI,EAGpCiB,EAAsB,KAAVjB,GAAiBA,EAAS,KAAkB,MAAXA,EAGxCe,IACJC,EA7lBJ,SAA8BrF,EAAGoB,EAAOgE,GAOvC,IALA,IAAIG,EAAIxkC,EAAMykC,EAAeC,EAC5BvrB,EAAW8lB,EAAE9lB,SACbgnB,EAAYlB,EAAEkB,UAGY,MAAnBA,EAAW,IAClBA,EAAUlzB,MAAM,EACJ9I,KAAAA,IAAPqgC,IACJA,EAAKvF,EAAEoE,UAAYhD,EAAM4C,kBAAmB,cAAe,GAK7D,GAAKuB,EACJ,IAAMxkC,KAAQmZ,EACb,GAAKA,EAAUnZ,IAAUmZ,EAAUnZ,GAAOqM,KAAMm4B,CAAG,EAAI,CACtDrE,EAAU9vB,QAASrQ,CAAK,EACxB,KACD,CAKF,GAAKmgC,EAAW,KAAOkE,EACtBI,EAAgBtE,EAAW,OACrB,CAGN,IAAMngC,KAAQqkC,EAAY,CACzB,GAAK,CAAClE,EAAW,IAAOlB,EAAEyC,WAAY1hC,EAAO,IAAMmgC,EAAW,IAAQ,CACrEsE,EAAgBzkC,EAChB,KACD,CACM0kC,EAAAA,GACW1kC,CAElB,CAGAykC,EAAgBA,GAAiBC,CAClC,CAKA,GAAKD,EAIJ,OAHKA,IAAkBtE,EAAW,IACjCA,EAAU9vB,QAASo0B,CAAc,EAE3BJ,EAAWI,EAEpB,EAwiBoCxF,EAAGoB,EAAOgE,CAAU,GAIhD,CAACE,GACqC,CAAC,EAA3CljC,EAAO6D,QAAS,SAAU+5B,EAAEkB,SAAU,GACtC9+B,EAAO6D,QAAS,OAAQ+5B,EAAEkB,SAAU,EAAI,IACxClB,EAAEyC,WAAY,eAAkB,cAIjC4C,EA9iBH,SAAsBrF,EAAGqF,EAAUjE,EAAOkE,GACzC,IAAII,EAAOC,EAASC,EAAM11B,EAAKiK,EAC9BsoB,EAAa,GAGbvB,EAAYlB,EAAEkB,UAAUnhC,MAAM,EAG/B,GAAKmhC,EAAW,GACf,IAAM0E,KAAQ5F,EAAEyC,WACfA,EAAYmD,EAAK/+B,YAAY,GAAMm5B,EAAEyC,WAAYmD,GAOnD,IAHAD,EAAUzE,EAAUlzB,MAAM,EAGlB23B,GAcP,GAZK3F,EAAEwC,eAAgBmD,KACtBvE,EAAOpB,EAAEwC,eAAgBmD,IAAcN,GAInC,CAAClrB,GAAQmrB,GAAatF,EAAE6F,aAC5BR,EAAWrF,EAAE6F,WAAYR,EAAUrF,EAAEiB,QAAS,GAG/C9mB,EAAOwrB,EACPA,EAAUzE,EAAUlzB,MAAM,EAKzB,GAAiB,MAAZ23B,EAEJA,EAAUxrB,OAGJ,GAAc,MAATA,GAAgBA,IAASwrB,EAAU,CAM9C,GAAK,EAHLC,EAAOnD,EAAYtoB,EAAO,IAAMwrB,IAAalD,EAAY,KAAOkD,IAI/D,IAAMD,KAASjD,EAId,IADAvyB,EAAMw1B,EAAM/+B,MAAO,GAAI,GACb,KAAQg/B,IAGjBC,EAAOnD,EAAYtoB,EAAO,IAAMjK,EAAK,KACpCuyB,EAAY,KAAOvyB,EAAK,KACb,CAGG,CAAA,IAAT01B,EACJA,EAAOnD,EAAYiD,GAGgB,CAAA,IAAxBjD,EAAYiD,KACvBC,EAAUz1B,EAAK,GACfgxB,EAAU9vB,QAASlB,EAAK,EAAI,GAE7B,KACD,CAMH,GAAc,CAAA,IAAT01B,EAGJ,GAAKA,GAAQ5F,EAAE8F,OACdT,EAAWO,EAAMP,CAAS,OAE1B,IACCA,EAAWO,EAAMP,CAAS,CAM3B,CALE,MAAQj5B,GACT,MAAO,CACNiR,MAAO,cACP7X,MAAOogC,EAAOx5B,EAAI,sBAAwB+N,EAAO,OAASwrB,CAC3D,CACD,CAGH,CAIF,MAAO,CAAEtoB,MAAO,UAAWsE,KAAM0jB,CAAS,CAC3C,EAgd2BrF,EAAGqF,EAAUjE,EAAOkE,CAAU,EAGjDA,GAGCtF,EAAE8E,cACNiB,EAAW3E,EAAM4C,kBAAmB,eAAgB,KAEnD5hC,EAAO0/B,aAAcsB,GAAa2C,GAEnCA,EAAW3E,EAAM4C,kBAAmB,MAAO,KAE1C5hC,EAAO2/B,KAAMqB,GAAa2C,GAKZ,MAAX1B,GAA6B,SAAXrE,EAAEj/B,KACxBwjC,EAAa,YAGS,MAAXF,EACXE,EAAa,eAIbA,EAAac,EAAShoB,MACtB4nB,EAAUI,EAAS1jB,KAEnB2jB,EAAY,EADZ9/B,EAAQ6/B,EAAS7/B,UAMlBA,EAAQ++B,EACHF,CAAAA,GAAWE,IACfA,EAAa,QACRF,EAAS,IACbA,EAAS,KAMZjD,EAAMiD,OAASA,EACfjD,EAAMmD,YAAeY,GAAoBZ,GAAe,GAGnDe,EACJ/nB,EAASmB,YAAa+kB,EAAiB,CAAEwB,EAASV,EAAYnD,EAAQ,EAEtE7jB,EAASuB,WAAY2kB,EAAiB,CAAErC,EAAOmD,EAAY/+B,EAAQ,EAIpE47B,EAAMwC,WAAYA,CAAW,EAC7BA,EAAa1+B,KAAAA,EAERs+B,GACJE,EAAmBvb,QAASmd,EAAY,cAAgB,YACvD,CAAElE,EAAOpB,EAAGsF,EAAYL,EAAUz/B,EAAQ,EAI5Cm+B,EAAiB1mB,SAAUwmB,EAAiB,CAAErC,EAAOmD,EAAa,EAE7Df,IACJE,EAAmBvb,QAAS,eAAgB,CAAEiZ,EAAOpB,EAAI,EAGnD,EAAI59B,EAAOy/B,QAChBz/B,EAAOqlB,MAAMU,QAAS,UAAW,GAGpC,CAGD,EAEA6d,QAAS,SAAUhE,EAAKrgB,EAAMpe,GAC7B,OAAOnB,EAAOW,IAAKi/B,EAAKrgB,EAAMpe,EAAU,MAAO,CAChD,EAEA0iC,UAAW,SAAUjE,EAAKz+B,GACzB,OAAOnB,EAAOW,IAAKi/B,EAAK98B,KAAAA,EAAW3B,EAAU,QAAS,CACvD,CACD,CAAE,EAEFnB,EAAOkB,KAAM,CAAE,MAAO,QAAU,SAAUsD,EAAIiV,GAC7CzZ,EAAQyZ,GAAW,SAAUmmB,EAAKrgB,EAAMpe,EAAUxC,GAUjD,OAPKzB,EAAYqiB,CAAK,IACrB5gB,EAAOA,GAAQwC,EACfA,EAAWoe,EACXA,EAAOzc,KAAAA,GAID9C,EAAO8gC,KAAM9gC,EAAOmC,OAAQ,CAClCy9B,IAAKA,EACLjhC,KAAM8a,EACNolB,SAAUlgC,EACV4gB,KAAMA,EACNsjB,QAAS1hC,CACV,EAAGnB,EAAO2C,cAAei9B,CAAI,GAAKA,CAAI,CAAE,CACzC,CACD,CAAE,EAEF5/B,EAAO4gC,cAAe,SAAUhD,GAE/B,IADA,IAAIz+B,KACOy+B,EAAE+E,QACa,iBAApBxjC,EAAEsF,YAAY,IAClBm5B,EAAEqC,YAAcrC,EAAE+E,QAASxjC,IAAO,GAGrC,CAAE,EAGFa,EAAOqsB,SAAW,SAAUuT,EAAKx9B,EAASlD,GACzC,OAAOc,EAAO8gC,KAAM,CACnBlB,IAAKA,EAGLjhC,KAAM,MACNkgC,SAAU,SACVpzB,MAAO,CAAA,EACPu0B,MAAO,CAAA,EACPxjC,OAAQ,CAAA,EAKR6jC,WAAY,CACXyD,cAAe,YAChB,EACAL,WAAY,SAAUR,GACrBjjC,EAAO0D,WAAYu/B,EAAU7gC,EAASlD,CAAI,CAC3C,CACD,CAAE,CACH,EAGAc,EAAOG,GAAGgC,OAAQ,CACjB4hC,QAAS,SAAU3X,GA0BlB,OAvBKpvB,KAAM,KACLE,EAAYkvB,CAAK,IACrBA,EAAOA,EAAKtuB,KAAMd,KAAM,EAAI,GAI7BsnB,EAAOtkB,EAAQosB,EAAMpvB,KAAM,GAAIyN,aAAc,EAAEjJ,GAAI,CAAE,EAAEgB,MAAO,CAAA,CAAK,EAE9DxF,KAAM,GAAI4C,YACd0kB,EAAK0I,aAAchwB,KAAM,EAAI,EAG9BsnB,EAAKljB,IAAK,WAGT,IAFA,IAAIC,EAAOrE,KAEHqE,EAAK2iC,mBACZ3iC,EAAOA,EAAK2iC,kBAGb,OAAO3iC,CACR,CAAE,EAAEyrB,OAAQ9vB,IAAK,GAGXA,IACR,EAEAinC,UAAW,SAAU7X,GACpB,OAAKlvB,EAAYkvB,CAAK,EACdpvB,KAAKkE,KAAM,SAAU/B,GAC3Ba,EAAQhD,IAAK,EAAEinC,UAAW7X,EAAKtuB,KAAMd,KAAMmC,CAAE,CAAE,CAChD,CAAE,EAGInC,KAAKkE,KAAM,WACjB,IAAIqW,EAAOvX,EAAQhD,IAAK,EACvB8a,EAAWP,EAAKO,SAAS,EAErBA,EAASxX,OACbwX,EAASisB,QAAS3X,CAAK,EAGvB7U,EAAKuV,OAAQV,CAAK,CAEpB,CAAE,CACH,EAEA9H,KAAM,SAAU8H,GACf,IAAI8X,EAAiBhnC,EAAYkvB,CAAK,EAEtC,OAAOpvB,KAAKkE,KAAM,SAAU/B,GAC3Ba,EAAQhD,IAAK,EAAE+mC,QAASG,EAAiB9X,EAAKtuB,KAAMd,KAAMmC,CAAE,EAAIitB,CAAK,CACtE,CAAE,CACH,EAEA+X,OAAQ,SAAUlkC,GAIjB,OAHAjD,KAAKuU,OAAQtR,CAAS,EAAE8R,IAAK,MAAO,EAAE7Q,KAAM,WAC3ClB,EAAQhD,IAAK,EAAEmwB,YAAanwB,KAAK+M,UAAW,CAC7C,CAAE,EACK/M,IACR,CACD,CAAE,EAGFgD,EAAOiP,KAAKjH,QAAQquB,OAAS,SAAUh1B,GACtC,MAAO,CAACrB,EAAOiP,KAAKjH,QAAQo8B,QAAS/iC,CAAK,CAC3C,EACArB,EAAOiP,KAAKjH,QAAQo8B,QAAU,SAAU/iC,GACvC,MAAO,CAAC,EAAGA,EAAK4tB,aAAe5tB,EAAKuvB,cAAgBvvB,EAAKqxB,eAAe,EAAEpyB,OAC3E,EAKAN,EAAOw/B,aAAa6E,IAAM,WACzB,IACC,OAAO,IAAItnC,EAAOunC,cACJ,CAAb,MAAQt6B,IACX,EAEA,IAAIu6B,GAAmB,CAGrBC,EAAG,IAIHC,KAAM,GACP,EACAC,GAAe1kC,EAAOw/B,aAAa6E,IAAI,EAyNpCM,IAvNJlmC,EAAQmmC,KAAO,CAAC,CAACF,IAAkB,oBAAqBA,GACxDjmC,EAAQqiC,KAAO4D,GAAe,CAAC,CAACA,GAEhC1kC,EAAO6gC,cAAe,SAAUz+B,GAC/B,IAAIjB,EAAU0jC,EAGd,GAAKpmC,EAAQmmC,MAAQF,IAAgB,CAACtiC,EAAQigC,YAC7C,MAAO,CACNS,KAAM,SAAUH,EAAS/K,GACxB,IAAIz4B,EACHklC,EAAMjiC,EAAQiiC,IAAI,EAWnB,GATAA,EAAIS,KACH1iC,EAAQzD,KACRyD,EAAQw9B,IACRx9B,EAAQ49B,MACR59B,EAAQ2iC,SACR3iC,EAAQsR,QACT,EAGKtR,EAAQ4iC,UACZ,IAAM7lC,KAAKiD,EAAQ4iC,UAClBX,EAAKllC,GAAMiD,EAAQ4iC,UAAW7lC,GAmBhC,IAAMA,KAdDiD,EAAQ4/B,UAAYqC,EAAItC,kBAC5BsC,EAAItC,iBAAkB3/B,EAAQ4/B,QAAS,EAQlC5/B,EAAQigC,aAAgBM,EAAS,sBACtCA,EAAS,oBAAuB,kBAItBA,EACV0B,EAAIvC,iBAAkB3iC,EAAGwjC,EAASxjC,EAAI,EAIvCgC,EAAW,SAAUxC,GACpB,OAAO,WACDwC,IACJA,EAAW0jC,EAAgBR,EAAIY,OAC9BZ,EAAIa,QAAUb,EAAIc,QAAUd,EAAIe,UAC/Bf,EAAIgB,mBAAqB,KAEb,UAAT1mC,EACJ0lC,EAAInC,MAAM,EACU,UAATvjC,EAKgB,UAAtB,OAAO0lC,EAAIpC,OACfrK,EAAU,EAAG,OAAQ,EAErBA,EAGCyM,EAAIpC,OACJoC,EAAIlC,UACL,EAGDvK,EACC2M,GAAkBF,EAAIpC,SAAYoC,EAAIpC,OACtCoC,EAAIlC,WAK+B,UAAjCkC,EAAIiB,cAAgB,SACM,UAA5B,OAAOjB,EAAIkB,aACV,CAAEC,OAAQnB,EAAIpB,QAAS,EACvB,CAAE1jC,KAAM8kC,EAAIkB,YAAa,EAC1BlB,EAAIxC,sBAAsB,CAC3B,EAGH,CACD,EAGAwC,EAAIY,OAAS9jC,EAAS,EACtB0jC,EAAgBR,EAAIa,QAAUb,EAAIe,UAAYjkC,EAAU,OAAQ,EAK3C2B,KAAAA,IAAhBuhC,EAAIc,QACRd,EAAIc,QAAUN,EAEdR,EAAIgB,mBAAqB,WAGA,IAAnBhB,EAAIrmB,YAMRjhB,EAAO6f,WAAY,WACbzb,GACJ0jC,EAAc,CAEhB,CAAE,CAEJ,EAID1jC,EAAWA,EAAU,OAAQ,EAE7B,IAGCkjC,EAAIvB,KAAM1gC,EAAQogC,YAAcpgC,EAAQmd,MAAQ,IAAK,CAOtD,CANE,MAAQvV,GAGT,GAAK7I,EACJ,MAAM6I,CAER,CACD,EAEAk4B,MAAO,WACD/gC,GACJA,EAAS,CAEX,CACD,CAEF,CAAE,EAMFnB,EAAO4gC,cAAe,SAAUhD,GAC1BA,EAAEyE,cACNzE,EAAE9lB,SAASzY,OAAS,CAAA,EAEtB,CAAE,EAGFW,EAAO0gC,UAAW,CACjBR,QAAS,CACR7gC,OAAQ,2FAET,EACAyY,SAAU,CACTzY,OAAQ,yBACT,EACAghC,WAAY,CACXyD,cAAe,SAAUvkC,GAExB,OADAS,EAAO0D,WAAYnE,CAAK,EACjBA,CACR,CACD,CACD,CAAE,EAGFS,EAAO4gC,cAAe,SAAU,SAAUhD,GACxB96B,KAAAA,IAAZ86B,EAAEnyB,QACNmyB,EAAEnyB,MAAQ,CAAA,GAENmyB,EAAEyE,cACNzE,EAAEj/B,KAAO,MAEX,CAAE,EAGFqB,EAAO6gC,cAAe,SAAU,SAAUjD,GAGzC,IACKv+B,EAAQ8B,EADb,GAAKy8B,EAAEyE,aAAezE,EAAE6H,YAEvB,MAAO,CACN3C,KAAM,SAAU/oB,EAAG6d,GAClBv4B,EAASW,EAAQ,UAAW,EAC1BmP,KAAMyuB,EAAE6H,aAAe,EAAG,EAC1BjmB,KAAM,CAAEkmB,QAAS9H,EAAE+H,cAAe/mC,IAAKg/B,EAAEgC,GAAI,CAAE,EAC/C3a,GAAI,aAAc9jB,EAAW,SAAUykC,GACvCvmC,EAAOqb,OAAO,EACdvZ,EAAW,KACNykC,GACJhO,EAAuB,UAAbgO,EAAIjnC,KAAmB,IAAM,IAAKinC,EAAIjnC,IAAK,CAEvD,CAAE,EAGH/B,EAAS8C,KAAKC,YAAaN,EAAQ,EAAI,CACxC,EACA6iC,MAAO,WACD/gC,GACJA,EAAS,CAEX,CACD,CAEF,CAAE,EAKiB,IAClB0kC,GAAS,oBA4iBN19B,IAziBJnI,EAAO0gC,UAAW,CACjBoF,MAAO,WACPC,cAAe,WACd,IAAI5kC,EAAWwjC,GAAal9B,IAAI,GAAOzH,EAAO+C,QAAU,IAAQlE,GAAMuF,IAAO,GAE7E,OADApH,KAAMmE,GAAa,CAAA,EACZA,CACR,CACD,CAAE,EAGFnB,EAAO4gC,cAAe,aAAc,SAAUhD,EAAGoI,EAAkBhH,GAElE,IAAIiH,EAAcC,EAAaC,EAC9BC,EAAuB,CAAA,IAAZxI,EAAEkI,QAAqBD,GAAO76B,KAAM4yB,EAAEgC,GAAI,EACpD,MACkB,UAAlB,OAAOhC,EAAEre,MAE6C,KADnDqe,EAAEqC,aAAe,IACjB/hC,QAAS,mCAAoC,GAC/C2nC,GAAO76B,KAAM4yB,EAAEre,IAAK,GAAK,QAI5B,GAAK6mB,GAAiC,UAArBxI,EAAEkB,UAAW,GA8D7B,OA3DAmH,EAAerI,EAAEmI,cAAgB7oC,EAAY0gC,EAAEmI,aAAc,EAC5DnI,EAAEmI,cAAc,EAChBnI,EAAEmI,cAGEK,EACJxI,EAAGwI,GAAaxI,EAAGwI,GAAWljC,QAAS2iC,GAAQ,KAAOI,CAAa,EAC5C,CAAA,IAAZrI,EAAEkI,QACblI,EAAEgC,MAAS5C,GAAOhyB,KAAM4yB,EAAEgC,GAAI,EAAI,IAAM,KAAQhC,EAAEkI,MAAQ,IAAMG,GAIjErI,EAAEyC,WAAY,eAAkB,WAI/B,OAHM8F,GACLnmC,EAAOoD,MAAO6iC,EAAe,iBAAkB,EAEzCE,EAAmB,EAC3B,EAGAvI,EAAEkB,UAAW,GAAM,OAGnBoH,EAAcnpC,EAAQkpC,GACtBlpC,EAAQkpC,GAAiB,WACxBE,EAAoB7kC,SACrB,EAGA09B,EAAM9jB,OAAQ,WAGQpY,KAAAA,IAAhBojC,EACJlmC,EAAQjD,CAAO,EAAEk+B,WAAYgL,CAAa,EAI1ClpC,EAAQkpC,GAAiBC,EAIrBtI,EAAGqI,KAGPrI,EAAEmI,cAAgBC,EAAiBD,cAGnCpB,GAAa1mC,KAAMgoC,CAAa,GAI5BE,GAAqBjpC,EAAYgpC,CAAY,GACjDA,EAAaC,EAAmB,EAAI,EAGrCA,EAAoBD,EAAcpjC,KAAAA,CACnC,CAAE,EAGK,QAET,CAAE,EAUFrE,EAAQ4nC,qBACH9jB,EAAO3lB,EAAS0pC,eAAeD,mBAAoB,EAAG,EAAE9jB,MACvDvU,UAAY,6BACiB,IAA3BuU,EAAKxY,WAAWzJ,QAQxBN,EAAO2X,UAAY,SAAU4H,EAAMrf,EAASqmC,GAC3C,IAQkBpiB,EARlB,MAAqB,UAAhB,OAAO5E,EACJ,IAEgB,WAAnB,OAAOrf,IACXqmC,EAAcrmC,EACdA,EAAU,CAAA,GAKLA,IAIAzB,EAAQ4nC,qBAMZryB,GALA9T,EAAUtD,EAAS0pC,eAAeD,mBAAoB,EAAG,GAK1C/mC,cAAe,MAAO,GAChCqT,KAAO/V,EAAS0V,SAASK,KAC9BzS,EAAQR,KAAKC,YAAaqU,CAAK,GAE/B9T,EAAUtD,GAKZunB,EAAU,CAACoiB,GAAe,IAD1BC,EAASpvB,EAAW1M,KAAM6U,CAAK,GAKvB,CAAErf,EAAQZ,cAAeknC,EAAQ,EAAI,IAG7CA,EAAStiB,GAAe,CAAE3E,GAAQrf,EAASikB,CAAQ,EAE9CA,GAAWA,EAAQ7jB,QACvBN,EAAQmkB,CAAQ,EAAEzJ,OAAO,EAGnB1a,EAAOgB,MAAO,GAAIwlC,EAAOz8B,UAAW,GAC5C,EAMA/J,EAAOG,GAAGmoB,KAAO,SAAUsX,EAAK6G,EAAQtlC,GACvC,IAAIlB,EAAUtB,EAAMskC,EACnB1rB,EAAOva,KACPsoB,EAAMsa,EAAI1hC,QAAS,GAAI,EAsDxB,MApDW,CAAC,EAAPonB,IACJrlB,EAAW66B,EAAkB8E,EAAIjiC,MAAO2nB,CAAI,CAAE,EAC9Csa,EAAMA,EAAIjiC,MAAO,EAAG2nB,CAAI,GAIpBpoB,EAAYupC,CAAO,GAGvBtlC,EAAWslC,EACXA,EAAS3jC,KAAAA,GAGE2jC,GAA4B,UAAlB,OAAOA,IAC5B9nC,EAAO,QAIW,EAAd4Y,EAAKjX,QACTN,EAAO8gC,KAAM,CACZlB,IAAKA,EAKLjhC,KAAMA,GAAQ,MACdkgC,SAAU,OACVtf,KAAMknB,CACP,CAAE,EAAEz/B,KAAM,SAAUu+B,GAGnBtC,EAAW3hC,UAEXiW,EAAK6U,KAAMnsB,EAIVD,EAAQ,OAAQ,EAAE8sB,OAAQ9sB,EAAO2X,UAAW4tB,CAAa,CAAE,EAAE53B,KAAM1N,CAAS,EAG5EslC,CAAa,CAKf,CAAE,EAAErqB,OAAQ/Z,GAAY,SAAU69B,EAAOiD,GACxC1qB,EAAKrW,KAAM,WACVC,EAASnD,MAAOhB,KAAMimC,GAAY,CAAEjE,EAAMuG,aAActD,EAAQjD,EAAQ,CACzE,CAAE,CACH,CAAE,EAGIhiC,IACR,EAKAgD,EAAOiP,KAAKjH,QAAQ0+B,SAAW,SAAUrlC,GACxC,OAAOrB,EAAO2B,KAAM3B,EAAOo5B,OAAQ,SAAUj5B,GAC5C,OAAOkB,IAASlB,EAAGkB,IACpB,CAAE,EAAEf,MACL,EAKAN,EAAO2mC,OAAS,CACfC,UAAW,SAAUvlC,EAAMe,EAASjD,GACnC,IAA0B0nC,EAAWC,EAAQC,EAAWC,EACvDhY,EAAWhvB,EAAOihB,IAAK5f,EAAM,UAAW,EACxC4lC,EAAUjnC,EAAQqB,CAAK,EACvBsnB,EAAQ,GAGS,WAAbqG,IACJ3tB,EAAKyf,MAAMkO,SAAW,YAGvB+X,EAAYE,EAAQN,OAAO,EAC3BE,EAAY7mC,EAAOihB,IAAK5f,EAAM,KAAM,EACpC2lC,EAAahnC,EAAOihB,IAAK5f,EAAM,MAAO,EASrC6lC,GARkC,aAAblY,GAAwC,UAAbA,IACD,CAAC,GAA9C6X,EAAYG,GAAa9oC,QAAS,MAAO,GAM3C4oC,GADAK,EAAcF,EAAQjY,SAAS,GACV9hB,IACXi6B,EAAY5S,OAGtBuS,EAAS1X,WAAYyX,CAAU,GAAK,EAC1BzX,WAAY4X,CAAW,GAAK,GASnB,OAHnB5kC,EAHIlF,EAAYkF,CAAQ,EAGdA,EAAQtE,KAAMuD,EAAMlC,EAAGa,EAAOmC,OAAQ,GAAI4kC,CAAU,CAAE,EAG5D3kC,GAAQ8K,MACZyb,EAAMzb,IAAQ9K,EAAQ8K,IAAM65B,EAAU75B,IAAQ45B,GAE1B,MAAhB1kC,EAAQmyB,OACZ5L,EAAM4L,KAASnyB,EAAQmyB,KAAOwS,EAAUxS,KAAS2S,GAG7C,UAAW9kC,EACfA,EAAQglC,MAAMtpC,KAAMuD,EAAMsnB,CAAM,EAGhCse,EAAQhmB,IAAK0H,CAAM,CAErB,CACD,EAEA3oB,EAAOG,GAAGgC,OAAQ,CAGjBwkC,OAAQ,SAAUvkC,GAGjB,IAQIilC,EACHhmC,EATD,OAAKC,UAAUhB,OACKwC,KAAAA,IAAZV,EACNpF,KACAA,KAAKkE,KAAM,SAAU/B,GACpBa,EAAO2mC,OAAOC,UAAW5pC,KAAMoF,EAASjD,CAAE,CAC3C,CAAE,GAIHkC,EAAOrE,KAAM,IAURqE,EAAKqxB,eAAe,EAAEpyB,QAK5B+mC,EAAOhmC,EAAKgzB,sBAAsB,EAClCiT,EAAMjmC,EAAKoJ,cAAcwC,YAClB,CACNC,IAAKm6B,EAAKn6B,IAAMo6B,EAAIC,YACpBhT,KAAM8S,EAAK9S,KAAO+S,EAAIE,WACvB,GATQ,CAAEt6B,IAAK,EAAGqnB,KAAM,CAAE,EAT1B,KAAA,CAmBD,EAIAvF,SAAU,WACT,GAAMhyB,KAAM,GAAZ,CAIA,IAAIyqC,EAAcd,EAAQznC,EACzBmC,EAAOrE,KAAM,GACb0qC,EAAe,CAAEx6B,IAAK,EAAGqnB,KAAM,CAAE,EAGlC,GAAwC,UAAnCv0B,EAAOihB,IAAK5f,EAAM,UAAW,EAGjCslC,EAAStlC,EAAKgzB,sBAAsB,MAE9B,CAON,IANAsS,EAAS3pC,KAAK2pC,OAAO,EAIrBznC,EAAMmC,EAAKoJ,cACXg9B,EAAepmC,EAAKomC,cAAgBvoC,EAAI6N,gBAChC06B,IACLA,IAAiBvoC,EAAIqjB,MAAQklB,IAAiBvoC,EAAI6N,kBACT,WAA3C/M,EAAOihB,IAAKwmB,EAAc,UAAW,GAErCA,EAAeA,EAAa7nC,WAExB6nC,GAAgBA,IAAiBpmC,GAAkC,IAA1BomC,EAAarqC,YAG1DsqC,EAAe1nC,EAAQynC,CAAa,EAAEd,OAAO,GAChCz5B,KAAOlN,EAAOihB,IAAKwmB,EAAc,iBAAkB,CAAA,CAAK,EACrEC,EAAanT,MAAQv0B,EAAOihB,IAAKwmB,EAAc,kBAAmB,CAAA,CAAK,EAEzE,CAGA,MAAO,CACNv6B,IAAKy5B,EAAOz5B,IAAMw6B,EAAax6B,IAAMlN,EAAOihB,IAAK5f,EAAM,YAAa,CAAA,CAAK,EACzEkzB,KAAMoS,EAAOpS,KAAOmT,EAAanT,KAAOv0B,EAAOihB,IAAK5f,EAAM,aAAc,CAAA,CAAK,CAC9E,CAtCA,CAuCD,EAYAomC,aAAc,WACb,OAAOzqC,KAAKoE,IAAK,WAGhB,IAFA,IAAIqmC,EAAezqC,KAAKyqC,aAEhBA,GAA2D,WAA3CznC,EAAOihB,IAAKwmB,EAAc,UAAW,GAC5DA,EAAeA,EAAaA,aAG7B,OAAOA,GAAgB16B,CACxB,CAAE,CACH,CACD,CAAE,EAGF/M,EAAOkB,KAAM,CAAEu0B,WAAY,cAAeD,UAAW,aAAc,EAAG,SAAU/b,EAAQ+F,GACvF,IAAItS,EAAM,gBAAkBsS,EAE5Bxf,EAAOG,GAAIsZ,GAAW,SAAUra,GAC/B,OAAO8e,EAAQlhB,KAAM,SAAUqE,EAAMoY,EAAQra,GAG5C,IAAIkoC,EAOJ,GANKhqC,EAAU+D,CAAK,EACnBimC,EAAMjmC,EACuB,IAAlBA,EAAKjE,WAChBkqC,EAAMjmC,EAAK4L,aAGCnK,KAAAA,IAAR1D,EACJ,OAAOkoC,EAAMA,EAAK9nB,GAASne,EAAMoY,GAG7B6tB,EACJA,EAAIK,SACFz6B,EAAYo6B,EAAIE,YAAVpoC,EACP8N,EAAM9N,EAAMkoC,EAAIC,WACjB,EAGAlmC,EAAMoY,GAAWra,CAEnB,EAAGqa,EAAQra,EAAKkC,UAAUhB,MAAO,CAClC,CACD,CAAE,EAQFN,EAAOkB,KAAM,CAAE,MAAO,QAAU,SAAUsD,EAAIgb,GAC7Cxf,EAAO6yB,SAAUrT,GAASmQ,GAAclxB,EAAQwxB,cAC/C,SAAU5uB,EAAMiuB,GACf,GAAKA,EAIJ,OAHAA,EAAWD,GAAQhuB,EAAMme,CAAK,EAGvB+O,GAAUvjB,KAAMskB,CAAS,EAC/BtvB,EAAQqB,CAAK,EAAE2tB,SAAS,EAAGxP,GAAS,KACpC8P,CAEH,CACD,CACD,CAAE,EAIFtvB,EAAOkB,KAAM,CAAE0mC,OAAQ,SAAUC,MAAO,OAAQ,EAAG,SAAUxlC,EAAM1D,GAClEqB,EAAOkB,KAAM,CACZuzB,QAAS,QAAUpyB,EACnByW,QAASna,EACTmpC,GAAI,QAAUzlC,CACf,EAAG,SAAU0lC,EAAcC,GAG1BhoC,EAAOG,GAAI6nC,GAAa,SAAUxT,EAAQrwB,GACzC,IAAIga,EAAY7c,UAAUhB,SAAYynC,GAAkC,WAAlB,OAAOvT,GAC5DpC,EAAQ2V,IAA6B,CAAA,IAAXvT,GAA6B,CAAA,IAAVrwB,EAAiB,SAAW,UAE1E,OAAO+Z,EAAQlhB,KAAM,SAAUqE,EAAM1C,EAAMwF,GAC1C,IAAIjF,EAEJ,OAAK5B,EAAU+D,CAAK,EAGoB,IAAhC2mC,EAAS9pC,QAAS,OAAQ,EAChCmD,EAAM,QAAUgB,GAChBhB,EAAKzE,SAASmQ,gBAAiB,SAAW1K,GAIrB,IAAlBhB,EAAKjE,UACT8B,EAAMmC,EAAK0L,gBAIJ/J,KAAK6uB,IACXxwB,EAAKkhB,KAAM,SAAWlgB,GAAQnD,EAAK,SAAWmD,GAC9ChB,EAAKkhB,KAAM,SAAWlgB,GAAQnD,EAAK,SAAWmD,GAC9CnD,EAAK,SAAWmD,EACjB,GAGgBS,KAAAA,IAAVqB,EAGNnE,EAAOihB,IAAK5f,EAAM1C,EAAMyzB,CAAM,EAG9BpyB,EAAO8gB,MAAOzf,EAAM1C,EAAMwF,EAAOiuB,CAAM,CACzC,EAAGzzB,EAAMwf,EAAYqW,EAAS1xB,KAAAA,EAAWqb,CAAU,CACpD,CACD,CAAE,CACH,CAAE,EAGFne,EAAOkB,KAAM,CACZ,YACA,WACA,eACA,YACA,cACA,YACE,SAAUsD,EAAI7F,GAChBqB,EAAOG,GAAIxB,GAAS,SAAUwB,GAC7B,OAAOnD,KAAKioB,GAAItmB,EAAMwB,CAAG,CAC1B,CACD,CAAE,EAKFH,EAAOG,GAAGgC,OAAQ,CAEjBw1B,KAAM,SAAUzS,EAAO3F,EAAMpf,GAC5B,OAAOnD,KAAKioB,GAAIC,EAAO,KAAM3F,EAAMpf,CAAG,CACvC,EACA8nC,OAAQ,SAAU/iB,EAAO/kB,GACxB,OAAOnD,KAAKsoB,IAAKJ,EAAO,KAAM/kB,CAAG,CAClC,EAEA+nC,SAAU,SAAUjoC,EAAUilB,EAAO3F,EAAMpf,GAC1C,OAAOnD,KAAKioB,GAAIC,EAAOjlB,EAAUsf,EAAMpf,CAAG,CAC3C,EACAgoC,WAAY,SAAUloC,EAAUilB,EAAO/kB,GAGtC,OAA4B,IAArBmB,UAAUhB,OAChBtD,KAAKsoB,IAAKrlB,EAAU,IAAK,EACzBjD,KAAKsoB,IAAKJ,EAAOjlB,GAAY,KAAME,CAAG,CACxC,EAEAioC,MAAO,SAAUC,EAAQC,GACxB,OAAOtrC,KAAK+tB,WAAYsd,CAAO,EAAErd,WAAYsd,GAASD,CAAO,CAC9D,CACD,CAAE,EAEFroC,EAAOkB,KACN,wLAE4DqD,MAAO,GAAI,EACvE,SAAUC,EAAInC,GAGbrC,EAAOG,GAAIkC,GAAS,SAAUkd,EAAMpf,GACnC,OAA0B,EAAnBmB,UAAUhB,OAChBtD,KAAKioB,GAAI5iB,EAAM,KAAMkd,EAAMpf,CAAG,EAC9BnD,KAAK+oB,QAAS1jB,CAAK,CACrB,CACD,CACD,EAOY,sCAiGXkmC,IA3FDvoC,EAAOwoC,MAAQ,SAAUroC,EAAID,GAC5B,IAAS0R,EAAM42B,EAUf,GARwB,UAAnB,OAAOtoC,IACX4N,EAAM3N,EAAID,GACVA,EAAUC,EACVA,EAAK2N,GAKA5Q,EAAYiD,CAAG,EAarB,OARAyR,EAAOjU,EAAMG,KAAMwD,UAAW,CAAE,GAChCknC,EAAQ,WACP,OAAOroC,EAAGnC,MAAOkC,GAAWlD,KAAM4U,EAAK7T,OAAQJ,EAAMG,KAAMwD,SAAU,CAAE,CAAE,CAC1E,GAGM8C,KAAOjE,EAAGiE,KAAOjE,EAAGiE,MAAQpE,EAAOoE,IAAI,GAEtCokC,CACR,EAEAxoC,EAAOyoC,UAAY,SAAUC,GACvBA,EACJ1oC,EAAO8d,SAAS,GAEhB9d,EAAO0X,MAAO,CAAA,CAAK,CAErB,EACA1X,EAAO6C,QAAUD,MAAMC,QACvB7C,EAAO2oC,UAAY5oB,KAAKC,MACxBhgB,EAAO6J,SAAWA,EAClB7J,EAAO9C,WAAaA,EACpB8C,EAAO1C,SAAWA,EAClB0C,EAAO8e,UAAYA,EACnB9e,EAAOrB,KAAOmB,EAEdE,EAAOgpB,IAAMniB,KAAKmiB,IAElBhpB,EAAO4oC,UAAY,SAAUzrC,GAK5B,IAAIwB,EAAOqB,EAAOrB,KAAMxB,CAAI,EAC5B,OAAkB,WAATwB,GAA8B,WAATA,IAK7B,CAACkqC,MAAO1rC,EAAMiyB,WAAYjyB,CAAI,CAAE,CAClC,EAEA6C,EAAO8oC,KAAO,SAAUvpC,GACvB,OAAe,MAARA,EACN,IACEA,EAAO,IAAK2D,QAASiF,GAAO,EAAG,CACnC,EAiBuB,YAAlB,OAAO4gC,QAAyBA,OAAOC,KAC3CD,OAAQ,SAAU,GAAI,WACrB,OAAO/oC,CACR,CAAE,EASQjD,EAAOiD,QAGjBipC,GAAKlsC,EAAOmsC,EAwBb,OAtBAlpC,EAAOmpC,WAAa,SAAUzmC,GAS7B,OARK3F,EAAOmsC,IAAMlpC,IACjBjD,EAAOmsC,EAAID,IAGPvmC,GAAQ3F,EAAOiD,SAAWA,IAC9BjD,EAAOiD,OAASuoC,IAGVvoC,CACR,EAKyB,KAAA,IAAb/C,IACXF,EAAOiD,OAASjD,EAAOmsC,EAAIlpC,GAMrBA,CACP,CAAE,ECxnVF,SAAWuS,EAAM9V,GACO,YAAlB,OAAOssC,QAAyBA,OAAOC,IAC3CD,OAAO,GAAI,WACV,OAAOtsC,EAAQ8V,CAAI,CACnB,CAAC,EAC4B,UAAnB,OAAO5V,QAClBD,OAAOC,QAAUF,EAAQ8V,CAAI,EAE7BA,EAAK62B,QAAU3sC,EAAQ8V,CAAI,CAE5B,EAAoB,aAAlB,OAAO/V,OAAyBA,OAA2B,aAAlB,OAAOO,OAAyBA,OAASC,KAAM,SAAWD,GAErG,aAyFmB,SAAfssC,EAAyBvxB,GACzBA,GACFA,EAAS7V,KAAK,SAAWqnC,EAAOC,GAG/B,OAFcC,EAAaF,EAAMxwB,OAAO,EAC1B0wB,EAAaD,EAAMzwB,OAAO,EACV,CAAC,EACxB,CACP,CAAC,CAEJ,CAoDiB,SAAb2wB,IACH,OAAI1sC,EAAO2sC,YAAc3sC,EAAOwqC,aA5BzBvkC,KAAK6uB,IACXj1B,SAAS2lB,KAAKonB,aAAc/sC,SAASmQ,gBAAgB48B,aACrD/sC,SAAS2lB,KAAKqO,aAAch0B,SAASmQ,gBAAgB6jB,aACrDh0B,SAAS2lB,KAAKqnB,aAAchtC,SAASmQ,gBAAgB68B,YACtD,CA0BD,CAsDiB,SAAbC,EAAuBC,EAAOnJ,GAGjC,IAGIoJ,EAHCD,IAGDC,EAAKD,EAAME,IAAI7xB,QAAQ,IAAI,KAI/B4xB,EAAGE,UAAUvvB,OAAOimB,EAASuJ,QAAQ,EACrCJ,EAAMhxB,QAAQmxB,UAAUvvB,OAAOimB,EAASwJ,YAAY,EAGpDC,EAAiBL,EAAIpJ,CAAQ,EAG7B0J,EAAU,oBAAqBN,EAAI,CAClCO,KAAMR,EAAME,IACZlxB,QAASgxB,EAAMhxB,QACf6nB,SAAUA,CACX,CAAC,EAEF,CAhOA,IAAI4J,EAAW,CAGdL,SAAU,SACVC,aAAc,SAGdK,OAAQ,CAAA,EACRC,YAAa,SAGb9D,OAAQ,EACR+D,OAAQ,CAAA,EAGRvkB,OAAQ,CAAA,CAET,EA6BIkkB,EAAY,SAAU1rC,EAAM0C,EAAMkoB,GAGhCA,EAAOoX,SAASxa,SAGjBd,EAAQ,IAAIslB,YAAYhsC,EAAM,CACjCwqB,QAAS,CAAA,EACTC,WAAY,CAAA,EACZG,OAAQA,CACT,CAAC,EAGDloB,EAAKupC,cAAcvlB,CAAK,EAEzB,EAOImkB,EAAe,SAAUnoC,GAC5B,IAAIiR,EAAW,EACf,GAAIjR,EAAKomC,aACR,KAAOpmC,GACNiR,GAAYjR,EAAKwpC,UACjBxpC,EAAOA,EAAKomC,aAGd,OAAmB,GAAZn1B,EAAgBA,EAAW,CACnC,EAsDIw4B,EAAW,SAAUzpC,EAAMs/B,EAAUoK,GACpCC,EAAS3pC,EAAKgzB,sBAAsB,EACpCsS,EA/B2B,YAA3B,OAHqBhG,EAkCFA,GA/BHgG,OACZvX,WAAWuR,EAASgG,OAAO,CAAC,EAI7BvX,WAAWuR,EAASgG,MAAM,EA2BjC,OAAIoE,EACIta,SAASua,EAAOD,OAAQ,EAAE,GAAKhuC,EAAO2sC,aAAe9sC,SAASmQ,gBAAgB68B,cAE/EnZ,SAASua,EAAO99B,IAAK,EAAE,GAAKy5B,CACpC,EAiBIsE,EAAc,SAAU5tC,EAAMsjC,GACjC,MAAI8I,EAAAA,CAAAA,EAAW,GAAKqB,CAAAA,EAASztC,EAAKyb,QAAS6nB,EAAU,CAAA,CAAI,EAE1D,EAqBIyJ,EAAmB,SAAUJ,EAAKrJ,GAGhCA,EAAS6J,SAGVT,EAAKC,EAAIpqC,WAAWuY,QAAQ,IAAI,KAIpC4xB,EAAGE,UAAUvvB,OAAOimB,EAAS8J,WAAW,EAGxCL,EAAiBL,EAAIpJ,CAAQ,EAE9B,EAsCIuK,EAAiB,SAAUlB,EAAKrJ,GAG9BA,EAAS6J,SAGVT,EAAKC,EAAIpqC,WAAWuY,QAAQ,IAAI,KAIpC4xB,EAAGE,UAAU3xB,IAAIqoB,EAAS8J,WAAW,EAGrCS,EAAenB,EAAIpJ,CAAQ,EAE5B,EAgNA,OA3KkB,SAAU1gC,EAAUmC,GA8EjB,SAAhB+oC,EAA0B9lB,GAGzB2U,GACHj9B,EAAOquC,qBAAqBpR,CAAO,EAIpCA,EAAUj9B,EAAOu5B,sBAAsB+U,EAAWC,MAAM,CAEzD,CAMoB,SAAhBC,EAA0BlmB,GAGzB2U,GACHj9B,EAAOquC,qBAAqBpR,CAAO,EAIpCA,EAAUj9B,EAAOu5B,sBAAsB,WACtC+S,EAAavxB,CAAQ,EACrBuzB,EAAWC,OAAO,CAClB,CAAC,CAEH,CArGA,IACIE,EAAU1zB,EAAUyrB,EAASvJ,EAAS2G,EADtC0K,EAAa,CAWjBrkB,MAAmB,WAGlBwkB,EAAW5uC,SAASyO,iBAAiBpL,CAAQ,EAG7C6X,EAAW,GAGXlV,MAAMrC,UAAUkrC,QAAQ3tC,KAAK0tC,EAAU,SAAWnuC,GAGjD,IAAIyb,EAAUlc,SAAS+N,eAAe+gC,mBAAmBruC,EAAKgV,KAAKs5B,OAAO,CAAC,CAAC,CAAC,EACxE7yB,GAGLhB,EAAS7Z,KAAK,CACb+rC,IAAK3sC,EACLyb,QAASA,CACV,CAAC,CAED,CAAC,EAGFuwB,EAAavxB,CAAQ,CAEtB,CArCkB,EA0ClBuzB,EAAWC,OAAS,WAGnB,IAjFuBxB,EAAOnJ,EAM3BoJ,EA2ECtK,EAzKU,SAAU3nB,EAAU6oB,GACnC,IAAIl/B,EAAOqW,EAASA,EAASxX,OAAO,GACpC,GAAI2qC,EAAYxpC,EAAMk/B,CAAQ,EAAG,OAAOl/B,EACxC,IAAK,IAAItC,EAAI2Y,EAASxX,OAAS,EAAQ,GAALnB,EAAQA,CAAC,GAC1C,GAAI2rC,EAAShzB,EAAS3Y,GAAG2Z,QAAS6nB,CAAQ,EAAG,OAAO7oB,EAAS3Y,EAE/D,EAmKyB2Y,EAAU6oB,CAAQ,EAGpClB,EASD8D,GAAW9D,EAAO3mB,UAAYyqB,EAAQzqB,UAG1C+wB,EAAWtG,EAAS5C,CAAQ,EAhGEA,EAiGbA,GAjGMmJ,EAiGdrK,KA3FNsK,EAAKD,EAAME,IAAI7xB,QAAQ,IAAI,KAI/B4xB,EAAGE,UAAU3xB,IAAIqoB,EAASuJ,QAAQ,EAClCJ,EAAMhxB,QAAQmxB,UAAU3xB,IAAIqoB,EAASwJ,YAAY,EAGjDe,EAAenB,EAAIpJ,CAAQ,EAG3B0J,EAAU,kBAAmBN,EAAI,CAChCO,KAAMR,EAAME,IACZlxB,QAASgxB,EAAMhxB,QACf6nB,SAAUA,CACX,CAAC,GA+EA4C,EAAU9D,GAfL8D,IACHsG,EAAWtG,EAAS5C,CAAQ,EAC5B4C,EAAU,KAeb,EAwCA8H,EAAWO,QAAU,WAGhBrI,GACHsG,EAAWtG,EAAS5C,CAAQ,EAI7B5jC,EAAO8gB,oBAAoB,SAAUstB,EAAe,CAAA,CAAK,EACrDxK,EAAS+J,QACZ3tC,EAAO8gB,oBAAoB,SAAU0tB,EAAe,CAAA,CAAK,EAQ1D5K,EADA3G,EADAuJ,EADAiI,EADA1zB,EAAW,IAMZ,EA8BA,OAtBC6oB,EA3YW,WACZ,IAAIkL,EAAS,GAOb,OANAjpC,MAAMrC,UAAUkrC,QAAQ3tC,KAAKwD,UAAW,SAAWnE,GAClD,IAAK,IAAIuO,KAAOvO,EAAK,CACpB,GAAI,CAACA,EAAImB,eAAeoN,CAAG,EAAG,OAC9BmgC,EAAOngC,GAAOvO,EAAIuO,EACnB,CACA,CAAC,EACKmgC,CACR,EAkYoBtB,EAAUnoC,GAAW,EAAE,EAGzCipC,EAAWrkB,MAAM,EAGjBqkB,EAAWC,OAAO,EAGlBvuC,EAAOoQ,iBAAiB,SAAUg+B,EAAe,CAAA,CAAK,EAClDxK,EAAS+J,QACZ3tC,EAAOoQ,iBAAiB,SAAUo+B,EAAe,CAAA,CAAK,EAWjDF,CAER,CASA,CAAC,ECraF,SAAUtuC,EAAO+F,GAMf,IAGEgpC,EAHE5C,EAAInsC,EAAOiD,QAAUjD,EAAOgvC,SAAYhvC,EAAOgvC,OAAS,IAqD5D7C,EAAE8C,SAAWF,EAAc,SAAUhS,EAAOmS,EAAa9qC,EAAU+qC,GAIjE,IAAIC,EAGFC,EAAY,EAYd,SAASC,IACP,IAAIlwB,EAAOnf,KACTsvC,EAAU,CAAC,IAAIzlC,KAASulC,EACxBx6B,EAAOtQ,UAGT,SAASoJ,IACP0hC,EAAY,CAAC,IAAIvlC,KACjB1F,EAASnD,MAAOme,EAAMvK,CAAK,CAC7B,CAQKs6B,GAAiB,CAACC,GAGrBzhC,EAAK,EAIPyhC,GAAclS,aAAckS,CAAW,EAElCD,IAAkBppC,GAAuBg3B,EAAVwS,EAGlC5hC,EAAK,EAEqB,CAAA,IAAhBuhC,IAUVE,EAAavvB,WAAYsvB,EA5B3B,WACEC,EAAarpC,CACf,EA0BmD4H,EAAMwhC,IAAkBppC,EAAYg3B,EAAQwS,EAAUxS,CAAM,EAEjH,CAUA,MA9D4B,WAAvB,OAAOmS,IACVC,EAAgB/qC,EAChBA,EAAW8qC,EACXA,EAAcnpC,GAsDXomC,EAAE9kC,OACLioC,EAAQjoC,KAAOjD,EAASiD,KAAOjD,EAASiD,MAAQ8kC,EAAE9kC,IAAI,IAIjDioC,CACT,EAmDAnD,EAAEqD,SAAW,SAAUzS,EAAO0S,EAAUrrC,GACtC,OAAOA,IAAa2B,EAChBgpC,EAAahS,EAAO0S,EAAU,CAAA,CAAM,EACpCV,EAAahS,EAAO34B,EAAuB,CAAA,IAAbqrC,CAAmB,CACvD,CAED,EAAExvC,IAAI,ECjPN,SAAWksC,GAEV,aAEAA,EAAE/oC,GAAGssC,QAAU,SAAUrqC,GACvB,IAOM1C,EAEAojB,EATF6d,EAAW,CACb+L,eAAgB,KAChBC,OAAQ,IACV,EAeA,OAbI/vC,SAAS+N,eAAe,gBAAgB,IAEtCjL,EAAO9C,SAAS8C,MAAQ9C,SAASiO,qBAAqB,MAAM,EAAE,IAE9DiY,EAAMlmB,SAAS0C,cAAc,KAAK,GAClC0O,UAAY,8QAChBtO,EAAKC,YAAYmjB,EAAI/Y,WAAW,EAAE,GAG/B3H,GACH8mC,EAAE/mC,OAAQw+B,EAAUv+B,CAAQ,EAGvBpF,KAAKkE,KAAK,WACf,IAAI2O,EAAY,CACd,kCACA,6BACA,sCACA,oDACA,SACA,SAOE+8B,GAJAjM,EAAS+L,gBACX78B,EAAU5R,KAAK0iC,EAAS+L,cAAc,EAGvB,kBAMbG,GAJDlM,EAASgM,SACVC,EAAaA,EAAa,KAAOjM,EAASgM,QAG3BzD,EAAElsC,IAAI,EAAE2Q,KAAKkC,EAAUzE,KAAK,GAAG,CAAC,IAEjDyhC,GAAaA,EADAA,EAAW96B,IAAI,eAAe,GACnBA,IAAI66B,CAAU,GAE3B1rC,KAAK,SAASyf,GACvB,IAYImsB,EAZAC,EAAQ7D,EAAElsC,IAAI,EACoB,EAAnC+vC,EAAMv0B,QAAQo0B,CAAU,EAAEtsC,QAGM,UAA/BtD,KAAKgwC,QAAQvoC,YAAY,GAAiBsoC,EAAMx7B,OAAO,QAAQ,EAAEjR,QAAUysC,EAAMx7B,OAAO,4BAA4B,EAAEjR,SACpHysC,EAAM9rB,IAAI,QAAQ,GAAM8rB,EAAM9rB,IAAI,OAAO,GAAO4nB,CAAAA,MAAMkE,EAAM59B,KAAK,QAAQ,CAAC,GAAK05B,CAAAA,MAAMkE,EAAM59B,KAAK,OAAO,CAAC,IAE5G49B,EAAM59B,KAAK,SAAU,CAAC,EACtB49B,EAAM59B,KAAK,QAAS,EAAE,GAIpB29B,GAF0C,WAA/B9vC,KAAKgwC,QAAQvoC,YAAY,GAAmBsoC,EAAM59B,KAAK,QAAQ,GAAK,CAAC05B,MAAMpY,SAASsc,EAAM59B,KAAK,QAAQ,EAAG,EAAE,CAAC,EAAOshB,SAASsc,EAAM59B,KAAK,QAAQ,EAAG,EAAE,EAAI49B,EAAMvc,OAAO,IACxKqY,MAAMpY,SAASsc,EAAM59B,KAAK,OAAO,EAAG,EAAE,CAAC,EAAwC49B,EAAMhe,MAAM,EAAhD0B,SAASsc,EAAM59B,KAAK,OAAO,EAAG,EAAE,GAEpF49B,EAAM59B,KAAK,IAAI,GAEjB49B,EAAM59B,KAAK,KADG,SAAWwR,CACD,EAE1BosB,EAAMzoB,KAAK,+CAA+C,EAAE/S,OAAO,4BAA4B,EAAE0P,IAAI,cAA8B,IAAd6rB,EAAmB,GAAG,EAC3IC,EAAMxS,WAAW,QAAQ,EAAEA,WAAW,OAAO,EAC/C,CAAC,CACH,CAAC,CACH,CAED,EAAGx9B,OAAOiD,QAAUjD,OAAOkwC,KAAM,EC3ElC/D,EAAE,WAEA,IASIgE,EAAYC,EAAYC,EAAaC,EATrCC,EAAOpE,EAAE,oCAAoC,EAC7CqE,EAAUrE,EAAE,+BAA+B,EAC3CsE,EAAUtE,EAAE,8BAA8B,EAC1CuE,EAAOvE,EAAE,gBAAgB,EACzBwE,EAAQxE,EAAE,2BAA2B,EACrCyE,EAAWzE,EAAE,+BAA+B,EAC5C0E,EAAS1E,EAAE,4BAA4B,EACvC2E,EAAU3E,EAAE,sCAAsC,EAOtD,SAAS4E,IAOP,SAASC,EAAS5uC,EAAGtC,GACnBswC,GAActwC,EACdqwC,GAAc,EACdG,EAAYpvC,KAAKkvC,CAAU,CAC7B,CATAA,EADAD,EAAa,EAEbE,EAAc,IACdC,EAAc,GAkBdE,EAAQ11B,SAAS,EAAEm2B,WAAWD,CAAQ,EACtCP,EAAQ31B,SAAS,EAAE3W,KAAK,WATxB,IAAqB/D,GACfqF,GADerF,EAS0B+rC,EAAElsC,IAAI,GARnCwF,MAAM,GAChBye,IAAI,aAAa,QAAQ,EAC/BssB,EAAQzgB,OAAOtqB,CAAK,EACpBurC,EAAS,EAAGvrC,EAAMwrC,WAAW,CAAC,EAC9BxrC,EAAMkY,OAAO,CAIwC,CAAC,CAC1D,CAEAozB,EAAa,EAEb,IAIIG,EAAgBC,EAAmBC,EAAetW,EAJlDuW,EAAWlF,EAAGnsC,MAAO,EAAEgyB,MAAM,EAE7Bsf,EAAiBD,EAAW,IAAM,EAAIA,EAAW,KAAO,EAAIA,EAAW,KAAO,EAAI,EAItF,SAAS19B,IAIP,IAAI49B,GAFJF,EAAWlF,EAAGnsC,MAAO,EAAEgyB,MAAM,GAEE,IAAM,EAAIqf,EAAW,KAAO,EAAIA,EAAW,KAAO,EAAI,EAElFE,IAAkBD,GAAgBP,EAAa,EAElDO,EAAiBC,EAGjBJ,EAAoBX,EAAQ11B,SAAS,EAAEvX,OAEvC2tC,EAA2BR,EAAKc,WAAW,GACG,IAAjBb,EAAMptC,OAAeotC,EAAMM,WAAW,CAAA,CAAI,EAAI,GAC9CJ,EAAOI,WAAW,CAAA,CAAI,GACD,IAAnBH,EAAQvtC,OAAeutC,EAAQG,WAAW,CAAA,CAAI,EAAI,IAClDE,IAAsBb,EAAY/sC,OAASgtC,EAAKU,WAAW,CAAA,CAAI,EAAI,GAClGG,EAAgBd,EAAYa,EAAoB,GAG5BD,EAAhBE,GACFZ,EAAQ11B,SAAS,EAAEpW,KAAK,EAAE6rB,UAAUkgB,CAAO,EAC3CU,EAAAA,EACAx9B,EAAM,GAEGu9B,GAAkBC,IAAsBb,EAAY/sC,OAAS,EAAEgtC,EAAKU,WAAW,CAAA,CAAI,EAAE,GAAKX,EAAYa,KAC/GV,EAAQ31B,SAAS,EAAEtW,MAAM,EAAE8rB,SAASkgB,CAAO,EAC3CW,GAAqB,EACrBx9B,EAAM,GAGR48B,EAAKn+B,KAAK,QAAS+9B,EAAagB,CAAiB,EAC7CA,IAAsBhB,EACxBI,EAAKhS,SAAS,QAAQ,EACjBgS,EAAK3R,YAAY,QAAQ,CAClC,CAGAuN,EAAEnsC,MAAM,EAAEyxC,OAAO,WACf99B,EAAM,CACR,CAAC,EAED48B,EAAKroB,GAAG,QAAS,WACfuoB,EAAQ5R,YAAY,QAAQ,EAC5BsN,EAAElsC,IAAI,EAAE4+B,YAAY,OAAO,EAC3B3B,aAAapC,CAAK,CACpB,CAAC,EAED2V,EAAQvoB,GAAG,aAAc,WAEvB4S,EAAQjb,WAAW,WACjB4wB,EAAQlS,SAAS,QAAQ,EACzB4N,EAAE,qBAAqB,EAAEvN,YAAY,OAAO,CAC9C,EAAGyR,CAAW,CAChB,CAAC,EAAEnoB,GAAG,aAAc,WAElBgV,aAAapC,CAAK,CACpB,CAAC,EAGsB,IAApB8V,EAASrtC,QAELqtC,EAAS,GAAG/V,UAAyC,IAA7B+V,EAAS,GAAGc,aAMpC/9B,EAAM,EAJTi9B,EAASxoB,IAAI,aAAczU,CAAK,CAMtC,CAAC,EC5HC,SAAUjU,GACY,YAAlB,OAAOssC,QAAyBA,OAAOC,IAE1CD,OAAO,CAAC,UAAWtsC,CAAO,EACI,UAAnB,OAAOE,QAElBF,EAAQiyC,QAAQ,QAAQ,CAAC,EAGzBjyC,EAAQM,OAAOiD,QAAUjD,OAAOkwC,KAAK,CAErC,EAAE,SAAS/D,GAgCM,SAAhByF,KAaW,SAATC,EAAkBvsC,EAAMwsC,GACxBC,EAAIC,GAAG9pB,GA1BJ,MA0BY5iB,EAAO2sC,EAAUH,CAAC,CACnC,CACS,SAATI,EAAkB5hC,EAAWggB,EAAUjB,EAAM/N,GAC3C,IAAItS,EAAKnP,SAAS0C,cAAc,KAAK,EAarC,OAZAyM,EAAGsB,UAAY,OAAOA,EACnB+e,IACDrgB,EAAGiC,UAAYoe,GAEb/N,EAKMgP,GACRA,EAAS1tB,YAAYoM,CAAE,GALvBA,EAAKm9B,EAAEn9B,CAAE,EACNshB,GACDthB,EAAGshB,SAASA,CAAQ,GAKjBthB,CACT,CACc,SAAdmjC,EAAuBllC,EAAGuV,GACxBuvB,EAAIC,GAAGjS,eA7CJ,MA6CwB9yB,EAAGuV,CAAI,EAE/BuvB,EAAIK,GAAGC,YAERplC,EAAIA,EAAEqlC,OAAO,CAAC,EAAE5qC,YAAY,EAAIuF,EAAErM,MAAM,CAAC,EACtCmxC,EAAIK,GAAGC,UAAUplC,KAClB8kC,EAAIK,GAAGC,UAAUplC,GAAGhM,MAAM8wC,EAAK5F,EAAErmC,QAAQ0c,CAAI,EAAIA,EAAO,CAACA,EAAK,CAGpE,CACe,SAAf+vB,EAAwB3wC,GAKtB,OAJGA,IAAS4wC,GAAmBT,EAAIU,aAAaC,WAC9CX,EAAIU,aAAaC,SAAWvG,EAAG4F,EAAIK,GAAGO,YAAYxsC,QAAQ,UAAW4rC,EAAIK,GAAGQ,MAAO,CAAE,EACrFJ,EAAiB5wC,GAEZmwC,EAAIU,aAAaC,QAC1B,CAEiB,SAAjBG,IACM1G,EAAE2G,cAAcC,YAElBhB,EAAM,IAAIH,GACNvuC,KAAK,EACT8oC,EAAE2G,cAAcC,SAAWhB,EAE/B,CA61ByB,SAAzBiB,IACKC,IACDC,EAAmB/iB,MAAO8iB,EAAmB1U,SAAS4U,CAAY,CAAE,EAAErjB,OAAO,EAC7EmjB,EAAqB,KAEzB,CA8DoB,SAApBG,IACKC,GACDlH,EAAEtsC,SAAS2lB,IAAI,EAAEoZ,YAAYyU,CAAQ,CAEzC,CACsB,SAAtBC,IACEF,EAAkB,EACfrB,EAAIwB,KACLxB,EAAIwB,IAAIpO,MAAM,CAElB,CAv/BF,IAkBI4M,EAGFyB,EAEAC,EACAC,EACAC,EACAnB,EA64BAW,EACAD,EACAD,EAmEAI,EA5+BEO,EAAc,QAChBC,EAAqB,cAGrBC,EAAqB,cACrBC,EAAa,OAGb9B,EAAW,OACX+B,EAAc,YACdC,EAAiB,eACjBC,EAAsB,oBAStBC,EAAQ,CAAC,CAAEn0C,OAAa,OAExBo0C,EAAUjI,EAAEnsC,MAAM,EAg5BhBq0C,GA1IJlI,EAAE2G,cAAgB,CAChBC,SAAU,KACVvsC,MAzrBForC,EAAcpuC,UAAY,CAExBE,YAAakuC,EAMbvuC,KAAM,WACJ,IAAIixC,EAAaC,UAAUD,WAC3BvC,EAAIyC,QAAUzC,EAAI0C,MAAQ50C,SAAS60C,KAAO,CAAC70C,SAASuQ,iBACpD2hC,EAAI4C,UAAY,YAAc1mC,KAAKqmC,CAAU,EAC7CvC,EAAI6C,MAAQ,qBAAuB3mC,KAAKqmC,CAAU,EAClDvC,EAAI8C,mBAnCgB,WACpB,IAAIhU,EAAIhhC,SAAS0C,cAAc,GAAG,EAAEwhB,MAClC5H,EAAI,CAAC,KAAK,IAAI,MAAM,UAEtB,GAAwBpW,KAAAA,IAApB86B,EAAc,WAChB,MAAO,CAAA,EAGT,KAAO1kB,EAAE5Y,QACP,GAAI4Y,EAAEzR,IAAI,EAAI,eAAgBm2B,EAC5B,MAAO,CAAA,EAIX,MAAO,CAAA,CACT,EAoB+C,EAI7CkR,EAAI+C,eAAkB/C,EAAI4C,WAAa5C,EAAI6C,OAAS,8EAA8E3mC,KAAKsmC,UAAUQ,SAAS,EAC1JtB,EAAYtH,EAAEtsC,QAAQ,EAEtBkyC,EAAIiD,YAAc,EACpB,EAMAjN,KAAM,SAASvlB,GAIb,GAAkB,CAAA,IAAfA,EAAKyyB,MAAiB,CAEvBlD,EAAIhF,MAAQvqB,EAAKuqB,MAAMppC,QAAQ,EAE/BouC,EAAI12B,MAAQ,EAGZ,IAFA,IACE/a,EADEysC,EAAQvqB,EAAKuqB,MAEb3qC,EAAI,EAAGA,EAAI2qC,EAAMxpC,OAAQnB,CAAC,GAK5B,IAFE9B,GAFFA,EAAOysC,EAAM3qC,IACLqnC,OACCnpC,EAAK0O,GAAG,GAEd1O,KAASkiB,EAAKxT,GAAG,GAAI,CACtB+iC,EAAI12B,MAAQjZ,EACZ,KACF,CAEJ,MACE2vC,EAAIhF,MAAQZ,EAAErmC,QAAQ0c,EAAKuqB,KAAK,EAAIvqB,EAAKuqB,MAAQ,CAACvqB,EAAKuqB,OACvDgF,EAAI12B,MAAQmH,EAAKnH,OAAS,EAI5B,GAAG02B,CAAAA,EAAImD,OAAP,CAKAnD,EAAI5pB,MAAQ,GACZwrB,EAAe,GACZnxB,EAAK2yB,QAAU3yB,EAAK2yB,OAAO5xC,OAC5BwuC,EAAIC,GAAKxvB,EAAK2yB,OAAO1wC,GAAG,CAAC,EAEzBstC,EAAIC,GAAKyB,EAGRjxB,EAAK7T,KACFojC,EAAIiD,YAAYxyB,EAAK7T,OACvBojC,EAAIiD,YAAYxyB,EAAK7T,KAAO,IAE9BojC,EAAIU,aAAeV,EAAIiD,YAAYxyB,EAAK7T,MAExCojC,EAAIU,aAAe,GAKrBV,EAAIK,GAAKjG,EAAE/mC,OAAO,CAAA,EAAM,GAAI+mC,EAAE2G,cAActF,SAAUhrB,CAAK,EAC3DuvB,EAAIqD,gBAA6C,SAA3BrD,EAAIK,GAAGgD,gBAA6B,CAACrD,EAAI+C,eAAiB/C,EAAIK,GAAGgD,gBAEpFrD,EAAIK,GAAGiD,QACRtD,EAAIK,GAAGkD,oBAAsB,CAAA,EAC7BvD,EAAIK,GAAGmD,eAAiB,CAAA,EACxBxD,EAAIK,GAAGoD,aAAe,CAAA,EACtBzD,EAAIK,GAAGqD,gBAAkB,CAAA,GAMvB1D,EAAI2D,YAGN3D,EAAI2D,UAAYxD,EAAO,IAAI,EAAEhqB,GAAG,QAAQ+pB,EAAU,WAChDF,EAAI4D,MAAM,CACZ,CAAC,EAED5D,EAAIxqB,KAAO2qB,EAAO,MAAM,EAAE9/B,KAAK,WAAY,CAAC,CAAC,EAAE8V,GAAG,QAAQ+pB,EAAU,SAAShlC,GACxE8kC,EAAI6D,cAAc3oC,EAAEvH,MAAM,GAC3BqsC,EAAI4D,MAAM,CAEd,CAAC,EAED5D,EAAIxgB,UAAY2gB,EAAO,YAAaH,EAAIxqB,IAAI,GAG9CwqB,EAAI8D,iBAAmB3D,EAAO,SAAS,EACpCH,EAAIK,GAAG0D,YACR/D,EAAI+D,UAAY5D,EAAO,YAAaH,EAAIxgB,UAAWwgB,EAAIK,GAAG2D,QAAQ,GAKpE,IAAIC,EAAU7J,EAAE2G,cAAckD,QAC9B,IAAI5zC,EAAI,EAAGA,EAAI4zC,EAAQzyC,OAAQnB,CAAC,GAAI,CAClC,IACA6F,GAAIA,EADI+tC,EAAQ5zC,IACVkwC,OAAO,CAAC,EAAExwB,YAAY,EAAI7Z,EAAErH,MAAM,CAAC,EACzCmxC,EAAI,OAAO9pC,GAAGlH,KAAKgxC,CAAG,CACxB,CACAI,EAAY,YAAY,EAGrBJ,EAAIK,GAAGoD,eAEJzD,EAAIK,GAAG6D,gBAGTpE,EAAOiC,EAAoB,SAAS7mC,EAAGipC,EAAU3wB,EAAQjlB,GACvDilB,EAAO4wB,kBAAoB5D,EAAajyC,EAAKsB,IAAI,CACnD,CAAC,EACD+xC,GAAgB,qBALhB5B,EAAIxqB,KAAKwI,OAAQwiB,EAAa,CAAE,GASjCR,EAAIK,GAAGgE,WACRzC,GAAgB,kBAKf5B,EAAIqD,gBACLrD,EAAIxqB,KAAKrD,IAAI,CACXsX,SAAUuW,EAAIK,GAAG1W,UACjBD,UAAW,SACXC,UAAWqW,EAAIK,GAAG1W,SACpB,CAAC,EAEDqW,EAAIxqB,KAAKrD,IAAI,CACX/T,IAAKikC,EAAQ3b,UAAU,EACvBxG,SAAU,UACZ,CAAC,EAEuB,CAAA,IAAtB8f,EAAIK,GAAGiE,aAA+C,SAAtBtE,EAAIK,GAAGiE,YAA0BtE,EAAIqD,kBACvErD,EAAI2D,UAAUxxB,IAAI,CAChBuP,OAAQggB,EAAUhgB,OAAO,EACzBxB,SAAU,UACZ,CAAC,EAKA8f,EAAIK,GAAGqD,iBAERhC,EAAUvrB,GAAG,QAAU+pB,EAAU,SAAShlC,GACvB,KAAdA,EAAEggB,SACH8kB,EAAI4D,MAAM,CAEd,CAAC,EAGHvB,EAAQlsB,GAAG,SAAW+pB,EAAU,WAC9BF,EAAIuE,WAAW,CACjB,CAAC,EAGGvE,EAAIK,GAAGkD,sBACT3B,GAAgB,oBAGfA,GACD5B,EAAIxqB,KAAKgX,SAASoV,CAAY,EAIhC,IAAI4C,EAAexE,EAAIyE,GAAKpC,EAAQ3gB,OAAO,EAGvCgjB,EAAe,GAsBfC,GApBA3E,EAAIqD,iBACGrD,EAAI4E,cAAcJ,CAAY,IACzB1V,EAAIkR,EAAI6E,kBAAkB,KAE1BH,EAAaI,YAAchW,GAKxCkR,EAAIqD,kBACDrD,EAAI+E,MAIN3K,EAAE,YAAY,EAAEjoB,IAAI,WAAY,QAAQ,EAHxCuyB,EAAajb,SAAW,UASTuW,EAAIK,GAAG2E,WA0C1B,OAzCGhF,EAAI+E,QACLJ,GAAgB,YAEfA,GACD3E,EAAIiF,eAAgBN,CAAa,EAInC3E,EAAIkF,eAAe,EAEnB9E,EAAY,eAAe,EAG3BhG,EAAE,MAAM,EAAEjoB,IAAIuyB,CAAY,EAG1B1E,EAAI2D,UAAUn6B,IAAIw2B,EAAIxqB,IAAI,EAAEgJ,UAAWwhB,EAAIK,GAAG7hB,WAAa4b,EAAEtsC,SAAS2lB,IAAI,CAAE,EAG5EusB,EAAImF,eAAiBr3C,SAAS6V,cAG9BmK,WAAW,WAENkyB,EAAIh2B,SACLg2B,EAAIiF,eAAehD,CAAW,EAC9BjC,EAAIoF,UAAU,GAGdpF,EAAI2D,UAAUnX,SAASyV,CAAW,EAIpCP,EAAUvrB,GAAG,UAAY+pB,EAAUF,EAAIqF,UAAU,CAEnD,EAAG,EAAE,EAELrF,EAAImD,OAAS,CAAA,EACbnD,EAAIuE,WAAWC,CAAY,EAC3BpE,EAAY4B,CAAU,EAEfvxB,CAnMP,CAFEuvB,EAAIkF,eAAe,CAsMvB,EAKAtB,MAAO,WACD5D,EAAImD,SACR/C,EAAY0B,CAAkB,EAE9B9B,EAAImD,OAAS,CAAA,EAEVnD,EAAIK,GAAGiF,cAAgB,CAACtF,EAAIyC,SAAWzC,EAAI8C,oBAC5C9C,EAAIiF,eAAe/C,CAAc,EACjCp0B,WAAW,WACTkyB,EAAIuF,OAAO,CACb,EAAGvF,EAAIK,GAAGiF,YAAY,GAEtBtF,EAAIuF,OAAO,EAEf,EAKAA,OAAQ,WACNnF,EAAYyB,CAAW,EAEvB,IAAI2D,EAAkBtD,EAAiB,IAAMD,EAAc,IAE3DjC,EAAI2D,UAAU5lB,OAAO,EACrBiiB,EAAIxqB,KAAKuI,OAAO,EAChBiiB,EAAIxgB,UAAUrb,MAAM,EAEjB67B,EAAIK,GAAG2E,YACRQ,GAAmBxF,EAAIK,GAAG2E,UAAY,KAGxChF,EAAIyF,oBAAoBD,CAAe,EAEpCxF,EAAIqD,kBACDqB,EAAe,CAACI,YAAa,EAAE,EAChC9E,EAAI+E,MACL3K,EAAE,YAAY,EAAEjoB,IAAI,WAAY,EAAE,EAElCuyB,EAAajb,SAAW,GAE1B2Q,EAAE,MAAM,EAAEjoB,IAAIuyB,CAAY,GAG5BhD,EAAUlrB,IAAI,oBAAkC0pB,CAAQ,EACxDF,EAAIC,GAAGzpB,IAAI0pB,CAAQ,EAGnBF,EAAIxqB,KAAKnV,KAAK,QAAS,UAAU,EAAEorB,WAAW,OAAO,EACrDuU,EAAI2D,UAAUtjC,KAAK,QAAS,QAAQ,EACpC2/B,EAAIxgB,UAAUnf,KAAK,QAAS,eAAe,EAGxC2/B,CAAAA,EAAIK,GAAGoD,cACRzD,EAAIK,GAAG6D,gBAA0D,CAAA,IAAxClE,EAAIU,aAAaV,EAAI0F,SAAS71C,OACpDmwC,EAAIU,aAAaC,UAClBX,EAAIU,aAAaC,SAAS5iB,OAAO,EAIlCiiB,EAAIK,GAAGsF,eAAiB3F,EAAImF,gBAC7B/K,EAAE4F,EAAImF,cAAc,EAAEzhC,MAAM,EAE9Bs8B,EAAI0F,SAAW,KACf1F,EAAIh2B,QAAU,KACdg2B,EAAIU,aAAe,KACnBV,EAAI4F,WAAa,EAEjBxF,EAzakB,YAyaW,CAC/B,EAEAmE,WAAY,SAASsB,GAEnB,IAGMnkB,EAHHse,EAAI6C,OAEDiD,EAAYh4C,SAASmQ,gBAAgB8nC,YAAc93C,OAAOwxC,WAC1D/d,EAASzzB,OAAO2sC,YAAckL,EAClC9F,EAAIxqB,KAAKrD,IAAI,SAAUuP,CAAM,EAC7Bse,EAAIyE,GAAK/iB,GAETse,EAAIyE,GAAKoB,GAAaxD,EAAQ3gB,OAAO,EAGnCse,EAAIqD,iBACNrD,EAAIxqB,KAAKrD,IAAI,SAAU6tB,EAAIyE,EAAE,EAG/BrE,EAAY,QAAQ,CAEtB,EAKA8E,eAAgB,WACd,IAAI32C,EAAOyxC,EAAIhF,MAAMgF,EAAI12B,OAYrBzZ,GATJmwC,EAAI8D,iBAAiB/lB,OAAO,EAEzBiiB,EAAIh2B,SACLg2B,EAAIh2B,QAAQ+T,OAAO,GAGnBxvB,EADEA,EAAKmpC,OAIEnpC,EAHFyxC,EAAIgG,QAAShG,EAAI12B,KAAM,GAGhBzZ,MA0BZo2C,GAxBJ7F,EAAY,eAAgB,CAACJ,EAAI0F,SAAW1F,EAAI0F,SAAS71C,KAAO,GAAIA,EAAK,EAIzEmwC,EAAI0F,SAAWn3C,EAEXyxC,EAAIU,aAAa7wC,KACfq2C,EAASlG,CAAAA,CAAAA,EAAIK,GAAGxwC,IAAQmwC,EAAIK,GAAGxwC,GAAMq2C,OAGzC9F,EAAY,mBAAoB8F,CAAM,EAGpClG,EAAIU,aAAa7wC,GADhBq2C,CAAAA,GACwB9L,EAAE8L,CAAM,GAOlCvE,GAAoBA,IAAqBpzC,EAAKsB,MAC/CmwC,EAAIxgB,UAAUqN,YAAY,OAAO8U,EAAiB,SAAS,EAG5C3B,EAAI,MAAQnwC,EAAK0wC,OAAO,CAAC,EAAExwB,YAAY,EAAIlgB,EAAKhB,MAAM,CAAC,GAAGN,EAAMyxC,EAAIU,aAAa7wC,EAAK,GACvGmwC,EAAImG,cAAcF,EAAYp2C,CAAI,EAElCtB,EAAK63C,UAAY,CAAA,EAEjBhG,EA3ea,SA2ea7xC,CAAI,EAC9BozC,EAAmBpzC,EAAKsB,KAGxBmwC,EAAIxgB,UAAUvB,QAAQ+hB,EAAI8D,gBAAgB,EAE1C1D,EAAY,aAAa,CAC3B,EAMA+F,cAAe,SAASF,EAAYp2C,IAClCmwC,EAAIh2B,QAAUi8B,GAGTjG,EAAIK,GAAGoD,cAAgBzD,EAAIK,GAAG6D,gBACJ,CAAA,IAA3BlE,EAAIU,aAAa7wC,GAEbmwC,EAAIh2B,QAAQnL,KAAK,YAAY,EAAErN,QACjCwuC,EAAIh2B,QAAQgU,OAAOwiB,EAAa,CAAC,EAGnCR,EAAIh2B,QAAUi8B,EAGhBjG,EAAIh2B,QAAU,GAGhBo2B,EA5gBoB,cA4gBW,EAC/BJ,EAAIxgB,UAAUgN,SAAS,OAAO38B,EAAK,SAAS,EAE5CmwC,EAAI8D,iBAAiB9lB,OAAOgiB,EAAIh2B,OAAO,CACzC,EAOAg8B,QAAS,SAAS18B,GAChB,IACEzZ,EADEtB,EAAOyxC,EAAIhF,MAAM1xB,GAUrB,IAAG/a,EAPAA,EAAK2vC,QACC,CAAEjhC,GAAIm9B,EAAE7rC,CAAI,CAAE,GAErBsB,EAAOtB,EAAKsB,KACL,CAAE4gB,KAAMliB,EAAMuB,IAAKvB,EAAKuB,GAAI,IAG7BmN,GAAI,CAIV,IAHA,IAAImZ,EAAQ4pB,EAAI5pB,MAGR/lB,EAAI,EAAGA,EAAI+lB,EAAM5kB,OAAQnB,CAAC,GAChC,GAAI9B,EAAK0O,GAAGiwB,SAAS,OAAO9W,EAAM/lB,EAAE,EAAI,CACtCR,EAAOumB,EAAM/lB,GACb,KACF,CAGF9B,EAAKuB,IAAMvB,EAAK0O,GAAGoD,KAAK,cAAc,EAClC9R,EAAKuB,MACPvB,EAAKuB,IAAMvB,EAAK0O,GAAGoD,KAAK,MAAM,EAElC,CAQA,OANA9R,EAAKsB,KAAOA,GAAQmwC,EAAIK,GAAGxwC,MAAQ,SACnCtB,EAAK+a,MAAQA,EACb/a,EAAKmpC,OAAS,CAAA,EACdsI,EAAIhF,MAAM1xB,GAAS/a,EACnB6xC,EAAY,eAAgB7xC,CAAI,EAEzByxC,EAAIhF,MAAM1xB,EACnB,EAMA+8B,SAAU,SAASppC,EAAI3J,GACN,SAAXgzC,EAAoBprC,GACtBA,EAAEqrC,MAAQr4C,KACV8xC,EAAIwG,WAAWtrC,EAAG+B,EAAI3J,CAAO,CAC/B,CAHA,IASImzC,EAAQ,uBAJRnzC,EAAAA,GACQ,IAIJ8vC,OAASnmC,EAEd3J,EAAQ0nC,OACT1nC,EAAQ4vC,MAAQ,CAAA,EAChBjmC,EAAGuZ,IAAIiwB,CAAK,EAAEtwB,GAAGswB,EAAOH,CAAQ,IAEhChzC,EAAQ4vC,MAAQ,CAAA,EACb5vC,EAAQ8lC,SACTn8B,EAAGuZ,IAAIiwB,CAAK,EAAEtwB,GAAGswB,EAAOnzC,EAAQ8lC,SAAWkN,CAAQ,GAEnDhzC,EAAQ0nC,MAAQ/9B,GACbuZ,IAAIiwB,CAAK,EAAEtwB,GAAGswB,EAAOH,CAAQ,EAGtC,EACAE,WAAY,SAAStrC,EAAG+B,EAAI3J,GAC1B,IAAIozC,GAAgC1yC,KAAAA,IAArBV,EAAQozC,SAAyBpzC,EAAmB8mC,EAAE2G,cAActF,UAA3BiL,SAGxD,GAAIA,GAAY,EAAc,IAAZxrC,EAAE6gB,OAAe7gB,EAAEsf,SAAWtf,EAAEyf,SAAWzf,EAAEkf,QAAUlf,EAAE4f,UAA3E,CAII6rB,GAAkC3yC,KAAAA,IAAtBV,EAAQqzC,UAA0BrzC,EAAoB8mC,EAAE2G,cAActF,UAA5BkL,UAE1D,GAAGA,EACD,GAAGvM,EAAEhsC,WAAWu4C,CAAS,GACvB,GAAI,CAACA,EAAU33C,KAAKgxC,CAAG,EACrB,MAAO,CAAA,CACT,MAEA,GAAIqC,EAAQpiB,MAAM,EAAI0mB,EACpB,MAAO,CAAA,EAKVzrC,EAAErL,OACHqL,EAAE8b,eAAe,EAGdgpB,EAAImD,SACLjoC,EAAE4b,gBAAgB,EAItBxjB,EAAQ2J,GAAKm9B,EAAEl/B,EAAEqrC,KAAK,EACnBjzC,EAAQ8lC,WACT9lC,EAAQ0nC,MAAQ/9B,EAAG4B,KAAKvL,EAAQ8lC,QAAQ,GAE1C4G,EAAIhK,KAAK1iC,CAAO,CA7BhB,CA8BF,EAMAszC,aAAc,SAASzT,EAAQ1iC,GAE7B,IASMggB,EATHuvB,EAAI+D,YACFtC,IAAgBtO,GACjB6M,EAAIxgB,UAAUqN,YAAY,SAAS4U,CAAW,EAO5ChxB,EAAO,CACT0iB,OAAQA,EACR1iC,KALAA,EADEA,GAAmB,YAAX0iC,EAMJ1iC,EALCuvC,EAAIK,GAAG2D,QAMhB,EAEA5D,EAAY,eAAgB3vB,CAAI,EAEhC0iB,EAAS1iB,EAAK0iB,OAGd6M,EAAI+D,UAAUzmB,KAFd7sB,EAAOggB,EAAKhgB,IAEW,EAEvBuvC,EAAI+D,UAAUllC,KAAK,GAAG,EAAEsX,GAAG,QAAS,SAASjb,GAC3CA,EAAE6b,yBAAyB,CAC7B,CAAC,EAEDipB,EAAIxgB,UAAUgN,SAAS,SAAS2G,CAAM,EACtCsO,EAActO,EAElB,EAQA0Q,cAAe,SAASlwC,GAEtB,GAAGymC,CAAAA,EAAEzmC,CAAM,EAAEu5B,SAASiV,CAAmB,EAAzC,CAIA,IAAI0E,EAAiB7G,EAAIK,GAAGkD,oBACxBuD,EAAY9G,EAAIK,GAAGmD,eAEvB,GAAGqD,GAAkBC,EACnB,MAAO,CAAA,EAIP,GAAG,CAAC9G,EAAIh2B,SAAWowB,EAAEzmC,CAAM,EAAEu5B,SAAS,WAAW,GAAM8S,EAAI+D,WAAapwC,IAAWqsC,EAAI+D,UAAU,GAC/F,MAAO,CAAA,EAIT,GAAMpwC,IAAWqsC,EAAIh2B,QAAQ,IAAOowB,EAAEtiC,SAASkoC,EAAIh2B,QAAQ,GAAIrW,CAAM,GAO9D,GAAGkzC,EACR,MAAO,CAAA,CACT,MARE,GAAGC,GAEG1M,EAAEtiC,SAAShK,SAAU6F,CAAM,EAC7B,MAAO,CAAA,EAQf,MAAO,CAAA,CA3BP,CA4BF,EACAsxC,eAAgB,SAAS8B,GACvB/G,EAAI2D,UAAUnX,SAASua,CAAK,EAC5B/G,EAAIxqB,KAAKgX,SAASua,CAAK,CACzB,EACAtB,oBAAqB,SAASsB,GAC5B74C,KAAKy1C,UAAU9W,YAAYka,CAAK,EAChC/G,EAAIxqB,KAAKqX,YAAYka,CAAK,CAC5B,EACAnC,cAAe,SAASiB,GACtB,OAAW7F,EAAI+E,MAAQrD,EAAUhgB,OAAO,EAAI5zB,SAAS2lB,KAAKonB,eAAiBgL,GAAaxD,EAAQ3gB,OAAO,EACzG,EACA0jB,UAAW,YACRpF,EAAIK,GAAG38B,MAAQs8B,EAAIh2B,QAAQnL,KAAKmhC,EAAIK,GAAG38B,KAAK,EAAEhR,GAAG,CAAC,EAAIstC,EAAIxqB,MAAM9R,MAAM,CACzE,EACA2hC,WAAY,SAASnqC,GACnB,GAAIA,EAAEvH,SAAWqsC,EAAIxqB,KAAK,IAAM,CAAC4kB,EAAEtiC,SAASkoC,EAAIxqB,KAAK,GAAIta,EAAEvH,MAAM,EAE/D,OADAqsC,EAAIoF,UAAU,EACP,CAAA,CAEX,EACA4B,aAAc,SAAS7C,EAAU3wB,EAAQjlB,GACvC,IAAIE,EACDF,EAAKkiB,OACN+C,EAAS4mB,EAAE/mC,OAAO9E,EAAKkiB,KAAM+C,CAAM,GAErC4sB,EAAY2B,EAAoB,CAACoC,EAAU3wB,EAAQjlB,EAAM,EAEzD6rC,EAAEhoC,KAAKohB,EAAQ,SAAS5W,EAAKvH,GAC3B,GAAarB,KAAAA,IAAVqB,GAAiC,CAAA,IAAVA,EACxB,MAAO,CAAA,EAGT,IACM4H,EAGEoD,EAJQ,GADhB5R,EAAMmO,EAAInH,MAAM,GAAG,GACZjE,OAGU,GAFXyL,EAAKknC,EAAStlC,KAAKqhC,EAAW,IAAIzxC,EAAI,EAAE,GAEtC+C,SAEQ,iBADR6O,EAAO5R,EAAI,IAEVwO,EAAG,KAAO5H,EAAM,IACjB4H,EAAGohB,YAAYhpB,CAAK,EAEL,QAATgL,EACLpD,EAAGjH,GAAG,KAAK,EACZiH,EAAGoD,KAAK,MAAOhL,CAAK,EAEpB4H,EAAGohB,YAAa+b,EAAE,OAAO,EAAE/5B,KAAK,MAAOhL,CAAK,EAAEgL,KAAK,QAASpD,EAAGoD,KAAK,OAAO,CAAC,CAAE,EAGhFpD,EAAGoD,KAAK5R,EAAI,GAAI4G,CAAK,GAKzB8uC,EAAStlC,KAAKqhC,EAAW,IAAItjC,CAAG,EAAE0gB,KAAKjoB,CAAK,CAEhD,CAAC,CACH,EAEAwvC,kBAAmB,WAEjB,IACMoC,EAMN,OAPyBjzC,KAAAA,IAAtBgsC,EAAIkH,iBACDD,EAAYn5C,SAAS0C,cAAc,KAAK,GAClCwhB,MAAM6N,QAAU,iFAC1B/xB,SAAS2lB,KAAK5iB,YAAYo2C,CAAS,EACnCjH,EAAIkH,cAAgBD,EAAU9mB,YAAc8mB,EAAUlB,YACtDj4C,SAAS2lB,KAAK1iB,YAAYk2C,CAAS,GAE9BjH,EAAIkH,aACb,CAEF,EAWEjD,QAAS,GAETjO,KAAM,SAAS1iC,EAASgW,GAWtB,OAVAw3B,EAAe,GAKbxtC,EAHEA,EAGQ8mC,EAAE/mC,OAAO,CAAA,EAAM,GAAIC,CAAO,EAF1B,IAKJ4vC,MAAQ,CAAA,EAChB5vC,EAAQgW,MAAQA,GAAS,EAClBpb,KAAK8yC,SAAShL,KAAK1iC,CAAO,CACnC,EAEAswC,MAAO,WACL,OAAOxJ,EAAE2G,cAAcC,UAAY5G,EAAE2G,cAAcC,SAAS4C,MAAM,CACpE,EAEAuD,eAAgB,SAAS5zC,EAAM3F,GAC1BA,EAAO0F,UACR8mC,EAAE2G,cAActF,SAASloC,GAAQ3F,EAAO0F,SAE1C8mC,EAAE/mC,OAAOnF,KAAKuG,MAAO7G,EAAO6G,KAAK,EACjCvG,KAAK+1C,QAAQ90C,KAAKoE,CAAI,CACxB,EAEAkoC,SAAU,CAKRkL,UAAW,EAEX/pC,IAAK,KAEL8pC,SAAU,CAAA,EAEV1B,UAAW,GAEXjB,UAAW,CAAA,EAEXrgC,MAAO,GAEP6/B,oBAAqB,CAAA,EAErBC,eAAgB,CAAA,EAEhBU,eAAgB,CAAA,EAEhBT,aAAc,CAAA,EAEdC,gBAAiB,CAAA,EAEjBJ,MAAO,CAAA,EAEPe,SAAU,CAAA,EAEViB,aAAc,EAEd9mB,UAAW,KAEX6kB,gBAAiB,OAEjBiB,WAAY,OAEZ3a,UAAW,OAEXiX,YAAa,0EAEbC,OAAQ,cAERmD,SAAU,aAEV2B,cAAe,CAAA,CAEjB,CACF,EAIAvL,EAAE/oC,GAAG0vC,cAAgB,SAASztC,GAC5BwtC,EAAe,EAEf,IAOMsG,EACA99B,EAGA0xB,EAXFqM,EAAOjN,EAAElsC,IAAI,EA2CjB,MAxCuB,UAAnB,OAAOoF,EAEM,SAAZA,GAEC8zC,EAAWhF,EAAQiF,EAAK52B,KAAK,eAAe,EAAI42B,EAAK,GAAGtG,cACxDz3B,EAAQqY,SAASnvB,UAAU,GAAI,EAAE,GAAK,EAGtCwoC,EADCoM,EAASpM,MACFoM,EAASpM,MAAM1xB,IAEvB0xB,EAAQqM,GAENrM,EADCoM,EAAShO,SACF4B,EAAMn8B,KAAKuoC,EAAShO,QAAQ,EAE9B4B,GAAMtoC,GAAI4W,CAAM,GAE1B02B,EAAIwG,WAAW,CAACD,MAAMvL,CAAK,EAAGqM,EAAMD,CAAQ,GAEzCpH,EAAImD,QACLnD,EAAI1sC,GAASpE,MAAM8wC,EAAKlsC,MAAMrC,UAAU5C,MAAMG,KAAKwD,UAAW,CAAC,CAAC,GAKpEc,EAAU8mC,EAAE/mC,OAAO,CAAA,EAAM,GAAIC,CAAO,EAOjC8uC,EACDiF,EAAK52B,KAAK,gBAAiBnd,CAAO,EAElC+zC,EAAK,GAAGtG,cAAgBztC,EAG1B0sC,EAAIqG,SAASgB,EAAM/zC,CAAO,GAGrB+zC,CACT,EAMgB,UAqEZC,GA1DJlN,EAAE2G,cAAcoG,eAAe7E,EAAW,CACxChvC,QAAS,CACPi0C,YAAa,OACbrB,OAAQ,GACRsB,UAAW,mBACb,EACA/yC,MAAO,CAELgzC,WAAY,WACVzH,EAAI5pB,MAAMjnB,KAAKmzC,CAAS,EAExBxC,EAAO+B,EAAY,IAAIS,EAAW,WAChCrB,EAAuB,CACzB,CAAC,CACH,EAEAyG,UAAW,SAASn5C,EAAM41C,GAIxB,IACMwD,EACF1qC,EAKIwF,EAPR,OAFAw+B,EAAuB,EAEpB1yC,EAAKuB,KACF63C,EAAW3H,EAAIK,GAAGuH,QACpB3qC,EAAKm9B,EAAE7rC,EAAKuB,GAAG,GAEX0B,SAGAiR,EAASxF,EAAG,GAAGnM,aACN2R,EAAOy7B,UACdiD,IACFC,EAAeuG,EAASJ,YACxBpG,EAAqBhB,EAAOiB,CAAY,EACxCA,EAAe,OAAOA,GAGxBF,EAAqBjkC,EAAGmhB,MAAM+iB,CAAkB,EAAEpjB,OAAO,EAAE8O,YAAYuU,CAAY,GAGrFpB,EAAI4G,aAAa,OAAO,IAExB5G,EAAI4G,aAAa,QAASe,EAASH,SAAS,EAC5CvqC,EAAKm9B,EAAE,OAAO,GAGhB7rC,EAAKs5C,cAAgB5qC,IAIvB+iC,EAAI4G,aAAa,OAAO,EACxB5G,EAAIgH,aAAa7C,EAAU,GAAI51C,CAAI,EAC5B41C,EACT,CACF,CACF,CAAC,EAKa,QAcd/J,EAAE2G,cAAcoG,eAAeG,EAAS,CAEtCh0C,QAAS,CACPu+B,SAAU,KACViW,OAAQ,eACRC,OAAQ,sDACV,EAEAtzC,MAAO,CACLuzC,SAAU,WACRhI,EAAI5pB,MAAMjnB,KAAKm4C,CAAO,EACtBhG,EAAWtB,EAAIK,GAAGrO,KAAK8V,OAEvBhI,EAAO+B,EAAY,IAAIyF,EAAS/F,CAAmB,EACnDzB,EAAO,gBAAkBwH,EAAS/F,CAAmB,CACvD,EACA0G,QAAS,SAAS15C,GAEb+yC,GACDlH,EAAEtsC,SAAS2lB,IAAI,EAAE+Y,SAAS8U,CAAQ,EAGpCtB,EAAI4G,aAAa,SAAS,EAE1B,IAAIpe,EAAO4R,EAAE/mC,OAAO,CAClBy9B,IAAKviC,EAAKuB,IACVikC,QAAS,SAAStjB,EAAMy3B,EAAYhY,GAC9BjqB,EAAO,CACTwK,KAAKA,EACL8kB,IAAIrF,CACN,EAEAkQ,EAAY,YAAan6B,CAAI,EAE7B+5B,EAAImG,cAAe/L,EAAEn0B,EAAKwK,IAAI,EAAG62B,CAAQ,EAEzC/4C,EAAK45C,SAAW,CAAA,EAEhB9G,EAAkB,EAElBrB,EAAIoF,UAAU,EAEdt3B,WAAW,WACTkyB,EAAIxqB,KAAKgX,SAASyV,CAAW,CAC/B,EAAG,EAAE,EAELjC,EAAI4G,aAAa,OAAO,EAExBxG,EAAY,kBAAkB,CAChC,EACA9rC,MAAO,WACL+sC,EAAkB,EAClB9yC,EAAK45C,SAAW55C,EAAK65C,UAAY,CAAA,EACjCpI,EAAI4G,aAAa,QAAS5G,EAAIK,GAAGrO,KAAK+V,OAAO3zC,QAAQ,QAAS7F,EAAKuB,GAAG,CAAC,CACzE,CACF,EAAGkwC,EAAIK,GAAGrO,KAAKH,QAAQ,EAIvB,OAFAmO,EAAIwB,IAAMpH,EAAEpI,KAAKxJ,CAAI,EAEd,EACT,CACF,CACF,CAAC,EAKD,IAAI6f,EAiBJjO,EAAE2G,cAAcoG,eAAe,QAAS,CAEtC7zC,QAAS,CACP4yC,OAAQ,iOAYR4B,OAAQ,mBACRQ,SAAU,QACVC,YAAa,CAAA,EACbR,OAAQ,oDACV,EAEAtzC,MAAO,CACL+zC,UAAW,WACT,IAAIC,EAAQzI,EAAIK,GAAGx7B,MACjB6jC,EAAK,SAEP1I,EAAI5pB,MAAMjnB,KAAK,OAAO,EAEtB2wC,EAAOkC,EAAW0G,EAAI,WACK,UAAtB1I,EAAI0F,SAAS71C,MAAoB44C,EAAMX,QACxC1N,EAAEtsC,SAAS2lB,IAAI,EAAE+Y,SAASic,EAAMX,MAAM,CAE1C,CAAC,EAEDhI,EAAO+B,EAAY6G,EAAI,WAClBD,EAAMX,QACP1N,EAAEtsC,SAAS2lB,IAAI,EAAEoZ,YAAY4b,EAAMX,MAAM,EAE3CzF,EAAQ7rB,IAAI,SAAW0pB,CAAQ,CACjC,CAAC,EAEDJ,EAAO,SAAS4I,EAAI1I,EAAI2I,WAAW,EAChC3I,EAAIyC,SACL3C,EAAO,cAAeE,EAAI2I,WAAW,CAEzC,EACAA,YAAa,WACX,IAIMC,EAJFr6C,EAAOyxC,EAAI0F,SACXn3C,GAASA,EAAKs6C,KAEf7I,EAAIK,GAAGx7B,MAAM0jC,cACVK,EAAO,EAER5I,EAAIyC,UACLmG,EAAOjnB,SAASpzB,EAAKs6C,IAAI12B,IAAI,aAAa,EAAG,EAAE,EAAIwP,SAASpzB,EAAKs6C,IAAI12B,IAAI,gBAAgB,EAAE,EAAE,GAE/F5jB,EAAKs6C,IAAI12B,IAAI,aAAc6tB,EAAIyE,GAAGmE,CAAI,EAE1C,EACAE,gBAAiB,SAASv6C,GACrBA,EAAKs6C,MAENt6C,EAAKw6C,QAAU,CAAA,EAEZV,GACDW,cAAcX,CAAY,EAG5B95C,EAAK06C,kBAAoB,CAAA,EAEzB7I,EAAY,eAAgB7xC,CAAI,EAE7BA,EAAK26C,aACHlJ,EAAIh2B,SACLg2B,EAAIh2B,QAAQ6iB,YAAY,aAAa,EAEvCt+B,EAAK26C,UAAY,CAAA,EAIvB,EAKAC,cAAe,SAAS56C,GAIH,SAAjB66C,EAA0Bpe,GAErBqd,GACDW,cAAcX,CAAY,EAG5BA,EAAegB,YAAY,WACH,EAAnBR,EAAIlJ,aACLK,EAAI8I,gBAAgBv6C,CAAI,GAIb,IAAV+6C,GACDN,cAAcX,CAAY,EAIb,IADfiB,EAAAA,EAEEF,EAAe,EAAE,EACG,KAAZE,EACRF,EAAe,EAAE,EACG,MAAZE,GACRF,EAAe,GAAG,EAEtB,EAAGpe,CAAK,CACV,CA3BF,IAAIse,EAAU,EACZT,EAAMt6C,EAAKs6C,IAAI,GA4BjBO,EAAe,CAAC,CAClB,EAEAG,SAAU,SAASh7C,EAAM41C,GAKJ,SAAjBqF,IACKj7C,IACGA,EAAKs6C,IAAI,GAAG/f,UACdv6B,EAAKs6C,IAAIryB,IAAI,YAAY,EAEtBjoB,IAASyxC,EAAI0F,WACd1F,EAAI8I,gBAAgBv6C,CAAI,EAExByxC,EAAI4G,aAAa,OAAO,GAG1Br4C,EAAKw6C,QAAU,CAAA,EACfx6C,EAAKk7C,OAAS,CAAA,EAEdrJ,EAAY,mBAAmB,GAK/BsJ,EAAAA,EACW,IACT57B,WAAW07B,EAAe,GAAG,EAE7BG,EAAY,EAIpB,CAGc,SAAdA,IACKp7C,IACDA,EAAKs6C,IAAIryB,IAAI,YAAY,EACtBjoB,IAASyxC,EAAI0F,WACd1F,EAAI8I,gBAAgBv6C,CAAI,EACxByxC,EAAI4G,aAAa,QAAS6B,EAAMV,OAAO3zC,QAAQ,QAAS7F,EAAKuB,GAAG,CAAE,GAGpEvB,EAAKw6C,QAAU,CAAA,EACfx6C,EAAKk7C,OAAS,CAAA,EACdl7C,EAAK65C,UAAY,CAAA,EAErB,CA7CF,IAmDMS,EAnDFa,EAAQ,EA8CVjB,EAAQzI,EAAIK,GAAGx7B,MAGb5H,EAAKknC,EAAStlC,KAAK,UAAU,EAqDjC,OApDG5B,EAAGzL,UACAq3C,EAAM/6C,SAAS0C,cAAc,KAAK,GAClC+N,UAAY,UACbhQ,EAAK0O,IAAM1O,EAAK0O,GAAG4B,KAAK,KAAK,EAAErN,SAChCq3C,EAAIe,IAAMr7C,EAAK0O,GAAG4B,KAAK,KAAK,EAAEwB,KAAK,KAAK,GAE1C9R,EAAKs6C,IAAMzO,EAAEyO,CAAG,EAAE1yB,GAAG,iBAAkBqzB,CAAc,EAAErzB,GAAG,kBAAmBwzB,CAAW,EACxFd,EAAI/4C,IAAMvB,EAAKuB,IAIZmN,EAAGjH,GAAG,KAAK,IACZzH,EAAKs6C,IAAMt6C,EAAKs6C,IAAIn1C,MAAM,GAIN,GADtBm1C,EAAMt6C,EAAKs6C,IAAI,IACRlJ,aACLpxC,EAAKw6C,QAAU,CAAA,EACNF,EAAI5oB,QACb1xB,EAAKw6C,QAAU,CAAA,IAInB/I,EAAIgH,aAAa7C,EAAU,CACzB0F,MAnNM,SAASt7C,GACnB,GAAGA,EAAKkiB,MAA4Bzc,KAAAA,IAApBzF,EAAKkiB,KAAKo5B,MACxB,OAAOt7C,EAAKkiB,KAAKo5B,MAEnB,IAAI/5C,EAAMkwC,EAAIK,GAAGx7B,MAAMyjC,SAEvB,GAAGx4C,EAAK,CACN,GAAGsqC,EAAEhsC,WAAW0B,CAAG,EACjB,OAAOA,EAAId,KAAKgxC,EAAKzxC,CAAI,EACpB,GAAGA,EAAK0O,GACb,OAAO1O,EAAK0O,GAAGoD,KAAKvQ,CAAG,GAAK,EAEhC,CACA,MAAO,EACT,EAqMuBvB,CAAI,EACrBu7C,gBAAiBv7C,EAAKs6C,GACxB,EAAGt6C,CAAI,EAEPyxC,EAAI2I,YAAY,EAEbp6C,EAAKw6C,SACHV,GAAcW,cAAcX,CAAY,EAExC95C,EAAK65C,WACNjE,EAAS3X,SAAS,aAAa,EAC/BwT,EAAI4G,aAAa,QAAS6B,EAAMV,OAAO3zC,QAAQ,QAAS7F,EAAKuB,GAAG,CAAE,IAElEq0C,EAAStX,YAAY,aAAa,EAClCmT,EAAI4G,aAAa,OAAO,KAK5B5G,EAAI4G,aAAa,SAAS,EAC1Br4C,EAAKw7C,QAAU,CAAA,EAEXx7C,EAAKw6C,UACPx6C,EAAK26C,UAAY,CAAA,EACjB/E,EAAS3X,SAAS,aAAa,EAC/BwT,EAAImJ,cAAc56C,CAAI,IAGjB41C,CACT,CACF,CACF,CAAC,EAqMkB,SAAjB6F,EAA0BC,GACxB,IACMhtC,EADH+iC,EAAIU,aAAawJ,KACdjtC,EAAK+iC,EAAIU,aAAawJ,GAAWrrC,KAAK,QAAQ,GAC5CrN,SAEAy4C,IACFhtC,EAAG,GAAGnN,IARD,iBAYJkwC,EAAI0C,QACLzlC,EAAGkV,IAAI,UAAW83B,EAAY,QAAU,MAAM,CAItD,CA2FiB,SAAfE,EAAwB7gC,GACxB,IAAI8gC,EAAYpK,EAAIhF,MAAMxpC,OAC1B,OAAW44C,EAAY,EAApB9gC,EACMA,EAAQ8gC,EACN9gC,EAAQ,EACV8gC,EAAY9gC,EAEdA,CACT,CACoB,SAApB+gC,EAA6B55C,EAAM65C,EAAMC,GACvC,OAAO95C,EAAK2D,QAAQ,WAAYk2C,EAAO,CAAC,EAAEl2C,QAAQ,YAAam2C,CAAK,CACtE,CA7SFnQ,EAAE2G,cAAcoG,eAAe,OAAQ,CAErC7zC,QAAS,CACPyQ,QAAS,CAAA,EACT+f,OAAQ,cACRwC,SAAU,IACVxH,OAAQ,SAAS0rB,GACf,OAAOA,EAAQx0C,GAAG,KAAK,EAAIw0C,EAAUA,EAAQ3rC,KAAK,KAAK,CACzD,CACF,EAEApK,MAAO,CAELg2C,SAAU,WACR,IAEE5lC,EAMEyhB,EACFokB,EAiBAC,EAGAC,EACAC,EA9BEC,EAAS9K,EAAIK,GAAGnb,KAClBwjB,EAAK,QAGHoC,EAAO/mC,SAAYi8B,EAAI8C,qBAIvBxc,EAAWwkB,EAAOxkB,SACpBokB,EAAiB,SAAS7lC,GACxB,IAAIkmC,EAASlmC,EAAMnR,MAAM,EAAE+3B,WAAW,OAAO,EAAEA,WAAW,OAAO,EAAEe,SAAS,oBAAoB,EAC9Fwe,EAAa,OAAQF,EAAOxkB,SAAS,IAAM,KAAOwkB,EAAOhnB,OACzDmnB,EAAS,CACP/qB,SAAU,QACV+E,OAAQ,KACRQ,KAAM,EACNrnB,IAAK,EACL8sC,8BAA+B,QACjC,EACA5zB,EAAI,aAKN,OAHA2zB,EAAO,WAAW3zB,GAAK2zB,EAAO,QAAQ3zB,GAAK2zB,EAAO,MAAM3zB,GAAK2zB,EAAO3zB,GAAK0zB,EAEzED,EAAO54B,IAAI84B,CAAM,EACVF,CACT,EACAJ,EAAkB,WAChB3K,EAAIh2B,QAAQmI,IAAI,aAAc,SAAS,CACzC,EAIF2tB,EAAO,gBAAgB4I,EAAI,WACtB1I,EAAImL,WAAW,IAEhBhgB,aAAayf,CAAW,EACxB5K,EAAIh2B,QAAQmI,IAAI,aAAc,QAAQ,GAItCtN,EAAQm7B,EAAIoL,eAAe,KAO3BP,EAAcH,EAAe7lC,CAAK,GAEtBsN,IAAK6tB,EAAIqL,WAAW,CAAE,EAElCrL,EAAIxqB,KAAKwI,OAAO6sB,CAAW,EAE3BD,EAAc98B,WAAW,WACvB+8B,EAAY14B,IAAK6tB,EAAIqL,WAAY,CAAA,CAAK,CAAE,EACxCT,EAAc98B,WAAW,WAEvB68B,EAAgB,EAEhB78B,WAAW,WACT+8B,EAAYj/B,OAAO,EACnB/G,EAAQgmC,EAAc,KACtBzK,EAAY,oBAAoB,CAClC,EAAG,EAAE,CAEP,EAAG9Z,CAAQ,CAEb,EAAG,EAAE,GAxBHqkB,EAAgB,EA6BtB,CAAC,EACD7K,EAAOgC,EAAmB4G,EAAI,WAC5B,GAAG1I,EAAImL,WAAW,EAAG,CAMnB,GAJAhgB,aAAayf,CAAW,EAExB5K,EAAIK,GAAGiF,aAAehf,EAEnB,CAACzhB,EAAO,CAET,GAAG,EADHA,EAAQm7B,EAAIoL,eAAe,GAEzB,OAEFP,EAAcH,EAAe7lC,CAAK,CACpC,CAEAgmC,EAAY14B,IAAK6tB,EAAIqL,WAAW,CAAA,CAAI,CAAE,EACtCrL,EAAIxqB,KAAKwI,OAAO6sB,CAAW,EAC3B7K,EAAIh2B,QAAQmI,IAAI,aAAc,QAAQ,EAEtCrE,WAAW,WACT+8B,EAAY14B,IAAK6tB,EAAIqL,WAAW,CAAE,CACpC,EAAG,EAAE,CACP,CAEF,CAAC,EAEDvL,EAAO+B,EAAY6G,EAAI,WAClB1I,EAAImL,WAAW,IAChBR,EAAgB,EACbE,GACDA,EAAYj/B,OAAO,EAErB/G,EAAQ,KAEZ,CAAC,EACH,EAEAsmC,WAAY,WACV,MAA6B,UAAtBnL,EAAI0F,SAAS71C,IACtB,EAEAu7C,eAAgB,WACd,MAAGpL,CAAAA,CAAAA,EAAI0F,SAASqD,SACP/I,EAAI0F,SAASmD,GAIxB,EAGAwC,WAAY,SAASC,GACnB,IAEEruC,EADCquC,EACItL,EAAI0F,SAASmD,IAEb7I,EAAIK,GAAGnb,KAAKpG,OAAOkhB,EAAI0F,SAASzoC,IAAM+iC,EAAI0F,QAAQ,EAGrD7N,EAAS56B,EAAG46B,OAAO,EACnB0T,EAAa5pB,SAAS1kB,EAAGkV,IAAI,aAAa,EAAE,EAAE,EAC9Cq5B,EAAgB7pB,SAAS1kB,EAAGkV,IAAI,gBAAgB,EAAE,EAAE,EASpD9jB,GARJwpC,EAAOz5B,KAASg8B,EAAEnsC,MAAM,EAAEy4B,UAAU,EAAI6kB,EAQ9B,CACRtrB,MAAOhjB,EAAGgjB,MAAM,EAEhByB,QAAS0gB,EAAQnlC,EAAG29B,YAAY,EAAI39B,EAAG,GAAG6kB,cAAgB0pB,EAAgBD,CAC5E,GASA,OA9KAE,EADqBz3C,KAAAA,IAApBy3C,EACoEz3C,KAAAA,IAAnDlG,SAAS0C,cAAc,GAAG,EAAEwhB,MAAM05B,aAE/CD,GAuKHp9C,EAAI,kBAAoBA,EAAe,UAAI,aAAewpC,EAAOpS,KAAO,MAAQoS,EAAOz5B,IAAM,OAE7F/P,EAAIo3B,KAAOoS,EAAOpS,KAClBp3B,EAAI+P,IAAMy5B,EAAOz5B,KAEZ/P,CACT,CAEF,CACF,CAAC,EArLD,IAAIo9C,EA6LAvB,EAAY,SAmRZyB,GA/PJvR,EAAE2G,cAAcoG,eAAe+C,EAAW,CAExC52C,QAAS,CACP4yC,OAAQ,6JAKR0F,UAAW,aAGXC,SAAU,CACRC,QAAS,CACPxiC,MAAO,cACPxN,GAAI,KACJhM,IAAK,yCACP,EACAi8C,MAAO,CACLziC,MAAO,aACPxN,GAAI,IACJhM,IAAK,0CACP,EACAk8C,MAAO,CACL1iC,MAAO,iBACPxZ,IAAK,mBACP,CACF,CACF,EAEA2E,MAAO,CACLw3C,WAAY,WACVjM,EAAI5pB,MAAMjnB,KAAK+6C,CAAS,EAExBpK,EAAO,eAAgB,SAAS5kC,EAAGgxC,EAAUC,GACxCD,IAAaC,IACXD,IAAahC,EACdF,EAAe,EACPmC,IAAYjC,GACpBF,EAAe,CAAA,CAAI,EAKzB,CAAC,EAEDlK,EAAO+B,EAAc,IAAMqI,EAAW,WACpCF,EAAe,CACjB,CAAC,CACH,EAEAoC,UAAW,SAAS79C,EAAM41C,GACxB,IAAIkI,EAAW99C,EAAKuB,IAChBw8C,EAAWtM,EAAIK,GAAGkM,OAgBlBC,GAdJpS,EAAEhoC,KAAKk6C,EAAST,SAAU,WACxB,GAAoC,CAAC,EAAlCQ,EAASj9C,QAASlB,KAAKob,KAAM,EAS9B,OARGpb,KAAK4N,KAEJuwC,EADoB,UAAnB,OAAOn+C,KAAK4N,GACFuwC,EAASxP,OAAOwP,EAASI,YAAYv+C,KAAK4N,EAAE,EAAE5N,KAAK4N,GAAGtK,OAAQ66C,EAAS76C,MAAM,EAE7EtD,KAAK4N,GAAG9M,KAAMd,KAAMm+C,CAAS,GAG5CA,EAAWn+C,KAAK4B,IAAIsE,QAAQ,OAAQi4C,CAAS,EACtC,CAAA,CAEX,CAAC,EAEa,IAQd,OAPGC,EAASV,YACVY,EAAQF,EAASV,WAAaS,GAEhCrM,EAAIgH,aAAa7C,EAAUqI,EAASj+C,CAAI,EAExCyxC,EAAI4G,aAAa,OAAO,EAEjBzC,CACT,CACF,CACF,CAAC,EAuBD/J,EAAE2G,cAAcoG,eAAe,UAAW,CAExC7zC,QAAS,CACPyQ,QAAS,CAAA,EACT2oC,YAAa,oFACbC,QAAS,CAAC,EAAE,GACZC,mBAAoB,CAAA,EACpBC,OAAQ,CAAA,EAERC,MAAO,4BACPC,MAAO,yBACPC,SAAU,mBACZ,EAEAv4C,MAAO,CACLw4C,YAAa,WAEX,IAAIC,EAAMlN,EAAIK,GAAG8M,QACfzE,EAAK,eAIP,GAFA1I,EAAIoN,UAAY,CAAA,EAEb,CAACF,GAAO,CAACA,EAAInpC,QAAU,MAAO,CAAA,EAEjC69B,GAAgB,eAEhB9B,EAAOkC,EAAW0G,EAAI,WAEjBwE,EAAIN,oBACL5M,EAAIxqB,KAAKW,GAAG,QAAQuyB,EAAI,WAAY,WAClC,GAAsB,EAAnB1I,EAAIhF,MAAMxpC,OAEX,OADAwuC,EAAIhlC,KAAK,EACF,CAAA,CAEX,CAAC,EAGH0mC,EAAUvrB,GAAG,UAAUuyB,EAAI,SAASxtC,GAChB,KAAdA,EAAEggB,QACJ8kB,EAAI/2B,KAAK,EACc,KAAd/N,EAAEggB,SACX8kB,EAAIhlC,KAAK,CAEb,CAAC,CACH,CAAC,EAED8kC,EAAO,eAAe4I,EAAI,SAASxtC,EAAGuV,GACjCA,EAAKhgB,OACNggB,EAAKhgB,KAAO45C,EAAkB55B,EAAKhgB,KAAMuvC,EAAI0F,SAASp8B,MAAO02B,EAAIhF,MAAMxpC,MAAM,EAEjF,CAAC,EAEDsuC,EAAOiC,EAAmB2G,EAAI,SAASxtC,EAAGsvC,EAASh3B,EAAQjlB,GACzD,IAAI6a,EAAI42B,EAAIhF,MAAMxpC,OAClBgiB,EAAO81B,QAAc,EAAJlgC,EAAQihC,EAAkB6C,EAAIF,SAAUz+C,EAAK+a,MAAOF,CAAC,EAAI,EAC5E,CAAC,EAED02B,EAAO,gBAAkB4I,EAAI,WAC3B,IAEI2E,EACAC,EAHkB,EAAnBtN,EAAIhF,MAAMxpC,QAAc07C,EAAIL,QAAU,CAAC7M,EAAIqN,YACxCnH,EAASgH,EAAIR,YACfW,EAAYrN,EAAIqN,UAAYjT,EAAG8L,EAAO9xC,QAAQ,YAAa84C,EAAIJ,KAAK,EAAE14C,QAAQ,UAAW,MAAM,CAAE,EAAEo4B,SAAS2V,CAAmB,EAC/HmL,EAAatN,EAAIsN,WAAalT,EAAG8L,EAAO9xC,QAAQ,YAAa84C,EAAIH,KAAK,EAAE34C,QAAQ,UAAW,OAAO,CAAE,EAAEo4B,SAAS2V,CAAmB,EAEpIkL,EAAU3zB,MAAM,WACdsmB,EAAI/2B,KAAK,CACX,CAAC,EACDqkC,EAAW5zB,MAAM,WACfsmB,EAAIhlC,KAAK,CACX,CAAC,EAEDglC,EAAIxgB,UAAUxB,OAAOqvB,EAAU7jC,IAAI8jC,CAAU,CAAC,EAElD,CAAC,EAEDxN,EA/qDW,SA+qDS4I,EAAI,WACnB1I,EAAIuN,iBAAiBpiB,aAAa6U,EAAIuN,eAAe,EAExDvN,EAAIuN,gBAAkBz/B,WAAW,WAC/BkyB,EAAIwN,oBAAoB,EACxBxN,EAAIuN,gBAAkB,IACxB,EAAG,EAAE,CACP,CAAC,EAGDzN,EAAO+B,EAAY6G,EAAI,WACrBhH,EAAUlrB,IAAIkyB,CAAE,EAChB1I,EAAIxqB,KAAKgB,IAAI,QAAQkyB,CAAE,EACvB1I,EAAIsN,WAAatN,EAAIqN,UAAY,IACnC,CAAC,CAEH,EACAryC,KAAM,WACJglC,EAAIoN,UAAY,CAAA,EAChBpN,EAAI12B,MAAQ6gC,EAAanK,EAAI12B,MAAQ,CAAC,EACtC02B,EAAIkF,eAAe,CACrB,EACAj8B,KAAM,WACJ+2B,EAAIoN,UAAY,CAAA,EAChBpN,EAAI12B,MAAQ6gC,EAAanK,EAAI12B,MAAQ,CAAC,EACtC02B,EAAIkF,eAAe,CACrB,EACAuI,KAAM,SAASC,GACb1N,EAAIoN,UAAaM,GAAY1N,EAAI12B,MACjC02B,EAAI12B,MAAQokC,EACZ1N,EAAIkF,eAAe,CACrB,EACAsI,oBAAqB,WAMnB,IALA,IAAI3mB,EAAImZ,EAAIK,GAAG8M,QAAQR,QACrBgB,EAAgBz5C,KAAK05C,IAAI/mB,EAAE,GAAImZ,EAAIhF,MAAMxpC,MAAM,EAC/Cq8C,EAAe35C,KAAK05C,IAAI/mB,EAAE,GAAImZ,EAAIhF,MAAMxpC,MAAM,EAG5CnB,EAAI,EAAGA,IAAM2vC,EAAIoN,UAAYS,EAAeF,GAAgBt9C,CAAC,GAC/D2vC,EAAI8N,aAAa9N,EAAI12B,MAAMjZ,CAAC,EAE9B,IAAIA,EAAI,EAAGA,IAAM2vC,EAAIoN,UAAYO,EAAgBE,GAAex9C,CAAC,GAC/D2vC,EAAI8N,aAAa9N,EAAI12B,MAAMjZ,CAAC,CAEhC,EACAy9C,aAAc,SAASxkC,GAGrB,IAII/a,EANJ+a,EAAQ6gC,EAAa7gC,CAAK,EAEvB02B,EAAIhF,MAAM1xB,GAAO88B,aAIhB73C,EAAOyxC,EAAIhF,MAAM1xB,IACZouB,SACPnpC,EAAOyxC,EAAIgG,QAAS18B,CAAM,GAG5B82B,EAAY,WAAY7xC,CAAI,EAEX,UAAdA,EAAKsB,OACNtB,EAAKs6C,IAAMzO,EAAE,yBAAyB,EAAEjkB,GAAG,iBAAkB,WAC3D5nB,EAAKw6C,QAAU,CAAA,CACjB,CAAC,EAAE5yB,GAAG,kBAAmB,WACvB5nB,EAAKw6C,QAAU,CAAA,EACfx6C,EAAK65C,UAAY,CAAA,EACjBhI,EAAY,gBAAiB7xC,CAAI,CACnC,CAAC,EAAE8R,KAAK,MAAO9R,EAAKuB,GAAG,GAIzBvB,EAAK63C,UAAY,CAAA,EACnB,CACF,CACF,CAAC,EAMe,UAEhBhM,EAAE2G,cAAcoG,eAAewE,EAAW,CACxCr4C,QAAS,CACPy6C,WAAY,SAASx/C,GACnB,OAAOA,EAAKuB,IAAIsE,QAAQ,SAAU,SAASiH,GAAK,MAAO,MAAQA,CAAG,CAAC,CACrE,EACA2yC,MAAO,CACT,EACAv5C,MAAO,CACLw5C,WAAY,WACV,IAEM5N,EAGJ2N,EAL2B,EAA1B//C,OAAOigD,mBAEJ7N,EAAKL,EAAIK,GAAG8N,OACdH,EAAQ3N,EAAG2N,MAIF,GAARA,EAFMjU,MAAMiU,CAAK,EAAYA,EAAM,EAAdA,MAGtBlO,EAAO,gBAAuB6L,EAAW,SAASzwC,EAAG3M,GACnDA,EAAKs6C,IAAI12B,IAAI,CACXi8B,YAAa7/C,EAAKs6C,IAAI,GAAGlJ,aAAeqO,EACxC/tB,MAAS,MACX,CAAC,CACH,CAAC,EACD6f,EAAO,gBAAuB6L,EAAW,SAASzwC,EAAG3M,GACnDA,EAAKuB,IAAMuwC,EAAG0N,WAAWx/C,EAAMy/C,CAAK,CACtC,CAAC,EAIP,CACF,CACF,CAAC,EAGAlN,EAAe,CAAG,CAAE,EC3zDvB,SAAWr9B,EAAM9V,GACM,YAAlB,OAAOssC,QAAyBA,OAAOC,IAC1CD,OAAO,GAAI,WACV,OAAOtsC,EAAQ8V,CAAI,CACnB,CAAC,EAC2B,UAAnB,OAAO5V,QACjBD,OAAOC,QAAUF,EAAQ8V,CAAI,EAE7BA,EAAK4qC,aAAe1gD,EAAQ8V,CAAI,CAEjC,EAAoB,aAAlB,OAAO/V,OAAyBA,OAA2B,aAAlB,OAAOO,OAAyBA,OAASC,KAAM,SAAWD,GAErG,aAyDa,SAAToF,IACH,IAAI0pC,EAAS,GAOb,OANAjpC,MAAMrC,UAAUkrC,QAAQ3tC,KAAKwD,UAAW,SAAWnE,GAClD,IAAK,IAAIuO,KAAOvO,EAAK,CACpB,GAAI,CAACA,EAAImB,eAAeoN,CAAG,EAAG,OAC9BmgC,EAAOngC,GAAOvO,EAAIuO,EACnB,CACA,CAAC,EACKmgC,CACR,CA4BuB,SAAnBuR,EAA6BxyC,GAGX,MAAjBA,EAAGykC,OAAO,CAAC,IACdzkC,EAAKA,EAAG+gC,OAAO,CAAC,GASjB,IANA,IAGI0R,EAHAt+B,EAASxZ,OAAOqF,CAAE,EAClBtK,EAASye,EAAOze,OAChB8X,EAAQ,CAAC,EAETzH,EAAS,GACT2sC,EAAgBv+B,EAAOnZ,WAAW,CAAC,EAChC,EAAEwS,EAAQ9X,GAAQ,CAOxB,GAAiB,KANjB+8C,EAAWt+B,EAAOnZ,WAAWwS,CAAK,GAOjC,MAAM,IAAImlC,sBACT,+CACD,EAMa,GAAZF,GAAsBA,GAAY,IAAuB,KAAZA,GAGnC,IAAVjlC,GAA2B,IAAZilC,GAAsBA,GAAY,IAIvC,IAAVjlC,GACY,IAAZilC,GAAsBA,GAAY,IAChB,KAAlBC,EAID3sC,GAAU,KAAO0sC,EAASj/C,SAAS,EAAE,EAAI,IAiBzCuS,GARY,KAAZ0sC,GACa,KAAbA,GACa,KAAbA,GACY,IAAZA,GAAsBA,GAAY,IACtB,IAAZA,GAAsBA,GAAY,IACtB,IAAZA,GAAsBA,GAAY,IAGxBt+B,EAAOswB,OAAOj3B,CAAK,EAMpB,KAAO2G,EAAOswB,OAAOj3B,CAAK,CAErC,CAGA,MAAO,IAAMzH,CAEd,CA2KgB,SAAZ05B,EAAsB1rC,EAAMyD,EAASo7C,EAAQ/6B,GAC3CrgB,EAAQq7C,YAA4C,YAA9B,OAAO1gD,EAAO4tC,cACrCtlB,EAAQ,IAAIslB,YAAYhsC,EAAM,CACjCwqB,QAAS,CAAA,EACTI,OAAQ,CACPi0B,OAAQA,EACR/6B,OAAQA,CACT,CACD,CAAC,EACD7lB,SAASguC,cAAcvlB,CAAK,EAC7B,CArVA,IAAIklB,EAAW,CAGdoC,OAAQ,uBACRz5B,OAAQ,KACRwqC,eAAgB,CAAA,EAGhB/kB,MAAO,IACPglB,gBAAiB,CAAA,EACjBC,YAAa,KACbC,YAAa,KACbC,KAAM,CAAA,EACNnX,OAAQ,EAGR/T,OAAQ,iBACRmrB,aAAc,KAGdC,UAAW,CAAA,EACXC,SAAU,CAAA,EAGVR,WAAY,CAAA,CAEb,EAoDIS,EAAY,SAAU78C,GACzB,OAAOovB,SAAS1zB,EAAO8wB,iBAAiBxsB,CAAI,EAAEmvB,OAAQ,EAAE,CACzD,EAoHI2tB,EAAoB,WACvB,OAAOn7C,KAAK6uB,IACXj1B,SAAS2lB,KAAKonB,aAAc/sC,SAASmQ,gBAAgB48B,aACrD/sC,SAAS2lB,KAAKqO,aAAch0B,SAASmQ,gBAAgB6jB,aACrDh0B,SAAS2lB,KAAKqnB,aAAchtC,SAASmQ,gBAAgB68B,YACtD,CACD,EAmaA,OAjRmB,SAAU3pC,EAAUmC,GAoInB,SAAfg8C,EAAyB/4B,GAI5B,GAAIA,CAAAA,EAAMwD,kBAGNxD,EAAiB,IAAjBA,EAAMlS,QAAgBkS,EAAMoE,SAAWpE,EAAMiE,SAAWjE,EAAMuE,WAI5D,YAAavE,EAAM5iB,SAGzBggB,EAAS4C,EAAM5iB,OAAO0V,QAAQlY,CAAQ,IACU,MAAjCwiB,EAAOuqB,QAAQvoC,YAAY,GAAa4gB,CAAAA,EAAM5iB,OAAO0V,QAAQwoB,EAASgM,MAAM,GAGvFlqB,EAAO47B,WAAathD,EAAOuV,SAAS+rC,UAAY57B,EAAO67B,WAAavhD,EAAOuV,SAASgsC,UAAa,IAAItzC,KAAKyX,EAAO9P,IAAI,EAAzH,CAGA,IAQI6qC,EAnQqBp7C,EA4PzB,IACCiQ,EAAO+qC,EAAiB1R,mBAAmBjpB,EAAOpQ,IAAI,CAAC,CAGxD,CAFE,MAAMrI,GACPqI,EAAO+qC,EAAiB36B,EAAOpQ,IAAI,CACpC,CAIA,GAAa,MAATA,EAAc,CACjB,GAAI,CAACsuB,EAAS+c,eAAgB,OAC9BF,EAAS5gD,SAASmQ,eACnB,MACCywC,EAAS5gD,SAAS2hD,cAAclsC,CAAI,GAErCmrC,EAAUA,GAAmB,SAATnrC,EAA6CmrC,EAA3B5gD,SAASmQ,mBAI/CsY,EAAMS,eAAe,EA9QI1jB,EA+Qdu+B,EA5QP6d,QAAQC,cAAiBr8C,EAAQ47C,WAAaQ,CAAAA,QAAQvjC,QAI3D5I,GAAOA,EADItV,EAAOuV,SAASD,OACN,GAGrBmsC,QAAQC,aACP,CACCC,aAAc3+B,KAAK4+B,UAAUv8C,CAAO,EACpCo7C,OAAQnrC,GAActV,EAAOwqC,WAC9B,EACA3qC,SAAS+7C,MACTtmC,GAActV,EAAOuV,SAASK,IAC/B,GA+PC+rC,EAAaE,cAAcpB,EAAQ/6B,CAAM,EAxByF,CA0BnI,CAKsB,SAAlBo8B,EAA4Bx5B,GAI/B,IAUIm4B,EAVkB,OAAlBgB,QAAQvjC,OAGPujC,CAAAA,QAAQvjC,MAAMyjC,cAAgBF,QAAQvjC,MAAMyjC,eAAiB3+B,KAAK4+B,UAAUhe,CAAQ,GAQnE,UAAlB,OADA6c,EAASgB,QAAQvjC,MAAMuiC,SACOA,GAE7B,EADJA,EAAS5gD,SAAS2hD,cAAcnB,EAAiBoB,QAAQvjC,MAAMuiC,MAAM,CAAC,IAKvEkB,EAAaE,cAAcpB,EAAQ,KAAM,CAACQ,UAAW,CAAA,CAAK,CAAC,CAE5D,CAtMA,IACIrd,EAAkBle,EAAQq8B,EAA2BC,EADrDL,EAAe,CAWnBM,aAA4B,SAAUC,GACrC7T,qBAAqB2T,CAAiB,EACtCA,EAAoB,KAChBE,GACJ5U,EAAU,eAAgB1J,CAAQ,CACnC,CAhBoB,EAwBpB+d,EAAaE,cAAgB,SAAUpB,EAAQ/6B,EAAQrgB,GAGtDs8C,EAAaM,aAAa,EAG1B,IAMIE,EAMAC,EACAC,EACAC,EACAC,EACA3mB,EACArnB,EAAmB0d,EAQnBuwB,EA6BAC,EAjKmCp9C,EA2GnCq9C,EAAYt9C,EAAOw+B,GAAY4J,EAAUnoC,GAAW,EAAE,EAGtDs9C,EAAmD,oBAA3CjiD,OAAO8C,UAAUnC,SAASN,KAAK0/C,CAAM,EAC7CmC,EAAaD,GAAS,CAAClC,EAAOxQ,QAAU,KAAOwQ,GAC9CkC,GAAUC,KACXT,EAAgBniD,EAAOwqC,YACvBkY,EAAUvsC,QAAU,CAAC4rC,IAExBA,EAAcliD,SAAS2hD,cAAckB,EAAUvsC,MAAM,GAElD0sC,GAlK0B1sC,EAkKK4rC,GAjKdZ,EAAUhrC,CAAM,EAAIA,EAAO23B,UAAhC,EAkKZsU,EAAcO,EAAQlC,EAvLP,SAAUA,EAAQoC,EAAcjZ,EAAQmX,GAC5D,IAAIxrC,EAAW,EACf,GAAIkrC,EAAO/V,aACV,KACCn1B,GAAYkrC,EAAO3S,UACnB2S,EAASA,EAAO/V,eAOjB,OAJDn1B,EAAWtP,KAAK6uB,IAAIvf,EAAWstC,EAAejZ,EAAQ,CAAC,EAEtDr0B,EADGwrC,EACQ96C,KAAK05C,IAAIpqC,EAAU6rC,EAAkB,EAAIphD,EAAO2sC,WAAW,EAE/Dp3B,CACT,EA0KoDqtC,EAAYC,EAAcnvB,SAAsC,YAA5B,OAAOgvB,EAAU9Y,OAAwB8Y,EAAU9Y,OAAO6W,EAAQ/6B,CAAM,EAAIg9B,EAAU9Y,OAAS,EAAE,EAAG8Y,EAAU3B,IAAI,EACpMsB,EAAWD,EAAcD,EACzBG,EAAiBlB,EAAkB,EACnCmB,EAAa,EACb3mB,EA7JS,SAAUymB,EAAUze,GAC9BhI,EAAQgI,EAASgd,gBAAkBhd,EAAShI,MAAQ31B,KAAK68C,IAAIT,EAAW,IAAOze,EAAShI,KAAK,EACjG,OAAIgI,EAASid,aAAejlB,EAAQgI,EAASid,YAAoBjd,EAASid,YACtEjd,EAASkd,aAAellB,EAAQgI,EAASkd,YAAoBld,EAASkd,YACnEptB,SAASkI,EAAO,EAAE,CAC1B,EAwJuBymB,EAAUK,CAAS,EASpCF,EAAoB,SAAUvwB,EAAUmwB,GAG3C,IAAIW,EAAkB/iD,EAAOwqC,YAG7B,GAAIvY,GAAYmwB,GAAeW,GAAmBX,IAAiBD,EAAgBC,GAAepiD,EAAO2sC,YAAcoW,IAAoBT,EAe1I,OAZAX,EAAaM,aAAa,CAAA,CAAI,EAnHEG,EAsHZA,EAtHyBO,EAsHZA,EAnHrB,KAHYlC,EAsHZA,IAlHd5gD,SAAS2lB,KAAK/P,MAAM,EAIjBktC,IAGJlC,EAAOhrC,MAAM,EACT5V,SAAS6V,gBAAkB+qC,IAC9BA,EAAO/9C,aAAa,WAAY,IAAI,EACpC+9C,EAAOhrC,MAAM,EACbgrC,EAAO18B,MAAMi/B,QAAU,QAExBhjD,EAAO4qC,SAAS,EAAIwX,CAAW,GAwG5B9U,EAAU,aAAcoV,EAAWjC,EAAQ/6B,CAAM,EAM1C,EAFPs8B,EADAztC,EAAQ,KAMV,EAKIkuC,EAAoB,SAAUQ,GA7QhB,IAAUrf,EAAU5G,EACnCvpB,EA8QF8uC,GAAcU,GADT1uC,EAAAA,GAAiB0uC,GAItBhxB,EAAWkwB,EAAiBE,GAlRSrlB,EAiRV,GAD3BkmB,EAAuB,IAAVtnB,EAAc,EAAK2mB,EAAa3mB,GACb,EAAIsnB,EA7Qd,gBAJKtf,EAkR0B8e,GA9Q1C7sB,SAAyBpiB,EAAUupB,EAAOA,GAC/B,gBAApB4G,EAAS/N,SAA0BpiB,EAAUupB,GAAQ,EAAIA,IACrC,kBAApB4G,EAAS/N,SAA4BpiB,EAAUupB,EAAO,GAAM,EAAIA,EAAOA,GAAa,EAAI,EAAIA,GAAQA,EAArB,GAC3D,gBAApB4G,EAAS/N,SAA0BpiB,EAAUupB,EAAOA,EAAOA,GACvC,iBAApB4G,EAAS/N,SAA2BpiB,EAAU,EAAGupB,EAAQA,EAAOA,EAAO,GACnD,mBAApB4G,EAAS/N,SAA6BpiB,EAAUupB,EAAO,GAAM,EAAIA,EAAOA,EAAOA,GAAQA,EAAO,IAAM,EAAIA,EAAO,IAAM,EAAIA,EAAO,GAAK,GACjH,gBAApB4G,EAAS/N,SAA0BpiB,EAAUupB,EAAOA,EAAOA,EAAOA,GAC9C,iBAApB4G,EAAS/N,SAA2BpiB,EAAU,GAAI,EAAGupB,EAAQA,EAAOA,EAAOA,GACvD,mBAApB4G,EAAS/N,SAA6BpiB,EAAUupB,EAAO,GAAM,EAAIA,EAAOA,EAAOA,EAAOA,EAAO,EAAI,EAAI,EAAGA,EAAQA,EAAOA,EAAOA,GAC1G,gBAApB4G,EAAS/N,SAA0BpiB,EAAUupB,EAAOA,EAAOA,EAAOA,EAAOA,GACrD,iBAApB4G,EAAS/N,SAA2BpiB,EAAU,EAAI,EAAGupB,EAAQA,EAAOA,EAAOA,EAAOA,GAC9D,mBAApB4G,EAAS/N,SAA6BpiB,EAAUupB,EAAO,GAAM,GAAKA,EAAOA,EAAOA,EAAOA,EAAOA,EAAO,EAAI,GAAK,EAAGA,EAAQA,EAAOA,EAAOA,EAAOA,IAGrHvpB,EAAvBmwB,EAASod,aAAwBpd,EAASod,aAAahkB,CAAI,EAE1DvpB,IAAWupB,GA+PhBh9B,EAAO4qC,SAAS,EAAG3kC,KAAKk9C,MAAMlxB,CAAQ,CAAC,EAClCuwB,EAAkBvwB,EAAUmwB,CAAW,IAC3CJ,EAAoBhiD,EAAOu5B,sBAAsBkpB,CAAiB,EAClEluC,EAAQ0uC,EAEV,EAM2B,IAAvBjjD,EAAOwqC,aACVxqC,EAAO4qC,SAAS,EAAG,CAAC,EAnLG6V,EAuLdA,EAvL6Bp7C,EAuLdq9C,EAAPC,GAjLdlB,QAAQ2B,WAAc/9C,EAAQ47C,WAGnCQ,QAAQ2B,UACP,CACCzB,aAAc3+B,KAAK4+B,UAAUv8C,CAAO,EACpCo7C,OAAQA,EAAO5yC,EAChB,EACAhO,SAAS+7C,MACT6E,IAAW5gD,SAASmQ,gBAAkB,OAAS,IAAMywC,EAAO5yC,EAC7D,EAlOI,eAAgB7N,GAAUA,EAAOqjD,WAAW,0BAA0B,EAAEp8C,QA6Y1EjH,EAAO4qC,SAAS,EAAG3kC,KAAKk9C,MAAMf,CAAW,CAAC,GAK3C9U,EAAU,cAAeoV,EAAWjC,EAAQ/6B,CAAM,EAGlDi8B,EAAaM,aAAa,CAAA,CAAI,EAC9BjiD,EAAOu5B,sBAAsBkpB,CAAiB,GAE/C,EAkFAd,EAAa9S,QAAU,WAGjBjL,IAGL/jC,SAASihB,oBAAoB,QAASugC,EAAc,CAAA,CAAK,EACzDrhD,EAAO8gB,oBAAoB,WAAYghC,EAAiB,CAAA,CAAK,EAG7DH,EAAaM,aAAa,EAQ1BD,EAFAD,EADAr8B,EAFAke,EAAW,KAOZ,EASC,GAniBA,kBAAmB/jC,UACnB,qBAAsBG,GACtB,0BAA2BA,GAC3B,YAAaA,EAAOsjD,QAAQ9/C,UA+jB7B,OA5BCm+C,EAAa9S,QAAQ,EAGrBjL,EAAWx+B,EAAOooC,EAAUnoC,GAAW,EAAE,EACzC08C,EAAcne,EAASztB,OAAStW,SAAS2hD,cAAc5d,EAASztB,MAAM,EAAI,KAG1EtW,SAASuQ,iBAAiB,QAASixC,EAAc,CAAA,CAAK,EAGlDzd,EAASqd,WAAard,EAASsd,UAClClhD,EAAOoQ,iBAAiB,WAAY0xC,EAAiB,CAAA,CAAK,EAiBrDH,EA/BW,KAAM,gGAiCzB,CAIA,CAAC,ECroBFxV,EAAEtsC,QAAQ,EAAE8a,MAAM,WAEhBwxB,EAAE,OAAO,EAAEuD,QAAQ,EAGnBvD,EAAE,8BAA8B,EAAEjkB,GAAG,QAAS,WAC5CikB,EAAE,eAAe,EAAEtN,YAAY,aAAa,EAC5CsN,EAAE,uBAAuB,EAAEv7B,KAAK,QAAQ,EAAEiuB,YAAY,MAAM,CAC9D,CAAC,EAGDsN,EAAEtsC,QAAQ,EAAE0jD,MAAM,SAAUt2C,GACR,KAAdA,EAAEggB,SACAkf,EAAE,kBAAkB,EAAElN,SAAS,YAAY,IAC7CkN,EAAE,iBAAiB,EAAEtN,YAAY,aAAa,EAC9CsN,EAAE,kBAAkB,EAAEtN,YAAY,YAAY,EAGpD,CAAC,EAGDsN,EAAE,iBAAiB,EAAEjkB,GAAG,QAAS,WAC/BikB,EAAE,iBAAiB,EAAEtN,YAAY,aAAa,EAC9CsN,EAAE,kBAAkB,EAAEtN,YAAY,YAAY,EAE9Chf,WAAW,WACTssB,EAAE,uBAAuB,EAAE12B,MAAM,CACnC,EAAG,GAAG,CACR,CAAC,EA+I6B,SAA1B+tC,EAAoCl7B,GAKtC,IAJA,IAAIm7B,EAAan7B,EAAM5iB,OAGnBg+C,EAAYD,EAAWE,mBACpBD,GAAiD,SAApCA,EAAUzT,QAAQvoC,YAAY,GAChDg8C,EAAYA,EAAUC,mBAExB,GAAKD,EAyBL,OAdI9vC,EApDS,SAAUpR,GACvB,GAAI3C,SAAS+jD,oBAAoB,MAAM,GAAKrP,UAAUsP,UAKpD,OAJAtP,UAAUsP,UAAUC,UAAUthD,CAAI,EAAEqa,KAClC,IAAM,CAAA,EACN,IAAM4D,QAAQpa,MAAM,qCAAuC7D,CAAI,CACjE,EACO,CAAA,EAEP,IAAIuhD,EAAyD,QAAjDlkD,SAASmQ,gBAAgBvN,aAAa,KAAK,EAEnDuhD,EAAWnkD,SAAS0C,cAAc,UAAU,EAI5C0hD,GAHJD,EAAS1zC,UAAY,mBACrB0zC,EAASjgC,MAAMggC,EAAQ,QAAU,QAAU,UAE3B/jD,OAAOwqC,aAAe3qC,SAASmQ,gBAAgByoB,WAO3DqN,GANJke,EAASjgC,MAAM5T,IAAM8zC,EAAY,KAEjCD,EAASthD,aAAa,WAAY,EAAE,EACpCshD,EAAS58C,MAAQ5E,EACjB3C,SAAS2lB,KAAK5iB,YAAYohD,CAAQ,EAEpB,CAAA,GACd,IACEA,EAAS36C,OAAO,EAChBy8B,EAAUjmC,SAASqkD,YAAY,MAAM,CAGvC,CAFE,MAAOj3C,GACP64B,EAAU,CAAA,CACZ,CAEA,OADAke,EAASnhD,WAAWC,YAAYkhD,CAAQ,EACjCle,CAEX,GAmBI4d,GAFES,EAAgBT,EAAUlC,cAAc,wBAAwB,GAEtD2C,EAEQT,GAAUU,SAAS,EAEzCX,EAAWhuC,MAAM,EACb7B,IAC0B,OAAxB6vC,EAAWjqB,UACbuhB,cAAc0I,EAAWjqB,QAAQ,EAEnCiqB,EAAWvW,UAAU3xB,IAAI,QAAQ,EACjCkoC,EAAWjqB,SAAW3Z,WAAW,WAC/B4jC,EAAWvW,UAAUvvB,OAAO,QAAQ,EACpCo9B,cAAc0I,EAAWjqB,QAAQ,EACjCiqB,EAAWjqB,SAAW,IACxB,EAAG,IAAI,GAEF5lB,EAtBL,MADA6M,QAAQC,KAAK+iC,CAAU,EACjB,IAAI1jD,MAAM,sCAAsC,CAuB1D,CA9Ka,IAAIqgD,aAAa,eAAgB,CAC5CxW,OAAQ,GACRhO,MAAO,IACPglB,gBAAiB,CAAA,EACjBC,YAAa,GACf,CAAC,EAGyB,EAAtB1U,EAAE,SAAS,EAAE5oC,QACL,IAAI8oC,QAAQ,YAAa,CAEjCc,SAAU,SACVC,aAAc,SAGdK,OAAQ,CAAA,EACRC,YAAa,SAGb9D,OAAQ,GACR+D,OAAQ,CAAA,EAGRvkB,OAAQ,CAAA,CACV,CAAC,EAqBGppB,OAAOqkD,QACXxkD,SAASuQ,iBAAiB,kBAlBD,SAAUkY,GACnC,IAAI5iB,EAAS4iB,EAAM5iB,OACf4+C,EAAgB,CAAEC,SAAU,OAAQC,MAAO,UAAW7K,OAAQ,OAAQ,EAEtE8K,EAAa5kD,SAAS2hD,cAAc,6BAA6B,EAChEiD,GACgD,WAAjDzkD,OAAO8wB,iBAAiB2zB,CAAU,EAAExyB,WAEpCvsB,EAAOg/C,cAAcxX,UAAUrjC,SAAS,WAAW,GAAKnE,GAAUA,EAAOg/C,cAAczd,kBAEzFpnC,SAAS2hD,cAAc,gBAAgB,EAEvC97C,GAFyCi/C,eAAeL,CAAa,CAIzE,CAIiE,EAIjEnY,EACE,mGACF,EAAEh3B,IAAI,OAAO,EAAEopB,SAAS,aAAa,EAGrC4N,EAAE,cAAc,EAAE2G,cAAc,CAO9BlxC,KAAM,QACNm0C,SAAU,2BACVmJ,QAAS,CACPppC,QAAS,CAAA,EACT6oC,mBAAoB,CAAA,EACpBD,QAAS,CAAC,EAAG,EACf,EACA9nC,MAAO,CACLkjC,OAAQ,wDACV,EACAzC,aAAc,IAGdN,UAAW,cACX1E,UAAW,CACTuS,WAAY,WAEV3kD,KAAKmyC,GAAGx7B,MAAMqhC,OAASh4C,KAAKmyC,GAAGx7B,MAAMqhC,OAAO9xC,QAC1C,aACA,0BACF,CACF,CACF,EACAmvC,oBAAqB,CAAA,EACrBmD,SAAU,CAAA,CACZ,CAAC,EAGD54C,SACG2hD,cAAc,gBAAgB,EAC9BlzC,iBAAiB,wBAAwB,EACzCogC,QAAQ,SAAU6N,GACjB,IAEMkE,EAFF5yC,EAAK0uC,EAAQ95C,aAAa,IAAI,EAC9BoL,KACE4yC,EAAS5gD,SAAS0C,cAAc,GAAG,GAChC+N,UAAY,cACnBmwC,EAAO7qC,KAAO,IAAM/H,EACpB4yC,EAAOxvC,UACL,oEACFwvC,EAAO7E,MAAQ,YACfW,EAAQ35C,YAAY69C,CAAM,EAE9B,CAAC,EAwECzgD,OAAO6kD,yBACThlD,SACGyO,iBAAiB,qCAAqC,EACtDogC,QAAQ,SAAU6N,EAASlhC,EAAOypC,GAEjC,IAKIC,EALAxzB,EAAYgrB,EAAQmI,cAEkC,SAAtDnzB,EAAU0V,kBAAkBgJ,QAAQvoC,YAAY,KAGhDq9C,EAAallD,SAAS0C,cAAc,QAAQ,GACrCq5C,MAAQ,oBACnBmJ,EAAWz0C,UAAY,wBACvBy0C,EAAW9zC,UAAY,mHACvB8zC,EAAW30C,iBAAiB,QAASozC,CAAuB,EAC5DjyB,EAAUvB,QAAQ+0B,CAAU,EAC9B,CAAC,CAEP,CAAC"} \ No newline at end of file diff --git a/assets/js/plugins/gumshoe.js b/assets/js/plugins/gumshoe.js new file mode 100644 index 0000000..713b6eb --- /dev/null +++ b/assets/js/plugins/gumshoe.js @@ -0,0 +1,484 @@ +/*! + * gumshoejs v5.1.1 + * A simple, framework-agnostic scrollspy script. + * (c) 2019 Chris Ferdinandi + * MIT License + * http://github.com/cferdinandi/gumshoe + */ + +(function (root, factory) { + if ( typeof define === 'function' && define.amd ) { + define([], (function () { + return factory(root); + })); + } else if ( typeof exports === 'object' ) { + module.exports = factory(root); + } else { + root.Gumshoe = factory(root); + } +})(typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : this, (function (window) { + + 'use strict'; + + // + // Defaults + // + + var defaults = { + + // Active classes + navClass: 'active', + contentClass: 'active', + + // Nested navigation + nested: false, + nestedClass: 'active', + + // Offset & reflow + offset: 0, + reflow: false, + + // Event support + events: true + + }; + + + // + // Methods + // + + /** + * Merge two or more objects together. + * @param {Object} objects The objects to merge together + * @returns {Object} Merged values of defaults and options + */ + var extend = function () { + var merged = {}; + Array.prototype.forEach.call(arguments, (function (obj) { + for (var key in obj) { + if (!obj.hasOwnProperty(key)) return; + merged[key] = obj[key]; + } + })); + return merged; + }; + + /** + * Emit a custom event + * @param {String} type The event type + * @param {Node} elem The element to attach the event to + * @param {Object} detail Any details to pass along with the event + */ + var emitEvent = function (type, elem, detail) { + + // Make sure events are enabled + if (!detail.settings.events) return; + + // Create a new event + var event = new CustomEvent(type, { + bubbles: true, + cancelable: true, + detail: detail + }); + + // Dispatch the event + elem.dispatchEvent(event); + + }; + + /** + * Get an element's distance from the top of the Document. + * @param {Node} elem The element + * @return {Number} Distance from the top in pixels + */ + var getOffsetTop = function (elem) { + var location = 0; + if (elem.offsetParent) { + while (elem) { + location += elem.offsetTop; + elem = elem.offsetParent; + } + } + return location >= 0 ? location : 0; + }; + + /** + * Sort content from first to last in the DOM + * @param {Array} contents The content areas + */ + var sortContents = function (contents) { + if(contents) { + contents.sort((function (item1, item2) { + var offset1 = getOffsetTop(item1.content); + var offset2 = getOffsetTop(item2.content); + if (offset1 < offset2) return -1; + return 1; + })); + } + }; + + /** + * Get the offset to use for calculating position + * @param {Object} settings The settings for this instantiation + * @return {Float} The number of pixels to offset the calculations + */ + var getOffset = function (settings) { + + // if the offset is a function run it + if (typeof settings.offset === 'function') { + return parseFloat(settings.offset()); + } + + // Otherwise, return it as-is + return parseFloat(settings.offset); + + }; + + /** + * Get the document element's height + * @private + * @returns {Number} + */ + var getDocumentHeight = function () { + return Math.max( + document.body.scrollHeight, document.documentElement.scrollHeight, + document.body.offsetHeight, document.documentElement.offsetHeight, + document.body.clientHeight, document.documentElement.clientHeight + ); + }; + + /** + * Determine if an element is in view + * @param {Node} elem The element + * @param {Object} settings The settings for this instantiation + * @param {Boolean} bottom If true, check if element is above bottom of viewport instead + * @return {Boolean} Returns true if element is in the viewport + */ + var isInView = function (elem, settings, bottom) { + var bounds = elem.getBoundingClientRect(); + var offset = getOffset(settings); + if (bottom) { + return parseInt(bounds.bottom, 10) < (window.innerHeight || document.documentElement.clientHeight); + } + return parseInt(bounds.top, 10) <= offset; + }; + + /** + * Check if at the bottom of the viewport + * @return {Boolean} If true, page is at the bottom of the viewport + */ + var isAtBottom = function () { + if (window.innerHeight + window.pageYOffset >= getDocumentHeight()) return true; + return false; + }; + + /** + * Check if the last item should be used (even if not at the top of the page) + * @param {Object} item The last item + * @param {Object} settings The settings for this instantiation + * @return {Boolean} If true, use the last item + */ + var useLastItem = function (item, settings) { + if (isAtBottom() && isInView(item.content, settings, true)) return true; + return false; + }; + + /** + * Get the active content + * @param {Array} contents The content areas + * @param {Object} settings The settings for this instantiation + * @return {Object} The content area and matching navigation link + */ + var getActive = function (contents, settings) { + var last = contents[contents.length-1]; + if (useLastItem(last, settings)) return last; + for (var i = contents.length - 1; i >= 0; i--) { + if (isInView(contents[i].content, settings)) return contents[i]; + } + }; + + /** + * Deactivate parent navs in a nested navigation + * @param {Node} nav The starting navigation element + * @param {Object} settings The settings for this instantiation + */ + var deactivateNested = function (nav, settings) { + + // If nesting isn't activated, bail + if (!settings.nested) return; + + // Get the parent navigation + var li = nav.parentNode.closest('li'); + if (!li) return; + + // Remove the active class + li.classList.remove(settings.nestedClass); + + // Apply recursively to any parent navigation elements + deactivateNested(li, settings); + + }; + + /** + * Deactivate a nav and content area + * @param {Object} items The nav item and content to deactivate + * @param {Object} settings The settings for this instantiation + */ + var deactivate = function (items, settings) { + + // Make sure their are items to deactivate + if (!items) return; + + // Get the parent list item + var li = items.nav.closest('li'); + if (!li) return; + + // Remove the active class from the nav and content + li.classList.remove(settings.navClass); + items.content.classList.remove(settings.contentClass); + + // Deactivate any parent navs in a nested navigation + deactivateNested(li, settings); + + // Emit a custom event + emitEvent('gumshoeDeactivate', li, { + link: items.nav, + content: items.content, + settings: settings + }); + + }; + + + /** + * Activate parent navs in a nested navigation + * @param {Node} nav The starting navigation element + * @param {Object} settings The settings for this instantiation + */ + var activateNested = function (nav, settings) { + + // If nesting isn't activated, bail + if (!settings.nested) return; + + // Get the parent navigation + var li = nav.parentNode.closest('li'); + if (!li) return; + + // Add the active class + li.classList.add(settings.nestedClass); + + // Apply recursively to any parent navigation elements + activateNested(li, settings); + + }; + + /** + * Activate a nav and content area + * @param {Object} items The nav item and content to activate + * @param {Object} settings The settings for this instantiation + */ + var activate = function (items, settings) { + + // Make sure their are items to activate + if (!items) return; + + // Get the parent list item + var li = items.nav.closest('li'); + if (!li) return; + + // Add the active class to the nav and content + li.classList.add(settings.navClass); + items.content.classList.add(settings.contentClass); + + // Activate any parent navs in a nested navigation + activateNested(li, settings); + + // Emit a custom event + emitEvent('gumshoeActivate', li, { + link: items.nav, + content: items.content, + settings: settings + }); + + }; + + /** + * Create the Constructor object + * @param {String} selector The selector to use for navigation items + * @param {Object} options User options and settings + */ + var Constructor = function (selector, options) { + + // + // Variables + // + + var publicAPIs = {}; + var navItems, contents, current, timeout, settings; + + + // + // Methods + // + + /** + * Set variables from DOM elements + */ + publicAPIs.setup = function () { + + // Get all nav items + navItems = document.querySelectorAll(selector); + + // Create contents array + contents = []; + + // Loop through each item, get it's matching content, and push to the array + Array.prototype.forEach.call(navItems, (function (item) { + + // Get the content for the nav item + var content = document.getElementById(decodeURIComponent(item.hash.substr(1))); + if (!content) return; + + // Push to the contents array + contents.push({ + nav: item, + content: content + }); + + })); + + // Sort contents by the order they appear in the DOM + sortContents(contents); + + }; + + /** + * Detect which content is currently active + */ + publicAPIs.detect = function () { + + // Get the active content + var active = getActive(contents, settings); + + // if there's no active content, deactivate and bail + if (!active) { + if (current) { + deactivate(current, settings); + current = null; + } + return; + } + + // If the active content is the one currently active, do nothing + if (current && active.content === current.content) return; + + // Deactivate the current content and activate the new content + deactivate(current, settings); + activate(active, settings); + + // Update the currently active content + current = active; + + }; + + /** + * Detect the active content on scroll + * Debounced for performance + */ + var scrollHandler = function (event) { + + // If there's a timer, cancel it + if (timeout) { + window.cancelAnimationFrame(timeout); + } + + // Setup debounce callback + timeout = window.requestAnimationFrame(publicAPIs.detect); + + }; + + /** + * Update content sorting on resize + * Debounced for performance + */ + var resizeHandler = function (event) { + + // If there's a timer, cancel it + if (timeout) { + window.cancelAnimationFrame(timeout); + } + + // Setup debounce callback + timeout = window.requestAnimationFrame((function () { + sortContents(contents); + publicAPIs.detect(); + })); + + }; + + /** + * Destroy the current instantiation + */ + publicAPIs.destroy = function () { + + // Undo DOM changes + if (current) { + deactivate(current, settings); + } + + // Remove event listeners + window.removeEventListener('scroll', scrollHandler, false); + if (settings.reflow) { + window.removeEventListener('resize', resizeHandler, false); + } + + // Reset variables + contents = null; + navItems = null; + current = null; + timeout = null; + settings = null; + + }; + + /** + * Initialize the current instantiation + */ + var init = function () { + + // Merge user options into defaults + settings = extend(defaults, options || {}); + + // Setup variables based on the current DOM + publicAPIs.setup(); + + // Find the currently active content + publicAPIs.detect(); + + // Setup event listeners + window.addEventListener('scroll', scrollHandler, false); + if (settings.reflow) { + window.addEventListener('resize', resizeHandler, false); + } + + }; + + + // + // Initialize and return the public APIs + // + + init(); + return publicAPIs; + + }; + + + // + // Return the Constructor + // + + return Constructor; + +})); \ No newline at end of file diff --git a/assets/js/plugins/jquery.ba-throttle-debounce.js b/assets/js/plugins/jquery.ba-throttle-debounce.js new file mode 100644 index 0000000..fa30bdf --- /dev/null +++ b/assets/js/plugins/jquery.ba-throttle-debounce.js @@ -0,0 +1,252 @@ +/*! + * jQuery throttle / debounce - v1.1 - 3/7/2010 + * http://benalman.com/projects/jquery-throttle-debounce-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ + +// Script: jQuery throttle / debounce: Sometimes, less is more! +// +// *Version: 1.1, Last updated: 3/7/2010* +// +// Project Home - http://benalman.com/projects/jquery-throttle-debounce-plugin/ +// GitHub - http://github.com/cowboy/jquery-throttle-debounce/ +// Source - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.js +// (Minified) - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.min.js (0.7kb) +// +// About: License +// +// Copyright (c) 2010 "Cowboy" Ben Alman, +// Dual licensed under the MIT and GPL licenses. +// http://benalman.com/about/license/ +// +// About: Examples +// +// These working examples, complete with fully commented code, illustrate a few +// ways in which this plugin can be used. +// +// Throttle - http://benalman.com/code/projects/jquery-throttle-debounce/examples/throttle/ +// Debounce - http://benalman.com/code/projects/jquery-throttle-debounce/examples/debounce/ +// +// About: Support and Testing +// +// Information about what version or versions of jQuery this plugin has been +// tested with, what browsers it has been tested in, and where the unit tests +// reside (so you can test it yourself). +// +// jQuery Versions - none, 1.3.2, 1.4.2 +// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.6, Safari 3-4, Chrome 4-5, Opera 9.6-10.1. +// Unit Tests - http://benalman.com/code/projects/jquery-throttle-debounce/unit/ +// +// About: Release History +// +// 1.1 - (3/7/2010) Fixed a bug in where trailing callbacks +// executed later than they should. Reworked a fair amount of internal +// logic as well. +// 1.0 - (3/6/2010) Initial release as a stand-alone project. Migrated over +// from jquery-misc repo v0.4 to jquery-throttle repo v1.0, added the +// no_trailing throttle parameter and debounce functionality. +// +// Topic: Note for non-jQuery users +// +// jQuery isn't actually required for this plugin, because nothing internal +// uses any jQuery methods or properties. jQuery is just used as a namespace +// under which these methods can exist. +// +// Since jQuery isn't actually required for this plugin, if jQuery doesn't exist +// when this plugin is loaded, the method described below will be created in +// the `Cowboy` namespace. Usage will be exactly the same, but instead of +// $.method() or jQuery.method(), you'll need to use Cowboy.method(). + +(function(window,undefined){ + '$:nomunge'; // Used by YUI compressor. + + // Since jQuery really isn't required for this plugin, use `jQuery` as the + // namespace only if it already exists, otherwise use the `Cowboy` namespace, + // creating it if necessary. + var $ = window.jQuery || window.Cowboy || ( window.Cowboy = {} ), + + // Internal method reference. + jq_throttle; + + // Method: jQuery.throttle + // + // Throttle execution of a function. Especially useful for rate limiting + // execution of handlers on events like resize and scroll. If you want to + // rate-limit execution of a function to a single time, see the + // method. + // + // In this visualization, | is a throttled-function call and X is the actual + // callback execution: + // + // > Throttled with `no_trailing` specified as false or unspecified: + // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| + // > X X X X X X X X X X X X + // > + // > Throttled with `no_trailing` specified as true: + // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| + // > X X X X X X X X X X + // + // Usage: + // + // > var throttled = jQuery.throttle( delay, [ no_trailing, ] callback ); + // > + // > jQuery('selector').bind( 'someevent', throttled ); + // > jQuery('selector').unbind( 'someevent', throttled ); + // + // This also works in jQuery 1.4+: + // + // > jQuery('selector').bind( 'someevent', jQuery.throttle( delay, [ no_trailing, ] callback ) ); + // > jQuery('selector').unbind( 'someevent', callback ); + // + // Arguments: + // + // delay - (Number) A zero-or-greater delay in milliseconds. For event + // callbacks, values around 100 or 250 (or even higher) are most useful. + // no_trailing - (Boolean) Optional, defaults to false. If no_trailing is + // true, callback will only execute every `delay` milliseconds while the + // throttled-function is being called. If no_trailing is false or + // unspecified, callback will be executed one final time after the last + // throttled-function call. (After the throttled-function has not been + // called for `delay` milliseconds, the internal counter is reset) + // callback - (Function) A function to be executed after delay milliseconds. + // The `this` context and all arguments are passed through, as-is, to + // `callback` when the throttled-function is executed. + // + // Returns: + // + // (Function) A new, throttled, function. + + $.throttle = jq_throttle = function( delay, no_trailing, callback, debounce_mode ) { + // After wrapper has stopped being called, this timeout ensures that + // `callback` is executed at the proper times in `throttle` and `end` + // debounce modes. + var timeout_id, + + // Keep track of the last time `callback` was executed. + last_exec = 0; + + // `no_trailing` defaults to falsy. + if ( typeof no_trailing !== 'boolean' ) { + debounce_mode = callback; + callback = no_trailing; + no_trailing = undefined; + } + + // The `wrapper` function encapsulates all of the throttling / debouncing + // functionality and when executed will limit the rate at which `callback` + // is executed. + function wrapper() { + var that = this, + elapsed = +new Date() - last_exec, + args = arguments; + + // Execute `callback` and update the `last_exec` timestamp. + function exec() { + last_exec = +new Date(); + callback.apply( that, args ); + }; + + // If `debounce_mode` is true (at_begin) this is used to clear the flag + // to allow future `callback` executions. + function clear() { + timeout_id = undefined; + }; + + if ( debounce_mode && !timeout_id ) { + // Since `wrapper` is being called for the first time and + // `debounce_mode` is true (at_begin), execute `callback`. + exec(); + } + + // Clear any existing timeout. + timeout_id && clearTimeout( timeout_id ); + + if ( debounce_mode === undefined && elapsed > delay ) { + // In throttle mode, if `delay` time has been exceeded, execute + // `callback`. + exec(); + + } else if ( no_trailing !== true ) { + // In trailing throttle mode, since `delay` time has not been + // exceeded, schedule `callback` to execute `delay` ms after most + // recent execution. + // + // If `debounce_mode` is true (at_begin), schedule `clear` to execute + // after `delay` ms. + // + // If `debounce_mode` is false (at end), schedule `callback` to + // execute after `delay` ms. + timeout_id = setTimeout( debounce_mode ? clear : exec, debounce_mode === undefined ? delay - elapsed : delay ); + } + }; + + // Set the guid of `wrapper` function to the same of original callback, so + // it can be removed in jQuery 1.4+ .unbind or .die by using the original + // callback as a reference. + if ( $.guid ) { + wrapper.guid = callback.guid = callback.guid || $.guid++; + } + + // Return the wrapper function. + return wrapper; + }; + + // Method: jQuery.debounce + // + // Debounce execution of a function. Debouncing, unlike throttling, + // guarantees that a function is only executed a single time, either at the + // very beginning of a series of calls, or at the very end. If you want to + // simply rate-limit execution of a function, see the + // method. + // + // In this visualization, | is a debounced-function call and X is the actual + // callback execution: + // + // > Debounced with `at_begin` specified as false or unspecified: + // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| + // > X X + // > + // > Debounced with `at_begin` specified as true: + // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| + // > X X + // + // Usage: + // + // > var debounced = jQuery.debounce( delay, [ at_begin, ] callback ); + // > + // > jQuery('selector').bind( 'someevent', debounced ); + // > jQuery('selector').unbind( 'someevent', debounced ); + // + // This also works in jQuery 1.4+: + // + // > jQuery('selector').bind( 'someevent', jQuery.debounce( delay, [ at_begin, ] callback ) ); + // > jQuery('selector').unbind( 'someevent', callback ); + // + // Arguments: + // + // delay - (Number) A zero-or-greater delay in milliseconds. For event + // callbacks, values around 100 or 250 (or even higher) are most useful. + // at_begin - (Boolean) Optional, defaults to false. If at_begin is false or + // unspecified, callback will only be executed `delay` milliseconds after + // the last debounced-function call. If at_begin is true, callback will be + // executed only at the first debounced-function call. (After the + // throttled-function has not been called for `delay` milliseconds, the + // internal counter is reset) + // callback - (Function) A function to be executed after delay milliseconds. + // The `this` context and all arguments are passed through, as-is, to + // `callback` when the debounced-function is executed. + // + // Returns: + // + // (Function) A new, debounced, function. + + $.debounce = function( delay, at_begin, callback ) { + return callback === undefined + ? jq_throttle( delay, at_begin, false ) + : jq_throttle( delay, callback, at_begin !== false ); + }; + +})(this); diff --git a/assets/js/plugins/jquery.fitvids.js b/assets/js/plugins/jquery.fitvids.js new file mode 100644 index 0000000..5c2f85c --- /dev/null +++ b/assets/js/plugins/jquery.fitvids.js @@ -0,0 +1,82 @@ +/*jshint browser:true */ +/*! +* FitVids 1.1 +* +* Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com +* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/ +* Released under the WTFPL license - http://sam.zoy.org/wtfpl/ +* +*/ + +;(function( $ ){ + + 'use strict'; + + $.fn.fitVids = function( options ) { + var settings = { + customSelector: null, + ignore: null + }; + + if(!document.getElementById('fit-vids-style')) { + // appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js + var head = document.head || document.getElementsByTagName('head')[0]; + var css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}'; + var div = document.createElement("div"); + div.innerHTML = '

x

'; + head.appendChild(div.childNodes[1]); + } + + if ( options ) { + $.extend( settings, options ); + } + + return this.each(function(){ + var selectors = [ + 'iframe[src*="player.vimeo.com"]', + 'iframe[src*="youtube.com"]', + 'iframe[src*="youtube-nocookie.com"]', + 'iframe[src*="kickstarter.com"][src*="video.html"]', + 'object', + 'embed' + ]; + + if (settings.customSelector) { + selectors.push(settings.customSelector); + } + + var ignoreList = '.fitvidsignore'; + + if(settings.ignore) { + ignoreList = ignoreList + ', ' + settings.ignore; + } + + var $allVideos = $(this).find(selectors.join(',')); + $allVideos = $allVideos.not('object object'); // SwfObj conflict patch + $allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video. + + $allVideos.each(function(count){ + var $this = $(this); + if($this.parents(ignoreList).length > 0) { + return; // Disable FitVids on this video. + } + if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; } + if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width')))) + { + $this.attr('height', 9); + $this.attr('width', 16); + } + var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(), + width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(), + aspectRatio = height / width; + if(!$this.attr('id')){ + var videoID = 'fitvid' + count; + $this.attr('id', videoID); + } + $this.wrap('
').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%'); + $this.removeAttr('height').removeAttr('width'); + }); + }); + }; +// Works with either jQuery or Zepto +})( window.jQuery || window.Zepto ); \ No newline at end of file diff --git a/assets/js/plugins/jquery.greedy-navigation.js b/assets/js/plugins/jquery.greedy-navigation.js new file mode 100644 index 0000000..ce8a80c --- /dev/null +++ b/assets/js/plugins/jquery.greedy-navigation.js @@ -0,0 +1,128 @@ +/* +GreedyNav.js - https://github.com/lukejacksonn/GreedyNav +Licensed under the MIT license - http://opensource.org/licenses/MIT +Copyright (c) 2015 Luke Jackson http://lukejacksonn.com +*/ + +$(function() { + + var $btn = $("nav.greedy-nav .greedy-nav__toggle"); + var $vlinks = $("nav.greedy-nav .visible-links"); + var $hlinks = $("nav.greedy-nav .hidden-links"); + var $nav = $("nav.greedy-nav"); + var $logo = $('nav.greedy-nav .site-logo'); + var $logoImg = $('nav.greedy-nav .site-logo img'); + var $title = $("nav.greedy-nav .site-title"); + var $search = $('nav.greedy-nav button.search__toggle'); + + var numOfItems, totalSpace, closingTime, breakWidths; + + // This function measures both hidden and visible links and sets the navbar breakpoints + // This is called the first time the script runs and everytime the "check()" function detects a change of window width that reached a different CSS width breakpoint, which affects the size of navbar Items + // Please note that "CSS width breakpoints" (which are only 4) !== "navbar breakpoints" (which are as many as the number of items on the navbar) + function measureLinks(){ + numOfItems = 0; + totalSpace = 0; + closingTime = 1000; + breakWidths = []; + + // Adds the width of a navItem in order to create breakpoints for the navbar + function addWidth(i, w) { + totalSpace += w; + numOfItems += 1; + breakWidths.push(totalSpace); + } + + // Measures the width of hidden links by making a temporary clone of them and positioning under visible links + function hiddenWidth(obj){ + var clone = obj.clone(); + clone.css("visibility","hidden"); + $vlinks.append(clone); + addWidth(0, clone.outerWidth()); + clone.remove(); + } + // Measure both visible and hidden links widths + $vlinks.children().outerWidth(addWidth); + $hlinks.children().each(function(){hiddenWidth($(this))}); + } + // Get initial state + measureLinks(); + + var winWidth = $( window ).width(); + // Set the last measured CSS width breakpoint: 0: <768px, 1: <1024px, 2: < 1280px, 3: >= 1280px. + var lastBreakpoint = winWidth < 768 ? 0 : winWidth < 1024 ? 1 : winWidth < 1280 ? 2 : 3; + + var availableSpace, numOfVisibleItems, requiredSpace, timer; + + function check() { + + winWidth = $( window ).width(); + // Set the current CSS width breakpoint: 0: <768px, 1: <1024px, 2: < 1280px, 3: >= 1280px. + var curBreakpoint = winWidth < 768 ? 0 : winWidth < 1024 ? 1 : winWidth < 1280 ? 2 : 3; + // If current breakpoint is different from last measured breakpoint, measureLinks again + if(curBreakpoint !== lastBreakpoint) measureLinks(); + // Set the last measured CSS width breakpoint with the current breakpoint + lastBreakpoint = curBreakpoint; + + // Get instant state + numOfVisibleItems = $vlinks.children().length; + // Decrease the width of visible elements from the nav innerWidth to find out the available space for navItems + availableSpace = /* nav */ $nav.innerWidth() + - /* logo */ ($logo.length !== 0 ? $logo.outerWidth(true) : 0) + - /* title */ $title.outerWidth(true) + - /* search */ ($search.length !== 0 ? $search.outerWidth(true) : 0) + - /* toggle */ (numOfVisibleItems !== breakWidths.length ? $btn.outerWidth(true) : 0); + requiredSpace = breakWidths[numOfVisibleItems - 1]; + + // There is not enought space + if (requiredSpace > availableSpace) { + $vlinks.children().last().prependTo($hlinks); + numOfVisibleItems -= 1; + check(); + // There is more than enough space. If only one element is hidden, add the toggle width to the available space + } else if (availableSpace + (numOfVisibleItems === breakWidths.length - 1?$btn.outerWidth(true):0) > breakWidths[numOfVisibleItems]) { + $hlinks.children().first().appendTo($vlinks); + numOfVisibleItems += 1; + check(); + } + // Update the button accordingly + $btn.attr("count", numOfItems - numOfVisibleItems); + if (numOfVisibleItems === numOfItems) { + $btn.addClass('hidden'); + } else $btn.removeClass('hidden'); + } + + // Window listeners + $(window).resize(function() { + check(); + }); + + $btn.on('click', function() { + $hlinks.toggleClass('hidden'); + $(this).toggleClass('close'); + clearTimeout(timer); + }); + + $hlinks.on('mouseleave', function() { + // Mouse has left, start the timer + timer = setTimeout(function() { + $hlinks.addClass('hidden'); + $('.greedy-nav__toggle').removeClass('close'); + }, closingTime); + }).on('mouseenter', function() { + // Mouse is back, cancel the timer + clearTimeout(timer); + }) + + // check if page has a logo + if($logoImg.length !== 0){ + // check if logo is not loaded + if(!($logoImg[0].complete || $logoImg[0].naturalWidth !== 0)){ + // if logo is not loaded wait for logo to load or fail to check + $logoImg.one("load error", check); + // if logo is already loaded just check + } else check(); + // if page does not have a logo just check + } else check(); + +}); diff --git a/assets/js/plugins/jquery.magnific-popup.js b/assets/js/plugins/jquery.magnific-popup.js new file mode 100644 index 0000000..7d1d197 --- /dev/null +++ b/assets/js/plugins/jquery.magnific-popup.js @@ -0,0 +1,1860 @@ +/*! Magnific Popup - v1.1.0 - 2016-02-20 +* http://dimsemenov.com/plugins/magnific-popup/ +* Copyright (c) 2016 Dmitry Semenov; */ +;(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS + factory(require('jquery')); + } else { + // Browser globals + factory(window.jQuery || window.Zepto); + } + }(function($) { + + /*>>core*/ + /** + * + * Magnific Popup Core JS file + * + */ + + + /** + * Private static constants + */ + var CLOSE_EVENT = 'Close', + BEFORE_CLOSE_EVENT = 'BeforeClose', + AFTER_CLOSE_EVENT = 'AfterClose', + BEFORE_APPEND_EVENT = 'BeforeAppend', + MARKUP_PARSE_EVENT = 'MarkupParse', + OPEN_EVENT = 'Open', + CHANGE_EVENT = 'Change', + NS = 'mfp', + EVENT_NS = '.' + NS, + READY_CLASS = 'mfp-ready', + REMOVING_CLASS = 'mfp-removing', + PREVENT_CLOSE_CLASS = 'mfp-prevent-close'; + + + /** + * Private vars + */ + /*jshint -W079 */ + var mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this' + MagnificPopup = function(){}, + _isJQ = !!(window.jQuery), + _prevStatus, + _window = $(window), + _document, + _prevContentType, + _wrapClasses, + _currPopupType; + + + /** + * Private functions + */ + var _mfpOn = function(name, f) { + mfp.ev.on(NS + name + EVENT_NS, f); + }, + _getEl = function(className, appendTo, html, raw) { + var el = document.createElement('div'); + el.className = 'mfp-'+className; + if(html) { + el.innerHTML = html; + } + if(!raw) { + el = $(el); + if(appendTo) { + el.appendTo(appendTo); + } + } else if(appendTo) { + appendTo.appendChild(el); + } + return el; + }, + _mfpTrigger = function(e, data) { + mfp.ev.triggerHandler(NS + e, data); + + if(mfp.st.callbacks) { + // converts "mfpEventName" to "eventName" callback and triggers it if it's present + e = e.charAt(0).toLowerCase() + e.slice(1); + if(mfp.st.callbacks[e]) { + mfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]); + } + } + }, + _getCloseBtn = function(type) { + if(type !== _currPopupType || !mfp.currTemplate.closeBtn) { + mfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) ); + _currPopupType = type; + } + return mfp.currTemplate.closeBtn; + }, + // Initialize Magnific Popup only when called at least once + _checkInstance = function() { + if(!$.magnificPopup.instance) { + /*jshint -W020 */ + mfp = new MagnificPopup(); + mfp.init(); + $.magnificPopup.instance = mfp; + } + }, + // CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr + supportsTransitions = function() { + var s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist + v = ['ms','O','Moz','Webkit']; // 'v' for vendor + + if( s['transition'] !== undefined ) { + return true; + } + + while( v.length ) { + if( v.pop() + 'Transition' in s ) { + return true; + } + } + + return false; + }; + + + + /** + * Public functions + */ + MagnificPopup.prototype = { + + constructor: MagnificPopup, + + /** + * Initializes Magnific Popup plugin. + * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed + */ + init: function() { + var appVersion = navigator.appVersion; + mfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener; + mfp.isAndroid = (/android/gi).test(appVersion); + mfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion); + mfp.supportsTransition = supportsTransitions(); + + // We disable fixed positioned lightbox on devices that don't handle it nicely. + // If you know a better way of detecting this - let me know. + mfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) ); + _document = $(document); + + mfp.popupsCache = {}; + }, + + /** + * Opens popup + * @param data [description] + */ + open: function(data) { + + var i; + + if(data.isObj === false) { + // convert jQuery collection to array to avoid conflicts later + mfp.items = data.items.toArray(); + + mfp.index = 0; + var items = data.items, + item; + for(i = 0; i < items.length; i++) { + item = items[i]; + if(item.parsed) { + item = item.el[0]; + } + if(item === data.el[0]) { + mfp.index = i; + break; + } + } + } else { + mfp.items = $.isArray(data.items) ? data.items : [data.items]; + mfp.index = data.index || 0; + } + + // if popup is already opened - we just update the content + if(mfp.isOpen) { + mfp.updateItemHTML(); + return; + } + + mfp.types = []; + _wrapClasses = ''; + if(data.mainEl && data.mainEl.length) { + mfp.ev = data.mainEl.eq(0); + } else { + mfp.ev = _document; + } + + if(data.key) { + if(!mfp.popupsCache[data.key]) { + mfp.popupsCache[data.key] = {}; + } + mfp.currTemplate = mfp.popupsCache[data.key]; + } else { + mfp.currTemplate = {}; + } + + + + mfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); + mfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos; + + if(mfp.st.modal) { + mfp.st.closeOnContentClick = false; + mfp.st.closeOnBgClick = false; + mfp.st.showCloseBtn = false; + mfp.st.enableEscapeKey = false; + } + + + // Building markup + // main containers are created only once + if(!mfp.bgOverlay) { + + // Dark overlay + mfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() { + mfp.close(); + }); + + mfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) { + if(mfp._checkIfClose(e.target)) { + mfp.close(); + } + }); + + mfp.container = _getEl('container', mfp.wrap); + } + + mfp.contentContainer = _getEl('content'); + if(mfp.st.preloader) { + mfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading); + } + + + // Initializing modules + var modules = $.magnificPopup.modules; + for(i = 0; i < modules.length; i++) { + var n = modules[i]; + n = n.charAt(0).toUpperCase() + n.slice(1); + mfp['init'+n].call(mfp); + } + _mfpTrigger('BeforeOpen'); + + + if(mfp.st.showCloseBtn) { + // Close button + if(!mfp.st.closeBtnInside) { + mfp.wrap.append( _getCloseBtn() ); + } else { + _mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) { + values.close_replaceWith = _getCloseBtn(item.type); + }); + _wrapClasses += ' mfp-close-btn-in'; + } + } + + if(mfp.st.alignTop) { + _wrapClasses += ' mfp-align-top'; + } + + + + if(mfp.fixedContentPos) { + mfp.wrap.css({ + overflow: mfp.st.overflowY, + overflowX: 'hidden', + overflowY: mfp.st.overflowY + }); + } else { + mfp.wrap.css({ + top: _window.scrollTop(), + position: 'absolute' + }); + } + if( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) { + mfp.bgOverlay.css({ + height: _document.height(), + position: 'absolute' + }); + } + + + + if(mfp.st.enableEscapeKey) { + // Close on ESC key + _document.on('keyup' + EVENT_NS, function(e) { + if(e.keyCode === 27) { + mfp.close(); + } + }); + } + + _window.on('resize' + EVENT_NS, function() { + mfp.updateSize(); + }); + + + if(!mfp.st.closeOnContentClick) { + _wrapClasses += ' mfp-auto-cursor'; + } + + if(_wrapClasses) + mfp.wrap.addClass(_wrapClasses); + + + // this triggers recalculation of layout, so we get it once to not to trigger twice + var windowHeight = mfp.wH = _window.height(); + + + var windowStyles = {}; + + if( mfp.fixedContentPos ) { + if(mfp._hasScrollBar(windowHeight)){ + var s = mfp._getScrollbarSize(); + if(s) { + windowStyles.marginRight = s; + } + } + } + + if(mfp.fixedContentPos) { + if(!mfp.isIE7) { + windowStyles.overflow = 'hidden'; + } else { + // ie7 double-scroll bug + $('body, html').css('overflow', 'hidden'); + } + } + + + + var classesToadd = mfp.st.mainClass; + if(mfp.isIE7) { + classesToadd += ' mfp-ie7'; + } + if(classesToadd) { + mfp._addClassToMFP( classesToadd ); + } + + // add content + mfp.updateItemHTML(); + + _mfpTrigger('BuildControls'); + + // remove scrollbar, add margin e.t.c + $('html').css(windowStyles); + + // add everything to DOM + mfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) ); + + // Save last focused element + mfp._lastFocusedEl = document.activeElement; + + // Wait for next cycle to allow CSS transition + setTimeout(function() { + + if(mfp.content) { + mfp._addClassToMFP(READY_CLASS); + mfp._setFocus(); + } else { + // if content is not defined (not loaded e.t.c) we add class only for BG + mfp.bgOverlay.addClass(READY_CLASS); + } + + // Trap the focus in popup + _document.on('focusin' + EVENT_NS, mfp._onFocusIn); + + }, 16); + + mfp.isOpen = true; + mfp.updateSize(windowHeight); + _mfpTrigger(OPEN_EVENT); + + return data; + }, + + /** + * Closes the popup + */ + close: function() { + if(!mfp.isOpen) return; + _mfpTrigger(BEFORE_CLOSE_EVENT); + + mfp.isOpen = false; + // for CSS3 animation + if(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition ) { + mfp._addClassToMFP(REMOVING_CLASS); + setTimeout(function() { + mfp._close(); + }, mfp.st.removalDelay); + } else { + mfp._close(); + } + }, + + /** + * Helper for close() function + */ + _close: function() { + _mfpTrigger(CLOSE_EVENT); + + var classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' '; + + mfp.bgOverlay.detach(); + mfp.wrap.detach(); + mfp.container.empty(); + + if(mfp.st.mainClass) { + classesToRemove += mfp.st.mainClass + ' '; + } + + mfp._removeClassFromMFP(classesToRemove); + + if(mfp.fixedContentPos) { + var windowStyles = {marginRight: ''}; + if(mfp.isIE7) { + $('body, html').css('overflow', ''); + } else { + windowStyles.overflow = ''; + } + $('html').css(windowStyles); + } + + _document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS); + mfp.ev.off(EVENT_NS); + + // clean up DOM elements that aren't removed + mfp.wrap.attr('class', 'mfp-wrap').removeAttr('style'); + mfp.bgOverlay.attr('class', 'mfp-bg'); + mfp.container.attr('class', 'mfp-container'); + + // remove close button from target element + if(mfp.st.showCloseBtn && + (!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) { + if(mfp.currTemplate.closeBtn) + mfp.currTemplate.closeBtn.detach(); + } + + + if(mfp.st.autoFocusLast && mfp._lastFocusedEl) { + $(mfp._lastFocusedEl).focus(); // put tab focus back + } + mfp.currItem = null; + mfp.content = null; + mfp.currTemplate = null; + mfp.prevHeight = 0; + + _mfpTrigger(AFTER_CLOSE_EVENT); + }, + + updateSize: function(winHeight) { + + if(mfp.isIOS) { + // fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2 + var zoomLevel = document.documentElement.clientWidth / window.innerWidth; + var height = window.innerHeight * zoomLevel; + mfp.wrap.css('height', height); + mfp.wH = height; + } else { + mfp.wH = winHeight || _window.height(); + } + // Fixes #84: popup incorrectly positioned with position:relative on body + if(!mfp.fixedContentPos) { + mfp.wrap.css('height', mfp.wH); + } + + _mfpTrigger('Resize'); + + }, + + /** + * Set content of popup based on current index + */ + updateItemHTML: function() { + var item = mfp.items[mfp.index]; + + // Detach and perform modifications + mfp.contentContainer.detach(); + + if(mfp.content) + mfp.content.detach(); + + if(!item.parsed) { + item = mfp.parseEl( mfp.index ); + } + + var type = item.type; + + _mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]); + // BeforeChange event works like so: + // _mfpOn('BeforeChange', function(e, prevType, newType) { }); + + mfp.currItem = item; + + if(!mfp.currTemplate[type]) { + var markup = mfp.st[type] ? mfp.st[type].markup : false; + + // allows to modify markup + _mfpTrigger('FirstMarkupParse', markup); + + if(markup) { + mfp.currTemplate[type] = $(markup); + } else { + // if there is no markup found we just define that template is parsed + mfp.currTemplate[type] = true; + } + } + + if(_prevContentType && _prevContentType !== item.type) { + mfp.container.removeClass('mfp-'+_prevContentType+'-holder'); + } + + var newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]); + mfp.appendContent(newContent, type); + + item.preloaded = true; + + _mfpTrigger(CHANGE_EVENT, item); + _prevContentType = item.type; + + // Append container back after its content changed + mfp.container.prepend(mfp.contentContainer); + + _mfpTrigger('AfterChange'); + }, + + + /** + * Set HTML content of popup + */ + appendContent: function(newContent, type) { + mfp.content = newContent; + + if(newContent) { + if(mfp.st.showCloseBtn && mfp.st.closeBtnInside && + mfp.currTemplate[type] === true) { + // if there is no markup, we just append close button element inside + if(!mfp.content.find('.mfp-close').length) { + mfp.content.append(_getCloseBtn()); + } + } else { + mfp.content = newContent; + } + } else { + mfp.content = ''; + } + + _mfpTrigger(BEFORE_APPEND_EVENT); + mfp.container.addClass('mfp-'+type+'-holder'); + + mfp.contentContainer.append(mfp.content); + }, + + + /** + * Creates Magnific Popup data object based on given data + * @param {int} index Index of item to parse + */ + parseEl: function(index) { + var item = mfp.items[index], + type; + + if(item.tagName) { + item = { el: $(item) }; + } else { + type = item.type; + item = { data: item, src: item.src }; + } + + if(item.el) { + var types = mfp.types; + + // check for 'mfp-TYPE' class + for(var i = 0; i < types.length; i++) { + if( item.el.hasClass('mfp-'+types[i]) ) { + type = types[i]; + break; + } + } + + item.src = item.el.attr('data-mfp-src'); + if(!item.src) { + item.src = item.el.attr('href'); + } + } + + item.type = type || mfp.st.type || 'inline'; + item.index = index; + item.parsed = true; + mfp.items[index] = item; + _mfpTrigger('ElementParse', item); + + return mfp.items[index]; + }, + + + /** + * Initializes single popup or a group of popups + */ + addGroup: function(el, options) { + var eHandler = function(e) { + e.mfpEl = this; + mfp._openClick(e, el, options); + }; + + if(!options) { + options = {}; + } + + var eName = 'click.magnificPopup'; + options.mainEl = el; + + if(options.items) { + options.isObj = true; + el.off(eName).on(eName, eHandler); + } else { + options.isObj = false; + if(options.delegate) { + el.off(eName).on(eName, options.delegate , eHandler); + } else { + options.items = el; + el.off(eName).on(eName, eHandler); + } + } + }, + _openClick: function(e, el, options) { + var midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick; + + + if(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) { + return; + } + + var disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn; + + if(disableOn) { + if($.isFunction(disableOn)) { + if( !disableOn.call(mfp) ) { + return true; + } + } else { // else it's number + if( _window.width() < disableOn ) { + return true; + } + } + } + + if(e.type) { + e.preventDefault(); + + // This will prevent popup from closing if element is inside and popup is already opened + if(mfp.isOpen) { + e.stopPropagation(); + } + } + + options.el = $(e.mfpEl); + if(options.delegate) { + options.items = el.find(options.delegate); + } + mfp.open(options); + }, + + + /** + * Updates text on preloader + */ + updateStatus: function(status, text) { + + if(mfp.preloader) { + if(_prevStatus !== status) { + mfp.container.removeClass('mfp-s-'+_prevStatus); + } + + if(!text && status === 'loading') { + text = mfp.st.tLoading; + } + + var data = { + status: status, + text: text + }; + // allows to modify status + _mfpTrigger('UpdateStatus', data); + + status = data.status; + text = data.text; + + mfp.preloader.html(text); + + mfp.preloader.find('a').on('click', function(e) { + e.stopImmediatePropagation(); + }); + + mfp.container.addClass('mfp-s-'+status); + _prevStatus = status; + } + }, + + + /* + "Private" helpers that aren't private at all + */ + // Check to close popup or not + // "target" is an element that was clicked + _checkIfClose: function(target) { + + if($(target).hasClass(PREVENT_CLOSE_CLASS)) { + return; + } + + var closeOnContent = mfp.st.closeOnContentClick; + var closeOnBg = mfp.st.closeOnBgClick; + + if(closeOnContent && closeOnBg) { + return true; + } else { + + // We close the popup if click is on close button or on preloader. Or if there is no content. + if(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) { + return true; + } + + // if click is outside the content + if( (target !== mfp.content[0] && !$.contains(mfp.content[0], target)) ) { + if(closeOnBg) { + // last check, if the clicked element is in DOM, (in case it's removed onclick) + if( $.contains(document, target) ) { + return true; + } + } + } else if(closeOnContent) { + return true; + } + + } + return false; + }, + _addClassToMFP: function(cName) { + mfp.bgOverlay.addClass(cName); + mfp.wrap.addClass(cName); + }, + _removeClassFromMFP: function(cName) { + this.bgOverlay.removeClass(cName); + mfp.wrap.removeClass(cName); + }, + _hasScrollBar: function(winHeight) { + return ( (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) ); + }, + _setFocus: function() { + (mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus(); + }, + _onFocusIn: function(e) { + if( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) { + mfp._setFocus(); + return false; + } + }, + _parseMarkup: function(template, values, item) { + var arr; + if(item.data) { + values = $.extend(item.data, values); + } + _mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] ); + + $.each(values, function(key, value) { + if(value === undefined || value === false) { + return true; + } + arr = key.split('_'); + if(arr.length > 1) { + var el = template.find(EVENT_NS + '-'+arr[0]); + + if(el.length > 0) { + var attr = arr[1]; + if(attr === 'replaceWith') { + if(el[0] !== value[0]) { + el.replaceWith(value); + } + } else if(attr === 'img') { + if(el.is('img')) { + el.attr('src', value); + } else { + el.replaceWith( $('').attr('src', value).attr('class', el.attr('class')) ); + } + } else { + el.attr(arr[1], value); + } + } + + } else { + template.find(EVENT_NS + '-'+key).html(value); + } + }); + }, + + _getScrollbarSize: function() { + // thx David + if(mfp.scrollbarSize === undefined) { + var scrollDiv = document.createElement("div"); + scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;'; + document.body.appendChild(scrollDiv); + mfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + } + return mfp.scrollbarSize; + } + + }; /* MagnificPopup core prototype end */ + + + + + /** + * Public static functions + */ + $.magnificPopup = { + instance: null, + proto: MagnificPopup.prototype, + modules: [], + + open: function(options, index) { + _checkInstance(); + + if(!options) { + options = {}; + } else { + options = $.extend(true, {}, options); + } + + options.isObj = true; + options.index = index || 0; + return this.instance.open(options); + }, + + close: function() { + return $.magnificPopup.instance && $.magnificPopup.instance.close(); + }, + + registerModule: function(name, module) { + if(module.options) { + $.magnificPopup.defaults[name] = module.options; + } + $.extend(this.proto, module.proto); + this.modules.push(name); + }, + + defaults: { + + // Info about options is in docs: + // http://dimsemenov.com/plugins/magnific-popup/documentation.html#options + + disableOn: 0, + + key: null, + + midClick: false, + + mainClass: '', + + preloader: true, + + focus: '', // CSS selector of input to focus after popup is opened + + closeOnContentClick: false, + + closeOnBgClick: true, + + closeBtnInside: true, + + showCloseBtn: true, + + enableEscapeKey: true, + + modal: false, + + alignTop: false, + + removalDelay: 0, + + prependTo: null, + + fixedContentPos: 'auto', + + fixedBgPos: 'auto', + + overflowY: 'auto', + + closeMarkup: '', + + tClose: 'Close (Esc)', + + tLoading: 'Loading...', + + autoFocusLast: true + + } + }; + + + + $.fn.magnificPopup = function(options) { + _checkInstance(); + + var jqEl = $(this); + + // We call some API method of first param is a string + if (typeof options === "string" ) { + + if(options === 'open') { + var items, + itemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup, + index = parseInt(arguments[1], 10) || 0; + + if(itemOpts.items) { + items = itemOpts.items[index]; + } else { + items = jqEl; + if(itemOpts.delegate) { + items = items.find(itemOpts.delegate); + } + items = items.eq( index ); + } + mfp._openClick({mfpEl:items}, jqEl, itemOpts); + } else { + if(mfp.isOpen) + mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1)); + } + + } else { + // clone options obj + options = $.extend(true, {}, options); + + /* + * As Zepto doesn't support .data() method for objects + * and it works only in normal browsers + * we assign "options" object directly to the DOM element. FTW! + */ + if(_isJQ) { + jqEl.data('magnificPopup', options); + } else { + jqEl[0].magnificPopup = options; + } + + mfp.addGroup(jqEl, options); + + } + return jqEl; + }; + + /*>>core*/ + + /*>>inline*/ + + var INLINE_NS = 'inline', + _hiddenClass, + _inlinePlaceholder, + _lastInlineElement, + _putInlineElementsBack = function() { + if(_lastInlineElement) { + _inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach(); + _lastInlineElement = null; + } + }; + + $.magnificPopup.registerModule(INLINE_NS, { + options: { + hiddenClass: 'hide', // will be appended with `mfp-` prefix + markup: '', + tNotFound: 'Content not found' + }, + proto: { + + initInline: function() { + mfp.types.push(INLINE_NS); + + _mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() { + _putInlineElementsBack(); + }); + }, + + getInline: function(item, template) { + + _putInlineElementsBack(); + + if(item.src) { + var inlineSt = mfp.st.inline, + el = $(item.src); + + if(el.length) { + + // If target element has parent - we replace it with placeholder and put it back after popup is closed + var parent = el[0].parentNode; + if(parent && parent.tagName) { + if(!_inlinePlaceholder) { + _hiddenClass = inlineSt.hiddenClass; + _inlinePlaceholder = _getEl(_hiddenClass); + _hiddenClass = 'mfp-'+_hiddenClass; + } + // replace target inline element with placeholder + _lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass); + } + + mfp.updateStatus('ready'); + } else { + mfp.updateStatus('error', inlineSt.tNotFound); + el = $('
'); + } + + item.inlineElement = el; + return el; + } + + mfp.updateStatus('ready'); + mfp._parseMarkup(template, {}, item); + return template; + } + } + }); + + /*>>inline*/ + + /*>>ajax*/ + var AJAX_NS = 'ajax', + _ajaxCur, + _removeAjaxCursor = function() { + if(_ajaxCur) { + $(document.body).removeClass(_ajaxCur); + } + }, + _destroyAjaxRequest = function() { + _removeAjaxCursor(); + if(mfp.req) { + mfp.req.abort(); + } + }; + + $.magnificPopup.registerModule(AJAX_NS, { + + options: { + settings: null, + cursor: 'mfp-ajax-cur', + tError: 'The content could not be loaded.' + }, + + proto: { + initAjax: function() { + mfp.types.push(AJAX_NS); + _ajaxCur = mfp.st.ajax.cursor; + + _mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest); + _mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest); + }, + getAjax: function(item) { + + if(_ajaxCur) { + $(document.body).addClass(_ajaxCur); + } + + mfp.updateStatus('loading'); + + var opts = $.extend({ + url: item.src, + success: function(data, textStatus, jqXHR) { + var temp = { + data:data, + xhr:jqXHR + }; + + _mfpTrigger('ParseAjax', temp); + + mfp.appendContent( $(temp.data), AJAX_NS ); + + item.finished = true; + + _removeAjaxCursor(); + + mfp._setFocus(); + + setTimeout(function() { + mfp.wrap.addClass(READY_CLASS); + }, 16); + + mfp.updateStatus('ready'); + + _mfpTrigger('AjaxContentAdded'); + }, + error: function() { + _removeAjaxCursor(); + item.finished = item.loadError = true; + mfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src)); + } + }, mfp.st.ajax.settings); + + mfp.req = $.ajax(opts); + + return ''; + } + } + }); + + /*>>ajax*/ + + /*>>image*/ + var _imgInterval, + _getTitle = function(item) { + if(item.data && item.data.title !== undefined) + return item.data.title; + + var src = mfp.st.image.titleSrc; + + if(src) { + if($.isFunction(src)) { + return src.call(mfp, item); + } else if(item.el) { + return item.el.attr(src) || ''; + } + } + return ''; + }; + + $.magnificPopup.registerModule('image', { + + options: { + markup: '
'+ + '
'+ + '
'+ + '
'+ + '
'+ + '
'+ + '
'+ + '
'+ + '
'+ + '
'+ + '
'+ + '
', + cursor: 'mfp-zoom-out-cur', + titleSrc: 'title', + verticalFit: true, + tError: 'The image could not be loaded.' + }, + + proto: { + initImage: function() { + var imgSt = mfp.st.image, + ns = '.image'; + + mfp.types.push('image'); + + _mfpOn(OPEN_EVENT+ns, function() { + if(mfp.currItem.type === 'image' && imgSt.cursor) { + $(document.body).addClass(imgSt.cursor); + } + }); + + _mfpOn(CLOSE_EVENT+ns, function() { + if(imgSt.cursor) { + $(document.body).removeClass(imgSt.cursor); + } + _window.off('resize' + EVENT_NS); + }); + + _mfpOn('Resize'+ns, mfp.resizeImage); + if(mfp.isLowIE) { + _mfpOn('AfterChange', mfp.resizeImage); + } + }, + resizeImage: function() { + var item = mfp.currItem; + if(!item || !item.img) return; + + if(mfp.st.image.verticalFit) { + var decr = 0; + // fix box-sizing in ie7/8 + if(mfp.isLowIE) { + decr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10); + } + item.img.css('max-height', mfp.wH-decr); + } + }, + _onImageHasSize: function(item) { + if(item.img) { + + item.hasSize = true; + + if(_imgInterval) { + clearInterval(_imgInterval); + } + + item.isCheckingImgSize = false; + + _mfpTrigger('ImageHasSize', item); + + if(item.imgHidden) { + if(mfp.content) + mfp.content.removeClass('mfp-loading'); + + item.imgHidden = false; + } + + } + }, + + /** + * Function that loops until the image has size to display elements that rely on it asap + */ + findImageSize: function(item) { + + var counter = 0, + img = item.img[0], + mfpSetInterval = function(delay) { + + if(_imgInterval) { + clearInterval(_imgInterval); + } + // decelerating interval that checks for size of an image + _imgInterval = setInterval(function() { + if(img.naturalWidth > 0) { + mfp._onImageHasSize(item); + return; + } + + if(counter > 200) { + clearInterval(_imgInterval); + } + + counter++; + if(counter === 3) { + mfpSetInterval(10); + } else if(counter === 40) { + mfpSetInterval(50); + } else if(counter === 100) { + mfpSetInterval(500); + } + }, delay); + }; + + mfpSetInterval(1); + }, + + getImage: function(item, template) { + + var guard = 0, + + // image load complete handler + onLoadComplete = function() { + if(item) { + if (item.img[0].complete) { + item.img.off('.mfploader'); + + if(item === mfp.currItem){ + mfp._onImageHasSize(item); + + mfp.updateStatus('ready'); + } + + item.hasSize = true; + item.loaded = true; + + _mfpTrigger('ImageLoadComplete'); + + } + else { + // if image complete check fails 200 times (20 sec), we assume that there was an error. + guard++; + if(guard < 200) { + setTimeout(onLoadComplete,100); + } else { + onLoadError(); + } + } + } + }, + + // image error handler + onLoadError = function() { + if(item) { + item.img.off('.mfploader'); + if(item === mfp.currItem){ + mfp._onImageHasSize(item); + mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) ); + } + + item.hasSize = true; + item.loaded = true; + item.loadError = true; + } + }, + imgSt = mfp.st.image; + + + var el = template.find('.mfp-img'); + if(el.length) { + var img = document.createElement('img'); + img.className = 'mfp-img'; + if(item.el && item.el.find('img').length) { + img.alt = item.el.find('img').attr('alt'); + } + item.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError); + img.src = item.src; + + // without clone() "error" event is not firing when IMG is replaced by new IMG + // TODO: find a way to avoid such cloning + if(el.is('img')) { + item.img = item.img.clone(); + } + + img = item.img[0]; + if(img.naturalWidth > 0) { + item.hasSize = true; + } else if(!img.width) { + item.hasSize = false; + } + } + + mfp._parseMarkup(template, { + title: _getTitle(item), + img_replaceWith: item.img + }, item); + + mfp.resizeImage(); + + if(item.hasSize) { + if(_imgInterval) clearInterval(_imgInterval); + + if(item.loadError) { + template.addClass('mfp-loading'); + mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) ); + } else { + template.removeClass('mfp-loading'); + mfp.updateStatus('ready'); + } + return template; + } + + mfp.updateStatus('loading'); + item.loading = true; + + if(!item.hasSize) { + item.imgHidden = true; + template.addClass('mfp-loading'); + mfp.findImageSize(item); + } + + return template; + } + } + }); + + /*>>image*/ + + /*>>zoom*/ + var hasMozTransform, + getHasMozTransform = function() { + if(hasMozTransform === undefined) { + hasMozTransform = document.createElement('p').style.MozTransform !== undefined; + } + return hasMozTransform; + }; + + $.magnificPopup.registerModule('zoom', { + + options: { + enabled: false, + easing: 'ease-in-out', + duration: 300, + opener: function(element) { + return element.is('img') ? element : element.find('img'); + } + }, + + proto: { + + initZoom: function() { + var zoomSt = mfp.st.zoom, + ns = '.zoom', + image; + + if(!zoomSt.enabled || !mfp.supportsTransition) { + return; + } + + var duration = zoomSt.duration, + getElToAnimate = function(image) { + var newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'), + transition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing, + cssObj = { + position: 'fixed', + zIndex: 9999, + left: 0, + top: 0, + '-webkit-backface-visibility': 'hidden' + }, + t = 'transition'; + + cssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition; + + newImg.css(cssObj); + return newImg; + }, + showMainContent = function() { + mfp.content.css('visibility', 'visible'); + }, + openTimeout, + animatedImg; + + _mfpOn('BuildControls'+ns, function() { + if(mfp._allowZoom()) { + + clearTimeout(openTimeout); + mfp.content.css('visibility', 'hidden'); + + // Basically, all code below does is clones existing image, puts in on top of the current one and animated it + + image = mfp._getItemToZoom(); + + if(!image) { + showMainContent(); + return; + } + + animatedImg = getElToAnimate(image); + + animatedImg.css( mfp._getOffset() ); + + mfp.wrap.append(animatedImg); + + openTimeout = setTimeout(function() { + animatedImg.css( mfp._getOffset( true ) ); + openTimeout = setTimeout(function() { + + showMainContent(); + + setTimeout(function() { + animatedImg.remove(); + image = animatedImg = null; + _mfpTrigger('ZoomAnimationEnded'); + }, 16); // avoid blink when switching images + + }, duration); // this timeout equals animation duration + + }, 16); // by adding this timeout we avoid short glitch at the beginning of animation + + + // Lots of timeouts... + } + }); + _mfpOn(BEFORE_CLOSE_EVENT+ns, function() { + if(mfp._allowZoom()) { + + clearTimeout(openTimeout); + + mfp.st.removalDelay = duration; + + if(!image) { + image = mfp._getItemToZoom(); + if(!image) { + return; + } + animatedImg = getElToAnimate(image); + } + + animatedImg.css( mfp._getOffset(true) ); + mfp.wrap.append(animatedImg); + mfp.content.css('visibility', 'hidden'); + + setTimeout(function() { + animatedImg.css( mfp._getOffset() ); + }, 16); + } + + }); + + _mfpOn(CLOSE_EVENT+ns, function() { + if(mfp._allowZoom()) { + showMainContent(); + if(animatedImg) { + animatedImg.remove(); + } + image = null; + } + }); + }, + + _allowZoom: function() { + return mfp.currItem.type === 'image'; + }, + + _getItemToZoom: function() { + if(mfp.currItem.hasSize) { + return mfp.currItem.img; + } else { + return false; + } + }, + + // Get element postion relative to viewport + _getOffset: function(isLarge) { + var el; + if(isLarge) { + el = mfp.currItem.img; + } else { + el = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem); + } + + var offset = el.offset(); + var paddingTop = parseInt(el.css('padding-top'),10); + var paddingBottom = parseInt(el.css('padding-bottom'),10); + offset.top -= ( $(window).scrollTop() - paddingTop ); + + + /* + + Animating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa. + + */ + var obj = { + width: el.width(), + // fix Zepto height+padding issue + height: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop + }; + + // I hate to do this, but there is no another option + if( getHasMozTransform() ) { + obj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)'; + } else { + obj.left = offset.left; + obj.top = offset.top; + } + return obj; + } + + } + }); + + + + /*>>zoom*/ + + /*>>iframe*/ + + var IFRAME_NS = 'iframe', + _emptyPage = '//about:blank', + + _fixIframeBugs = function(isShowing) { + if(mfp.currTemplate[IFRAME_NS]) { + var el = mfp.currTemplate[IFRAME_NS].find('iframe'); + if(el.length) { + // reset src after the popup is closed to avoid "video keeps playing after popup is closed" bug + if(!isShowing) { + el[0].src = _emptyPage; + } + + // IE8 black screen bug fix + if(mfp.isIE8) { + el.css('display', isShowing ? 'block' : 'none'); + } + } + } + }; + + $.magnificPopup.registerModule(IFRAME_NS, { + + options: { + markup: '
'+ + '
'+ + ''+ + '
', + + srcAction: 'iframe_src', + + // we don't care and support only one default type of URL by default + patterns: { + youtube: { + index: 'youtube.com', + id: 'v=', + src: '//www.youtube.com/embed/%id%?autoplay=1' + }, + vimeo: { + index: 'vimeo.com/', + id: '/', + src: '//player.vimeo.com/video/%id%?autoplay=1' + }, + gmaps: { + index: '//maps.google.', + src: '%id%&output=embed' + } + } + }, + + proto: { + initIframe: function() { + mfp.types.push(IFRAME_NS); + + _mfpOn('BeforeChange', function(e, prevType, newType) { + if(prevType !== newType) { + if(prevType === IFRAME_NS) { + _fixIframeBugs(); // iframe if removed + } else if(newType === IFRAME_NS) { + _fixIframeBugs(true); // iframe is showing + } + }// else { + // iframe source is switched, don't do anything + //} + }); + + _mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() { + _fixIframeBugs(); + }); + }, + + getIframe: function(item, template) { + var embedSrc = item.src; + var iframeSt = mfp.st.iframe; + + $.each(iframeSt.patterns, function() { + if(embedSrc.indexOf( this.index ) > -1) { + if(this.id) { + if(typeof this.id === 'string') { + embedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length); + } else { + embedSrc = this.id.call( this, embedSrc ); + } + } + embedSrc = this.src.replace('%id%', embedSrc ); + return false; // break; + } + }); + + var dataObj = {}; + if(iframeSt.srcAction) { + dataObj[iframeSt.srcAction] = embedSrc; + } + mfp._parseMarkup(template, dataObj, item); + + mfp.updateStatus('ready'); + + return template; + } + } + }); + + + + /*>>iframe*/ + + /*>>gallery*/ + /** + * Get looped index depending on number of slides + */ + var _getLoopedId = function(index) { + var numSlides = mfp.items.length; + if(index > numSlides - 1) { + return index - numSlides; + } else if(index < 0) { + return numSlides + index; + } + return index; + }, + _replaceCurrTotal = function(text, curr, total) { + return text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total); + }; + + $.magnificPopup.registerModule('gallery', { + + options: { + enabled: false, + arrowMarkup: '', + preload: [0,2], + navigateByImgClick: true, + arrows: true, + + tPrev: 'Previous (Left arrow key)', + tNext: 'Next (Right arrow key)', + tCounter: '%curr% of %total%' + }, + + proto: { + initGallery: function() { + + var gSt = mfp.st.gallery, + ns = '.mfp-gallery'; + + mfp.direction = true; // true - next, false - prev + + if(!gSt || !gSt.enabled ) return false; + + _wrapClasses += ' mfp-gallery'; + + _mfpOn(OPEN_EVENT+ns, function() { + + if(gSt.navigateByImgClick) { + mfp.wrap.on('click'+ns, '.mfp-img', function() { + if(mfp.items.length > 1) { + mfp.next(); + return false; + } + }); + } + + _document.on('keydown'+ns, function(e) { + if (e.keyCode === 37) { + mfp.prev(); + } else if (e.keyCode === 39) { + mfp.next(); + } + }); + }); + + _mfpOn('UpdateStatus'+ns, function(e, data) { + if(data.text) { + data.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length); + } + }); + + _mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) { + var l = mfp.items.length; + values.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : ''; + }); + + _mfpOn('BuildControls' + ns, function() { + if(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) { + var markup = gSt.arrowMarkup, + arrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS), + arrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS); + + arrowLeft.click(function() { + mfp.prev(); + }); + arrowRight.click(function() { + mfp.next(); + }); + + mfp.container.append(arrowLeft.add(arrowRight)); + } + }); + + _mfpOn(CHANGE_EVENT+ns, function() { + if(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout); + + mfp._preloadTimeout = setTimeout(function() { + mfp.preloadNearbyImages(); + mfp._preloadTimeout = null; + }, 16); + }); + + + _mfpOn(CLOSE_EVENT+ns, function() { + _document.off(ns); + mfp.wrap.off('click'+ns); + mfp.arrowRight = mfp.arrowLeft = null; + }); + + }, + next: function() { + mfp.direction = true; + mfp.index = _getLoopedId(mfp.index + 1); + mfp.updateItemHTML(); + }, + prev: function() { + mfp.direction = false; + mfp.index = _getLoopedId(mfp.index - 1); + mfp.updateItemHTML(); + }, + goTo: function(newIndex) { + mfp.direction = (newIndex >= mfp.index); + mfp.index = newIndex; + mfp.updateItemHTML(); + }, + preloadNearbyImages: function() { + var p = mfp.st.gallery.preload, + preloadBefore = Math.min(p[0], mfp.items.length), + preloadAfter = Math.min(p[1], mfp.items.length), + i; + + for(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) { + mfp._preloadItem(mfp.index+i); + } + for(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) { + mfp._preloadItem(mfp.index-i); + } + }, + _preloadItem: function(index) { + index = _getLoopedId(index); + + if(mfp.items[index].preloaded) { + return; + } + + var item = mfp.items[index]; + if(!item.parsed) { + item = mfp.parseEl( index ); + } + + _mfpTrigger('LazyLoad', item); + + if(item.type === 'image') { + item.img = $('').on('load.mfploader', function() { + item.hasSize = true; + }).on('error.mfploader', function() { + item.hasSize = true; + item.loadError = true; + _mfpTrigger('LazyLoadError', item); + }).attr('src', item.src); + } + + + item.preloaded = true; + } + } + }); + + /*>>gallery*/ + + /*>>retina*/ + + var RETINA_NS = 'retina'; + + $.magnificPopup.registerModule(RETINA_NS, { + options: { + replaceSrc: function(item) { + return item.src.replace(/\.\w+$/, function(m) { return '@2x' + m; }); + }, + ratio: 1 // Function or number. Set to 1 to disable. + }, + proto: { + initRetina: function() { + if(window.devicePixelRatio > 1) { + + var st = mfp.st.retina, + ratio = st.ratio; + + ratio = !isNaN(ratio) ? ratio : ratio(); + + if(ratio > 1) { + _mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) { + item.img.css({ + 'max-width': item.img[0].naturalWidth / ratio, + 'width': '100%' + }); + }); + _mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) { + item.src = st.replaceSrc(item, ratio); + }); + } + } + + } + } + }); + + /*>>retina*/ + _checkInstance(); })); \ No newline at end of file diff --git a/assets/js/plugins/smooth-scroll.js b/assets/js/plugins/smooth-scroll.js new file mode 100644 index 0000000..c4179a7 --- /dev/null +++ b/assets/js/plugins/smooth-scroll.js @@ -0,0 +1,650 @@ +/*! + * smooth-scroll v16.1.2 + * Animate scrolling to anchor links + * (c) 2020 Chris Ferdinandi + * MIT License + * http://github.com/cferdinandi/smooth-scroll + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + define([], (function () { + return factory(root); + })); + } else if (typeof exports === 'object') { + module.exports = factory(root); + } else { + root.SmoothScroll = factory(root); + } +})(typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : this, (function (window) { + + 'use strict'; + + // + // Default settings + // + + var defaults = { + + // Selectors + ignore: '[data-scroll-ignore]', + header: null, + topOnEmptyHash: true, + + // Speed & Duration + speed: 500, + speedAsDuration: false, + durationMax: null, + durationMin: null, + clip: true, + offset: 0, + + // Easing + easing: 'easeInOutCubic', + customEasing: null, + + // History + updateURL: true, + popstate: true, + + // Custom Events + emitEvents: true + + }; + + + // + // Utility Methods + // + + /** + * Check if browser supports required methods + * @return {Boolean} Returns true if all required methods are supported + */ + var supports = function () { + return ( + 'querySelector' in document && + 'addEventListener' in window && + 'requestAnimationFrame' in window && + 'closest' in window.Element.prototype + ); + }; + + /** + * Merge two or more objects together. + * @param {Object} objects The objects to merge together + * @returns {Object} Merged values of defaults and options + */ + var extend = function () { + var merged = {}; + Array.prototype.forEach.call(arguments, (function (obj) { + for (var key in obj) { + if (!obj.hasOwnProperty(key)) return; + merged[key] = obj[key]; + } + })); + return merged; + }; + + /** + * Check to see if user prefers reduced motion + * @param {Object} settings Script settings + */ + var reduceMotion = function () { + if ('matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches) { + return true; + } + return false; + }; + + /** + * Get the height of an element. + * @param {Node} elem The element to get the height of + * @return {Number} The element's height in pixels + */ + var getHeight = function (elem) { + return parseInt(window.getComputedStyle(elem).height, 10); + }; + + /** + * Escape special characters for use with querySelector + * @author Mathias Bynens + * @link https://github.com/mathiasbynens/CSS.escape + * @param {String} id The anchor ID to escape + */ + var escapeCharacters = function (id) { + + // Remove leading hash + if (id.charAt(0) === '#') { + id = id.substr(1); + } + + var string = String(id); + var length = string.length; + var index = -1; + var codeUnit; + var result = ''; + var firstCodeUnit = string.charCodeAt(0); + while (++index < length) { + codeUnit = string.charCodeAt(index); + // Note: there’s no need to special-case astral symbols, surrogate + // pairs, or lone surrogates. + + // If the character is NULL (U+0000), then throw an + // `InvalidCharacterError` exception and terminate these steps. + if (codeUnit === 0x0000) { + throw new InvalidCharacterError( + 'Invalid character: the input contains U+0000.' + ); + } + + if ( + // If the character is in the range [\1-\1F] (U+0001 to U+001F) or is + // U+007F, […] + (codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F || + // If the character is the first character and is in the range [0-9] + // (U+0030 to U+0039), […] + (index === 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) || + // If the character is the second character and is in the range [0-9] + // (U+0030 to U+0039) and the first character is a `-` (U+002D), […] + ( + index === 1 && + codeUnit >= 0x0030 && codeUnit <= 0x0039 && + firstCodeUnit === 0x002D + ) + ) { + // http://dev.w3.org/csswg/cssom/#escape-a-character-as-code-point + result += '\\' + codeUnit.toString(16) + ' '; + continue; + } + + // If the character is not handled by one of the above rules and is + // greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or + // is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to + // U+005A), or [a-z] (U+0061 to U+007A), […] + if ( + codeUnit >= 0x0080 || + codeUnit === 0x002D || + codeUnit === 0x005F || + codeUnit >= 0x0030 && codeUnit <= 0x0039 || + codeUnit >= 0x0041 && codeUnit <= 0x005A || + codeUnit >= 0x0061 && codeUnit <= 0x007A + ) { + // the character itself + result += string.charAt(index); + continue; + } + + // Otherwise, the escaped character. + // http://dev.w3.org/csswg/cssom/#escape-a-character + result += '\\' + string.charAt(index); + + } + + // Return sanitized hash + return '#' + result; + + }; + + /** + * Calculate the easing pattern + * @link https://gist.github.com/gre/1650294 + * @param {String} type Easing pattern + * @param {Number} time Time animation should take to complete + * @returns {Number} + */ + var easingPattern = function (settings, time) { + var pattern; + + // Default Easing Patterns + if (settings.easing === 'easeInQuad') pattern = time * time; // accelerating from zero velocity + if (settings.easing === 'easeOutQuad') pattern = time * (2 - time); // decelerating to zero velocity + if (settings.easing === 'easeInOutQuad') pattern = time < 0.5 ? 2 * time * time : -1 + (4 - 2 * time) * time; // acceleration until halfway, then deceleration + if (settings.easing === 'easeInCubic') pattern = time * time * time; // accelerating from zero velocity + if (settings.easing === 'easeOutCubic') pattern = (--time) * time * time + 1; // decelerating to zero velocity + if (settings.easing === 'easeInOutCubic') pattern = time < 0.5 ? 4 * time * time * time : (time - 1) * (2 * time - 2) * (2 * time - 2) + 1; // acceleration until halfway, then deceleration + if (settings.easing === 'easeInQuart') pattern = time * time * time * time; // accelerating from zero velocity + if (settings.easing === 'easeOutQuart') pattern = 1 - (--time) * time * time * time; // decelerating to zero velocity + if (settings.easing === 'easeInOutQuart') pattern = time < 0.5 ? 8 * time * time * time * time : 1 - 8 * (--time) * time * time * time; // acceleration until halfway, then deceleration + if (settings.easing === 'easeInQuint') pattern = time * time * time * time * time; // accelerating from zero velocity + if (settings.easing === 'easeOutQuint') pattern = 1 + (--time) * time * time * time * time; // decelerating to zero velocity + if (settings.easing === 'easeInOutQuint') pattern = time < 0.5 ? 16 * time * time * time * time * time : 1 + 16 * (--time) * time * time * time * time; // acceleration until halfway, then deceleration + + // Custom Easing Patterns + if (!!settings.customEasing) pattern = settings.customEasing(time); + + return pattern || time; // no easing, no acceleration + }; + + /** + * Determine the document's height + * @returns {Number} + */ + var getDocumentHeight = function () { + return Math.max( + document.body.scrollHeight, document.documentElement.scrollHeight, + document.body.offsetHeight, document.documentElement.offsetHeight, + document.body.clientHeight, document.documentElement.clientHeight + ); + }; + + /** + * Calculate how far to scroll + * Clip support added by robjtede - https://github.com/cferdinandi/smooth-scroll/issues/405 + * @param {Element} anchor The anchor element to scroll to + * @param {Number} headerHeight Height of a fixed header, if any + * @param {Number} offset Number of pixels by which to offset scroll + * @param {Boolean} clip If true, adjust scroll distance to prevent abrupt stops near the bottom of the page + * @returns {Number} + */ + var getEndLocation = function (anchor, headerHeight, offset, clip) { + var location = 0; + if (anchor.offsetParent) { + do { + location += anchor.offsetTop; + anchor = anchor.offsetParent; + } while (anchor); + } + location = Math.max(location - headerHeight - offset, 0); + if (clip) { + location = Math.min(location, getDocumentHeight() - window.innerHeight); + } + return location; + }; + + /** + * Get the height of the fixed header + * @param {Node} header The header + * @return {Number} The height of the header + */ + var getHeaderHeight = function (header) { + return !header ? 0 : (getHeight(header) + header.offsetTop); + }; + + /** + * Calculate the speed to use for the animation + * @param {Number} distance The distance to travel + * @param {Object} settings The plugin settings + * @return {Number} How fast to animate + */ + var getSpeed = function (distance, settings) { + var speed = settings.speedAsDuration ? settings.speed : Math.abs(distance / 1000 * settings.speed); + if (settings.durationMax && speed > settings.durationMax) return settings.durationMax; + if (settings.durationMin && speed < settings.durationMin) return settings.durationMin; + return parseInt(speed, 10); + }; + + var setHistory = function (options) { + + // Make sure this should run + if (!history.replaceState || !options.updateURL || history.state) return; + + // Get the hash to use + var hash = window.location.hash; + hash = hash ? hash : ''; + + // Set a default history + history.replaceState( + { + smoothScroll: JSON.stringify(options), + anchor: hash ? hash : window.pageYOffset + }, + document.title, + hash ? hash : window.location.href + ); + + }; + + /** + * Update the URL + * @param {Node} anchor The anchor that was scrolled to + * @param {Boolean} isNum If true, anchor is a number + * @param {Object} options Settings for Smooth Scroll + */ + var updateURL = function (anchor, isNum, options) { + + // Bail if the anchor is a number + if (isNum) return; + + // Verify that pushState is supported and the updateURL option is enabled + if (!history.pushState || !options.updateURL) return; + + // Update URL + history.pushState( + { + smoothScroll: JSON.stringify(options), + anchor: anchor.id + }, + document.title, + anchor === document.documentElement ? '#top' : '#' + anchor.id + ); + + }; + + /** + * Bring the anchored element into focus + * @param {Node} anchor The anchor element + * @param {Number} endLocation The end location to scroll to + * @param {Boolean} isNum If true, scroll is to a position rather than an element + */ + var adjustFocus = function (anchor, endLocation, isNum) { + + // Is scrolling to top of page, blur + if (anchor === 0) { + document.body.focus(); + } + + // Don't run if scrolling to a number on the page + if (isNum) return; + + // Otherwise, bring anchor element into focus + anchor.focus(); + if (document.activeElement !== anchor) { + anchor.setAttribute('tabindex', '-1'); + anchor.focus(); + anchor.style.outline = 'none'; + } + window.scrollTo(0 , endLocation); + + }; + + /** + * Emit a custom event + * @param {String} type The event type + * @param {Object} options The settings object + * @param {Node} anchor The anchor element + * @param {Node} toggle The toggle element + */ + var emitEvent = function (type, options, anchor, toggle) { + if (!options.emitEvents || typeof window.CustomEvent !== 'function') return; + var event = new CustomEvent(type, { + bubbles: true, + detail: { + anchor: anchor, + toggle: toggle + } + }); + document.dispatchEvent(event); + }; + + + // + // SmoothScroll Constructor + // + + var SmoothScroll = function (selector, options) { + + // + // Variables + // + + var smoothScroll = {}; // Object for public APIs + var settings, anchor, toggle, fixedHeader, eventTimeout, animationInterval; + + + // + // Methods + // + + /** + * Cancel a scroll-in-progress + */ + smoothScroll.cancelScroll = function (noEvent) { + cancelAnimationFrame(animationInterval); + animationInterval = null; + if (noEvent) return; + emitEvent('scrollCancel', settings); + }; + + /** + * Start/stop the scrolling animation + * @param {Node|Number} anchor The element or position to scroll to + * @param {Element} toggle The element that toggled the scroll event + * @param {Object} options + */ + smoothScroll.animateScroll = function (anchor, toggle, options) { + + // Cancel any in progress scrolls + smoothScroll.cancelScroll(); + + // Local settings + var _settings = extend(settings || defaults, options || {}); // Merge user options with defaults + + // Selectors and variables + var isNum = Object.prototype.toString.call(anchor) === '[object Number]' ? true : false; + var anchorElem = isNum || !anchor.tagName ? null : anchor; + if (!isNum && !anchorElem) return; + var startLocation = window.pageYOffset; // Current location on the page + if (_settings.header && !fixedHeader) { + // Get the fixed header if not already set + fixedHeader = document.querySelector(_settings.header); + } + var headerHeight = getHeaderHeight(fixedHeader); + var endLocation = isNum ? anchor : getEndLocation(anchorElem, headerHeight, parseInt((typeof _settings.offset === 'function' ? _settings.offset(anchor, toggle) : _settings.offset), 10), _settings.clip); // Location to scroll to + var distance = endLocation - startLocation; // distance to travel + var documentHeight = getDocumentHeight(); + var timeLapsed = 0; + var speed = getSpeed(distance, _settings); + var start, percentage, position; + + /** + * Stop the scroll animation when it reaches its target (or the bottom/top of page) + * @param {Number} position Current position on the page + * @param {Number} endLocation Scroll to location + * @param {Number} animationInterval How much to scroll on this loop + */ + var stopAnimateScroll = function (position, endLocation) { + + // Get the current location + var currentLocation = window.pageYOffset; + + // Check if the end location has been reached yet (or we've hit the end of the document) + if (position == endLocation || currentLocation == endLocation || ((startLocation < endLocation && window.innerHeight + currentLocation) >= documentHeight)) { + + // Clear the animation timer + smoothScroll.cancelScroll(true); + + // Bring the anchored element into focus + adjustFocus(anchor, endLocation, isNum); + + // Emit a custom event + emitEvent('scrollStop', _settings, anchor, toggle); + + // Reset start + start = null; + animationInterval = null; + + return true; + + } + }; + + /** + * Loop scrolling animation + */ + var loopAnimateScroll = function (timestamp) { + if (!start) { start = timestamp; } + timeLapsed += timestamp - start; + percentage = speed === 0 ? 0 : (timeLapsed / speed); + percentage = (percentage > 1) ? 1 : percentage; + position = startLocation + (distance * easingPattern(_settings, percentage)); + window.scrollTo(0, Math.floor(position)); + if (!stopAnimateScroll(position, endLocation)) { + animationInterval = window.requestAnimationFrame(loopAnimateScroll); + start = timestamp; + } + }; + + /** + * Reset position to fix weird iOS bug + * @link https://github.com/cferdinandi/smooth-scroll/issues/45 + */ + if (window.pageYOffset === 0) { + window.scrollTo(0, 0); + } + + // Update the URL + updateURL(anchor, isNum, _settings); + + // If the user prefers reduced motion, jump to location + if (reduceMotion()) { + window.scrollTo(0, Math.floor(endLocation)); + return; + } + + // Emit a custom event + emitEvent('scrollStart', _settings, anchor, toggle); + + // Start scrolling animation + smoothScroll.cancelScroll(true); + window.requestAnimationFrame(loopAnimateScroll); + + }; + + /** + * If smooth scroll element clicked, animate scroll + */ + var clickHandler = function (event) { + + // Don't run if event was canceled but still bubbled up + // By @mgreter - https://github.com/cferdinandi/smooth-scroll/pull/462/ + if (event.defaultPrevented) return; + + // Don't run if right-click or command/control + click or shift + click + if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey) return; + + // Check if event.target has closest() method + // By @totegi - https://github.com/cferdinandi/smooth-scroll/pull/401/ + if (!('closest' in event.target)) return; + + // Check if a smooth scroll link was clicked + toggle = event.target.closest(selector); + if (!toggle || toggle.tagName.toLowerCase() !== 'a' || event.target.closest(settings.ignore)) return; + + // Only run if link is an anchor and points to the current page + if (toggle.hostname !== window.location.hostname || toggle.pathname !== window.location.pathname || !/#/.test(toggle.href)) return; + + // Get an escaped version of the hash + var hash; + try { + hash = escapeCharacters(decodeURIComponent(toggle.hash)); + } catch(e) { + hash = escapeCharacters(toggle.hash); + } + + // Get the anchored element + var anchor; + if (hash === '#') { + if (!settings.topOnEmptyHash) return; + anchor = document.documentElement; + } else { + anchor = document.querySelector(hash); + } + anchor = !anchor && hash === '#top' ? document.documentElement : anchor; + + // If anchored element exists, scroll to it + if (!anchor) return; + event.preventDefault(); + setHistory(settings); + smoothScroll.animateScroll(anchor, toggle); + + }; + + /** + * Animate scroll on popstate events + */ + var popstateHandler = function (event) { + + // Stop if history.state doesn't exist (ex. if clicking on a broken anchor link). + // fixes `Cannot read property 'smoothScroll' of null` error getting thrown. + if (history.state === null) return; + + // Only run if state is a popstate record for this instantiation + if (!history.state.smoothScroll || history.state.smoothScroll !== JSON.stringify(settings)) return; + + // Only run if state includes an anchor + + // if (!history.state.anchor && history.state.anchor !== 0) return; + + // Get the anchor + var anchor = history.state.anchor; + if (typeof anchor === 'string' && anchor) { + anchor = document.querySelector(escapeCharacters(history.state.anchor)); + if (!anchor) return; + } + + // Animate scroll to anchor link + smoothScroll.animateScroll(anchor, null, {updateURL: false}); + + }; + + /** + * Destroy the current initialization. + */ + smoothScroll.destroy = function () { + + // If plugin isn't already initialized, stop + if (!settings) return; + + // Remove event listeners + document.removeEventListener('click', clickHandler, false); + window.removeEventListener('popstate', popstateHandler, false); + + // Cancel any scrolls-in-progress + smoothScroll.cancelScroll(); + + // Reset variables + settings = null; + anchor = null; + toggle = null; + fixedHeader = null; + eventTimeout = null; + animationInterval = null; + + }; + + /** + * Initialize Smooth Scroll + * @param {Object} options User settings + */ + var init = function () { + + // feature test + if (!supports()) throw 'Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.'; + + // Destroy any existing initializations + smoothScroll.destroy(); + + // Selectors and variables + settings = extend(defaults, options || {}); // Merge user options with defaults + fixedHeader = settings.header ? document.querySelector(settings.header) : null; // Get the fixed header + + // When a toggle is clicked, run the click handler + document.addEventListener('click', clickHandler, false); + + // If updateURL and popState are enabled, listen for pop events + if (settings.updateURL && settings.popstate) { + window.addEventListener('popstate', popstateHandler, false); + } + + }; + + + // + // Initialize plugin + // + + init(); + + + // + // Public APIs + // + + return smoothScroll; + + }; + + return SmoothScroll; + +})); diff --git a/assets/js/vendor/jquery/jquery-3.6.0.js b/assets/js/vendor/jquery/jquery-3.6.0.js new file mode 100644 index 0000000..fc6c299 --- /dev/null +++ b/assets/js/vendor/jquery/jquery-3.6.0.js @@ -0,0 +1,10881 @@ +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Lehrstuhl für Mechatronik + + +

+ +

Hier findet ihr aktuelle Themen für studentische Arbeiten an unserem Lehrstuhl. +

+ + + + + +

+ + Zum Lehrstuhl + +

+ +
+ + + Photo credit: Peter Krönes + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + +

Wir freuen uns sehr über die Zusammenarbeit mit den Studenten und wir möchten euch kurz vorstellen, in welchen Themengebieten wir uns besonders über eure Unterstützung freuen würden. Kommt gerne mit euren Ideen und Vorstellungen vorbei und wir suchen gemeinsam nach Möglichkeiten, wie ihr eure Abschlussarbeiten, Seminararbeiten, Forschungs- und Projektmodule bei uns erledigen könnt. Für Fragen stehen wir euch jederzeit zur Verfügung.

+ +
+

Filter:

+

+ + Seminararbeit Bachelor + + + Seminararbeit Master + +

+

+ + Forschungsmodul + + + Projektmodul + +

+

+ + Bachelorarbeit + + + Masterarbeit + +

+

+ + Hiwi-Stelle + +

+

+ Filter zurücksetzen +

+
+ + + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/en/404.html b/en/404.html new file mode 100644 index 0000000..355b55c --- /dev/null +++ b/en/404.html @@ -0,0 +1,190 @@ + + + + + + + +Page not found - AuxMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + +
+

404

+ +

Page not found :(

+

The requested page could not be found.

+
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/en/assets/boborzi/diffusion.png b/en/assets/boborzi/diffusion.png new file mode 100644 index 0000000000000000000000000000000000000000..f4cae7466d79fa277ae2623985b656f208ded800 GIT binary patch literal 136459 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

s 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%0DtRLF}k9<2L7PTkcN$=OxU*GAUOvjEVbv(2mDO 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 literal 0 HcmV?d00001 diff --git a/en/assets/boborzi/instantmesh.png b/en/assets/boborzi/instantmesh.png new file mode 100644 index 0000000000000000000000000000000000000000..89f120d41a68e1383607c0f338f79e4f45828759 GIT binary patch literal 329403 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

A91HGh#6Kv5bXisTv^9#-)3`Vr+V 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 z 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 literal 0 HcmV?d00001 diff --git a/en/assets/css/main.css b/en/assets/css/main.css new file mode 100644 index 0000000..d70d854 --- /dev/null +++ b/en/assets/css/main.css @@ -0,0 +1,6 @@ +.author__urls.social-icons i,.author__urls.social-icons .svg-inline--fa,.page__footer-follow .social-icons i,.page__footer-follow .social-icons .svg-inline--fa{color:inherit}.ais-search-box .ais-search-box--input{background-color:#1f242c}article.page{float:left;width:125%}/*! + * Minimal Mistakes Jekyll Theme 4.26.2 by Michael Rose + * Copyright 2013-2024 Michael Rose - mademistakes.com | @mmistakes + * Free for personal and commercial use under the MIT license + * https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE + */.mfp-counter{font-family:Georgia,Times,serif}.mfp-bg{top:0;left:0;width:100%;height:100%;z-index:1042;overflow:hidden;position:fixed;background:#000;opacity:.8;filter:alpha(opacity=80)}.mfp-wrap{top:0;left:0;width:100%;height:100%;z-index:1043;position:fixed;outline:none !important;-webkit-backface-visibility:hidden}.mfp-container{text-align:center;position:absolute;width:100%;height:100%;left:0;top:0;padding:0 8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mfp-container:before{content:'';display:inline-block;height:100%;vertical-align:middle}.mfp-align-top .mfp-container:before{display:none}.mfp-content{position:relative;display:inline-block;vertical-align:middle;margin:0 auto;text-align:left;z-index:1045}.mfp-inline-holder .mfp-content,.mfp-ajax-holder .mfp-content{width:100%;cursor:auto}.mfp-ajax-cur{cursor:progress}.mfp-zoom-out-cur,.mfp-zoom-out-cur .mfp-image-holder .mfp-close{cursor:-moz-zoom-out;cursor:-webkit-zoom-out;cursor:zoom-out}.mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.mfp-auto-cursor .mfp-content{cursor:auto}.mfp-close,.mfp-arrow,.mfp-preloader,.mfp-counter{-webkit-user-select:none;-moz-user-select:none;user-select:none}.mfp-loading.mfp-figure{display:none}.mfp-hide{display:none !important}.mfp-preloader{color:#ccc;position:absolute;top:50%;width:auto;text-align:center;margin-top:-0.8em;left:8px;right:8px;z-index:1044}.mfp-preloader a{color:#ccc}.mfp-preloader a:hover{color:#fff}.mfp-s-ready .mfp-preloader{display:none}.mfp-s-error .mfp-content{display:none}button.mfp-close,button.mfp-arrow{overflow:visible;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;display:block;outline:none;padding:0;z-index:1046;-webkit-box-shadow:none;box-shadow:none}button::-moz-focus-inner{padding:0;border:0}.mfp-close{width:44px;height:44px;line-height:44px;position:absolute;right:0;top:0;text-decoration:none;text-align:center;opacity:1;filter:alpha(opacity=100);padding:0 0 18px 10px;color:#fff;font-style:normal;font-size:28px;font-family:Georgia,Times,serif}.mfp-close:hover,.mfp-close:focus{opacity:1;filter:alpha(opacity=100)}.mfp-close:active{top:1px}.mfp-close-btn-in .mfp-close{color:#fff}.mfp-image-holder .mfp-close,.mfp-iframe-holder .mfp-close{color:#fff;right:-6px;text-align:right;padding-right:6px;width:100%}.mfp-counter{position:absolute;top:0;right:0;color:#ccc;font-size:12px;line-height:18px}.mfp-arrow{position:absolute;opacity:1;filter:alpha(opacity=100);margin:0;top:50%;margin-top:-55px;padding:0;width:90px;height:110px;-webkit-tap-highlight-color:transparent}.mfp-arrow:active{margin-top:-54px}.mfp-arrow:hover,.mfp-arrow:focus{opacity:1;filter:alpha(opacity=100)}.mfp-arrow:before,.mfp-arrow:after,.mfp-arrow .mfp-b,.mfp-arrow .mfp-a{content:'';display:block;width:0;height:0;position:absolute;left:0;top:0;margin-top:35px;margin-left:35px;border:medium inset transparent}.mfp-arrow:after,.mfp-arrow .mfp-a{border-top-width:13px;border-bottom-width:13px;top:8px}.mfp-arrow:before,.mfp-arrow .mfp-b{border-top-width:21px;border-bottom-width:21px;opacity:0.7}.mfp-arrow-left{left:0}.mfp-arrow-left:after,.mfp-arrow-left .mfp-a{border-right:17px solid #fff;margin-left:31px}.mfp-arrow-left:before,.mfp-arrow-left .mfp-b{margin-left:25px;border-right:27px solid #fff}.mfp-arrow-right{right:0}.mfp-arrow-right:after,.mfp-arrow-right .mfp-a{border-left:17px solid #fff;margin-left:39px}.mfp-arrow-right:before,.mfp-arrow-right .mfp-b{border-left:27px solid #fff}.mfp-iframe-holder{padding-top:40px;padding-bottom:40px}.mfp-iframe-holder .mfp-content{line-height:0;width:100%;max-width:900px}.mfp-iframe-holder .mfp-close{top:-40px}.mfp-iframe-scaler{width:100%;height:0;overflow:hidden;padding-top:56.25%}.mfp-iframe-scaler iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;box-shadow:0 0 8px rgba(0,0,0,0.6);background:#000}img.mfp-img{width:auto;max-width:100%;height:auto;display:block;line-height:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:40px 0 40px;margin:0 auto}.mfp-figure{line-height:0}.mfp-figure:after{content:'';position:absolute;left:0;top:40px;bottom:40px;display:block;right:0;width:auto;height:auto;z-index:-1;box-shadow:0 0 8px rgba(0,0,0,0.6);background:#444}.mfp-figure small{color:#bdbdbd;display:block;font-size:12px;line-height:14px}.mfp-figure figure{margin:0}.mfp-figure figcaption{margin-top:0;margin-bottom:0}.mfp-bottom-bar{margin-top:-36px;position:absolute;top:100%;left:0;width:100%;cursor:auto}.mfp-title{text-align:left;line-height:18px;color:#f3f3f3;word-wrap:break-word;padding-right:36px}.mfp-image-holder .mfp-content{max-width:100%}.mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer}@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px){.mfp-img-mobile .mfp-image-holder{padding-left:0;padding-right:0}.mfp-img-mobile img.mfp-img{padding:0}.mfp-img-mobile .mfp-figure:after{top:0;bottom:0}.mfp-img-mobile .mfp-figure small{display:inline;margin-left:5px}.mfp-img-mobile .mfp-bottom-bar{background:rgba(0,0,0,0.6);bottom:0;margin:0;top:auto;padding:3px 5px;position:fixed;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mfp-img-mobile .mfp-bottom-bar:empty{padding:0}.mfp-img-mobile .mfp-counter{right:5px;top:3px}.mfp-img-mobile .mfp-close{top:0;right:0;width:35px;height:35px;line-height:35px;background:rgba(0,0,0,0.6);position:fixed;text-align:center;padding:0}}@media all and (max-width: 900px){.mfp-arrow{-webkit-transform:scale(0.75);transform:scale(0.75)}.mfp-arrow-left{-webkit-transform-origin:0;transform-origin:0}.mfp-arrow-right{-webkit-transform-origin:100%;transform-origin:100%}.mfp-container{padding-left:6px;padding-right:6px}}.mfp-ie7 .mfp-img{padding:0}.mfp-ie7 .mfp-bottom-bar{width:600px;left:50%;margin-left:-300px;margin-top:5px;padding-bottom:5px}.mfp-ie7 .mfp-container{padding:0}.mfp-ie7 .mfp-content{padding-top:44px}.mfp-ie7 .mfp-close{top:0;right:0;padding-top:0}a:focus,button:focus{outline:thin dotted #00adb5;outline:5px auto #00adb5;outline-offset:-2px}*{box-sizing:border-box}html{box-sizing:border-box;background-color:#252a34;font-size:16px;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}@media (min-width: 48em){html{font-size:18px}}@media (min-width: 64em){html{font-size:20px}}@media (min-width: 80em){html{font-size:22px}}body{margin:0}::-moz-selection{color:#fff;background:#000}::selection{color:#fff;background:#000}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}a{color:#8cd2d5}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{box-sizing:border-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}html{position:relative;min-height:100%}body{margin:0;padding:0;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;line-height:1.5}body.overflow--hidden{overflow:hidden}h1,h2,h3,h4,h5,h6{margin:2em 0 0.5em;line-height:1.2;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:bold}h1{margin-top:0;font-size:1.563em}h2{font-size:1.25em}h3{font-size:1.125em}h4{font-size:1.0625em}h5{font-size:1.03125em}h6{font-size:1em}small,.small{font-size:.75em}p{margin-bottom:1.3em}u,ins{text-decoration:none;border-bottom:1px solid #eaeaea}u a,ins a{color:inherit}del a{color:inherit}p,pre,blockquote,ul,ol,dl,figure,table,fieldset{orphans:3;widows:3}abbr[title],abbr[data-original-title]{text-decoration:none;cursor:help;border-bottom:1px dotted #eaeaea}blockquote{margin:2em 1em 2em 0;padding-left:1em;padding-right:1em;font-style:italic;border-left:0.25em solid #00adb5}blockquote cite{font-style:italic}blockquote cite:before{content:"\2014";padding-right:5px}a:visited{color:#699ea0}a:hover{color:#a9dde0;outline:0}tt,code,kbd,samp,pre{font-family:Monaco,Consolas,"Lucida Console",monospace}pre{overflow-x:auto}hr{display:block;margin:1em 0;border:0;border-top:1px solid #51555d}ul li,ol li{margin-bottom:0.5em}li ul,li ol{margin-top:0.5em}figure{display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:start;align-items:flex-start;flex-wrap:wrap;margin:2em 0}figure img,figure iframe,figure .fluid-width-video-wrapper{margin-bottom:1em}figure img{width:100%;border-radius:4px;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}figure>a{display:block}@media (min-width: 37.5em){figure.half>a,figure.half>img{width:calc(50% - 0.5em)}}figure.half figcaption{width:100%}@media (min-width: 37.5em){figure.third>a,figure.third>img{width:calc(33.3333% - 0.5em)}}figure.third figcaption{width:100%}figcaption{margin-bottom:0.5em;color:#eee;font-family:Georgia,Times,serif;font-size:.75em}figcaption a{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}figcaption a:hover{color:#a9dde0}svg:not(:root){overflow:hidden}nav ul{margin:0;padding:0}nav li{list-style:none}nav a{text-decoration:none}nav ul li,nav ol li{margin-bottom:0}nav li ul,nav li ol{margin-top:0}b,i,strong,em,blockquote,p,q,span,figure,img,h1,h2,header,input,a,tr,td,form button,input[type="submit"],.btn,.highlight,.archive__item-teaser{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}form{margin:0 0 5px 0;padding:1em;background-color:#1f242c}form fieldset{margin-bottom:5px;padding:0;border-width:0}form legend{display:block;width:100%;margin-bottom:10px;*margin-left:-7px;padding:0;color:#eaeaea;border:0;white-space:normal}form p{margin-bottom:2.5px}form ul{list-style-type:none;margin:0 0 5px 0;padding:0}form br{display:none}label,input,button,select,textarea{vertical-align:baseline;*vertical-align:middle}input,button,select,textarea{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}label{display:block;margin-bottom:0.25em;color:#eaeaea;cursor:pointer}label small{font-size:.75em}label input,label textarea,label select{display:block}input,textarea,select{display:inline-block;width:100%;padding:0.25em;margin-bottom:0.5em;color:#eaeaea;background-color:#252a34;border:#51555d;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.125)}.input-mini{width:60px}.input-small{width:90px}input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;border-radius:0;border:0 \9;box-shadow:none}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="image"]{border:0}input[type="file"]{width:auto;padding:initial;line-height:initial;border:initial;background-color:transparent;background-color:initial;box-shadow:none}input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;cursor:pointer;*overflow:visible}select,input[type="file"]{*margin-top:4px}select{width:auto;background-color:#fff}select[multiple],select[size]{height:auto}textarea{resize:vertical;height:auto;overflow:auto;vertical-align:top}input[type="hidden"]{display:none}.form{position:relative}.radio,.checkbox{padding-left:18px;font-weight:normal}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{opacity:0.5;cursor:not-allowed}input:focus,textarea:focus{border-color:#00adb5;outline:0;outline:thin dotted \9;box-shadow:inset 0 1px 3px rgba(234,234,234,0.06),0 0 5px rgba(0,173,181,0.7)}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{box-shadow:none}.help-block,.help-inline{color:#eee}.help-block{display:block;margin-bottom:1em;line-height:1em}.help-inline{display:inline-block;vertical-align:middle;padding-left:5px}.form-group{margin-bottom:5px;padding:0;border-width:0}.form-inline input,.form-inline textarea,.form-inline select{display:inline-block;margin-bottom:0}.form-inline label{display:inline-block}.form-inline .radio,.form-inline .checkbox,.form-inline .radio{padding-left:0;margin-bottom:0;vertical-align:middle}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px}.form-search input,.form-search textarea,.form-search select{display:inline-block;margin-bottom:0}.form-search .search-query{padding-left:14px;padding-right:14px;margin-bottom:0;border-radius:14px}.form-search label{display:inline-block}.form-search .radio,.form-search .checkbox,.form-inline .radio{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px}.form--loading:before{content:""}.form--loading .form__spinner{display:block}.form:before{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(255,255,255,0.7);z-index:10}.form__spinner{display:none;position:absolute;top:50%;left:50%;z-index:11}table{display:block;margin-bottom:1em;width:100%;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;border-collapse:collapse;overflow-x:auto}table+table{margin-top:1em}thead{background-color:#51555d;border-bottom:2px solid #3d4046}th{padding:0.5em;font-weight:bold;text-align:left}td{padding:0.5em;border-bottom:1px solid #3d4046}tr,td,th{vertical-align:middle}@-webkit-keyframes intro{0%{opacity:0}100%{opacity:1}}@keyframes intro{0%{opacity:0}100%{opacity:1}}.btn{display:inline-block;margin-bottom:0.25em;padding:0.5em 1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;font-weight:bold;text-align:center;text-decoration:none;border-width:0;border-radius:4px;cursor:pointer}.btn .icon{margin-right:0.5em}.btn .icon+.hidden{margin-left:-0.5em}.btn--primary{background-color:#00adb5;color:#fff}.btn--primary:visited{background-color:#00adb5;color:#fff}.btn--primary:hover{background-color:#008a91;color:#fff}.btn--inverse{background-color:#fff;color:#3d4144;border:1px solid #51555d}.btn--inverse:visited{background-color:#fff;color:#3d4144}.btn--inverse:hover{background-color:#ccc;color:#3d4144}.btn--light-outline{background-color:transparent;color:#fff;border:1px solid #fff}.btn--light-outline:visited{background-color:transparent;color:#fff}.btn--light-outline:hover{background-color:rgba(0,0,0,0.2);color:#fff}.btn--success{background-color:#3fa63f;color:#fff}.btn--success:visited{background-color:#3fa63f;color:#fff}.btn--success:hover{background-color:#328532;color:#fff}.btn--warning{background-color:#d67f05;color:#fff}.btn--warning:visited{background-color:#d67f05;color:#fff}.btn--warning:hover{background-color:#ab6604;color:#fff}.btn--danger{background-color:#ee5f5b;color:#fff}.btn--danger:visited{background-color:#ee5f5b;color:#fff}.btn--danger:hover{background-color:#be4c49;color:#fff}.btn--info{background-color:#3b9cba;color:#fff}.btn--info:visited{background-color:#3b9cba;color:#fff}.btn--info:hover{background-color:#2f7d95;color:#fff}.btn--facebook{background-color:#3b5998;color:#fff}.btn--facebook:visited{background-color:#3b5998;color:#fff}.btn--facebook:hover{background-color:#2f477a;color:#fff}.btn--twitter{background-color:#55acee;color:#fff}.btn--twitter:visited{background-color:#55acee;color:#fff}.btn--twitter:hover{background-color:#448abe;color:#fff}.btn--linkedin{background-color:#007bb6;color:#fff}.btn--linkedin:visited{background-color:#007bb6;color:#fff}.btn--linkedin:hover{background-color:#006292;color:#fff}.btn--block{display:block;width:100%}.btn--block+.btn--block{margin-top:0.25em}.btn--disabled{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);box-shadow:none;opacity:0.65}.btn--x-large{font-size:1.25em}.btn--large{font-size:1em}.btn--small{font-size:.6875em}.notice{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#434851;border-radius:4px;box-shadow:0 1px 1px rgba(189,193,196,0.25)}.notice h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice h4{margin-bottom:0;font-size:1em}.notice p:last-child{margin-bottom:0 !important}.notice h4+p{margin-top:0;padding-top:0}.notice a{color:#aaaeb0}.notice a:hover{color:#5f6162}blockquote.notice{border-left-color:#aaaeb0}.notice code{background-color:#343942}.notice pre code{background-color:inherit}.notice ul:last-child{margin-bottom:0}.notice--primary{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#1e444e;border-radius:4px;box-shadow:0 1px 1px rgba(0,173,181,0.25)}.notice--primary h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--primary h4{margin-bottom:0;font-size:1em}.notice--primary p:last-child{margin-bottom:0 !important}.notice--primary h4+p{margin-top:0;padding-top:0}.notice--primary a{color:#009ca3}.notice--primary a:hover{color:#00575b}blockquote.notice--primary{border-left-color:#009ca3}.notice--primary code{background-color:#213741}.notice--primary pre code{background-color:inherit}.notice--primary ul:last-child{margin-bottom:0}.notice--info{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#29414f;border-radius:4px;box-shadow:0 1px 1px rgba(59,156,186,0.25)}.notice--info h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--info h4{margin-bottom:0;font-size:1em}.notice--info p:last-child{margin-bottom:0 !important}.notice--info h4+p{margin-top:0;padding-top:0}.notice--info a{color:#358ca7}.notice--info a:hover{color:#1e4e5d}blockquote.notice--info{border-left-color:#358ca7}.notice--info code{background-color:#273541}.notice--info pre code{background-color:inherit}.notice--info ul:last-child{margin-bottom:0}.notice--warning{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#483b2b;border-radius:4px;box-shadow:0 1px 1px rgba(214,127,5,0.25)}.notice--warning h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--warning h4{margin-bottom:0;font-size:1em}.notice--warning p:last-child{margin-bottom:0 !important}.notice--warning h4+p{margin-top:0;padding-top:0}.notice--warning a{color:#c17205}.notice--warning a:hover{color:#6b4003}blockquote.notice--warning{border-left-color:#c17205}.notice--warning code{background-color:#37332f}.notice--warning pre code{background-color:inherit}.notice--warning ul:last-child{margin-bottom:0}.notice--success{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#2a4336;border-radius:4px;box-shadow:0 1px 1px rgba(63,166,63,0.25)}.notice--success h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--success h4{margin-bottom:0;font-size:1em}.notice--success p:last-child{margin-bottom:0 !important}.notice--success h4+p{margin-top:0;padding-top:0}.notice--success a{color:#399539}.notice--success a:hover{color:#205320}blockquote.notice--success{border-left-color:#399539}.notice--success code{background-color:#283635}.notice--success pre code{background-color:inherit}.notice--success ul:last-child{margin-bottom:0}.notice--danger{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#4d353c;border-radius:4px;box-shadow:0 1px 1px rgba(238,95,91,0.25)}.notice--danger h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--danger h4{margin-bottom:0;font-size:1em}.notice--danger p:last-child{margin-bottom:0 !important}.notice--danger h4+p{margin-top:0;padding-top:0}.notice--danger a{color:#d65652}.notice--danger a:hover{color:#77302e}blockquote.notice--danger{border-left-color:#d65652}.notice--danger code{background-color:#392f38}.notice--danger pre code{background-color:inherit}.notice--danger ul:last-child{margin-bottom:0}.masthead{position:relative;border-bottom:1px solid #51555d;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.15s;animation-delay:0.15s;z-index:20}.masthead__inner-wrap{clear:both;margin-left:auto;margin-right:auto;padding:1em;max-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.masthead__inner-wrap::after{clear:both;content:"";display:table}@media (min-width: 80em){.masthead__inner-wrap{max-width:1280px}}.masthead__inner-wrap nav{z-index:10}.masthead__inner-wrap a{text-decoration:none}.site-logo img{max-height:2rem}.site-title{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-item-align:center;align-self:center;font-weight:bold}.site-subtitle{display:block;font-size:.625em}.masthead__menu{float:left;margin-left:0;margin-right:0;width:100%;clear:both}.masthead__menu .site-nav{margin-left:0}@media (min-width: 37.5em){.masthead__menu .site-nav{float:right}}.masthead__menu ul{margin:0;padding:0;clear:both;list-style-type:none}.masthead__menu-item{display:block;list-style-type:none;white-space:nowrap}.masthead__menu-item--lg{padding-right:2em;font-weight:700}.breadcrumbs{clear:both;margin:0 auto;max-width:100%;padding-left:1em;padding-right:1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.3s;animation-delay:0.3s}.breadcrumbs::after{clear:both;content:"";display:table}@media (min-width: 80em){.breadcrumbs{max-width:1280px}}.breadcrumbs ol{padding:0;list-style:none;font-size:.75em}@media (min-width: 64em){.breadcrumbs ol{float:right;width:calc(100% - 200px)}}@media (min-width: 80em){.breadcrumbs ol{width:calc(100% - 300px)}}.breadcrumbs li{display:inline}.breadcrumbs .current{font-weight:bold}.pagination{clear:both;float:left;margin-top:1em;padding-top:1em;width:100%}.pagination::after{clear:both;content:"";display:table}.pagination ul{margin:0;padding:0;list-style-type:none;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.pagination li{display:block;float:left;margin-left:-1px}.pagination li a{display:block;margin-bottom:0.25em;padding:0.5em 1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:14px;font-weight:bold;line-height:1.5;text-align:center;text-decoration:none;color:#eee;border:1px solid #3d4046;border-radius:0}.pagination li a:hover{color:#a9dde0}.pagination li a.current,.pagination li a.current.disabled{color:#fff;background:#00adb5}.pagination li a.disabled{color:rgba(238,238,238,0.5);pointer-events:none;cursor:not-allowed}.pagination li:first-child{margin-left:0}.pagination li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination--pager{display:block;padding:1em 2em;float:left;width:50%;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em;font-weight:bold;text-align:center;text-decoration:none;color:#eee;border:1px solid #3d4046;border-radius:4px}.pagination--pager:hover{background-color:#eee;color:#3d4144}.pagination--pager:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.pagination--pager:last-child{margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.pagination--pager.disabled{color:rgba(238,238,238,0.5);pointer-events:none;cursor:not-allowed}.page__content+.pagination,.page__meta+.pagination,.comment__date+.pagination,.page__share+.pagination,.page__comments+.pagination{margin-top:2em;padding-top:2em;border-top:1px solid #51555d}.greedy-nav{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:2em;background:#252a34}.greedy-nav a{display:block;margin:0 1rem;color:#eaeaea;text-decoration:none;-webkit-transition:none;transition:none}.greedy-nav a:hover{color:#bbb}.greedy-nav a.site-logo{margin-left:0;margin-right:0.5rem}.greedy-nav a.site-title{margin-left:0}.greedy-nav img{-webkit-transition:none;transition:none}.greedy-nav__toggle{-ms-flex-item-align:center;align-self:center;height:2rem;border:0;outline:none;background-color:transparent;cursor:pointer}.greedy-nav .visible-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden}.greedy-nav .visible-links li{-webkit-box-flex:0;-ms-flex:none;flex:none}.greedy-nav .visible-links a{position:relative}.greedy-nav .visible-links a:before{content:"";position:absolute;left:0;bottom:0;height:4px;background:#00adb5;width:100%;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;-webkit-transform:scaleX(0) translate3d(0, 0, 0);transform:scaleX(0) translate3d(0, 0, 0)}.greedy-nav .visible-links a:hover:before{-webkit-transform:scaleX(1);-ms-transform:scaleX(1);transform:scaleX(1)}.greedy-nav .hidden-links{position:absolute;top:100%;right:0;margin-top:15px;padding:5px;border:1px solid #51555d;border-radius:4px;background:#252a34;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)}.greedy-nav .hidden-links.hidden{display:none}.greedy-nav .hidden-links a{margin:0;padding:10px 20px;font-size:1em}.greedy-nav .hidden-links a:hover{color:#bbb;background:#1a1d24}.greedy-nav .hidden-links:before{content:"";position:absolute;top:-11px;right:10px;width:0;border-style:solid;border-width:0 10px 10px;border-color:#51555d transparent;display:block;z-index:0}.greedy-nav .hidden-links:after{content:"";position:absolute;top:-10px;right:10px;width:0;border-style:solid;border-width:0 10px 10px;border-color:#252a34 transparent;display:block;z-index:1}.greedy-nav .hidden-links li{display:block;border-bottom:1px solid #51555d}.greedy-nav .hidden-links li:last-child{border-bottom:none}.no-js .greedy-nav .visible-links{-ms-flex-wrap:wrap;flex-wrap:wrap;overflow:visible}.nav__list{margin-bottom:1.5em}.nav__list input[type="checkbox"],.nav__list label{display:none}@media (max-width: 63.9375em){.nav__list label{position:relative;display:inline-block;padding:0.5em 2.5em 0.5em 1em;color:#7a8288;font-size:.75em;font-weight:bold;border:1px solid #bdc1c4;border-radius:4px;z-index:20;-webkit-transition:0.2s ease-out;transition:0.2s ease-out;cursor:pointer}.nav__list label:before,.nav__list label:after{content:"";position:absolute;right:1em;top:1.25em;width:0.75em;height:0.125em;line-height:1;background-color:#7a8288;-webkit-transition:0.2s ease-out;transition:0.2s ease-out}.nav__list label:after{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.nav__list label:hover{color:#fff;border-color:#7a8288;background-color:#333}.nav__list label:hover:before,.nav__list label:hover:after{background-color:#fff}.nav__list input:checked+label{color:white;background-color:#333}.nav__list input:checked+label:before,.nav__list input:checked+label:after{background-color:#fff}.nav__list label:hover:after{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.nav__list input:checked+label:hover:after{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}.nav__list ul{margin-bottom:1em}.nav__list a{display:block;padding:0.25em 0}}@media (max-width: 63.9375em) and (min-width: 64em){.nav__list a{padding-top:0.125em;padding-bottom:0.125em}}@media (max-width: 63.9375em){.nav__list a:hover{text-decoration:underline}}.nav__list .nav__items{margin:0;font-size:1.25rem}.nav__list .nav__items a{color:inherit}.nav__list .nav__items .active{margin-left:-0.5em;padding-left:0.5em;padding-right:0.5em;font-weight:bold}@media (max-width: 63.9375em){.nav__list .nav__items{position:relative;max-height:0;opacity:0%;overflow:hidden;z-index:10;-webkit-transition:0.3s ease-in-out;transition:0.3s ease-in-out;-webkit-transform:translate(0, 10%);-ms-transform:translate(0, 10%);transform:translate(0, 10%)}}@media (max-width: 63.9375em){.nav__list input:checked ~ .nav__items{-webkit-transition:0.5s ease-in-out;transition:0.5s ease-in-out;max-height:9999px;overflow:visible;opacity:1;margin-top:1em;-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}}.nav__title{margin:0;padding:0.5rem 0.75rem;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em;font-weight:bold}.nav__sub-title{display:block;margin:0.5rem 0;padding:0.25rem 0;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;font-weight:bold;text-transform:uppercase;border-bottom:1px solid #51555d}.toc{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;color:#7a8288;background-color:#252a34;border:1px solid #51555d;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.125);box-shadow:0 1px 1px rgba(0,0,0,0.125)}.toc .nav__title{color:#fff;font-size:.75em;background:#00adb5;border-top-left-radius:4px;border-top-right-radius:4px}.toc .active a{background-color:#cceff0;color:#3d4144}.toc__menu{margin:0;padding:0;width:100%;list-style:none;font-size:.75em}@media (min-width: 64em){.toc__menu{font-size:.6875em}}.toc__menu a{display:block;padding:0.25rem 0.75rem;color:#eee;font-weight:bold;line-height:1.5;border-bottom:1px solid #51555d}.toc__menu a:hover{color:#eaeaea}.toc__menu li ul>li a{padding-left:1.25rem;font-weight:normal}.toc__menu li ul li ul>li a{padding-left:1.75rem}.toc__menu li ul li ul li ul>li a{padding-left:2.25rem}.toc__menu li ul li ul li ul li ul>li a{padding-left:2.75rem}.toc__menu li ul li ul li ul li ul li ul>li a{padding-left:3.25rem}.page__footer{clear:both;float:left;margin-left:0;margin-right:0;width:100%;margin-top:3em;color:#eee;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.45s;animation-delay:0.45s;background-color:#1a1d24}.page__footer::after{clear:both;content:"";display:table}.page__footer footer{clear:both;margin-left:auto;margin-right:auto;margin-top:2em;max-width:100%;padding:0 1em 2em}.page__footer footer::after{clear:both;content:"";display:table}@media (min-width: 80em){.page__footer footer{max-width:1280px}}.page__footer a{color:inherit;text-decoration:none}.page__footer a:hover{text-decoration:underline}.page__footer .fas,.page__footer .fab,.page__footer .far,.page__footer .fal{color:#eee}.page__footer-copyright{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.6875em}.page__footer-follow ul{margin:0;padding:0;list-style-type:none}.page__footer-follow li{display:inline-block;padding-top:5px;padding-bottom:5px;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;text-transform:uppercase}.page__footer-follow li+li:before{content:"";padding-right:5px}.page__footer-follow a{padding-right:10px;font-weight:bold}.page__footer-follow .social-icons a{white-space:nowrap}.layout--search .archive__item-teaser{margin-bottom:0.25em}.search__toggle{margin-left:1rem;margin-right:1rem;height:2rem;border:0;outline:none;color:#00adb5;background-color:transparent;cursor:pointer;-webkit-transition:0.2s;transition:0.2s}.search__toggle:hover{color:#008288}.search-icon{width:100%;height:100%}.search-content{display:none;visibility:hidden;padding-top:1em;padding-bottom:1em}.search-content__inner-wrap{width:100%;margin-left:auto;margin-right:auto;padding-left:1em;padding-right:1em;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.15s;animation-delay:0.15s}@media (min-width: 80em){.search-content__inner-wrap{max-width:1280px}}.search-content__form{background-color:transparent}.search-content .search-input{display:block;margin-bottom:0;padding:0;border:none;outline:none;box-shadow:none;background-color:transparent;font-size:1.563em}@media (min-width: 64em){.search-content .search-input{font-size:1.953em}}@media (min-width: 80em){.search-content .search-input{font-size:2.441em}}.search-content.is--visible{display:block;visibility:visible}.search-content.is--visible::after{content:"";display:block}.search-content .results__found{margin-top:0.5em;font-size:.75em}.search-content .archive__item{margin-bottom:2em}@media (min-width: 64em){.search-content .archive__item{width:75%}}@media (min-width: 80em){.search-content .archive__item{width:50%}}.search-content .archive__item-title{margin-top:0}.search-content .archive__item-excerpt{margin-bottom:0}.ais-search-box{max-width:100% !important;margin-bottom:2em}.archive__item-title .ais-Highlight{color:#00adb5;font-style:normal;text-decoration:underline}.archive__item-excerpt .ais-Highlight{color:#00adb5;font-style:normal;font-weight:bold}div.highlighter-rouge,figure.highlight{position:relative;margin-bottom:1em;background:#263238;color:#eff;font-family:Monaco,Consolas,"Lucida Console",monospace;font-size:.75em;line-height:1.8;border-radius:4px}div.highlighter-rouge>pre,div.highlighter-rouge pre.highlight,figure.highlight>pre,figure.highlight pre.highlight{margin:0;padding:1em}.highlight table{margin-bottom:0;font-size:1em;border:0}.highlight table td{padding:0;width:calc(100% - 1em);border:0}.highlight table td.gutter,.highlight table td.rouge-gutter{padding-right:1em;width:1em;color:#b2ccd6;border-right:1px solid #b2ccd6;text-align:right}.highlight table td.code,.highlight table td.rouge-code{padding-left:1em}.highlight table pre{margin:0}.highlight pre{width:100%}.highlight .hll{background-color:#eff}.highlight .c{color:#b2ccd6}.highlight .err{color:#f07178}.highlight .k{color:#c792ea}.highlight .l{color:#f78c6c}.highlight .n{color:#eff}.highlight .o{color:#89ddff}.highlight .p{color:#eff}.highlight .cm{color:#b2ccd6}.highlight .cp{color:#b2ccd6}.highlight .c1{color:#b2ccd6}.highlight .cs{color:#b2ccd6}.highlight .gd{color:#f07178}.highlight .ge{font-style:italic}.highlight .gh{color:#eff;font-weight:bold}.highlight .gi{color:#c3e88d}.highlight .gp{color:#b2ccd6;font-weight:bold}.highlight .gs{font-weight:bold}.highlight .gu{color:#89ddff;font-weight:bold}.highlight .kc{color:#c792ea}.highlight .kd{color:#c792ea}.highlight .kn{color:#89ddff}.highlight .kp{color:#c792ea}.highlight .kr{color:#c792ea}.highlight .kt{color:#ffcb6b}.highlight .ld{color:#c3e88d}.highlight .m{color:#f78c6c}.highlight .s{color:#c3e88d}.highlight .na{color:#82aaff}.highlight .nb{color:#eff}.highlight .nc{color:#ffcb6b}.highlight .no{color:#f07178}.highlight .nd{color:#89ddff}.highlight .ni{color:#eff}.highlight .ne{color:#f07178}.highlight .nf{color:#82aaff}.highlight .nl{color:#eff}.highlight .nn{color:#ffcb6b}.highlight .nx{color:#82aaff}.highlight .py{color:#eff}.highlight .nt{color:#89ddff}.highlight .nv{color:#f07178}.highlight .ow{color:#89ddff}.highlight .w{color:#eff}.highlight .mf{color:#f78c6c}.highlight .mh{color:#f78c6c}.highlight .mi{color:#f78c6c}.highlight .mo{color:#f78c6c}.highlight .sb{color:#c3e88d}.highlight .sc{color:#eff}.highlight .sd{color:#b2ccd6}.highlight .s2{color:#c3e88d}.highlight .se{color:#f78c6c}.highlight .sh{color:#c3e88d}.highlight .si{color:#f78c6c}.highlight .sx{color:#c3e88d}.highlight .sr{color:#c3e88d}.highlight .s1{color:#c3e88d}.highlight .ss{color:#c3e88d}.highlight .bp{color:#eff}.highlight .vc{color:#f07178}.highlight .vg{color:#f07178}.highlight .vi{color:#f07178}.highlight .il{color:#f78c6c}.gist th,.gist td{border-bottom:0}.hidden,.is--hidden{display:none;visibility:hidden}.load{display:none}.transparent{opacity:0}.visually-hidden,.screen-reader-text,.screen-reader-text span,.screen-reader-shortcut{position:absolute !important;clip:rect(1px, 1px, 1px, 1px);height:1px !important;width:1px !important;border:0 !important;overflow:hidden}body:hover .visually-hidden a,body:hover .visually-hidden input,body:hover .visually-hidden button{display:none !important}.screen-reader-text:focus,.screen-reader-shortcut:focus{clip:auto !important;height:auto !important;width:auto !important;display:block;font-size:1em;font-weight:bold;padding:15px 23px 14px;background:#fff;z-index:100000;text-decoration:none;box-shadow:0 0 2px 2px rgba(0,0,0,0.6)}.skip-link{position:fixed;z-index:20;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;white-space:nowrap}.skip-link li{height:0;width:0;list-style:none}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.task-list{padding:0}.task-list li{list-style-type:none}.task-list .task-list-item-checkbox{margin-right:0.5em;opacity:1}.task-list .task-list{margin-left:1em}.cf{clear:both}.wrapper{margin-left:auto;margin-right:auto;width:100%}.align-left{display:block;margin-left:auto;margin-right:auto}@media (min-width: 37.5em){.align-left{float:left;margin-right:1em}}.align-right{display:block;margin-left:auto;margin-right:auto}@media (min-width: 37.5em){.align-right{float:right;margin-left:1em}}.align-center{display:block;margin-left:auto;margin-right:auto}@media (min-width: 64em){.full{margin-right:-20.3389830508% !important}}.icon{display:inline-block;fill:currentColor;width:1em;height:1.1em;line-height:1;position:relative;top:-0.1em;vertical-align:middle}.social-icons .fas,.social-icons .fab,.social-icons .far,.social-icons .fal{color:#eaeaea}.social-icons .fa-behance,.social-icons .fa-behance-square{color:#1769ff}.social-icons .fa-bitbucket{color:#205081}.social-icons .fa-dribbble,.social-icons .fa-dribbble-square{color:#ea4c89}.social-icons .fa-facebook,.social-icons .fa-facebook-square,.social-icons .fa-facebook-f{color:#3b5998}.social-icons .fa-flickr{color:#ff0084}.social-icons .fa-foursquare{color:#0072b1}.social-icons .fa-github,.social-icons .fa-github-alt,.social-icons .fa-github-square{color:#171516}.social-icons .fa-gitlab{color:#e24329}.social-icons .fa-instagram{color:#517fa4}.social-icons .fa-keybase{color:#ef7639}.social-icons .fa-lastfm,.social-icons .fa-lastfm-square{color:#d51007}.social-icons .fa-linkedin,.social-icons .fa-linkedin-in{color:#007bb6}.social-icons .fa-mastodon,.social-icons .fa-mastodon-square{color:#2b90d9}.social-icons .fa-pinterest,.social-icons .fa-pinterest-p,.social-icons .fa-pinterest-square{color:#cb2027}.social-icons .fa-reddit{color:#ff4500}.social-icons .fa-rss,.social-icons .fa-rss-square{color:#fa9b39}.social-icons .fa-soundcloud{color:#f30}.social-icons .fa-stack-exchange,.social-icons .fa-stack-overflow{color:#fe7a15}.social-icons .fa-tumblr,.social-icons .fa-tumblr-square{color:#32506d}.social-icons .fa-twitter,.social-icons .fa-twitter-square{color:#55acee}.social-icons .fa-vimeo,.social-icons .fa-vimeo-square,.social-icons .fa-vimeo-v{color:#1ab7ea}.social-icons .fa-vine{color:#00bf8f}.social-icons .fa-xing,.social-icons .fa-xing-square{color:#006567}.social-icons .fa-youtube{color:#b00}.navicon{position:relative;width:1.5rem;height:.25rem;background:#00adb5;margin:auto;-webkit-transition:0.3s;transition:0.3s}.navicon:before,.navicon:after{content:"";position:absolute;left:0;width:1.5rem;height:.25rem;background:#00adb5;-webkit-transition:0.3s;transition:0.3s}.navicon:before{top:-.5rem}.navicon:after{bottom:-.5rem}.close .navicon{background:transparent}.close .navicon:before,.close .navicon:after{-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;top:0;width:1.5rem}.close .navicon:before{-webkit-transform:rotate3d(0, 0, 1, 45deg);transform:rotate3d(0, 0, 1, 45deg)}.close .navicon:after{-webkit-transform:rotate3d(0, 0, 1, -45deg);transform:rotate3d(0, 0, 1, -45deg)}@supports (pointer-events: none){.greedy-nav__toggle:before{content:'';position:fixed;top:0;left:0;width:100%;height:100%;opacity:0;background-color:#252a34;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;pointer-events:none}}.greedy-nav__toggle.close:before{opacity:0.9;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;pointer-events:auto}.greedy-nav__toggle:hover .navicon,.greedy-nav__toggle:hover .navicon:before,.greedy-nav__toggle:hover .navicon:after{background:#008288}.greedy-nav__toggle:hover.close .navicon{background:transparent}@media (min-width: 64em){.sticky{clear:both;position:-webkit-sticky;position:sticky;top:2em}.sticky::after{clear:both;content:"";display:table}.sticky>*{display:block}}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.show-modal{overflow:hidden;position:relative}.show-modal:before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;z-index:999;background-color:rgba(255,255,255,0.85)}.show-modal .modal{display:block}.modal{display:none;position:fixed;width:300px;top:50%;left:50%;margin-left:-150px;margin-top:-150px;min-height:0;z-index:9999;background:#fff;border:1px solid #51555d;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.125)}.modal__title{margin:0;padding:0.5em 1em}.modal__supporting-text{padding:0 1em 0.5em 1em}.modal__actions{padding:0.5em 1em;border-top:1px solid #51555d}.footnote{color:#9ba1a6;text-decoration:none}.footnotes{color:#9ba1a6}.footnotes ol,.footnotes li,.footnotes p{margin-bottom:0;font-size:.75em}a.reversefootnote{color:#7a8288;text-decoration:none}a.reversefootnote:hover{text-decoration:underline}.required{color:#ee5f5b;font-weight:bold}.gsc-control-cse table,.gsc-control-cse tr,.gsc-control-cse td{border:0}.responsive-video-container{position:relative;margin-bottom:1em;padding-bottom:56.25%;height:0;overflow:hidden;max-width:100%}.responsive-video-container iframe,.responsive-video-container object,.responsive-video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}:-webkit-full-screen-ancestor .masthead,:-webkit-full-screen-ancestor .page__footer{position:static}.clipboard-helper{font-size:12pt !important;border:0 !important;padding:0 !important;margin:0 !important;outline:none !important;position:absolute}pre.highlight .clipboard-copy-button{color:#ffffca}pre .clipboard-copy-button{display:block;position:absolute;top:0.6em;right:0.5em;width:1.8em;height:1.5em;z-index:1;background:none;border:none;outline:none;border-radius:0.1em;padding:0.2em 0.5em;opacity:0.4;transition:color 0.25s linear -0.25s, opacity 0.25s linear}pre .clipboard-copy-button::before{content:'';position:absolute;top:0;right:0;bottom:0;left:0;z-index:2}pre .clipboard-copy-button i{position:absolute;top:0.25em;right:0.25em}pre .clipboard-copy-button i.copied{opacity:0}pre .clipboard-copy-button.copied i{opacity:0}pre .clipboard-copy-button.copied i.copied{opacity:1}.no-copy pre .clipboard-copy-button{display:none}pre:hover .clipboard-copy-button{opacity:1}#main{clear:both;margin-left:auto;margin-right:auto;padding-left:1em;padding-right:1em;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;max-width:100%;-webkit-animation-delay:0.15s;animation-delay:0.15s}#main::after{clear:both;content:"";display:table}@media (min-width: 80em){#main{max-width:1280px}}body{display:-webkit-box;display:-ms-flexbox;display:flex;min-height:100vh;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.initial-content,.search-content{flex:1 0 auto}@media (min-width: 64em){.page{float:right;width:calc(100% - 200px);padding-right:200px}}@media (min-width: 80em){.page{width:calc(100% - 300px);padding-right:300px}}.page .page__inner-wrap{float:left;margin-top:1em;margin-left:0;margin-right:0;width:100%;clear:both}.page .page__inner-wrap .page__content,.page .page__inner-wrap .page__meta,.page .page__inner-wrap .comment__date,.page .page__inner-wrap .page__share{position:relative;float:left;margin-left:0;margin-right:0;width:100%;clear:both}.page__title{margin-top:0;line-height:1}.page__title a{color:#eaeaea;text-decoration:none}.page__title+.page__meta,.page__title+.comment__date{margin-top:-0.5em}.page__lead{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1.25em}.page__content h2{padding-bottom:0.5em;border-bottom:1px solid #51555d}.page__content h1 .header-link,.page__content h2 .header-link,.page__content h3 .header-link,.page__content h4 .header-link,.page__content h5 .header-link,.page__content h6 .header-link{position:relative;left:0.5em;opacity:0;font-size:0.8em;-webkit-transition:opacity 0.2s ease-in-out 0.1s;-moz-transition:opacity 0.2s ease-in-out 0.1s;-o-transition:opacity 0.2s ease-in-out 0.1s;transition:opacity 0.2s ease-in-out 0.1s}.page__content h1:hover .header-link,.page__content h2:hover .header-link,.page__content h3:hover .header-link,.page__content h4:hover .header-link,.page__content h5:hover .header-link,.page__content h6:hover .header-link{opacity:1}.page__content p,.page__content li,.page__content dl{font-size:1em}.page__content p{margin:0 0 1.3em}.page__content a:not(.btn):hover{text-decoration:underline}.page__content a:not(.btn):hover img{box-shadow:0 0 10px rgba(0,0,0,0.25)}.page__content :not(pre)>code{padding-top:0.1rem;padding-bottom:0.1rem;font-size:0.8em;background:#1f242c;border-radius:4px}.page__content :not(pre)>code::before,.page__content :not(pre)>code::after{letter-spacing:-0.2em;content:"\00a0"}.page__content dt{margin-top:1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:bold}.page__content dd{margin-left:1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em}.page__content .small{font-size:.75em}.page__content blockquote+.small{margin-top:-1.5em;padding-left:1.25rem}.page__hero{position:relative;margin-bottom:2em;clear:both;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.25s;animation-delay:0.25s}.page__hero::after{clear:both;content:"";display:table}.page__hero--overlay{position:relative;margin-bottom:2em;padding:3em 0;clear:both;background-size:cover;background-repeat:no-repeat;background-position:center;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.25s;animation-delay:0.25s}.page__hero--overlay::after{clear:both;content:"";display:table}.page__hero--overlay a{color:#fff}.page__hero--overlay .wrapper{padding-left:1em;padding-right:1em}@media (min-width: 80em){.page__hero--overlay .wrapper{max-width:1280px}}.page__hero--overlay .page__title,.page__hero--overlay .page__meta,.page__hero--overlay .comment__date,.page__hero--overlay .page__lead,.page__hero--overlay .btn{color:#fff;text-shadow:1px 1px 4px rgba(0,0,0,0.5)}.page__hero--overlay .page__lead{max-width:768px}.page__hero--overlay .page__title{font-size:1.953em}@media (min-width: 37.5em){.page__hero--overlay .page__title{font-size:2.441em}}.page__hero-image{width:100%;height:auto;-ms-interpolation-mode:bicubic}.page__hero-caption{position:absolute;bottom:0;right:0;margin:0 auto;padding:2px 5px;color:#fff;font-family:Georgia,Times,serif;font-size:.6875em;background:#000;text-align:right;z-index:5;opacity:0.5;border-radius:4px 0 0 0}@media (min-width: 64em){.page__hero-caption{padding:5px 10px}}.page__hero-caption a{color:#fff;text-decoration:none}.page__share{margin-top:2em;padding-top:1em;border-top:1px solid #51555d}@media (max-width: 37.5em){.page__share .btn span{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}}.page__share-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}.page__meta,.comment__date{margin-top:2em;color:#eee;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em}.page__meta p,.comment__date p{margin:0}.page__meta a,.comment__date a{color:inherit}.page__meta-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}.page__meta-sep::before{content:"\2022";padding-left:0.5em;padding-right:0.5em}.page__taxonomy .sep{display:none}.page__taxonomy strong{margin-right:10px}.page__taxonomy-item{display:inline-block;margin-right:5px;margin-bottom:8px;padding:5px 10px;text-decoration:none;border:1px solid #3d4046;border-radius:4px}.page__taxonomy-item:hover{text-decoration:none;color:#a9dde0}.taxonomy__section{margin-bottom:2em;padding-bottom:1em}.taxonomy__section:not(:last-child){border-bottom:solid 1px #51555d}.taxonomy__section .archive__item-title{margin-top:0}.taxonomy__section .archive__subtitle{clear:both;border:0}.taxonomy__section+.taxonomy__section{margin-top:2em}.taxonomy__title{margin-bottom:0.5em;color:#eee}.taxonomy__count{color:#eee}.taxonomy__index{display:grid;grid-column-gap:2em;grid-template-columns:repeat(2, 1fr);margin:1.414em 0;padding:0;font-size:0.75em;list-style:none}@media (min-width: 64em){.taxonomy__index{grid-template-columns:repeat(3, 1fr)}}.taxonomy__index a{display:-webkit-box;display:-ms-flexbox;display:flex;padding:0.25em 0;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;color:inherit;text-decoration:none;border-bottom:1px solid #51555d}.back-to-top{display:block;clear:both;color:#eee;font-size:0.6em;text-transform:uppercase;text-align:right;text-decoration:none}.page__comments{float:left;margin-left:0;margin-right:0;width:100%;clear:both}.page__comments-title{margin-top:2rem;margin-bottom:10px;padding-top:2rem;font-size:.75em;border-top:1px solid #51555d;text-transform:uppercase}.page__comments-form{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.page__comments-form.disabled input,.page__comments-form.disabled button,.page__comments-form.disabled textarea,.page__comments-form.disabled label{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);box-shadow:none;opacity:0.65}.comment{clear:both;margin:1em 0}.comment::after{clear:both;content:"";display:table}.comment:not(:last-child){border-bottom:1px solid #51555d}.comment__avatar-wrapper{float:left;width:60px;height:60px}@media (min-width: 64em){.comment__avatar-wrapper{width:100px;height:100px}}.comment__avatar{width:40px;height:40px;border-radius:50%}@media (min-width: 64em){.comment__avatar{width:80px;height:80px;padding:5px;border:1px solid #51555d}}.comment__content-wrapper{float:right;width:calc(100% - 60px)}@media (min-width: 64em){.comment__content-wrapper{width:calc(100% - 100px)}}.comment__author{margin:0}.comment__author a{text-decoration:none}.comment__date{margin:0}.comment__date a{text-decoration:none}.page__related{clear:both;float:left;margin-top:2em;padding-top:1em;border-top:1px solid #51555d}.page__related::after{clear:both;content:"";display:table}@media (min-width: 64em){.page__related{float:right;width:calc(100% - 200px)}}@media (min-width: 80em){.page__related{width:calc(100% - 300px)}}.page__related a{color:inherit;text-decoration:none}.page__related-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}@media (min-width: 64em){.wide .page{padding-right:0}}@media (min-width: 80em){.wide .page{padding-right:0}}@media (min-width: 64em){.wide .page__related{padding-right:0}}@media (min-width: 80em){.wide .page__related{padding-right:0}}.archive{margin-top:1em;margin-bottom:2em}@media (min-width: 64em){.archive{float:right;width:calc(100% - 200px);padding-right:200px}}@media (min-width: 80em){.archive{width:calc(100% - 300px);padding-right:300px}}.archive__item{position:relative}.archive__item a{position:relative;z-index:10}.archive__item a[rel="permalink"]{position:static}.archive__subtitle{margin:1.414em 0 0.5em;padding-bottom:0.5em;font-size:1em;color:#eee;border-bottom:1px solid #51555d}.archive__subtitle+.list__item .archive__item-title{margin-top:0.5em}.archive__item-title{margin-bottom:0.25em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;line-height:initial;overflow:hidden;text-overflow:ellipsis}.archive__item-title a[rel="permalink"]::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}.archive__item-title a+a{opacity:0.5}.page__content .archive__item-title{margin-top:1em;border-bottom:none}.archive__item-excerpt{margin-top:0;font-size:.75em}.archive__item-excerpt+p{text-indent:0}.archive__item-excerpt a{position:relative}.archive__item-teaser{position:relative;border-radius:4px;overflow:hidden}.archive__item-teaser img{width:100%}.archive__item-caption{position:absolute;bottom:0;right:0;margin:0 auto;padding:2px 5px;color:#fff;font-family:Georgia,Times,serif;font-size:.625em;background:#000;text-align:right;z-index:5;opacity:0.5;border-radius:4px 0 0 0}@media (min-width: 64em){.archive__item-caption{padding:5px 10px}}.archive__item-caption a{color:#fff;text-decoration:none}.list__item .page__meta,.list__item .comment__date{margin:0 0 4px;font-size:0.6em}@media (min-width: 64em){.archive .grid__wrapper{margin-right:-200px}}@media (min-width: 80em){.archive .grid__wrapper{margin-right:-300px}}.grid__item{margin-bottom:2em}@media (min-width: 37.5em){.grid__item{float:left;width:48.9795918367%}.grid__item:nth-child(2n+1){clear:both;margin-left:0}.grid__item:nth-child(2n+2){clear:none;margin-left:2.0408163265%}}@media (min-width: 48em){.grid__item{margin-left:0;margin-right:0;width:23.7288135593%}.grid__item:nth-child(2n+1){clear:none}.grid__item:nth-child(4n+1){clear:both}.grid__item:nth-child(4n+2){clear:none;margin-left:1.6949152542%}.grid__item:nth-child(4n+3){clear:none;margin-left:1.6949152542%}.grid__item:nth-child(4n+4){clear:none;margin-left:1.6949152542%}}.grid__item .page__meta,.grid__item .comment__date{margin:0 0 4px;font-size:0.6em}.grid__item .page__meta-sep{display:block}.grid__item .page__meta-sep::before{display:none}.grid__item .archive__item-title{margin-top:0.5em;font-size:1em}.grid__item .archive__item-excerpt{display:none}@media (min-width: 48em){.grid__item .archive__item-excerpt{display:block;font-size:.75em}}@media (min-width: 37.5em){.grid__item .archive__item-teaser{max-height:200px}}@media (min-width: 48em){.grid__item .archive__item-teaser{max-height:120px}}.feature__wrapper{clear:both;margin-bottom:2em;border-bottom:1px solid #51555d}.feature__wrapper::after{clear:both;content:"";display:table}.feature__wrapper .archive__item-title{margin-bottom:0}.feature__item{position:relative;margin-bottom:2em;font-size:1.125em}@media (min-width: 37.5em){.feature__item{float:left;margin-bottom:0;width:32.2033898305%}.feature__item:nth-child(3n+1){clear:both;margin-left:0}.feature__item:nth-child(3n+2){clear:none;margin-left:1.6949152542%}.feature__item:nth-child(3n+3){clear:none;margin-left:1.6949152542%}.feature__item .feature__item-teaser{max-height:200px;overflow:hidden}}.feature__item .archive__item-body{padding-left:1.6949152542%;padding-right:1.6949152542%}.feature__item a.btn::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}.feature__item--left{position:relative;float:left;margin-left:0;margin-right:0;width:100%;clear:both;font-size:1.125em}.feature__item--left .archive__item{float:left}.feature__item--left .archive__item-teaser{margin-bottom:2em}.feature__item--left a.btn::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}@media (min-width: 37.5em){.feature__item--left .archive__item-teaser{float:left;width:40.6779661017%}.feature__item--left .archive__item-body{float:right;padding-left:1.6949152542%;padding-right:1.6949152542%;width:57.6271186441%}}.feature__item--right{position:relative;float:left;margin-left:0;margin-right:0;width:100%;clear:both;font-size:1.125em}.feature__item--right .archive__item{float:left}.feature__item--right .archive__item-teaser{margin-bottom:2em}.feature__item--right a.btn::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}@media (min-width: 37.5em){.feature__item--right{text-align:right}.feature__item--right .archive__item-teaser{float:right;width:40.6779661017%}.feature__item--right .archive__item-body{float:left;width:57.6271186441%;padding-left:1.6949152542%;padding-right:1.6949152542%}}.feature__item--center{position:relative;float:left;margin-left:0;margin-right:0;width:100%;clear:both;font-size:1.125em}.feature__item--center .archive__item{float:left;width:100%}.feature__item--center .archive__item-teaser{margin-bottom:2em}.feature__item--center a.btn::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}@media (min-width: 37.5em){.feature__item--center{text-align:center}.feature__item--center .archive__item-teaser{margin:0 auto;width:40.6779661017%}.feature__item--center .archive__item-body{margin:0 auto;width:57.6271186441%}}.archive .feature__wrapper .archive__item-title{margin-top:0.25em;font-size:1em}.archive .feature__item,.archive .feature__item--left,.archive .feature__item--center,.archive .feature__item--right{font-size:1em}@media (min-width: 64em){.wide .archive{padding-right:0}}@media (min-width: 80em){.wide .archive{padding-right:0}}.layout--single .feature__wrapper{display:inline-block}.sidebar{clear:both}.sidebar::after{clear:both;content:"";display:table}@media (min-width: 64em){.sidebar{float:left;width:calc(200px - 1em);opacity:0.75;-webkit-transition:opacity 0.2s ease-in-out;transition:opacity 0.2s ease-in-out}.sidebar:hover{opacity:1}.sidebar.sticky{overflow-y:auto;max-height:calc(100vh - 2em - 2em)}}@media (min-width: 80em){.sidebar{width:calc(300px - 1em)}}.sidebar>*{margin-top:1em;margin-bottom:1em}.sidebar h2,.sidebar h3,.sidebar h4,.sidebar h5,.sidebar h6{margin-bottom:0;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.sidebar p,.sidebar li{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;line-height:1.5}.sidebar img{width:100%}.sidebar img.emoji{width:20px;height:20px}.sidebar__right{margin-bottom:1em}@media (min-width: 64em){.sidebar__right{position:absolute;top:0;right:0;width:200px;margin-right:-200px;padding-left:1em;z-index:10}.sidebar__right.sticky{clear:both;position:-webkit-sticky;position:sticky;top:2em;float:right}.sidebar__right.sticky::after{clear:both;content:"";display:table}.sidebar__right.sticky .toc .toc__menu{overflow-y:auto;max-height:calc(100vh - 7em)}}@media (min-width: 80em){.sidebar__right{width:300px;margin-right:-300px}}@media (min-width: 64em){.splash .sidebar__right{position:relative;float:right;margin-right:0}}@media (min-width: 80em){.splash .sidebar__right{margin-right:0}}.author__avatar{display:table-cell;vertical-align:top;width:36px;height:36px}@media (min-width: 64em){.author__avatar{display:block;width:auto;height:auto}}.author__avatar img{max-width:110px;border-radius:50%}@media (min-width: 64em){.author__avatar img{padding:5px;border:1px solid #51555d}}.author__content{display:table-cell;vertical-align:top;padding-left:15px;padding-right:25px;line-height:1}@media (min-width: 64em){.author__content{display:block;width:100%;padding-left:0;padding-right:0}}.author__content a{color:inherit;text-decoration:none}.author__name{margin:0}@media (min-width: 64em){.author__name{margin-top:10px;margin-bottom:10px}}.sidebar .author__name{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em}.author__bio{margin:0}@media (min-width: 64em){.author__bio{margin-top:10px;margin-bottom:20px}}.author__urls-wrapper{position:relative;display:table-cell;vertical-align:middle;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;z-index:20;cursor:pointer}.author__urls-wrapper li:last-child a{margin-bottom:0}.author__urls-wrapper .author__urls span.label{padding-left:5px}@media (min-width: 64em){.author__urls-wrapper{display:block}}.author__urls-wrapper button{position:relative;margin-bottom:0}@supports (pointer-events: none){.author__urls-wrapper button:before{content:'';position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none}}.author__urls-wrapper button.open:before{pointer-events:auto}@media (min-width: 64em){.author__urls-wrapper button{display:none}}.author__urls{display:none;position:absolute;right:0;margin-top:15px;padding:10px;list-style-type:none;border:1px solid #51555d;border-radius:4px;background:#252a34;box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);cursor:default}.author__urls.is--visible{display:block}@media (min-width: 64em){.author__urls{display:block;position:relative;margin:0;padding:0;border:0;background:transparent;box-shadow:none}}.author__urls:before{display:block;content:"";position:absolute;top:-11px;left:calc(50% - 10px);width:0;border-style:solid;border-width:0 10px 10px;border-color:#51555d transparent;z-index:0}@media (min-width: 64em){.author__urls:before{display:none}}.author__urls:after{display:block;content:"";position:absolute;top:-10px;left:calc(50% - 10px);width:0;border-style:solid;border-width:0 10px 10px;border-color:#252a34 transparent;z-index:1}@media (min-width: 64em){.author__urls:after{display:none}}.author__urls ul{padding:10px;list-style-type:none}.author__urls li{white-space:nowrap}.author__urls a{display:block;margin-bottom:5px;padding-right:5px;padding-top:2px;padding-bottom:2px;color:inherit;font-size:1em;text-decoration:none}.author__urls a:hover{text-decoration:underline}.wide .sidebar__right{margin-bottom:1em}@media (min-width: 64em){.wide .sidebar__right{position:initial;top:initial;right:initial;width:initial;margin-right:initial;padding-left:initial;z-index:initial}.wide .sidebar__right.sticky{float:none}}@media (min-width: 80em){.wide .sidebar__right{width:initial;margin-right:initial}}@media print{[hidden]{display:none}*{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}html{margin:0;padding:0;min-height:auto !important;font-size:16px}body{margin:0 auto;background:#fff !important;color:#000 !important;font-size:1rem;line-height:1.5;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3,h4,h5,h6{color:#000;line-height:1.2;margin-bottom:0.75rem;margin-top:0}h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.75rem}h4{font-size:1.5rem}h5{font-size:1.25rem}h6{font-size:1rem}a,a:visited{color:#000;text-decoration:underline;word-wrap:break-word}table{border-collapse:collapse}thead{display:table-header-group}table,th,td{border-bottom:1px solid #000}td,th{padding:8px 16px}img{border:0;display:block;max-width:100% !important;vertical-align:middle}hr{border:0;border-bottom:2px solid #bbb;height:0;margin:2.25rem 0;padding:0}dt{font-weight:bold}dd{margin:0;margin-bottom:0.75rem}abbr[title],acronym[title]{border:0;text-decoration:none}table,blockquote,pre,code,figure,li,hr,ul,ol,a,tr{page-break-inside:avoid}h2,h3,h4,p,a{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid;page-break-inside:avoid}h1+p,h2+p,h3+p{page-break-before:avoid}img{page-break-after:auto;page-break-before:auto;page-break-inside:avoid}pre{white-space:pre-wrap !important;word-wrap:break-word}a[href^='http://']:after,a[href^='https://']:after,a[href^='ftp://']:after{content:" (" attr(href) ")";font-size:80%}abbr[title]:after,acronym[title]:after{content:" (" attr(title) ")"}#main{max-width:100%}.page{margin:0;padding:0;width:100%}.page-break,.page-break-before{page-break-before:always}.page-break-after{page-break-after:always}.no-print{display:none}a.no-reformat:after{content:''}abbr[title].no-reformat:after,acronym[title].no-reformat:after{content:''}.page__hero-caption{color:#000 !important;background:#fff !important;opacity:1}.page__hero-caption a{color:#000 !important}.masthead,.toc,.page__share,.page__related,.pagination,.ads,.page__footer,.page__comments-form,.author__avatar,.author__content,.author__urls-wrapper,.nav__list,.sidebar,.adsbygoogle{display:none !important;height:1px !important}} diff --git a/en/assets/js/_main.js b/en/assets/js/_main.js new file mode 100644 index 0000000..03c9f4b --- /dev/null +++ b/en/assets/js/_main.js @@ -0,0 +1,230 @@ +/* ========================================================================== + jQuery plugin settings and other scripts + ========================================================================== */ + +$(document).ready(function () { + // FitVids init + $("#main").fitVids(); + + // Follow menu drop down + $(".author__urls-wrapper button").on("click", function () { + $(".author__urls").toggleClass("is--visible"); + $(".author__urls-wrapper").find("button").toggleClass("open"); + }); + + // Close search screen with Esc key + $(document).keyup(function (e) { + if (e.keyCode === 27) { + if ($(".initial-content").hasClass("is--hidden")) { + $(".search-content").toggleClass("is--visible"); + $(".initial-content").toggleClass("is--hidden"); + } + } + }); + + // Search toggle + $(".search__toggle").on("click", function () { + $(".search-content").toggleClass("is--visible"); + $(".initial-content").toggleClass("is--hidden"); + // set focus on input + setTimeout(function () { + $(".search-content input").focus(); + }, 400); + }); + + // Smooth scrolling + var scroll = new SmoothScroll('a[href*="#"]', { + offset: 20, + speed: 400, + speedAsDuration: true, + durationMax: 500, + }); + + // Gumshoe scroll spy init + if ($("nav.toc").length > 0) { + var spy = new Gumshoe("nav.toc a", { + // Active classes + navClass: "active", // applied to the nav list item + contentClass: "active", // applied to the content + + // Nested navigation + nested: false, // if true, add classes to parents of active link + nestedClass: "active", // applied to the parent items + + // Offset & reflow + offset: 20, // how far from the top of the page to activate a content area + reflow: true, // if true, listen for reflows + + // Event support + events: true, // if true, emit custom events + }); + } + + // Auto scroll sticky ToC with content + const scrollTocToContent = function (event) { + var target = event.target; + var scrollOptions = { behavior: "auto", block: "nearest", inline: "start" }; + + var tocElement = document.querySelector("aside.sidebar__right.sticky"); + if (!tocElement) return; + if (window.getComputedStyle(tocElement).position !== "sticky") return; + + if (target.parentElement.classList.contains("toc__menu") && target == target.parentElement.firstElementChild) { + // Scroll to top instead + document.querySelector("nav.toc header").scrollIntoView(scrollOptions); + } else { + target.scrollIntoView(scrollOptions); + } + }; + + // Has issues on Firefox, whitelist Chrome for now + if (!!window.chrome) { + document.addEventListener("gumshoeActivate", scrollTocToContent); + } + + // add lightbox class to all image links + $( + "a[href$='.jpg'],a[href$='.jpeg'],a[href$='.JPG'],a[href$='.png'],a[href$='.gif'],a[href$='.webp']" + ).has("> img").addClass("image-popup"); + + // Magnific-Popup options + $(".image-popup").magnificPopup({ + // disableOn: function() { + // if( $(window).width() < 500 ) { + // return false; + // } + // return true; + // }, + type: "image", + tLoading: "Loading image #%curr%...", + gallery: { + enabled: true, + navigateByImgClick: true, + preload: [0, 1], // Will preload 0 - before current, and 1 after the current image + }, + image: { + tError: 'Image #%curr% could not be loaded.', + }, + removalDelay: 500, // Delay in milliseconds before popup is removed + // Class that is added to body when popup is open. + // make it unique to apply your CSS animations just to this exact popup + mainClass: "mfp-zoom-in", + callbacks: { + beforeOpen: function () { + // just a hack that adds mfp-anim class to markup + this.st.image.markup = this.st.image.markup.replace( + "mfp-figure", + "mfp-figure mfp-with-anim" + ); + }, + }, + closeOnContentClick: true, + midClick: true, // allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source. + }); + + // Add anchors for headings + document + .querySelector(".page__content") + .querySelectorAll("h1, h2, h3, h4, h5, h6") + .forEach(function (element) { + var id = element.getAttribute("id"); + if (id) { + var anchor = document.createElement("a"); + anchor.className = "header-link"; + anchor.href = "#" + id; + anchor.innerHTML = + 'Permalink'; + anchor.title = "Permalink"; + element.appendChild(anchor); + } + }); + + // Add copy button for
 blocks
+  var copyText = function (text) {
+    if (document.queryCommandEnabled("copy") && navigator.clipboard) {
+      navigator.clipboard.writeText(text).then(
+        () => true,
+        () => console.error("Failed to copy text to clipboard: " + text)
+      );
+      return true;
+    } else {
+      var isRTL = document.documentElement.getAttribute("dir") === "rtl";
+
+      var textarea = document.createElement("textarea");
+      textarea.className = "clipboard-helper";
+      textarea.style[isRTL ? "right" : "left"] = "-9999px";
+      // Move element to the same position vertically
+      var yPosition = window.pageYOffset || document.documentElement.scrollTop;
+      textarea.style.top = yPosition + "px";
+
+      textarea.setAttribute("readonly", "");
+      textarea.value = text;
+      document.body.appendChild(textarea);
+
+      var success = true;
+      try {
+        textarea.select();
+        success = document.execCommand("copy");
+      } catch (e) {
+        success = false;
+      }
+      textarea.parentNode.removeChild(textarea);
+      return success;
+    }
+  };
+
+  var copyButtonEventListener = function (event) {
+    var thisButton = event.target;
+
+    // Locate the  element
+    var codeBlock = thisButton.nextElementSibling;
+    while (codeBlock && codeBlock.tagName.toLowerCase() !== "code") {
+      codeBlock = codeBlock.nextElementSibling;
+    }
+    if (!codeBlock) {
+      // No  found - wtf?
+      console.warn(thisButton);
+      throw new Error("No code block found for this button.");
+    }
+
+    // Skip line numbers if present (i.e. {% highlight lineno %})
+    var realCodeBlock = codeBlock.querySelector("td.code, td.rouge-code");
+    if (realCodeBlock) {
+      codeBlock = realCodeBlock;
+    }
+    var result = copyText(codeBlock.innerText);
+    // Restore the focus to the button
+    thisButton.focus();
+    if (result) {
+      if (thisButton.interval !== null) {
+        clearInterval(thisButton.interval);
+      }
+      thisButton.classList.add('copied');
+      thisButton.interval = setTimeout(function () {
+        thisButton.classList.remove('copied');
+        clearInterval(thisButton.interval);
+        thisButton.interval = null;
+      }, 1500);
+    }
+    return result;
+  };
+
+  if (window.enable_copy_code_button) {
+    document
+      .querySelectorAll(".page__content pre.highlight > code")
+      .forEach(function (element, index, parentList) {
+        // Locate the 
 element
+        var container = element.parentElement;
+        // Sanity check - don't add an extra button if there's already one
+        if (container.firstElementChild.tagName.toLowerCase() !== "code") {
+          return;
+        }
+        var copyButton = document.createElement("button");
+        copyButton.title = "Copy to clipboard";
+        copyButton.className = "clipboard-copy-button";
+        copyButton.innerHTML = 'Copy code';
+        copyButton.addEventListener("click", copyButtonEventListener);
+        container.prepend(copyButton);
+      });
+  }
+});
diff --git a/en/assets/js/lunr/lunr-en.js b/en/assets/js/lunr/lunr-en.js
new file mode 100644
index 0000000..d1400a7
--- /dev/null
+++ b/en/assets/js/lunr/lunr-en.js
@@ -0,0 +1,69 @@
+var idx = lunr(function () {
+  this.field('title')
+  this.field('excerpt')
+  this.field('categories')
+  this.field('tags')
+  this.ref('id')
+
+  this.pipeline.remove(lunr.trimmer)
+
+  for (var item in store) {
+    this.add({
+      title: store[item].title,
+      excerpt: store[item].excerpt,
+      categories: store[item].categories,
+      tags: store[item].tags,
+      id: item
+    })
+  }
+});
+
+$(document).ready(function() {
+  $('input#search').on('keyup', function () {
+    var resultdiv = $('#results');
+    var query = $(this).val().toLowerCase();
+    var result =
+      idx.query(function (q) {
+        query.split(lunr.tokenizer.separator).forEach(function (term) {
+          q.term(term, { boost: 100 })
+          if(query.lastIndexOf(" ") != query.length-1){
+            q.term(term, {  usePipeline: false, wildcard: lunr.Query.wildcard.TRAILING, boost: 10 })
+          }
+          if (term != ""){
+            q.term(term, {  usePipeline: false, editDistance: 1, boost: 1 })
+          }
+        })
+      });
+    resultdiv.empty();
+    resultdiv.prepend('

'+result.length+' Result(s) found

'); + for (var item in result) { + var ref = result[item].ref; + if(store[ref].teaser){ + var searchitem = + '
'+ + '
'+ + '

'+ + ''+store[ref].title+''+ + '

'+ + '
'+ + ''+ + '
'+ + '

'+store[ref].excerpt.split(" ").splice(0,20).join(" ")+'...

'+ + '
'+ + '
'; + } + else{ + var searchitem = + '
'+ + '
'+ + '

'+ + ''+store[ref].title+''+ + '

'+ + '

'+store[ref].excerpt.split(" ").splice(0,20).join(" ")+'...

'+ + '
'+ + '
'; + } + resultdiv.append(searchitem); + } + }); +}); diff --git a/en/assets/js/lunr/lunr-gr.js b/en/assets/js/lunr/lunr-gr.js new file mode 100644 index 0000000..e829362 --- /dev/null +++ b/en/assets/js/lunr/lunr-gr.js @@ -0,0 +1,522 @@ +step1list = new Array(); +step1list["ΦΑΓΙΑ"] = "ΦΑ"; +step1list["ΦΑΓΙΟΥ"] = "ΦΑ"; +step1list["ΦΑΓΙΩΝ"] = "ΦΑ"; +step1list["ΣΚΑΓΙΑ"] = "ΣΚΑ"; +step1list["ΣΚΑΓΙΟΥ"] = "ΣΚΑ"; +step1list["ΣΚΑΓΙΩΝ"] = "ΣΚΑ"; +step1list["ΟΛΟΓΙΟΥ"] = "ΟΛΟ"; +step1list["ΟΛΟΓΙΑ"] = "ΟΛΟ"; +step1list["ΟΛΟΓΙΩΝ"] = "ΟΛΟ"; +step1list["ΣΟΓΙΟΥ"] = "ΣΟ"; +step1list["ΣΟΓΙΑ"] = "ΣΟ"; +step1list["ΣΟΓΙΩΝ"] = "ΣΟ"; +step1list["ΤΑΤΟΓΙΑ"] = "ΤΑΤΟ"; +step1list["ΤΑΤΟΓΙΟΥ"] = "ΤΑΤΟ"; +step1list["ΤΑΤΟΓΙΩΝ"] = "ΤΑΤΟ"; +step1list["ΚΡΕΑΣ"] = "ΚΡΕ"; +step1list["ΚΡΕΑΤΟΣ"] = "ΚΡΕ"; +step1list["ΚΡΕΑΤΑ"] = "ΚΡΕ"; +step1list["ΚΡΕΑΤΩΝ"] = "ΚΡΕ"; +step1list["ΠΕΡΑΣ"] = "ΠΕΡ"; +step1list["ΠΕΡΑΤΟΣ"] = "ΠΕΡ"; +step1list["ΠΕΡΑΤΑ"] = "ΠΕΡ"; +step1list["ΠΕΡΑΤΩΝ"] = "ΠΕΡ"; +step1list["ΤΕΡΑΣ"] = "ΤΕΡ"; +step1list["ΤΕΡΑΤΟΣ"] = "ΤΕΡ"; +step1list["ΤΕΡΑΤΑ"] = "ΤΕΡ"; +step1list["ΤΕΡΑΤΩΝ"] = "ΤΕΡ"; +step1list["ΦΩΣ"] = "ΦΩ"; +step1list["ΦΩΤΟΣ"] = "ΦΩ"; +step1list["ΦΩΤΑ"] = "ΦΩ"; +step1list["ΦΩΤΩΝ"] = "ΦΩ"; +step1list["ΚΑΘΕΣΤΩΣ"] = "ΚΑΘΕΣΤ"; +step1list["ΚΑΘΕΣΤΩΤΟΣ"] = "ΚΑΘΕΣΤ"; +step1list["ΚΑΘΕΣΤΩΤΑ"] = "ΚΑΘΕΣΤ"; +step1list["ΚΑΘΕΣΤΩΤΩΝ"] = "ΚΑΘΕΣΤ"; +step1list["ΓΕΓΟΝΟΣ"] = "ΓΕΓΟΝ"; +step1list["ΓΕΓΟΝΟΤΟΣ"] = "ΓΕΓΟΝ"; +step1list["ΓΕΓΟΝΟΤΑ"] = "ΓΕΓΟΝ"; +step1list["ΓΕΓΟΝΟΤΩΝ"] = "ΓΕΓΟΝ"; + +v = "[ΑΕΗΙΟΥΩ]"; +v2 = "[ΑΕΗΙΟΩ]" + +function stemWord(w) { + var stem; + var suffix; + var firstch; + var origword = w; + test1 = new Boolean(true); + + if(w.length < 4) { + return w; + } + + var re; + var re2; + var re3; + var re4; + + re = /(.*)(ΦΑΓΙΑ|ΦΑΓΙΟΥ|ΦΑΓΙΩΝ|ΣΚΑΓΙΑ|ΣΚΑΓΙΟΥ|ΣΚΑΓΙΩΝ|ΟΛΟΓΙΟΥ|ΟΛΟΓΙΑ|ΟΛΟΓΙΩΝ|ΣΟΓΙΟΥ|ΣΟΓΙΑ|ΣΟΓΙΩΝ|ΤΑΤΟΓΙΑ|ΤΑΤΟΓΙΟΥ|ΤΑΤΟΓΙΩΝ|ΚΡΕΑΣ|ΚΡΕΑΤΟΣ|ΚΡΕΑΤΑ|ΚΡΕΑΤΩΝ|ΠΕΡΑΣ|ΠΕΡΑΤΟΣ|ΠΕΡΑΤΑ|ΠΕΡΑΤΩΝ|ΤΕΡΑΣ|ΤΕΡΑΤΟΣ|ΤΕΡΑΤΑ|ΤΕΡΑΤΩΝ|ΦΩΣ|ΦΩΤΟΣ|ΦΩΤΑ|ΦΩΤΩΝ|ΚΑΘΕΣΤΩΣ|ΚΑΘΕΣΤΩΤΟΣ|ΚΑΘΕΣΤΩΤΑ|ΚΑΘΕΣΤΩΤΩΝ|ΓΕΓΟΝΟΣ|ΓΕΓΟΝΟΤΟΣ|ΓΕΓΟΝΟΤΑ|ΓΕΓΟΝΟΤΩΝ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + w = stem + step1list[suffix]; + test1 = false; + } + + re = /^(.+?)(ΑΔΕΣ|ΑΔΩΝ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + + reg1 = /(ΟΚ|ΜΑΜ|ΜΑΝ|ΜΠΑΜΠ|ΠΑΤΕΡ|ΓΙΑΓΙ|ΝΤΑΝΤ|ΚΥΡ|ΘΕΙ|ΠΕΘΕΡ)$/; + + if(!(reg1.test(w))) { + w = w + "ΑΔ"; + } + } + + re2 = /^(.+?)(ΕΔΕΣ|ΕΔΩΝ)$/; + + if(re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + w = stem; + + exept2 = /(ΟΠ|ΙΠ|ΕΜΠ|ΥΠ|ΓΗΠ|ΔΑΠ|ΚΡΑΣΠ|ΜΙΛ)$/; + + if(exept2.test(w)) { + w = w + "ΕΔ"; + } + } + + re3 = /^(.+?)(ΟΥΔΕΣ|ΟΥΔΩΝ)$/; + + if(re3.test(w)) { + var fp = re3.exec(w); + stem = fp[1]; + w = stem; + + exept3 = /(ΑΡΚ|ΚΑΛΙΑΚ|ΠΕΤΑΛ|ΛΙΧ|ΠΛΕΞ|ΣΚ|Σ|ΦΛ|ΦΡ|ΒΕΛ|ΛΟΥΛ|ΧΝ|ΣΠ|ΤΡΑΓ|ΦΕ)$/; + + if(exept3.test(w)) { + w = w + "ΟΥΔ"; + } + } + + re4 = /^(.+?)(ΕΩΣ|ΕΩΝ)$/; + + if(re4.test(w)) { + var fp = re4.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept4 = /^(Θ|Δ|ΕΛ|ΓΑΛ|Ν|Π|ΙΔ|ΠΑΡ)$/; + + if(exept4.test(w)) { + w = w + "Ε"; + } + } + + re = /^(.+?)(ΙΑ|ΙΟΥ|ΙΩΝ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + re2 = new RegExp(v + "$"); + test1 = false; + + if(re2.test(w)) { + w = stem + "Ι"; + } + } + + re = /^(.+?)(ΙΚΑ|ΙΚΟ|ΙΚΟΥ|ΙΚΩΝ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + re2 = new RegExp(v + "$"); + exept5 = /^(ΑΛ|ΑΔ|ΕΝΔ|ΑΜΑΝ|ΑΜΜΟΧΑΛ|ΗΘ|ΑΝΗΘ|ΑΝΤΙΔ|ΦΥΣ|ΒΡΩΜ|ΓΕΡ|ΕΞΩΔ|ΚΑΛΠ|ΚΑΛΛΙΝ|ΚΑΤΑΔ|ΜΟΥΛ|ΜΠΑΝ|ΜΠΑΓΙΑΤ|ΜΠΟΛ|ΜΠΟΣ|ΝΙΤ|ΞΙΚ|ΣΥΝΟΜΗΛ|ΠΕΤΣ|ΠΙΤΣ|ΠΙΚΑΝΤ|ΠΛΙΑΤΣ|ΠΟΣΤΕΛΝ|ΠΡΩΤΟΔ|ΣΕΡΤ|ΣΥΝΑΔ|ΤΣΑΜ|ΥΠΟΔ|ΦΙΛΟΝ|ΦΥΛΟΔ|ΧΑΣ)$/; + + if((exept5.test(w)) || (re2.test(w))) { + w = w + "ΙΚ"; + } + } + + re = /^(.+?)(ΑΜΕ)$/; + re2 = /^(.+?)(ΑΓΑΜΕ|ΗΣΑΜΕ|ΟΥΣΑΜΕ|ΗΚΑΜΕ|ΗΘΗΚΑΜΕ)$/; + if(w == "ΑΓΑΜΕ") { + w = "ΑΓΑΜ"; + } + + if(re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + } + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept6 = /^(ΑΝΑΠ|ΑΠΟΘ|ΑΠΟΚ|ΑΠΟΣΤ|ΒΟΥΒ|ΞΕΘ|ΟΥΛ|ΠΕΘ|ΠΙΚΡ|ΠΟΤ|ΣΙΧ|Χ)$/; + + if(exept6.test(w)) { + w = w + "ΑΜ"; + } + } + + re2 = /^(.+?)(ΑΝΕ)$/; + re3 = /^(.+?)(ΑΓΑΝΕ|ΗΣΑΝΕ|ΟΥΣΑΝΕ|ΙΟΝΤΑΝΕ|ΙΟΤΑΝΕ|ΙΟΥΝΤΑΝΕ|ΟΝΤΑΝΕ|ΟΤΑΝΕ|ΟΥΝΤΑΝΕ|ΗΚΑΝΕ|ΗΘΗΚΑΝΕ)$/; + + if(re3.test(w)) { + var fp = re3.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + re3 = /^(ΤΡ|ΤΣ)$/; + + if(re3.test(w)) { + w = w + "ΑΓΑΝ"; + } + } + + if(re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + re2 = new RegExp(v2 + "$"); + exept7 = /^(ΒΕΤΕΡ|ΒΟΥΛΚ|ΒΡΑΧΜ|Γ|ΔΡΑΔΟΥΜ|Θ|ΚΑΛΠΟΥΖ|ΚΑΣΤΕΛ|ΚΟΡΜΟΡ|ΛΑΟΠΛ|ΜΩΑΜΕΘ|Μ|ΜΟΥΣΟΥΛΜ|Ν|ΟΥΛ|Π|ΠΕΛΕΚ|ΠΛ|ΠΟΛΙΣ|ΠΟΡΤΟΛ|ΣΑΡΑΚΑΤΣ|ΣΟΥΛΤ|ΤΣΑΡΛΑΤ|ΟΡΦ|ΤΣΙΓΓ|ΤΣΟΠ|ΦΩΤΟΣΤΕΦ|Χ|ΨΥΧΟΠΛ|ΑΓ|ΟΡΦ|ΓΑΛ|ΓΕΡ|ΔΕΚ|ΔΙΠΛ|ΑΜΕΡΙΚΑΝ|ΟΥΡ|ΠΙΘ|ΠΟΥΡΙΤ|Σ|ΖΩΝΤ|ΙΚ|ΚΑΣΤ|ΚΟΠ|ΛΙΧ|ΛΟΥΘΗΡ|ΜΑΙΝΤ|ΜΕΛ|ΣΙΓ|ΣΠ|ΣΤΕΓ|ΤΡΑΓ|ΤΣΑΓ|Φ|ΕΡ|ΑΔΑΠ|ΑΘΙΓΓ|ΑΜΗΧ|ΑΝΙΚ|ΑΝΟΡΓ|ΑΠΗΓ|ΑΠΙΘ|ΑΤΣΙΓΓ|ΒΑΣ|ΒΑΣΚ|ΒΑΘΥΓΑΛ|ΒΙΟΜΗΧ|ΒΡΑΧΥΚ|ΔΙΑΤ|ΔΙΑΦ|ΕΝΟΡΓ|ΘΥΣ|ΚΑΠΝΟΒΙΟΜΗΧ|ΚΑΤΑΓΑΛ|ΚΛΙΒ|ΚΟΙΛΑΡΦ|ΛΙΒ|ΜΕΓΛΟΒΙΟΜΗΧ|ΜΙΚΡΟΒΙΟΜΗΧ|ΝΤΑΒ|ΞΗΡΟΚΛΙΒ|ΟΛΙΓΟΔΑΜ|ΟΛΟΓΑΛ|ΠΕΝΤΑΡΦ|ΠΕΡΗΦ|ΠΕΡΙΤΡ|ΠΛΑΤ|ΠΟΛΥΔΑΠ|ΠΟΛΥΜΗΧ|ΣΤΕΦ|ΤΑΒ|ΤΕΤ|ΥΠΕΡΗΦ|ΥΠΟΚΟΠ|ΧΑΜΗΛΟΔΑΠ|ΨΗΛΟΤΑΒ)$/; + + if((re2.test(w)) || (exept7.test(w))) { + w = w + "ΑΝ"; + } + } + + re3 = /^(.+?)(ΕΤΕ)$/; + re4 = /^(.+?)(ΗΣΕΤΕ)$/; + + if(re4.test(w)) { + var fp = re4.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + } + + if(re3.test(w)) { + var fp = re3.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + re3 = new RegExp(v2 + "$"); + exept8 = /(ΟΔ|ΑΙΡ|ΦΟΡ|ΤΑΘ|ΔΙΑΘ|ΣΧ|ΕΝΔ|ΕΥΡ|ΤΙΘ|ΥΠΕΡΘ|ΡΑΘ|ΕΝΘ|ΡΟΘ|ΣΘ|ΠΥΡ|ΑΙΝ|ΣΥΝΔ|ΣΥΝ|ΣΥΝΘ|ΧΩΡ|ΠΟΝ|ΒΡ|ΚΑΘ|ΕΥΘ|ΕΚΘ|ΝΕΤ|ΡΟΝ|ΑΡΚ|ΒΑΡ|ΒΟΛ|ΩΦΕΛ)$/; + exept9 = /^(ΑΒΑΡ|ΒΕΝ|ΕΝΑΡ|ΑΒΡ|ΑΔ|ΑΘ|ΑΝ|ΑΠΛ|ΒΑΡΟΝ|ΝΤΡ|ΣΚ|ΚΟΠ|ΜΠΟΡ|ΝΙΦ|ΠΑΓ|ΠΑΡΑΚΑΛ|ΣΕΡΠ|ΣΚΕΛ|ΣΥΡΦ|ΤΟΚ|Υ|Δ|ΕΜ|ΘΑΡΡ|Θ)$/; + + if((re3.test(w)) || (exept8.test(w)) || (exept9.test(w))) { + w = w + "ΕΤ"; + } + } + + re = /^(.+?)(ΟΝΤΑΣ|ΩΝΤΑΣ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept10 = /^(ΑΡΧ)$/; + exept11 = /(ΚΡΕ)$/; + if(exept10.test(w)) { + w = w + "ΟΝΤ"; + } + if(exept11.test(w)) { + w = w + "ΩΝΤ"; + } + } + + re = /^(.+?)(ΟΜΑΣΤΕ|ΙΟΜΑΣΤΕ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept11 = /^(ΟΝ)$/; + + if(exept11.test(w)) { + w = w + "ΟΜΑΣΤ"; + } + } + + re = /^(.+?)(ΕΣΤΕ)$/; + re2 = /^(.+?)(ΙΕΣΤΕ)$/; + + if(re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + re2 = /^(Π|ΑΠ|ΣΥΜΠ|ΑΣΥΜΠ|ΑΚΑΤΑΠ|ΑΜΕΤΑΜΦ)$/; + + if(re2.test(w)) { + w = w + "ΙΕΣΤ"; + } + } + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept12 = /^(ΑΛ|ΑΡ|ΕΚΤΕΛ|Ζ|Μ|Ξ|ΠΑΡΑΚΑΛ|ΑΡ|ΠΡΟ|ΝΙΣ)$/; + + if(exept12.test(w)) { + w = w + "ΕΣΤ"; + } + } + + re = /^(.+?)(ΗΚΑ|ΗΚΕΣ|ΗΚΕ)$/; + re2 = /^(.+?)(ΗΘΗΚΑ|ΗΘΗΚΕΣ|ΗΘΗΚΕ)$/; + + if(re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + } + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept13 = /(ΣΚΩΛ|ΣΚΟΥΛ|ΝΑΡΘ|ΣΦ|ΟΘ|ΠΙΘ)$/; + exept14 = /^(ΔΙΑΘ|Θ|ΠΑΡΑΚΑΤΑΘ|ΠΡΟΣΘ|ΣΥΝΘ|)$/; + + if((exept13.test(w)) || (exept14.test(w))) { + w = w + "ΗΚ"; + } + } + + re = /^(.+?)(ΟΥΣΑ|ΟΥΣΕΣ|ΟΥΣΕ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept15 = /^(ΦΑΡΜΑΚ|ΧΑΔ|ΑΓΚ|ΑΝΑΡΡ|ΒΡΟΜ|ΕΚΛΙΠ|ΛΑΜΠΙΔ|ΛΕΧ|Μ|ΠΑΤ|Ρ|Λ|ΜΕΔ|ΜΕΣΑΖ|ΥΠΟΤΕΙΝ|ΑΜ|ΑΙΘ|ΑΝΗΚ|ΔΕΣΠΟΖ|ΕΝΔΙΑΦΕΡ|ΔΕ|ΔΕΥΤΕΡΕΥ|ΚΑΘΑΡΕΥ|ΠΛΕ|ΤΣΑ)$/; + exept16 = /(ΠΟΔΑΡ|ΒΛΕΠ|ΠΑΝΤΑΧ|ΦΡΥΔ|ΜΑΝΤΙΛ|ΜΑΛΛ|ΚΥΜΑΤ|ΛΑΧ|ΛΗΓ|ΦΑΓ|ΟΜ|ΠΡΩΤ)$/; + + if((exept15.test(w)) || (exept16.test(w))) { + w = w + "ΟΥΣ"; + } + } + + re = /^(.+?)(ΑΓΑ|ΑΓΕΣ|ΑΓΕ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept17 = /^(ΨΟΦ|ΝΑΥΛΟΧ)$/; + exept20 = /(ΚΟΛΛ)$/; + exept18 = /^(ΑΒΑΣΤ|ΠΟΛΥΦ|ΑΔΗΦ|ΠΑΜΦ|Ρ|ΑΣΠ|ΑΦ|ΑΜΑΛ|ΑΜΑΛΛΙ|ΑΝΥΣΤ|ΑΠΕΡ|ΑΣΠΑΡ|ΑΧΑΡ|ΔΕΡΒΕΝ|ΔΡΟΣΟΠ|ΞΕΦ|ΝΕΟΠ|ΝΟΜΟΤ|ΟΛΟΠ|ΟΜΟΤ|ΠΡΟΣΤ|ΠΡΟΣΩΠΟΠ|ΣΥΜΠ|ΣΥΝΤ|Τ|ΥΠΟΤ|ΧΑΡ|ΑΕΙΠ|ΑΙΜΟΣΤ|ΑΝΥΠ|ΑΠΟΤ|ΑΡΤΙΠ|ΔΙΑΤ|ΕΝ|ΕΠΙΤ|ΚΡΟΚΑΛΟΠ|ΣΙΔΗΡΟΠ|Λ|ΝΑΥ|ΟΥΛΑΜ|ΟΥΡ|Π|ΤΡ|Μ)$/; + exept19 = /(ΟΦ|ΠΕΛ|ΧΟΡΤ|ΛΛ|ΣΦ|ΡΠ|ΦΡ|ΠΡ|ΛΟΧ|ΣΜΗΝ)$/; + + if(((exept18.test(w)) || (exept19.test(w))) && !((exept17.test(w)) || (exept20.test(w)))) { + w = w + "ΑΓ"; + } + } + + re = /^(.+?)(ΗΣΕ|ΗΣΟΥ|ΗΣΑ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept21 = /^(Ν|ΧΕΡΣΟΝ|ΔΩΔΕΚΑΝ|ΕΡΗΜΟΝ|ΜΕΓΑΛΟΝ|ΕΠΤΑΝ)$/; + + if(exept21.test(w)) { + w = w + "ΗΣ"; + } + } + + re = /^(.+?)(ΗΣΤΕ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept22 = /^(ΑΣΒ|ΣΒ|ΑΧΡ|ΧΡ|ΑΠΛ|ΑΕΙΜΝ|ΔΥΣΧΡ|ΕΥΧΡ|ΚΟΙΝΟΧΡ|ΠΑΛΙΜΨ)$/; + + if(exept22.test(w)) { + w = w + "ΗΣΤ"; + } + } + + re = /^(.+?)(ΟΥΝΕ|ΗΣΟΥΝΕ|ΗΘΟΥΝΕ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept23 = /^(Ν|Ρ|ΣΠΙ|ΣΤΡΑΒΟΜΟΥΤΣ|ΚΑΚΟΜΟΥΤΣ|ΕΞΩΝ)$/; + + if(exept23.test(w)) { + w = w + "ΟΥΝ"; + } + } + + re = /^(.+?)(ΟΥΜΕ|ΗΣΟΥΜΕ|ΗΘΟΥΜΕ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + test1 = false; + + exept24 = /^(ΠΑΡΑΣΟΥΣ|Φ|Χ|ΩΡΙΟΠΛ|ΑΖ|ΑΛΛΟΣΟΥΣ|ΑΣΟΥΣ)$/; + + if(exept24.test(w)) { + w = w + "ΟΥΜ"; + } + } + + re = /^(.+?)(ΜΑΤΑ|ΜΑΤΩΝ|ΜΑΤΟΣ)$/; + re2 = /^(.+?)(Α|ΑΓΑΤΕ|ΑΓΑΝ|ΑΕΙ|ΑΜΑΙ|ΑΝ|ΑΣ|ΑΣΑΙ|ΑΤΑΙ|ΑΩ|Ε|ΕΙ|ΕΙΣ|ΕΙΤΕ|ΕΣΑΙ|ΕΣ|ΕΤΑΙ|Ι|ΙΕΜΑΙ|ΙΕΜΑΣΤΕ|ΙΕΤΑΙ|ΙΕΣΑΙ|ΙΕΣΑΣΤΕ|ΙΟΜΑΣΤΑΝ|ΙΟΜΟΥΝ|ΙΟΜΟΥΝΑ|ΙΟΝΤΑΝ|ΙΟΝΤΟΥΣΑΝ|ΙΟΣΑΣΤΑΝ|ΙΟΣΑΣΤΕ|ΙΟΣΟΥΝ|ΙΟΣΟΥΝΑ|ΙΟΤΑΝ|ΙΟΥΜΑ|ΙΟΥΜΑΣΤΕ|ΙΟΥΝΤΑΙ|ΙΟΥΝΤΑΝ|Η|ΗΔΕΣ|ΗΔΩΝ|ΗΘΕΙ|ΗΘΕΙΣ|ΗΘΕΙΤΕ|ΗΘΗΚΑΤΕ|ΗΘΗΚΑΝ|ΗΘΟΥΝ|ΗΘΩ|ΗΚΑΤΕ|ΗΚΑΝ|ΗΣ|ΗΣΑΝ|ΗΣΑΤΕ|ΗΣΕΙ|ΗΣΕΣ|ΗΣΟΥΝ|ΗΣΩ|Ο|ΟΙ|ΟΜΑΙ|ΟΜΑΣΤΑΝ|ΟΜΟΥΝ|ΟΜΟΥΝΑ|ΟΝΤΑΙ|ΟΝΤΑΝ|ΟΝΤΟΥΣΑΝ|ΟΣ|ΟΣΑΣΤΑΝ|ΟΣΑΣΤΕ|ΟΣΟΥΝ|ΟΣΟΥΝΑ|ΟΤΑΝ|ΟΥ|ΟΥΜΑΙ|ΟΥΜΑΣΤΕ|ΟΥΝ|ΟΥΝΤΑΙ|ΟΥΝΤΑΝ|ΟΥΣ|ΟΥΣΑΝ|ΟΥΣΑΤΕ|Υ|ΥΣ|Ω|ΩΝ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem + "ΜΑ"; + } + + if((re2.test(w)) && (test1)) { + var fp = re2.exec(w); + stem = fp[1]; + w = stem; + + } + + re = /^(.+?)(ΕΣΤΕΡ|ΕΣΤΑΤ|ΟΤΕΡ|ΟΤΑΤ|ΥΤΕΡ|ΥΤΑΤ|ΩΤΕΡ|ΩΤΑΤ)$/; + + if(re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem; + } + + return w; +}; + +var greekStemmer = function (token) { + return token.update(function (word) { + return stemWord(word); + }) +} + +var idx = lunr(function () { + this.field('title') + this.field('excerpt') + this.field('categories') + this.field('tags') + this.ref('id') + + this.pipeline.remove(lunr.trimmer) + this.pipeline.add(greekStemmer) + this.pipeline.remove(lunr.stemmer) + + for (var item in store) { + this.add({ + title: store[item].title, + excerpt: store[item].excerpt, + categories: store[item].categories, + tags: store[item].tags, + id: item + }) + } +}); + +$(document).ready(function() { + $('input#search').on('keyup', function () { + var resultdiv = $('#results'); + var query = $(this).val().toLowerCase(); + var result = + idx.query(function (q) { + query.split(lunr.tokenizer.separator).forEach(function (term) { + q.term(term, { boost: 100 }) + if(query.lastIndexOf(" ") != query.length-1){ + q.term(term, { usePipeline: false, wildcard: lunr.Query.wildcard.TRAILING, boost: 10 }) + } + if (term != ""){ + q.term(term, { usePipeline: false, editDistance: 1, boost: 1 }) + } + }) + }); + resultdiv.empty(); + resultdiv.prepend('

'+result.length+' Result(s) found

'); + for (var item in result) { + var ref = result[item].ref; + if(store[ref].teaser){ + var searchitem = + '
'+ + '
'+ + '

'+ + ''+store[ref].title+''+ + '

'+ + '
'+ + ''+ + '
'+ + '

'+store[ref].excerpt.split(" ").splice(0,20).join(" ")+'...

'+ + '
'+ + '
'; + } + else{ + var searchitem = + '
'+ + '
'+ + '

'+ + ''+store[ref].title+''+ + '

'+ + '

'+store[ref].excerpt.split(" ").splice(0,20).join(" ")+'...

'+ + '
'+ + '
'; + } + resultdiv.append(searchitem); + } + }); +}); diff --git a/en/assets/js/lunr/lunr-store.js b/en/assets/js/lunr/lunr-store.js new file mode 100644 index 0000000..f2786f2 --- /dev/null +++ b/en/assets/js/lunr/lunr-store.js @@ -0,0 +1,31 @@ +var store = [{ + "title": "Anpassung vonDiffusion Modelle", + "excerpt":"Du findest generative Modelle wie Stable Diffusion oder DALL-E, die anhand von Text detailreiche Bilder erzeugen können, spannend und hast Interesse, dich in aktuelle Machine-Learning-Themen einzuarbeiten? In dieser Arbeit hast du die Möglichkeit, Methoden wie Stable Diffusion und SV3D genauer kennenzulernen. Stable Diffusion ermöglicht es, Bilder anhand von Text oder...","categories": [], + "tags": ["pm","ma"], + "url": "/boborzi/Diffusion.html", + "teaser": null + },{ + "title": "Fine-tuning von Large Reconstruction Models für die 3D Objektgenerierung", + "excerpt":"Kann man per Knopfdruck 3D-Objekte erzeugen? Generative Modelle wie Stable Diffusion oder DALL-E können bereits beeindruckende Bilder anhand einer Beschreibung auf Knopfdruck erzeugen. Das wäre auch für 3D-Objekte interessant, und tatsächlich lassen sich Methoden der Bildgenerierung auch zur Erzeugung von 3D-Objekten nutzen. Allerdings sind die Ergebnisse oft noch nicht so...","categories": [], + "tags": ["pm","ma"], + "url": "/boborzi/LRM.html", + "teaser": null + },{ + "title": "Seminararbeit zur Falsifizierung und virtuellen Validierung autonomer Fahrzeuge", + "excerpt":"Im Rahmen dieser Seminararbeit sollen Sie einen umfassenden Überblick über moderne Methoden zur Falsifizierung und virtuellen Validierung von autonomen Fahrzeugen erarbeiten. Der besondere Fokus liegt dabei auf der Anwendung von Deep Reinforcement Learning (DRL) in diesem Kontext. Beginnen Sie Ihre Arbeit mit einer Einführung in die Herausforderungen, die bei der...","categories": [], + "tags": ["sm"], + "url": "/luttkus/SA_falsifizierungs_methoden.html", + "teaser": null + },{ + "title": "Integration von Robot-SF in SLURM-Umgebung", + "excerpt":"Im Rahmen dieses Projektmoduls soll die Trainingsumgebung Robot-SF für eine effiziente Nutzung auf unserem Servercluster optimiert werden. Robot-SF ist eine Simulationsumgebung, in der ein Roboter mittels Reinforcement Learning (RL) trainiert wird, sich sicher in einer 2D-Umgebung mit Fußgängern zu bewegen. Da RL-Methoden sehr ressourcenintensiv sind, ist es das Ziel dieses...","categories": [], + "tags": ["pm"], + "url": "/luttkus/SLURM_robot_sf.html", + "teaser": null + },{ + "title": "Praktikum Autonomes Fahren Refactoring", + "excerpt":"Das Praktikum Autonomes Fahren findet in jedem Wintersemester statt. Wenn du bereits an dem Projekt gearbeitet hast, kannst du auch im Sommersemester weiter daran arbeiten. PAF ","categories": [], + "tags": ["pm","hiwi"], + "url": "/luttkus/PAF.html", + "teaser": null + },] diff --git a/en/assets/js/lunr/lunr.js b/en/assets/js/lunr/lunr.js new file mode 100644 index 0000000..6aa370f --- /dev/null +++ b/en/assets/js/lunr/lunr.js @@ -0,0 +1,3475 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */ + +;(function(){ + +/** + * A convenience function for configuring and constructing + * a new lunr Index. + * + * A lunr.Builder instance is created and the pipeline setup + * with a trimmer, stop word filter and stemmer. + * + * This builder object is yielded to the configuration function + * that is passed as a parameter, allowing the list of fields + * and other builder parameters to be customised. + * + * All documents _must_ be added within the passed config function. + * + * @example + * var idx = lunr(function () { + * this.field('title') + * this.field('body') + * this.ref('id') + * + * documents.forEach(function (doc) { + * this.add(doc) + * }, this) + * }) + * + * @see {@link lunr.Builder} + * @see {@link lunr.Pipeline} + * @see {@link lunr.trimmer} + * @see {@link lunr.stopWordFilter} + * @see {@link lunr.stemmer} + * @namespace {function} lunr + */ +var lunr = function (config) { + var builder = new lunr.Builder + + builder.pipeline.add( + lunr.trimmer, + lunr.stopWordFilter, + lunr.stemmer + ) + + builder.searchPipeline.add( + lunr.stemmer + ) + + config.call(builder, builder) + return builder.build() +} + +lunr.version = "2.3.9" +/*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A namespace containing utils for the rest of the lunr library + * @namespace lunr.utils + */ +lunr.utils = {} + +/** + * Print a warning message to the console. + * + * @param {String} message The message to be printed. + * @memberOf lunr.utils + * @function + */ +lunr.utils.warn = (function (global) { + /* eslint-disable no-console */ + return function (message) { + if (global.console && console.warn) { + console.warn(message) + } + } + /* eslint-enable no-console */ +})(this) + +/** + * Convert an object to a string. + * + * In the case of `null` and `undefined` the function returns + * the empty string, in all other cases the result of calling + * `toString` on the passed object is returned. + * + * @param {Any} obj The object to convert to a string. + * @return {String} string representation of the passed object. + * @memberOf lunr.utils + */ +lunr.utils.asString = function (obj) { + if (obj === void 0 || obj === null) { + return "" + } else { + return obj.toString() + } +} + +/** + * Clones an object. + * + * Will create a copy of an existing object such that any mutations + * on the copy cannot affect the original. + * + * Only shallow objects are supported, passing a nested object to this + * function will cause a TypeError. + * + * Objects with primitives, and arrays of primitives are supported. + * + * @param {Object} obj The object to clone. + * @return {Object} a clone of the passed object. + * @throws {TypeError} when a nested object is passed. + * @memberOf Utils + */ +lunr.utils.clone = function (obj) { + if (obj === null || obj === undefined) { + return obj + } + + var clone = Object.create(null), + keys = Object.keys(obj) + + for (var i = 0; i < keys.length; i++) { + var key = keys[i], + val = obj[key] + + if (Array.isArray(val)) { + clone[key] = val.slice() + continue + } + + if (typeof val === 'string' || + typeof val === 'number' || + typeof val === 'boolean') { + clone[key] = val + continue + } + + throw new TypeError("clone is not deep and does not support nested objects") + } + + return clone +} +lunr.FieldRef = function (docRef, fieldName, stringValue) { + this.docRef = docRef + this.fieldName = fieldName + this._stringValue = stringValue +} + +lunr.FieldRef.joiner = "/" + +lunr.FieldRef.fromString = function (s) { + var n = s.indexOf(lunr.FieldRef.joiner) + + if (n === -1) { + throw "malformed field ref string" + } + + var fieldRef = s.slice(0, n), + docRef = s.slice(n + 1) + + return new lunr.FieldRef (docRef, fieldRef, s) +} + +lunr.FieldRef.prototype.toString = function () { + if (this._stringValue == undefined) { + this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef + } + + return this._stringValue +} +/*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A lunr set. + * + * @constructor + */ +lunr.Set = function (elements) { + this.elements = Object.create(null) + + if (elements) { + this.length = elements.length + + for (var i = 0; i < this.length; i++) { + this.elements[elements[i]] = true + } + } else { + this.length = 0 + } +} + +/** + * A complete set that contains all elements. + * + * @static + * @readonly + * @type {lunr.Set} + */ +lunr.Set.complete = { + intersect: function (other) { + return other + }, + + union: function () { + return this + }, + + contains: function () { + return true + } +} + +/** + * An empty set that contains no elements. + * + * @static + * @readonly + * @type {lunr.Set} + */ +lunr.Set.empty = { + intersect: function () { + return this + }, + + union: function (other) { + return other + }, + + contains: function () { + return false + } +} + +/** + * Returns true if this set contains the specified object. + * + * @param {object} object - Object whose presence in this set is to be tested. + * @returns {boolean} - True if this set contains the specified object. + */ +lunr.Set.prototype.contains = function (object) { + return !!this.elements[object] +} + +/** + * Returns a new set containing only the elements that are present in both + * this set and the specified set. + * + * @param {lunr.Set} other - set to intersect with this set. + * @returns {lunr.Set} a new set that is the intersection of this and the specified set. + */ + +lunr.Set.prototype.intersect = function (other) { + var a, b, elements, intersection = [] + + if (other === lunr.Set.complete) { + return this + } + + if (other === lunr.Set.empty) { + return other + } + + if (this.length < other.length) { + a = this + b = other + } else { + a = other + b = this + } + + elements = Object.keys(a.elements) + + for (var i = 0; i < elements.length; i++) { + var element = elements[i] + if (element in b.elements) { + intersection.push(element) + } + } + + return new lunr.Set (intersection) +} + +/** + * Returns a new set combining the elements of this and the specified set. + * + * @param {lunr.Set} other - set to union with this set. + * @return {lunr.Set} a new set that is the union of this and the specified set. + */ + +lunr.Set.prototype.union = function (other) { + if (other === lunr.Set.complete) { + return lunr.Set.complete + } + + if (other === lunr.Set.empty) { + return this + } + + return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements))) +} +/** + * A function to calculate the inverse document frequency for + * a posting. This is shared between the builder and the index + * + * @private + * @param {object} posting - The posting for a given term + * @param {number} documentCount - The total number of documents. + */ +lunr.idf = function (posting, documentCount) { + var documentsWithTerm = 0 + + for (var fieldName in posting) { + if (fieldName == '_index') continue // Ignore the term index, its not a field + documentsWithTerm += Object.keys(posting[fieldName]).length + } + + var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5) + + return Math.log(1 + Math.abs(x)) +} + +/** + * A token wraps a string representation of a token + * as it is passed through the text processing pipeline. + * + * @constructor + * @param {string} [str=''] - The string token being wrapped. + * @param {object} [metadata={}] - Metadata associated with this token. + */ +lunr.Token = function (str, metadata) { + this.str = str || "" + this.metadata = metadata || {} +} + +/** + * Returns the token string that is being wrapped by this object. + * + * @returns {string} + */ +lunr.Token.prototype.toString = function () { + return this.str +} + +/** + * A token update function is used when updating or optionally + * when cloning a token. + * + * @callback lunr.Token~updateFunction + * @param {string} str - The string representation of the token. + * @param {Object} metadata - All metadata associated with this token. + */ + +/** + * Applies the given function to the wrapped string token. + * + * @example + * token.update(function (str, metadata) { + * return str.toUpperCase() + * }) + * + * @param {lunr.Token~updateFunction} fn - A function to apply to the token string. + * @returns {lunr.Token} + */ +lunr.Token.prototype.update = function (fn) { + this.str = fn(this.str, this.metadata) + return this +} + +/** + * Creates a clone of this token. Optionally a function can be + * applied to the cloned token. + * + * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token. + * @returns {lunr.Token} + */ +lunr.Token.prototype.clone = function (fn) { + fn = fn || function (s) { return s } + return new lunr.Token (fn(this.str, this.metadata), this.metadata) +} +/*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A function for splitting a string into tokens ready to be inserted into + * the search index. Uses `lunr.tokenizer.separator` to split strings, change + * the value of this property to change how strings are split into tokens. + * + * This tokenizer will convert its parameter to a string by calling `toString` and + * then will split this string on the character in `lunr.tokenizer.separator`. + * Arrays will have their elements converted to strings and wrapped in a lunr.Token. + * + * Optional metadata can be passed to the tokenizer, this metadata will be cloned and + * added as metadata to every token that is created from the object to be tokenized. + * + * @static + * @param {?(string|object|object[])} obj - The object to convert into tokens + * @param {?object} metadata - Optional metadata to associate with every token + * @returns {lunr.Token[]} + * @see {@link lunr.Pipeline} + */ +lunr.tokenizer = function (obj, metadata) { + if (obj == null || obj == undefined) { + return [] + } + + if (Array.isArray(obj)) { + return obj.map(function (t) { + return new lunr.Token( + lunr.utils.asString(t).toLowerCase(), + lunr.utils.clone(metadata) + ) + }) + } + + var str = obj.toString().toLowerCase(), + len = str.length, + tokens = [] + + for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) { + var char = str.charAt(sliceEnd), + sliceLength = sliceEnd - sliceStart + + if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) { + + if (sliceLength > 0) { + var tokenMetadata = lunr.utils.clone(metadata) || {} + tokenMetadata["position"] = [sliceStart, sliceLength] + tokenMetadata["index"] = tokens.length + + tokens.push( + new lunr.Token ( + str.slice(sliceStart, sliceEnd), + tokenMetadata + ) + ) + } + + sliceStart = sliceEnd + 1 + } + + } + + return tokens +} + +/** + * The separator used to split a string into tokens. Override this property to change the behaviour of + * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens. + * + * @static + * @see lunr.tokenizer + */ +lunr.tokenizer.separator = /[\s\-]+/ +/*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * lunr.Pipelines maintain an ordered list of functions to be applied to all + * tokens in documents entering the search index and queries being ran against + * the index. + * + * An instance of lunr.Index created with the lunr shortcut will contain a + * pipeline with a stop word filter and an English language stemmer. Extra + * functions can be added before or after either of these functions or these + * default functions can be removed. + * + * When run the pipeline will call each function in turn, passing a token, the + * index of that token in the original list of all tokens and finally a list of + * all the original tokens. + * + * The output of functions in the pipeline will be passed to the next function + * in the pipeline. To exclude a token from entering the index the function + * should return undefined, the rest of the pipeline will not be called with + * this token. + * + * For serialisation of pipelines to work, all functions used in an instance of + * a pipeline should be registered with lunr.Pipeline. Registered functions can + * then be loaded. If trying to load a serialised pipeline that uses functions + * that are not registered an error will be thrown. + * + * If not planning on serialising the pipeline then registering pipeline functions + * is not necessary. + * + * @constructor + */ +lunr.Pipeline = function () { + this._stack = [] +} + +lunr.Pipeline.registeredFunctions = Object.create(null) + +/** + * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token + * string as well as all known metadata. A pipeline function can mutate the token string + * or mutate (or add) metadata for a given token. + * + * A pipeline function can indicate that the passed token should be discarded by returning + * null, undefined or an empty string. This token will not be passed to any downstream pipeline + * functions and will not be added to the index. + * + * Multiple tokens can be returned by returning an array of tokens. Each token will be passed + * to any downstream pipeline functions and all will returned tokens will be added to the index. + * + * Any number of pipeline functions may be chained together using a lunr.Pipeline. + * + * @interface lunr.PipelineFunction + * @param {lunr.Token} token - A token from the document being processed. + * @param {number} i - The index of this token in the complete list of tokens for this document/field. + * @param {lunr.Token[]} tokens - All tokens for this document/field. + * @returns {(?lunr.Token|lunr.Token[])} + */ + +/** + * Register a function with the pipeline. + * + * Functions that are used in the pipeline should be registered if the pipeline + * needs to be serialised, or a serialised pipeline needs to be loaded. + * + * Registering a function does not add it to a pipeline, functions must still be + * added to instances of the pipeline for them to be used when running a pipeline. + * + * @param {lunr.PipelineFunction} fn - The function to check for. + * @param {String} label - The label to register this function with + */ +lunr.Pipeline.registerFunction = function (fn, label) { + if (label in this.registeredFunctions) { + lunr.utils.warn('Overwriting existing registered function: ' + label) + } + + fn.label = label + lunr.Pipeline.registeredFunctions[fn.label] = fn +} + +/** + * Warns if the function is not registered as a Pipeline function. + * + * @param {lunr.PipelineFunction} fn - The function to check for. + * @private + */ +lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) { + var isRegistered = fn.label && (fn.label in this.registeredFunctions) + + if (!isRegistered) { + lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn) + } +} + +/** + * Loads a previously serialised pipeline. + * + * All functions to be loaded must already be registered with lunr.Pipeline. + * If any function from the serialised data has not been registered then an + * error will be thrown. + * + * @param {Object} serialised - The serialised pipeline to load. + * @returns {lunr.Pipeline} + */ +lunr.Pipeline.load = function (serialised) { + var pipeline = new lunr.Pipeline + + serialised.forEach(function (fnName) { + var fn = lunr.Pipeline.registeredFunctions[fnName] + + if (fn) { + pipeline.add(fn) + } else { + throw new Error('Cannot load unregistered function: ' + fnName) + } + }) + + return pipeline +} + +/** + * Adds new functions to the end of the pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline. + */ +lunr.Pipeline.prototype.add = function () { + var fns = Array.prototype.slice.call(arguments) + + fns.forEach(function (fn) { + lunr.Pipeline.warnIfFunctionNotRegistered(fn) + this._stack.push(fn) + }, this) +} + +/** + * Adds a single function after a function that already exists in the + * pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. + * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. + */ +lunr.Pipeline.prototype.after = function (existingFn, newFn) { + lunr.Pipeline.warnIfFunctionNotRegistered(newFn) + + var pos = this._stack.indexOf(existingFn) + if (pos == -1) { + throw new Error('Cannot find existingFn') + } + + pos = pos + 1 + this._stack.splice(pos, 0, newFn) +} + +/** + * Adds a single function before a function that already exists in the + * pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. + * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. + */ +lunr.Pipeline.prototype.before = function (existingFn, newFn) { + lunr.Pipeline.warnIfFunctionNotRegistered(newFn) + + var pos = this._stack.indexOf(existingFn) + if (pos == -1) { + throw new Error('Cannot find existingFn') + } + + this._stack.splice(pos, 0, newFn) +} + +/** + * Removes a function from the pipeline. + * + * @param {lunr.PipelineFunction} fn The function to remove from the pipeline. + */ +lunr.Pipeline.prototype.remove = function (fn) { + var pos = this._stack.indexOf(fn) + if (pos == -1) { + return + } + + this._stack.splice(pos, 1) +} + +/** + * Runs the current list of functions that make up the pipeline against the + * passed tokens. + * + * @param {Array} tokens The tokens to run through the pipeline. + * @returns {Array} + */ +lunr.Pipeline.prototype.run = function (tokens) { + var stackLength = this._stack.length + + for (var i = 0; i < stackLength; i++) { + var fn = this._stack[i] + var memo = [] + + for (var j = 0; j < tokens.length; j++) { + var result = fn(tokens[j], j, tokens) + + if (result === null || result === void 0 || result === '') continue + + if (Array.isArray(result)) { + for (var k = 0; k < result.length; k++) { + memo.push(result[k]) + } + } else { + memo.push(result) + } + } + + tokens = memo + } + + return tokens +} + +/** + * Convenience method for passing a string through a pipeline and getting + * strings out. This method takes care of wrapping the passed string in a + * token and mapping the resulting tokens back to strings. + * + * @param {string} str - The string to pass through the pipeline. + * @param {?object} metadata - Optional metadata to associate with the token + * passed to the pipeline. + * @returns {string[]} + */ +lunr.Pipeline.prototype.runString = function (str, metadata) { + var token = new lunr.Token (str, metadata) + + return this.run([token]).map(function (t) { + return t.toString() + }) +} + +/** + * Resets the pipeline by removing any existing processors. + * + */ +lunr.Pipeline.prototype.reset = function () { + this._stack = [] +} + +/** + * Returns a representation of the pipeline ready for serialisation. + * + * Logs a warning if the function has not been registered. + * + * @returns {Array} + */ +lunr.Pipeline.prototype.toJSON = function () { + return this._stack.map(function (fn) { + lunr.Pipeline.warnIfFunctionNotRegistered(fn) + + return fn.label + }) +} +/*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A vector is used to construct the vector space of documents and queries. These + * vectors support operations to determine the similarity between two documents or + * a document and a query. + * + * Normally no parameters are required for initializing a vector, but in the case of + * loading a previously dumped vector the raw elements can be provided to the constructor. + * + * For performance reasons vectors are implemented with a flat array, where an elements + * index is immediately followed by its value. E.g. [index, value, index, value]. This + * allows the underlying array to be as sparse as possible and still offer decent + * performance when being used for vector calculations. + * + * @constructor + * @param {Number[]} [elements] - The flat list of element index and element value pairs. + */ +lunr.Vector = function (elements) { + this._magnitude = 0 + this.elements = elements || [] +} + + +/** + * Calculates the position within the vector to insert a given index. + * + * This is used internally by insert and upsert. If there are duplicate indexes then + * the position is returned as if the value for that index were to be updated, but it + * is the callers responsibility to check whether there is a duplicate at that index + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @returns {Number} + */ +lunr.Vector.prototype.positionForIndex = function (index) { + // For an empty vector the tuple can be inserted at the beginning + if (this.elements.length == 0) { + return 0 + } + + var start = 0, + end = this.elements.length / 2, + sliceLength = end - start, + pivotPoint = Math.floor(sliceLength / 2), + pivotIndex = this.elements[pivotPoint * 2] + + while (sliceLength > 1) { + if (pivotIndex < index) { + start = pivotPoint + } + + if (pivotIndex > index) { + end = pivotPoint + } + + if (pivotIndex == index) { + break + } + + sliceLength = end - start + pivotPoint = start + Math.floor(sliceLength / 2) + pivotIndex = this.elements[pivotPoint * 2] + } + + if (pivotIndex == index) { + return pivotPoint * 2 + } + + if (pivotIndex > index) { + return pivotPoint * 2 + } + + if (pivotIndex < index) { + return (pivotPoint + 1) * 2 + } +} + +/** + * Inserts an element at an index within the vector. + * + * Does not allow duplicates, will throw an error if there is already an entry + * for this index. + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @param {Number} val - The value to be inserted into the vector. + */ +lunr.Vector.prototype.insert = function (insertIdx, val) { + this.upsert(insertIdx, val, function () { + throw "duplicate index" + }) +} + +/** + * Inserts or updates an existing index within the vector. + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @param {Number} val - The value to be inserted into the vector. + * @param {function} fn - A function that is called for updates, the existing value and the + * requested value are passed as arguments + */ +lunr.Vector.prototype.upsert = function (insertIdx, val, fn) { + this._magnitude = 0 + var position = this.positionForIndex(insertIdx) + + if (this.elements[position] == insertIdx) { + this.elements[position + 1] = fn(this.elements[position + 1], val) + } else { + this.elements.splice(position, 0, insertIdx, val) + } +} + +/** + * Calculates the magnitude of this vector. + * + * @returns {Number} + */ +lunr.Vector.prototype.magnitude = function () { + if (this._magnitude) return this._magnitude + + var sumOfSquares = 0, + elementsLength = this.elements.length + + for (var i = 1; i < elementsLength; i += 2) { + var val = this.elements[i] + sumOfSquares += val * val + } + + return this._magnitude = Math.sqrt(sumOfSquares) +} + +/** + * Calculates the dot product of this vector and another vector. + * + * @param {lunr.Vector} otherVector - The vector to compute the dot product with. + * @returns {Number} + */ +lunr.Vector.prototype.dot = function (otherVector) { + var dotProduct = 0, + a = this.elements, b = otherVector.elements, + aLen = a.length, bLen = b.length, + aVal = 0, bVal = 0, + i = 0, j = 0 + + while (i < aLen && j < bLen) { + aVal = a[i], bVal = b[j] + if (aVal < bVal) { + i += 2 + } else if (aVal > bVal) { + j += 2 + } else if (aVal == bVal) { + dotProduct += a[i + 1] * b[j + 1] + i += 2 + j += 2 + } + } + + return dotProduct +} + +/** + * Calculates the similarity between this vector and another vector. + * + * @param {lunr.Vector} otherVector - The other vector to calculate the + * similarity with. + * @returns {Number} + */ +lunr.Vector.prototype.similarity = function (otherVector) { + return this.dot(otherVector) / this.magnitude() || 0 +} + +/** + * Converts the vector to an array of the elements within the vector. + * + * @returns {Number[]} + */ +lunr.Vector.prototype.toArray = function () { + var output = new Array (this.elements.length / 2) + + for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) { + output[j] = this.elements[i] + } + + return output +} + +/** + * A JSON serializable representation of the vector. + * + * @returns {Number[]} + */ +lunr.Vector.prototype.toJSON = function () { + return this.elements +} +/* eslint-disable */ +/*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ + +/** + * lunr.stemmer is an english language stemmer, this is a JavaScript + * implementation of the PorterStemmer taken from http://tartarus.org/~martin + * + * @static + * @implements {lunr.PipelineFunction} + * @param {lunr.Token} token - The string to stem + * @returns {lunr.Token} + * @see {@link lunr.Pipeline} + * @function + */ +lunr.stemmer = (function(){ + var step2list = { + "ational" : "ate", + "tional" : "tion", + "enci" : "ence", + "anci" : "ance", + "izer" : "ize", + "bli" : "ble", + "alli" : "al", + "entli" : "ent", + "eli" : "e", + "ousli" : "ous", + "ization" : "ize", + "ation" : "ate", + "ator" : "ate", + "alism" : "al", + "iveness" : "ive", + "fulness" : "ful", + "ousness" : "ous", + "aliti" : "al", + "iviti" : "ive", + "biliti" : "ble", + "logi" : "log" + }, + + step3list = { + "icate" : "ic", + "ative" : "", + "alize" : "al", + "iciti" : "ic", + "ical" : "ic", + "ful" : "", + "ness" : "" + }, + + c = "[^aeiou]", // consonant + v = "[aeiouy]", // vowel + C = c + "[^aeiouy]*", // consonant sequence + V = v + "[aeiou]*", // vowel sequence + + mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0 + meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1 + mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1 + s_v = "^(" + C + ")?" + v; // vowel in stem + + var re_mgr0 = new RegExp(mgr0); + var re_mgr1 = new RegExp(mgr1); + var re_meq1 = new RegExp(meq1); + var re_s_v = new RegExp(s_v); + + var re_1a = /^(.+?)(ss|i)es$/; + var re2_1a = /^(.+?)([^s])s$/; + var re_1b = /^(.+?)eed$/; + var re2_1b = /^(.+?)(ed|ing)$/; + var re_1b_2 = /.$/; + var re2_1b_2 = /(at|bl|iz)$/; + var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$"); + var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + + var re_1c = /^(.+?[^aeiou])y$/; + var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + + var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + + var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + var re2_4 = /^(.+?)(s|t)(ion)$/; + + var re_5 = /^(.+?)e$/; + var re_5_1 = /ll$/; + var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + + var porterStemmer = function porterStemmer(w) { + var stem, + suffix, + firstch, + re, + re2, + re3, + re4; + + if (w.length < 3) { return w; } + + firstch = w.substr(0,1); + if (firstch == "y") { + w = firstch.toUpperCase() + w.substr(1); + } + + // Step 1a + re = re_1a + re2 = re2_1a; + + if (re.test(w)) { w = w.replace(re,"$1$2"); } + else if (re2.test(w)) { w = w.replace(re2,"$1$2"); } + + // Step 1b + re = re_1b; + re2 = re2_1b; + if (re.test(w)) { + var fp = re.exec(w); + re = re_mgr0; + if (re.test(fp[1])) { + re = re_1b_2; + w = w.replace(re,""); + } + } else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = re_s_v; + if (re2.test(stem)) { + w = stem; + re2 = re2_1b_2; + re3 = re3_1b_2; + re4 = re4_1b_2; + if (re2.test(w)) { w = w + "e"; } + else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); } + else if (re4.test(w)) { w = w + "e"; } + } + } + + // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say) + re = re_1c; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem + "i"; + } + + // Step 2 + re = re_2; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = re_mgr0; + if (re.test(stem)) { + w = stem + step2list[suffix]; + } + } + + // Step 3 + re = re_3; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = re_mgr0; + if (re.test(stem)) { + w = stem + step3list[suffix]; + } + } + + // Step 4 + re = re_4; + re2 = re2_4; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = re_mgr1; + if (re.test(stem)) { + w = stem; + } + } else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = re_mgr1; + if (re2.test(stem)) { + w = stem; + } + } + + // Step 5 + re = re_5; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = re_mgr1; + re2 = re_meq1; + re3 = re3_5; + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) { + w = stem; + } + } + + re = re_5_1; + re2 = re_mgr1; + if (re.test(w) && re2.test(w)) { + re = re_1b_2; + w = w.replace(re,""); + } + + // and turn initial Y back to y + + if (firstch == "y") { + w = firstch.toLowerCase() + w.substr(1); + } + + return w; + }; + + return function (token) { + return token.update(porterStemmer); + } +})(); + +lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer') +/*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * lunr.generateStopWordFilter builds a stopWordFilter function from the provided + * list of stop words. + * + * The built in lunr.stopWordFilter is built using this generator and can be used + * to generate custom stopWordFilters for applications or non English languages. + * + * @function + * @param {Array} token The token to pass through the filter + * @returns {lunr.PipelineFunction} + * @see lunr.Pipeline + * @see lunr.stopWordFilter + */ +lunr.generateStopWordFilter = function (stopWords) { + var words = stopWords.reduce(function (memo, stopWord) { + memo[stopWord] = stopWord + return memo + }, {}) + + return function (token) { + if (token && words[token.toString()] !== token.toString()) return token + } +} + +/** + * lunr.stopWordFilter is an English language stop word list filter, any words + * contained in the list will not be passed through the filter. + * + * This is intended to be used in the Pipeline. If the token does not pass the + * filter then undefined will be returned. + * + * @function + * @implements {lunr.PipelineFunction} + * @params {lunr.Token} token - A token to check for being a stop word. + * @returns {lunr.Token} + * @see {@link lunr.Pipeline} + */ +lunr.stopWordFilter = lunr.generateStopWordFilter([ + 'a', + 'able', + 'about', + 'across', + 'after', + 'all', + 'almost', + 'also', + 'am', + 'among', + 'an', + 'and', + 'any', + 'are', + 'as', + 'at', + 'be', + 'because', + 'been', + 'but', + 'by', + 'can', + 'cannot', + 'could', + 'dear', + 'did', + 'do', + 'does', + 'either', + 'else', + 'ever', + 'every', + 'for', + 'from', + 'get', + 'got', + 'had', + 'has', + 'have', + 'he', + 'her', + 'hers', + 'him', + 'his', + 'how', + 'however', + 'i', + 'if', + 'in', + 'into', + 'is', + 'it', + 'its', + 'just', + 'least', + 'let', + 'like', + 'likely', + 'may', + 'me', + 'might', + 'most', + 'must', + 'my', + 'neither', + 'no', + 'nor', + 'not', + 'of', + 'off', + 'often', + 'on', + 'only', + 'or', + 'other', + 'our', + 'own', + 'rather', + 'said', + 'say', + 'says', + 'she', + 'should', + 'since', + 'so', + 'some', + 'than', + 'that', + 'the', + 'their', + 'them', + 'then', + 'there', + 'these', + 'they', + 'this', + 'tis', + 'to', + 'too', + 'twas', + 'us', + 'wants', + 'was', + 'we', + 'were', + 'what', + 'when', + 'where', + 'which', + 'while', + 'who', + 'whom', + 'why', + 'will', + 'with', + 'would', + 'yet', + 'you', + 'your' +]) + +lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter') +/*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * lunr.trimmer is a pipeline function for trimming non word + * characters from the beginning and end of tokens before they + * enter the index. + * + * This implementation may not work correctly for non latin + * characters and should either be removed or adapted for use + * with languages with non-latin characters. + * + * @static + * @implements {lunr.PipelineFunction} + * @param {lunr.Token} token The token to pass through the filter + * @returns {lunr.Token} + * @see lunr.Pipeline + */ +lunr.trimmer = function (token) { + return token.update(function (s) { + return s.replace(/^\W+/, '').replace(/\W+$/, '') + }) +} + +lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer') +/*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A token set is used to store the unique list of all tokens + * within an index. Token sets are also used to represent an + * incoming query to the index, this query token set and index + * token set are then intersected to find which tokens to look + * up in the inverted index. + * + * A token set can hold multiple tokens, as in the case of the + * index token set, or it can hold a single token as in the + * case of a simple query token set. + * + * Additionally token sets are used to perform wildcard matching. + * Leading, contained and trailing wildcards are supported, and + * from this edit distance matching can also be provided. + * + * Token sets are implemented as a minimal finite state automata, + * where both common prefixes and suffixes are shared between tokens. + * This helps to reduce the space used for storing the token set. + * + * @constructor + */ +lunr.TokenSet = function () { + this.final = false + this.edges = {} + this.id = lunr.TokenSet._nextId + lunr.TokenSet._nextId += 1 +} + +/** + * Keeps track of the next, auto increment, identifier to assign + * to a new tokenSet. + * + * TokenSets require a unique identifier to be correctly minimised. + * + * @private + */ +lunr.TokenSet._nextId = 1 + +/** + * Creates a TokenSet instance from the given sorted array of words. + * + * @param {String[]} arr - A sorted array of strings to create the set from. + * @returns {lunr.TokenSet} + * @throws Will throw an error if the input array is not sorted. + */ +lunr.TokenSet.fromArray = function (arr) { + var builder = new lunr.TokenSet.Builder + + for (var i = 0, len = arr.length; i < len; i++) { + builder.insert(arr[i]) + } + + builder.finish() + return builder.root +} + +/** + * Creates a token set from a query clause. + * + * @private + * @param {Object} clause - A single clause from lunr.Query. + * @param {string} clause.term - The query clause term. + * @param {number} [clause.editDistance] - The optional edit distance for the term. + * @returns {lunr.TokenSet} + */ +lunr.TokenSet.fromClause = function (clause) { + if ('editDistance' in clause) { + return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance) + } else { + return lunr.TokenSet.fromString(clause.term) + } +} + +/** + * Creates a token set representing a single string with a specified + * edit distance. + * + * Insertions, deletions, substitutions and transpositions are each + * treated as an edit distance of 1. + * + * Increasing the allowed edit distance will have a dramatic impact + * on the performance of both creating and intersecting these TokenSets. + * It is advised to keep the edit distance less than 3. + * + * @param {string} str - The string to create the token set from. + * @param {number} editDistance - The allowed edit distance to match. + * @returns {lunr.Vector} + */ +lunr.TokenSet.fromFuzzyString = function (str, editDistance) { + var root = new lunr.TokenSet + + var stack = [{ + node: root, + editsRemaining: editDistance, + str: str + }] + + while (stack.length) { + var frame = stack.pop() + + // no edit + if (frame.str.length > 0) { + var char = frame.str.charAt(0), + noEditNode + + if (char in frame.node.edges) { + noEditNode = frame.node.edges[char] + } else { + noEditNode = new lunr.TokenSet + frame.node.edges[char] = noEditNode + } + + if (frame.str.length == 1) { + noEditNode.final = true + } + + stack.push({ + node: noEditNode, + editsRemaining: frame.editsRemaining, + str: frame.str.slice(1) + }) + } + + if (frame.editsRemaining == 0) { + continue + } + + // insertion + if ("*" in frame.node.edges) { + var insertionNode = frame.node.edges["*"] + } else { + var insertionNode = new lunr.TokenSet + frame.node.edges["*"] = insertionNode + } + + if (frame.str.length == 0) { + insertionNode.final = true + } + + stack.push({ + node: insertionNode, + editsRemaining: frame.editsRemaining - 1, + str: frame.str + }) + + // deletion + // can only do a deletion if we have enough edits remaining + // and if there are characters left to delete in the string + if (frame.str.length > 1) { + stack.push({ + node: frame.node, + editsRemaining: frame.editsRemaining - 1, + str: frame.str.slice(1) + }) + } + + // deletion + // just removing the last character from the str + if (frame.str.length == 1) { + frame.node.final = true + } + + // substitution + // can only do a substitution if we have enough edits remaining + // and if there are characters left to substitute + if (frame.str.length >= 1) { + if ("*" in frame.node.edges) { + var substitutionNode = frame.node.edges["*"] + } else { + var substitutionNode = new lunr.TokenSet + frame.node.edges["*"] = substitutionNode + } + + if (frame.str.length == 1) { + substitutionNode.final = true + } + + stack.push({ + node: substitutionNode, + editsRemaining: frame.editsRemaining - 1, + str: frame.str.slice(1) + }) + } + + // transposition + // can only do a transposition if there are edits remaining + // and there are enough characters to transpose + if (frame.str.length > 1) { + var charA = frame.str.charAt(0), + charB = frame.str.charAt(1), + transposeNode + + if (charB in frame.node.edges) { + transposeNode = frame.node.edges[charB] + } else { + transposeNode = new lunr.TokenSet + frame.node.edges[charB] = transposeNode + } + + if (frame.str.length == 1) { + transposeNode.final = true + } + + stack.push({ + node: transposeNode, + editsRemaining: frame.editsRemaining - 1, + str: charA + frame.str.slice(2) + }) + } + } + + return root +} + +/** + * Creates a TokenSet from a string. + * + * The string may contain one or more wildcard characters (*) + * that will allow wildcard matching when intersecting with + * another TokenSet. + * + * @param {string} str - The string to create a TokenSet from. + * @returns {lunr.TokenSet} + */ +lunr.TokenSet.fromString = function (str) { + var node = new lunr.TokenSet, + root = node + + /* + * Iterates through all characters within the passed string + * appending a node for each character. + * + * When a wildcard character is found then a self + * referencing edge is introduced to continually match + * any number of any characters. + */ + for (var i = 0, len = str.length; i < len; i++) { + var char = str[i], + final = (i == len - 1) + + if (char == "*") { + node.edges[char] = node + node.final = final + + } else { + var next = new lunr.TokenSet + next.final = final + + node.edges[char] = next + node = next + } + } + + return root +} + +/** + * Converts this TokenSet into an array of strings + * contained within the TokenSet. + * + * This is not intended to be used on a TokenSet that + * contains wildcards, in these cases the results are + * undefined and are likely to cause an infinite loop. + * + * @returns {string[]} + */ +lunr.TokenSet.prototype.toArray = function () { + var words = [] + + var stack = [{ + prefix: "", + node: this + }] + + while (stack.length) { + var frame = stack.pop(), + edges = Object.keys(frame.node.edges), + len = edges.length + + if (frame.node.final) { + /* In Safari, at this point the prefix is sometimes corrupted, see: + * https://github.com/olivernn/lunr.js/issues/279 Calling any + * String.prototype method forces Safari to "cast" this string to what + * it's supposed to be, fixing the bug. */ + frame.prefix.charAt(0) + words.push(frame.prefix) + } + + for (var i = 0; i < len; i++) { + var edge = edges[i] + + stack.push({ + prefix: frame.prefix.concat(edge), + node: frame.node.edges[edge] + }) + } + } + + return words +} + +/** + * Generates a string representation of a TokenSet. + * + * This is intended to allow TokenSets to be used as keys + * in objects, largely to aid the construction and minimisation + * of a TokenSet. As such it is not designed to be a human + * friendly representation of the TokenSet. + * + * @returns {string} + */ +lunr.TokenSet.prototype.toString = function () { + // NOTE: Using Object.keys here as this.edges is very likely + // to enter 'hash-mode' with many keys being added + // + // avoiding a for-in loop here as it leads to the function + // being de-optimised (at least in V8). From some simple + // benchmarks the performance is comparable, but allowing + // V8 to optimize may mean easy performance wins in the future. + + if (this._str) { + return this._str + } + + var str = this.final ? '1' : '0', + labels = Object.keys(this.edges).sort(), + len = labels.length + + for (var i = 0; i < len; i++) { + var label = labels[i], + node = this.edges[label] + + str = str + label + node.id + } + + return str +} + +/** + * Returns a new TokenSet that is the intersection of + * this TokenSet and the passed TokenSet. + * + * This intersection will take into account any wildcards + * contained within the TokenSet. + * + * @param {lunr.TokenSet} b - An other TokenSet to intersect with. + * @returns {lunr.TokenSet} + */ +lunr.TokenSet.prototype.intersect = function (b) { + var output = new lunr.TokenSet, + frame = undefined + + var stack = [{ + qNode: b, + output: output, + node: this + }] + + while (stack.length) { + frame = stack.pop() + + // NOTE: As with the #toString method, we are using + // Object.keys and a for loop instead of a for-in loop + // as both of these objects enter 'hash' mode, causing + // the function to be de-optimised in V8 + var qEdges = Object.keys(frame.qNode.edges), + qLen = qEdges.length, + nEdges = Object.keys(frame.node.edges), + nLen = nEdges.length + + for (var q = 0; q < qLen; q++) { + var qEdge = qEdges[q] + + for (var n = 0; n < nLen; n++) { + var nEdge = nEdges[n] + + if (nEdge == qEdge || qEdge == '*') { + var node = frame.node.edges[nEdge], + qNode = frame.qNode.edges[qEdge], + final = node.final && qNode.final, + next = undefined + + if (nEdge in frame.output.edges) { + // an edge already exists for this character + // no need to create a new node, just set the finality + // bit unless this node is already final + next = frame.output.edges[nEdge] + next.final = next.final || final + + } else { + // no edge exists yet, must create one + // set the finality bit and insert it + // into the output + next = new lunr.TokenSet + next.final = final + frame.output.edges[nEdge] = next + } + + stack.push({ + qNode: qNode, + output: next, + node: node + }) + } + } + } + } + + return output +} +lunr.TokenSet.Builder = function () { + this.previousWord = "" + this.root = new lunr.TokenSet + this.uncheckedNodes = [] + this.minimizedNodes = {} +} + +lunr.TokenSet.Builder.prototype.insert = function (word) { + var node, + commonPrefix = 0 + + if (word < this.previousWord) { + throw new Error ("Out of order word insertion") + } + + for (var i = 0; i < word.length && i < this.previousWord.length; i++) { + if (word[i] != this.previousWord[i]) break + commonPrefix++ + } + + this.minimize(commonPrefix) + + if (this.uncheckedNodes.length == 0) { + node = this.root + } else { + node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child + } + + for (var i = commonPrefix; i < word.length; i++) { + var nextNode = new lunr.TokenSet, + char = word[i] + + node.edges[char] = nextNode + + this.uncheckedNodes.push({ + parent: node, + char: char, + child: nextNode + }) + + node = nextNode + } + + node.final = true + this.previousWord = word +} + +lunr.TokenSet.Builder.prototype.finish = function () { + this.minimize(0) +} + +lunr.TokenSet.Builder.prototype.minimize = function (downTo) { + for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) { + var node = this.uncheckedNodes[i], + childKey = node.child.toString() + + if (childKey in this.minimizedNodes) { + node.parent.edges[node.char] = this.minimizedNodes[childKey] + } else { + // Cache the key for this node since + // we know it can't change anymore + node.child._str = childKey + + this.minimizedNodes[childKey] = node.child + } + + this.uncheckedNodes.pop() + } +} +/*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * An index contains the built index of all documents and provides a query interface + * to the index. + * + * Usually instances of lunr.Index will not be created using this constructor, instead + * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be + * used to load previously built and serialized indexes. + * + * @constructor + * @param {Object} attrs - The attributes of the built search index. + * @param {Object} attrs.invertedIndex - An index of term/field to document reference. + * @param {Object} attrs.fieldVectors - Field vectors + * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens. + * @param {string[]} attrs.fields - The names of indexed document fields. + * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms. + */ +lunr.Index = function (attrs) { + this.invertedIndex = attrs.invertedIndex + this.fieldVectors = attrs.fieldVectors + this.tokenSet = attrs.tokenSet + this.fields = attrs.fields + this.pipeline = attrs.pipeline +} + +/** + * A result contains details of a document matching a search query. + * @typedef {Object} lunr.Index~Result + * @property {string} ref - The reference of the document this result represents. + * @property {number} score - A number between 0 and 1 representing how similar this document is to the query. + * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match. + */ + +/** + * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple + * query language which itself is parsed into an instance of lunr.Query. + * + * For programmatically building queries it is advised to directly use lunr.Query, the query language + * is best used for human entered text rather than program generated text. + * + * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported + * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello' + * or 'world', though those that contain both will rank higher in the results. + * + * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can + * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding + * wildcards will increase the number of documents that will be found but can also have a negative + * impact on query performance, especially with wildcards at the beginning of a term. + * + * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term + * hello in the title field will match this query. Using a field not present in the index will lead + * to an error being thrown. + * + * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term + * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported + * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2. + * Avoid large values for edit distance to improve query performance. + * + * Each term also supports a presence modifier. By default a term's presence in document is optional, however + * this can be changed to either required or prohibited. For a term's presence to be required in a document the + * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and + * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not + * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'. + * + * To escape special characters the backslash character '\' can be used, this allows searches to include + * characters that would normally be considered modifiers, e.g. `foo\~2` will search for a term "foo~2" instead + * of attempting to apply a boost of 2 to the search term "foo". + * + * @typedef {string} lunr.Index~QueryString + * @example Simple single term query + * hello + * @example Multiple term query + * hello world + * @example term scoped to a field + * title:hello + * @example term with a boost of 10 + * hello^10 + * @example term with an edit distance of 2 + * hello~2 + * @example terms with presence modifiers + * -foo +bar baz + */ + +/** + * Performs a search against the index using lunr query syntax. + * + * Results will be returned sorted by their score, the most relevant results + * will be returned first. For details on how the score is calculated, please see + * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}. + * + * For more programmatic querying use lunr.Index#query. + * + * @param {lunr.Index~QueryString} queryString - A string containing a lunr query. + * @throws {lunr.QueryParseError} If the passed query string cannot be parsed. + * @returns {lunr.Index~Result[]} + */ +lunr.Index.prototype.search = function (queryString) { + return this.query(function (query) { + var parser = new lunr.QueryParser(queryString, query) + parser.parse() + }) +} + +/** + * A query builder callback provides a query object to be used to express + * the query to perform on the index. + * + * @callback lunr.Index~queryBuilder + * @param {lunr.Query} query - The query object to build up. + * @this lunr.Query + */ + +/** + * Performs a query against the index using the yielded lunr.Query object. + * + * If performing programmatic queries against the index, this method is preferred + * over lunr.Index#search so as to avoid the additional query parsing overhead. + * + * A query object is yielded to the supplied function which should be used to + * express the query to be run against the index. + * + * Note that although this function takes a callback parameter it is _not_ an + * asynchronous operation, the callback is just yielded a query object to be + * customized. + * + * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query. + * @returns {lunr.Index~Result[]} + */ +lunr.Index.prototype.query = function (fn) { + // for each query clause + // * process terms + // * expand terms from token set + // * find matching documents and metadata + // * get document vectors + // * score documents + + var query = new lunr.Query(this.fields), + matchingFields = Object.create(null), + queryVectors = Object.create(null), + termFieldCache = Object.create(null), + requiredMatches = Object.create(null), + prohibitedMatches = Object.create(null) + + /* + * To support field level boosts a query vector is created per + * field. An empty vector is eagerly created to support negated + * queries. + */ + for (var i = 0; i < this.fields.length; i++) { + queryVectors[this.fields[i]] = new lunr.Vector + } + + fn.call(query, query) + + for (var i = 0; i < query.clauses.length; i++) { + /* + * Unless the pipeline has been disabled for this term, which is + * the case for terms with wildcards, we need to pass the clause + * term through the search pipeline. A pipeline returns an array + * of processed terms. Pipeline functions may expand the passed + * term, which means we may end up performing multiple index lookups + * for a single query term. + */ + var clause = query.clauses[i], + terms = null, + clauseMatches = lunr.Set.empty + + if (clause.usePipeline) { + terms = this.pipeline.runString(clause.term, { + fields: clause.fields + }) + } else { + terms = [clause.term] + } + + for (var m = 0; m < terms.length; m++) { + var term = terms[m] + + /* + * Each term returned from the pipeline needs to use the same query + * clause object, e.g. the same boost and or edit distance. The + * simplest way to do this is to re-use the clause object but mutate + * its term property. + */ + clause.term = term + + /* + * From the term in the clause we create a token set which will then + * be used to intersect the indexes token set to get a list of terms + * to lookup in the inverted index + */ + var termTokenSet = lunr.TokenSet.fromClause(clause), + expandedTerms = this.tokenSet.intersect(termTokenSet).toArray() + + /* + * If a term marked as required does not exist in the tokenSet it is + * impossible for the search to return any matches. We set all the field + * scoped required matches set to empty and stop examining any further + * clauses. + */ + if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) { + for (var k = 0; k < clause.fields.length; k++) { + var field = clause.fields[k] + requiredMatches[field] = lunr.Set.empty + } + + break + } + + for (var j = 0; j < expandedTerms.length; j++) { + /* + * For each term get the posting and termIndex, this is required for + * building the query vector. + */ + var expandedTerm = expandedTerms[j], + posting = this.invertedIndex[expandedTerm], + termIndex = posting._index + + for (var k = 0; k < clause.fields.length; k++) { + /* + * For each field that this query term is scoped by (by default + * all fields are in scope) we need to get all the document refs + * that have this term in that field. + * + * The posting is the entry in the invertedIndex for the matching + * term from above. + */ + var field = clause.fields[k], + fieldPosting = posting[field], + matchingDocumentRefs = Object.keys(fieldPosting), + termField = expandedTerm + "/" + field, + matchingDocumentsSet = new lunr.Set(matchingDocumentRefs) + + /* + * if the presence of this term is required ensure that the matching + * documents are added to the set of required matches for this clause. + * + */ + if (clause.presence == lunr.Query.presence.REQUIRED) { + clauseMatches = clauseMatches.union(matchingDocumentsSet) + + if (requiredMatches[field] === undefined) { + requiredMatches[field] = lunr.Set.complete + } + } + + /* + * if the presence of this term is prohibited ensure that the matching + * documents are added to the set of prohibited matches for this field, + * creating that set if it does not yet exist. + */ + if (clause.presence == lunr.Query.presence.PROHIBITED) { + if (prohibitedMatches[field] === undefined) { + prohibitedMatches[field] = lunr.Set.empty + } + + prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet) + + /* + * Prohibited matches should not be part of the query vector used for + * similarity scoring and no metadata should be extracted so we continue + * to the next field + */ + continue + } + + /* + * The query field vector is populated using the termIndex found for + * the term and a unit value with the appropriate boost applied. + * Using upsert because there could already be an entry in the vector + * for the term we are working with. In that case we just add the scores + * together. + */ + queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b }) + + /** + * If we've already seen this term, field combo then we've already collected + * the matching documents and metadata, no need to go through all that again + */ + if (termFieldCache[termField]) { + continue + } + + for (var l = 0; l < matchingDocumentRefs.length; l++) { + /* + * All metadata for this term/field/document triple + * are then extracted and collected into an instance + * of lunr.MatchData ready to be returned in the query + * results + */ + var matchingDocumentRef = matchingDocumentRefs[l], + matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field), + metadata = fieldPosting[matchingDocumentRef], + fieldMatch + + if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) { + matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata) + } else { + fieldMatch.add(expandedTerm, field, metadata) + } + + } + + termFieldCache[termField] = true + } + } + } + + /** + * If the presence was required we need to update the requiredMatches field sets. + * We do this after all fields for the term have collected their matches because + * the clause terms presence is required in _any_ of the fields not _all_ of the + * fields. + */ + if (clause.presence === lunr.Query.presence.REQUIRED) { + for (var k = 0; k < clause.fields.length; k++) { + var field = clause.fields[k] + requiredMatches[field] = requiredMatches[field].intersect(clauseMatches) + } + } + } + + /** + * Need to combine the field scoped required and prohibited + * matching documents into a global set of required and prohibited + * matches + */ + var allRequiredMatches = lunr.Set.complete, + allProhibitedMatches = lunr.Set.empty + + for (var i = 0; i < this.fields.length; i++) { + var field = this.fields[i] + + if (requiredMatches[field]) { + allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field]) + } + + if (prohibitedMatches[field]) { + allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field]) + } + } + + var matchingFieldRefs = Object.keys(matchingFields), + results = [], + matches = Object.create(null) + + /* + * If the query is negated (contains only prohibited terms) + * we need to get _all_ fieldRefs currently existing in the + * index. This is only done when we know that the query is + * entirely prohibited terms to avoid any cost of getting all + * fieldRefs unnecessarily. + * + * Additionally, blank MatchData must be created to correctly + * populate the results. + */ + if (query.isNegated()) { + matchingFieldRefs = Object.keys(this.fieldVectors) + + for (var i = 0; i < matchingFieldRefs.length; i++) { + var matchingFieldRef = matchingFieldRefs[i] + var fieldRef = lunr.FieldRef.fromString(matchingFieldRef) + matchingFields[matchingFieldRef] = new lunr.MatchData + } + } + + for (var i = 0; i < matchingFieldRefs.length; i++) { + /* + * Currently we have document fields that match the query, but we + * need to return documents. The matchData and scores are combined + * from multiple fields belonging to the same document. + * + * Scores are calculated by field, using the query vectors created + * above, and combined into a final document score using addition. + */ + var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]), + docRef = fieldRef.docRef + + if (!allRequiredMatches.contains(docRef)) { + continue + } + + if (allProhibitedMatches.contains(docRef)) { + continue + } + + var fieldVector = this.fieldVectors[fieldRef], + score = queryVectors[fieldRef.fieldName].similarity(fieldVector), + docMatch + + if ((docMatch = matches[docRef]) !== undefined) { + docMatch.score += score + docMatch.matchData.combine(matchingFields[fieldRef]) + } else { + var match = { + ref: docRef, + score: score, + matchData: matchingFields[fieldRef] + } + matches[docRef] = match + results.push(match) + } + } + + /* + * Sort the results objects by score, highest first. + */ + return results.sort(function (a, b) { + return b.score - a.score + }) +} + +/** + * Prepares the index for JSON serialization. + * + * The schema for this JSON blob will be described in a + * separate JSON schema file. + * + * @returns {Object} + */ +lunr.Index.prototype.toJSON = function () { + var invertedIndex = Object.keys(this.invertedIndex) + .sort() + .map(function (term) { + return [term, this.invertedIndex[term]] + }, this) + + var fieldVectors = Object.keys(this.fieldVectors) + .map(function (ref) { + return [ref, this.fieldVectors[ref].toJSON()] + }, this) + + return { + version: lunr.version, + fields: this.fields, + fieldVectors: fieldVectors, + invertedIndex: invertedIndex, + pipeline: this.pipeline.toJSON() + } +} + +/** + * Loads a previously serialized lunr.Index + * + * @param {Object} serializedIndex - A previously serialized lunr.Index + * @returns {lunr.Index} + */ +lunr.Index.load = function (serializedIndex) { + var attrs = {}, + fieldVectors = {}, + serializedVectors = serializedIndex.fieldVectors, + invertedIndex = Object.create(null), + serializedInvertedIndex = serializedIndex.invertedIndex, + tokenSetBuilder = new lunr.TokenSet.Builder, + pipeline = lunr.Pipeline.load(serializedIndex.pipeline) + + if (serializedIndex.version != lunr.version) { + lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + lunr.version + "' does not match serialized index '" + serializedIndex.version + "'") + } + + for (var i = 0; i < serializedVectors.length; i++) { + var tuple = serializedVectors[i], + ref = tuple[0], + elements = tuple[1] + + fieldVectors[ref] = new lunr.Vector(elements) + } + + for (var i = 0; i < serializedInvertedIndex.length; i++) { + var tuple = serializedInvertedIndex[i], + term = tuple[0], + posting = tuple[1] + + tokenSetBuilder.insert(term) + invertedIndex[term] = posting + } + + tokenSetBuilder.finish() + + attrs.fields = serializedIndex.fields + + attrs.fieldVectors = fieldVectors + attrs.invertedIndex = invertedIndex + attrs.tokenSet = tokenSetBuilder.root + attrs.pipeline = pipeline + + return new lunr.Index(attrs) +} +/*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * lunr.Builder performs indexing on a set of documents and + * returns instances of lunr.Index ready for querying. + * + * All configuration of the index is done via the builder, the + * fields to index, the document reference, the text processing + * pipeline and document scoring parameters are all set on the + * builder before indexing. + * + * @constructor + * @property {string} _ref - Internal reference to the document reference field. + * @property {string[]} _fields - Internal reference to the document fields to index. + * @property {object} invertedIndex - The inverted index maps terms to document fields. + * @property {object} documentTermFrequencies - Keeps track of document term frequencies. + * @property {object} documentLengths - Keeps track of the length of documents added to the index. + * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing. + * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing. + * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index. + * @property {number} documentCount - Keeps track of the total number of documents indexed. + * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75. + * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2. + * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space. + * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index. + */ +lunr.Builder = function () { + this._ref = "id" + this._fields = Object.create(null) + this._documents = Object.create(null) + this.invertedIndex = Object.create(null) + this.fieldTermFrequencies = {} + this.fieldLengths = {} + this.tokenizer = lunr.tokenizer + this.pipeline = new lunr.Pipeline + this.searchPipeline = new lunr.Pipeline + this.documentCount = 0 + this._b = 0.75 + this._k1 = 1.2 + this.termIndex = 0 + this.metadataWhitelist = [] +} + +/** + * Sets the document field used as the document reference. Every document must have this field. + * The type of this field in the document should be a string, if it is not a string it will be + * coerced into a string by calling toString. + * + * The default ref is 'id'. + * + * The ref should _not_ be changed during indexing, it should be set before any documents are + * added to the index. Changing it during indexing can lead to inconsistent results. + * + * @param {string} ref - The name of the reference field in the document. + */ +lunr.Builder.prototype.ref = function (ref) { + this._ref = ref +} + +/** + * A function that is used to extract a field from a document. + * + * Lunr expects a field to be at the top level of a document, if however the field + * is deeply nested within a document an extractor function can be used to extract + * the right field for indexing. + * + * @callback fieldExtractor + * @param {object} doc - The document being added to the index. + * @returns {?(string|object|object[])} obj - The object that will be indexed for this field. + * @example Extracting a nested field + * function (doc) { return doc.nested.field } + */ + +/** + * Adds a field to the list of document fields that will be indexed. Every document being + * indexed should have this field. Null values for this field in indexed documents will + * not cause errors but will limit the chance of that document being retrieved by searches. + * + * All fields should be added before adding documents to the index. Adding fields after + * a document has been indexed will have no effect on already indexed documents. + * + * Fields can be boosted at build time. This allows terms within that field to have more + * importance when ranking search results. Use a field boost to specify that matches within + * one field are more important than other fields. + * + * @param {string} fieldName - The name of a field to index in all documents. + * @param {object} attributes - Optional attributes associated with this field. + * @param {number} [attributes.boost=1] - Boost applied to all terms within this field. + * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document. + * @throws {RangeError} fieldName cannot contain unsupported characters '/' + */ +lunr.Builder.prototype.field = function (fieldName, attributes) { + if (/\//.test(fieldName)) { + throw new RangeError ("Field '" + fieldName + "' contains illegal character '/'") + } + + this._fields[fieldName] = attributes || {} +} + +/** + * A parameter to tune the amount of field length normalisation that is applied when + * calculating relevance scores. A value of 0 will completely disable any normalisation + * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b + * will be clamped to the range 0 - 1. + * + * @param {number} number - The value to set for this tuning parameter. + */ +lunr.Builder.prototype.b = function (number) { + if (number < 0) { + this._b = 0 + } else if (number > 1) { + this._b = 1 + } else { + this._b = number + } +} + +/** + * A parameter that controls the speed at which a rise in term frequency results in term + * frequency saturation. The default value is 1.2. Setting this to a higher value will give + * slower saturation levels, a lower value will result in quicker saturation. + * + * @param {number} number - The value to set for this tuning parameter. + */ +lunr.Builder.prototype.k1 = function (number) { + this._k1 = number +} + +/** + * Adds a document to the index. + * + * Before adding fields to the index the index should have been fully setup, with the document + * ref and all fields to index already having been specified. + * + * The document must have a field name as specified by the ref (by default this is 'id') and + * it should have all fields defined for indexing, though null or undefined values will not + * cause errors. + * + * Entire documents can be boosted at build time. Applying a boost to a document indicates that + * this document should rank higher in search results than other documents. + * + * @param {object} doc - The document to add to the index. + * @param {object} attributes - Optional attributes associated with this document. + * @param {number} [attributes.boost=1] - Boost applied to all terms within this document. + */ +lunr.Builder.prototype.add = function (doc, attributes) { + var docRef = doc[this._ref], + fields = Object.keys(this._fields) + + this._documents[docRef] = attributes || {} + this.documentCount += 1 + + for (var i = 0; i < fields.length; i++) { + var fieldName = fields[i], + extractor = this._fields[fieldName].extractor, + field = extractor ? extractor(doc) : doc[fieldName], + tokens = this.tokenizer(field, { + fields: [fieldName] + }), + terms = this.pipeline.run(tokens), + fieldRef = new lunr.FieldRef (docRef, fieldName), + fieldTerms = Object.create(null) + + this.fieldTermFrequencies[fieldRef] = fieldTerms + this.fieldLengths[fieldRef] = 0 + + // store the length of this field for this document + this.fieldLengths[fieldRef] += terms.length + + // calculate term frequencies for this field + for (var j = 0; j < terms.length; j++) { + var term = terms[j] + + if (fieldTerms[term] == undefined) { + fieldTerms[term] = 0 + } + + fieldTerms[term] += 1 + + // add to inverted index + // create an initial posting if one doesn't exist + if (this.invertedIndex[term] == undefined) { + var posting = Object.create(null) + posting["_index"] = this.termIndex + this.termIndex += 1 + + for (var k = 0; k < fields.length; k++) { + posting[fields[k]] = Object.create(null) + } + + this.invertedIndex[term] = posting + } + + // add an entry for this term/fieldName/docRef to the invertedIndex + if (this.invertedIndex[term][fieldName][docRef] == undefined) { + this.invertedIndex[term][fieldName][docRef] = Object.create(null) + } + + // store all whitelisted metadata about this token in the + // inverted index + for (var l = 0; l < this.metadataWhitelist.length; l++) { + var metadataKey = this.metadataWhitelist[l], + metadata = term.metadata[metadataKey] + + if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) { + this.invertedIndex[term][fieldName][docRef][metadataKey] = [] + } + + this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata) + } + } + + } +} + +/** + * Calculates the average document length for this index + * + * @private + */ +lunr.Builder.prototype.calculateAverageFieldLengths = function () { + + var fieldRefs = Object.keys(this.fieldLengths), + numberOfFields = fieldRefs.length, + accumulator = {}, + documentsWithField = {} + + for (var i = 0; i < numberOfFields; i++) { + var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), + field = fieldRef.fieldName + + documentsWithField[field] || (documentsWithField[field] = 0) + documentsWithField[field] += 1 + + accumulator[field] || (accumulator[field] = 0) + accumulator[field] += this.fieldLengths[fieldRef] + } + + var fields = Object.keys(this._fields) + + for (var i = 0; i < fields.length; i++) { + var fieldName = fields[i] + accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName] + } + + this.averageFieldLength = accumulator +} + +/** + * Builds a vector space model of every document using lunr.Vector + * + * @private + */ +lunr.Builder.prototype.createFieldVectors = function () { + var fieldVectors = {}, + fieldRefs = Object.keys(this.fieldTermFrequencies), + fieldRefsLength = fieldRefs.length, + termIdfCache = Object.create(null) + + for (var i = 0; i < fieldRefsLength; i++) { + var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), + fieldName = fieldRef.fieldName, + fieldLength = this.fieldLengths[fieldRef], + fieldVector = new lunr.Vector, + termFrequencies = this.fieldTermFrequencies[fieldRef], + terms = Object.keys(termFrequencies), + termsLength = terms.length + + + var fieldBoost = this._fields[fieldName].boost || 1, + docBoost = this._documents[fieldRef.docRef].boost || 1 + + for (var j = 0; j < termsLength; j++) { + var term = terms[j], + tf = termFrequencies[term], + termIndex = this.invertedIndex[term]._index, + idf, score, scoreWithPrecision + + if (termIdfCache[term] === undefined) { + idf = lunr.idf(this.invertedIndex[term], this.documentCount) + termIdfCache[term] = idf + } else { + idf = termIdfCache[term] + } + + score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf) + score *= fieldBoost + score *= docBoost + scoreWithPrecision = Math.round(score * 1000) / 1000 + // Converts 1.23456789 to 1.234. + // Reducing the precision so that the vectors take up less + // space when serialised. Doing it now so that they behave + // the same before and after serialisation. Also, this is + // the fastest approach to reducing a number's precision in + // JavaScript. + + fieldVector.insert(termIndex, scoreWithPrecision) + } + + fieldVectors[fieldRef] = fieldVector + } + + this.fieldVectors = fieldVectors +} + +/** + * Creates a token set of all tokens in the index using lunr.TokenSet + * + * @private + */ +lunr.Builder.prototype.createTokenSet = function () { + this.tokenSet = lunr.TokenSet.fromArray( + Object.keys(this.invertedIndex).sort() + ) +} + +/** + * Builds the index, creating an instance of lunr.Index. + * + * This completes the indexing process and should only be called + * once all documents have been added to the index. + * + * @returns {lunr.Index} + */ +lunr.Builder.prototype.build = function () { + this.calculateAverageFieldLengths() + this.createFieldVectors() + this.createTokenSet() + + return new lunr.Index({ + invertedIndex: this.invertedIndex, + fieldVectors: this.fieldVectors, + tokenSet: this.tokenSet, + fields: Object.keys(this._fields), + pipeline: this.searchPipeline + }) +} + +/** + * Applies a plugin to the index builder. + * + * A plugin is a function that is called with the index builder as its context. + * Plugins can be used to customise or extend the behaviour of the index + * in some way. A plugin is just a function, that encapsulated the custom + * behaviour that should be applied when building the index. + * + * The plugin function will be called with the index builder as its argument, additional + * arguments can also be passed when calling use. The function will be called + * with the index builder as its context. + * + * @param {Function} plugin The plugin to apply. + */ +lunr.Builder.prototype.use = function (fn) { + var args = Array.prototype.slice.call(arguments, 1) + args.unshift(this) + fn.apply(this, args) +} +/** + * Contains and collects metadata about a matching document. + * A single instance of lunr.MatchData is returned as part of every + * lunr.Index~Result. + * + * @constructor + * @param {string} term - The term this match data is associated with + * @param {string} field - The field in which the term was found + * @param {object} metadata - The metadata recorded about this term in this field + * @property {object} metadata - A cloned collection of metadata associated with this document. + * @see {@link lunr.Index~Result} + */ +lunr.MatchData = function (term, field, metadata) { + var clonedMetadata = Object.create(null), + metadataKeys = Object.keys(metadata || {}) + + // Cloning the metadata to prevent the original + // being mutated during match data combination. + // Metadata is kept in an array within the inverted + // index so cloning the data can be done with + // Array#slice + for (var i = 0; i < metadataKeys.length; i++) { + var key = metadataKeys[i] + clonedMetadata[key] = metadata[key].slice() + } + + this.metadata = Object.create(null) + + if (term !== undefined) { + this.metadata[term] = Object.create(null) + this.metadata[term][field] = clonedMetadata + } +} + +/** + * An instance of lunr.MatchData will be created for every term that matches a + * document. However only one instance is required in a lunr.Index~Result. This + * method combines metadata from another instance of lunr.MatchData with this + * objects metadata. + * + * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one. + * @see {@link lunr.Index~Result} + */ +lunr.MatchData.prototype.combine = function (otherMatchData) { + var terms = Object.keys(otherMatchData.metadata) + + for (var i = 0; i < terms.length; i++) { + var term = terms[i], + fields = Object.keys(otherMatchData.metadata[term]) + + if (this.metadata[term] == undefined) { + this.metadata[term] = Object.create(null) + } + + for (var j = 0; j < fields.length; j++) { + var field = fields[j], + keys = Object.keys(otherMatchData.metadata[term][field]) + + if (this.metadata[term][field] == undefined) { + this.metadata[term][field] = Object.create(null) + } + + for (var k = 0; k < keys.length; k++) { + var key = keys[k] + + if (this.metadata[term][field][key] == undefined) { + this.metadata[term][field][key] = otherMatchData.metadata[term][field][key] + } else { + this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key]) + } + + } + } + } +} + +/** + * Add metadata for a term/field pair to this instance of match data. + * + * @param {string} term - The term this match data is associated with + * @param {string} field - The field in which the term was found + * @param {object} metadata - The metadata recorded about this term in this field + */ +lunr.MatchData.prototype.add = function (term, field, metadata) { + if (!(term in this.metadata)) { + this.metadata[term] = Object.create(null) + this.metadata[term][field] = metadata + return + } + + if (!(field in this.metadata[term])) { + this.metadata[term][field] = metadata + return + } + + var metadataKeys = Object.keys(metadata) + + for (var i = 0; i < metadataKeys.length; i++) { + var key = metadataKeys[i] + + if (key in this.metadata[term][field]) { + this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key]) + } else { + this.metadata[term][field][key] = metadata[key] + } + } +} +/** + * A lunr.Query provides a programmatic way of defining queries to be performed + * against a {@link lunr.Index}. + * + * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method + * so the query object is pre-initialized with the right index fields. + * + * @constructor + * @property {lunr.Query~Clause[]} clauses - An array of query clauses. + * @property {string[]} allFields - An array of all available fields in a lunr.Index. + */ +lunr.Query = function (allFields) { + this.clauses = [] + this.allFields = allFields +} + +/** + * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause. + * + * This allows wildcards to be added to the beginning and end of a term without having to manually do any string + * concatenation. + * + * The wildcard constants can be bitwise combined to select both leading and trailing wildcards. + * + * @constant + * @default + * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour + * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists + * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists + * @see lunr.Query~Clause + * @see lunr.Query#clause + * @see lunr.Query#term + * @example query term with trailing wildcard + * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING }) + * @example query term with leading and trailing wildcard + * query.term('foo', { + * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING + * }) + */ + +lunr.Query.wildcard = new String ("*") +lunr.Query.wildcard.NONE = 0 +lunr.Query.wildcard.LEADING = 1 +lunr.Query.wildcard.TRAILING = 2 + +/** + * Constants for indicating what kind of presence a term must have in matching documents. + * + * @constant + * @enum {number} + * @see lunr.Query~Clause + * @see lunr.Query#clause + * @see lunr.Query#term + * @example query term with required presence + * query.term('foo', { presence: lunr.Query.presence.REQUIRED }) + */ +lunr.Query.presence = { + /** + * Term's presence in a document is optional, this is the default value. + */ + OPTIONAL: 1, + + /** + * Term's presence in a document is required, documents that do not contain + * this term will not be returned. + */ + REQUIRED: 2, + + /** + * Term's presence in a document is prohibited, documents that do contain + * this term will not be returned. + */ + PROHIBITED: 3 +} + +/** + * A single clause in a {@link lunr.Query} contains a term and details on how to + * match that term against a {@link lunr.Index}. + * + * @typedef {Object} lunr.Query~Clause + * @property {string[]} fields - The fields in an index this clause should be matched against. + * @property {number} [boost=1] - Any boost that should be applied when matching this clause. + * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be. + * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline. + * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended. + * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents. + */ + +/** + * Adds a {@link lunr.Query~Clause} to this query. + * + * Unless the clause contains the fields to be matched all fields will be matched. In addition + * a default boost of 1 is applied to the clause. + * + * @param {lunr.Query~Clause} clause - The clause to add to this query. + * @see lunr.Query~Clause + * @returns {lunr.Query} + */ +lunr.Query.prototype.clause = function (clause) { + if (!('fields' in clause)) { + clause.fields = this.allFields + } + + if (!('boost' in clause)) { + clause.boost = 1 + } + + if (!('usePipeline' in clause)) { + clause.usePipeline = true + } + + if (!('wildcard' in clause)) { + clause.wildcard = lunr.Query.wildcard.NONE + } + + if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) { + clause.term = "*" + clause.term + } + + if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) { + clause.term = "" + clause.term + "*" + } + + if (!('presence' in clause)) { + clause.presence = lunr.Query.presence.OPTIONAL + } + + this.clauses.push(clause) + + return this +} + +/** + * A negated query is one in which every clause has a presence of + * prohibited. These queries require some special processing to return + * the expected results. + * + * @returns boolean + */ +lunr.Query.prototype.isNegated = function () { + for (var i = 0; i < this.clauses.length; i++) { + if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) { + return false + } + } + + return true +} + +/** + * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause} + * to the list of clauses that make up this query. + * + * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion + * to a token or token-like string should be done before calling this method. + * + * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an + * array, each term in the array will share the same options. + * + * @param {object|object[]} term - The term(s) to add to the query. + * @param {object} [options] - Any additional properties to add to the query clause. + * @returns {lunr.Query} + * @see lunr.Query#clause + * @see lunr.Query~Clause + * @example adding a single term to a query + * query.term("foo") + * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard + * query.term("foo", { + * fields: ["title"], + * boost: 10, + * wildcard: lunr.Query.wildcard.TRAILING + * }) + * @example using lunr.tokenizer to convert a string to tokens before using them as terms + * query.term(lunr.tokenizer("foo bar")) + */ +lunr.Query.prototype.term = function (term, options) { + if (Array.isArray(term)) { + term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this) + return this + } + + var clause = options || {} + clause.term = term.toString() + + this.clause(clause) + + return this +} +lunr.QueryParseError = function (message, start, end) { + this.name = "QueryParseError" + this.message = message + this.start = start + this.end = end +} + +lunr.QueryParseError.prototype = new Error +lunr.QueryLexer = function (str) { + this.lexemes = [] + this.str = str + this.length = str.length + this.pos = 0 + this.start = 0 + this.escapeCharPositions = [] +} + +lunr.QueryLexer.prototype.run = function () { + var state = lunr.QueryLexer.lexText + + while (state) { + state = state(this) + } +} + +lunr.QueryLexer.prototype.sliceString = function () { + var subSlices = [], + sliceStart = this.start, + sliceEnd = this.pos + + for (var i = 0; i < this.escapeCharPositions.length; i++) { + sliceEnd = this.escapeCharPositions[i] + subSlices.push(this.str.slice(sliceStart, sliceEnd)) + sliceStart = sliceEnd + 1 + } + + subSlices.push(this.str.slice(sliceStart, this.pos)) + this.escapeCharPositions.length = 0 + + return subSlices.join('') +} + +lunr.QueryLexer.prototype.emit = function (type) { + this.lexemes.push({ + type: type, + str: this.sliceString(), + start: this.start, + end: this.pos + }) + + this.start = this.pos +} + +lunr.QueryLexer.prototype.escapeCharacter = function () { + this.escapeCharPositions.push(this.pos - 1) + this.pos += 1 +} + +lunr.QueryLexer.prototype.next = function () { + if (this.pos >= this.length) { + return lunr.QueryLexer.EOS + } + + var char = this.str.charAt(this.pos) + this.pos += 1 + return char +} + +lunr.QueryLexer.prototype.width = function () { + return this.pos - this.start +} + +lunr.QueryLexer.prototype.ignore = function () { + if (this.start == this.pos) { + this.pos += 1 + } + + this.start = this.pos +} + +lunr.QueryLexer.prototype.backup = function () { + this.pos -= 1 +} + +lunr.QueryLexer.prototype.acceptDigitRun = function () { + var char, charCode + + do { + char = this.next() + charCode = char.charCodeAt(0) + } while (charCode > 47 && charCode < 58) + + if (char != lunr.QueryLexer.EOS) { + this.backup() + } +} + +lunr.QueryLexer.prototype.more = function () { + return this.pos < this.length +} + +lunr.QueryLexer.EOS = 'EOS' +lunr.QueryLexer.FIELD = 'FIELD' +lunr.QueryLexer.TERM = 'TERM' +lunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE' +lunr.QueryLexer.BOOST = 'BOOST' +lunr.QueryLexer.PRESENCE = 'PRESENCE' + +lunr.QueryLexer.lexField = function (lexer) { + lexer.backup() + lexer.emit(lunr.QueryLexer.FIELD) + lexer.ignore() + return lunr.QueryLexer.lexText +} + +lunr.QueryLexer.lexTerm = function (lexer) { + if (lexer.width() > 1) { + lexer.backup() + lexer.emit(lunr.QueryLexer.TERM) + } + + lexer.ignore() + + if (lexer.more()) { + return lunr.QueryLexer.lexText + } +} + +lunr.QueryLexer.lexEditDistance = function (lexer) { + lexer.ignore() + lexer.acceptDigitRun() + lexer.emit(lunr.QueryLexer.EDIT_DISTANCE) + return lunr.QueryLexer.lexText +} + +lunr.QueryLexer.lexBoost = function (lexer) { + lexer.ignore() + lexer.acceptDigitRun() + lexer.emit(lunr.QueryLexer.BOOST) + return lunr.QueryLexer.lexText +} + +lunr.QueryLexer.lexEOS = function (lexer) { + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } +} + +// This matches the separator used when tokenising fields +// within a document. These should match otherwise it is +// not possible to search for some tokens within a document. +// +// It is possible for the user to change the separator on the +// tokenizer so it _might_ clash with any other of the special +// characters already used within the search string, e.g. :. +// +// This means that it is possible to change the separator in +// such a way that makes some words unsearchable using a search +// string. +lunr.QueryLexer.termSeparator = lunr.tokenizer.separator + +lunr.QueryLexer.lexText = function (lexer) { + while (true) { + var char = lexer.next() + + if (char == lunr.QueryLexer.EOS) { + return lunr.QueryLexer.lexEOS + } + + // Escape character is '\' + if (char.charCodeAt(0) == 92) { + lexer.escapeCharacter() + continue + } + + if (char == ":") { + return lunr.QueryLexer.lexField + } + + if (char == "~") { + lexer.backup() + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } + return lunr.QueryLexer.lexEditDistance + } + + if (char == "^") { + lexer.backup() + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } + return lunr.QueryLexer.lexBoost + } + + // "+" indicates term presence is required + // checking for length to ensure that only + // leading "+" are considered + if (char == "+" && lexer.width() === 1) { + lexer.emit(lunr.QueryLexer.PRESENCE) + return lunr.QueryLexer.lexText + } + + // "-" indicates term presence is prohibited + // checking for length to ensure that only + // leading "-" are considered + if (char == "-" && lexer.width() === 1) { + lexer.emit(lunr.QueryLexer.PRESENCE) + return lunr.QueryLexer.lexText + } + + if (char.match(lunr.QueryLexer.termSeparator)) { + return lunr.QueryLexer.lexTerm + } + } +} + +lunr.QueryParser = function (str, query) { + this.lexer = new lunr.QueryLexer (str) + this.query = query + this.currentClause = {} + this.lexemeIdx = 0 +} + +lunr.QueryParser.prototype.parse = function () { + this.lexer.run() + this.lexemes = this.lexer.lexemes + + var state = lunr.QueryParser.parseClause + + while (state) { + state = state(this) + } + + return this.query +} + +lunr.QueryParser.prototype.peekLexeme = function () { + return this.lexemes[this.lexemeIdx] +} + +lunr.QueryParser.prototype.consumeLexeme = function () { + var lexeme = this.peekLexeme() + this.lexemeIdx += 1 + return lexeme +} + +lunr.QueryParser.prototype.nextClause = function () { + var completedClause = this.currentClause + this.query.clause(completedClause) + this.currentClause = {} +} + +lunr.QueryParser.parseClause = function (parser) { + var lexeme = parser.peekLexeme() + + if (lexeme == undefined) { + return + } + + switch (lexeme.type) { + case lunr.QueryLexer.PRESENCE: + return lunr.QueryParser.parsePresence + case lunr.QueryLexer.FIELD: + return lunr.QueryParser.parseField + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expected either a field or a term, found " + lexeme.type + + if (lexeme.str.length >= 1) { + errorMessage += " with value '" + lexeme.str + "'" + } + + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } +} + +lunr.QueryParser.parsePresence = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + switch (lexeme.str) { + case "-": + parser.currentClause.presence = lunr.Query.presence.PROHIBITED + break + case "+": + parser.currentClause.presence = lunr.Query.presence.REQUIRED + break + default: + var errorMessage = "unrecognised presence operator'" + lexeme.str + "'" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + var errorMessage = "expecting term or field, found nothing" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.FIELD: + return lunr.QueryParser.parseField + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expecting term or field, found '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseField = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + if (parser.query.allFields.indexOf(lexeme.str) == -1) { + var possibleFields = parser.query.allFields.map(function (f) { return "'" + f + "'" }).join(', '), + errorMessage = "unrecognised field '" + lexeme.str + "', possible fields: " + possibleFields + + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.fields = [lexeme.str] + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + var errorMessage = "expecting term, found nothing" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expecting term, found '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseTerm = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + parser.currentClause.term = lexeme.str.toLowerCase() + + if (lexeme.str.indexOf("*") != -1) { + parser.currentClause.usePipeline = false + } + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseEditDistance = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + var editDistance = parseInt(lexeme.str, 10) + + if (isNaN(editDistance)) { + var errorMessage = "edit distance must be numeric" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.editDistance = editDistance + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseBoost = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + var boost = parseInt(lexeme.str, 10) + + if (isNaN(boost)) { + var errorMessage = "boost must be numeric" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.boost = boost + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + + /** + * export the module via AMD, CommonJS or as a browser global + * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js + */ + ;(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(factory) + } else if (typeof exports === 'object') { + /** + * Node. Does not work with strict CommonJS, but + * only CommonJS-like enviroments that support module.exports, + * like Node. + */ + module.exports = factory() + } else { + // Browser globals (root is window) + root.lunr = factory() + } + }(this, function () { + /** + * Just return a value to define the module export. + * This example returns an object, but the module + * can return a function as the exported value. + */ + return lunr + })) +})(); diff --git a/en/assets/js/lunr/lunr.min.js b/en/assets/js/lunr/lunr.min.js new file mode 100644 index 0000000..cdc94cd --- /dev/null +++ b/en/assets/js/lunr/lunr.min.js @@ -0,0 +1,6 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */ +!function(){var e=function(t){var r=new e.Builder;return r.pipeline.add(e.trimmer,e.stopWordFilter,e.stemmer),r.searchPipeline.add(e.stemmer),t.call(r,r),r.build()};e.version="2.3.9",e.utils={},e.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),e.utils.asString=function(e){return void 0===e||null===e?"":e.toString()},e.utils.clone=function(e){if(null===e||void 0===e)return e;for(var t=Object.create(null),r=Object.keys(e),i=0;i0){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(); diff --git a/en/assets/js/main.min.js b/en/assets/js/main.min.js new file mode 100644 index 0000000..0d05859 --- /dev/null +++ b/en/assets/js/main.min.js @@ -0,0 +1,7 @@ +/*! + * Minimal Mistakes Jekyll Theme 4.26.2 by Michael Rose + * Copyright 2013-2024 Michael Rose - mademistakes.com | @mmistakes + * Free for personal and commercial use under the MIT license + * https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE + */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(e.document)return t(e);throw new Error("jQuery requires a window with a document")}:t(e)}("undefined"!=typeof window?window:this,function(w,P){"use strict";function y(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item}function m(e){return null!=e&&e===e.window}var t=[],M=Object.getPrototypeOf,s=t.slice,_=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},R=t.push,B=t.indexOf,F={},$=F.toString,W=F.hasOwnProperty,z=W.toString,U=z.call(Object),g={},C=w.document,X={type:!0,src:!0,nonce:!0,noModule:!0};function Q(e,t,n){var r,o,i=(n=n||C).createElement("script");if(i.text=e,t)for(r in X)(o=t[r]||t.getAttribute&&t.getAttribute(r))&&i.setAttribute(r,o);n.head.appendChild(i).parentNode.removeChild(i)}function h(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?F[$.call(e)]||"object":typeof e}var e="3.6.0",T=function(e,t){return new T.fn.init(e,t)};function Y(e){var t=!!e&&"length"in e&&e.length,n=h(e);return!y(e)&&!m(e)&&("array"===n||0===t||"number"==typeof t&&0>10|55296,1023&e|56320))}function M(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}function _(){C()}var e,f,x,i,R,p,B,F,w,l,u,C,T,n,E,h,r,o,m,S="sizzle"+ +new Date,c=P.document,k=0,$=0,W=L(),z=L(),U=L(),g=L(),X=function(e,t){return e===t&&(u=!0),0},Q={}.hasOwnProperty,t=[],Y=t.pop,V=t.push,A=t.push,G=t.slice,y=function(e,t){for(var n=0,r=e.length;n+~]|"+a+")"+a+"*"),re=new RegExp(a+"|>"),oe=new RegExp(J),ie=new RegExp("^"+s+"$"),b={ID:new RegExp("^#("+s+")"),CLASS:new RegExp("^\\.("+s+")"),TAG:new RegExp("^("+s+"|[*])"),ATTR:new RegExp("^"+Z),PSEUDO:new RegExp("^"+J),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+a+"*(even|odd|(([+-]|)(\\d*)n|)"+a+"*(?:([+-]|)"+a+"*(\\d+)|))"+a+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+a+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+a+"*((?:-\\d)?\\d*)"+a+"*\\)|)(?=[^-]|$)","i")},ae=/HTML$/i,se=/^(?:input|select|textarea|button)$/i,le=/^h\d$/i,N=/^[^{]+\{\s*\[native \w/,ue=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ce=/[+~]/,j=new RegExp("\\\\[\\da-fA-F]{1,6}"+a+"?|\\\\([^\\r\\n\\f])","g"),de=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,fe=ye(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{A.apply(t=G.call(c.childNodes),c.childNodes),t[c.childNodes.length].nodeType}catch(e){A={apply:t.length?function(e,t){V.apply(e,G.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function I(t,e,n,r){var o,i,a,s,l,u,c=e&&e.ownerDocument,d=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==d&&9!==d&&11!==d)return n;if(!r&&(C(e),e=e||T,E)){if(11!==d&&(s=ue.exec(t)))if(o=s[1]){if(9===d){if(!(u=e.getElementById(o)))return n;if(u.id===o)return n.push(u),n}else if(c&&(u=c.getElementById(o))&&m(e,u)&&u.id===o)return n.push(u),n}else{if(s[2])return A.apply(n,e.getElementsByTagName(t)),n;if((o=s[3])&&f.getElementsByClassName&&e.getElementsByClassName)return A.apply(n,e.getElementsByClassName(o)),n}if(f.qsa&&!g[t+" "]&&(!h||!h.test(t))&&(1!==d||"object"!==e.nodeName.toLowerCase())){if(u=t,c=e,1===d&&(re.test(t)||ne.test(t))){for((c=ce.test(t)&&ge(e.parentNode)||e)===e&&f.scope||((a=e.getAttribute("id"))?a=a.replace(de,M):e.setAttribute("id",a=S)),i=(l=p(t)).length;i--;)l[i]=(a?"#"+a:":scope")+" "+H(l[i]);u=l.join(",")}try{return A.apply(n,c.querySelectorAll(u)),n}catch(e){g(t,!0)}finally{a===S&&e.removeAttribute("id")}}}return F(t.replace(v,"$1"),e,n,r)}function L(){var n=[];function r(e,t){return n.push(e+" ")>x.cacheLength&&delete r[n.shift()],r[e+" "]=t}return r}function D(e){return e[S]=!0,e}function O(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t)}}function pe(e,t){for(var n=e.split("|"),r=n.length;r--;)x.attrHandle[n[r]]=t}function he(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function me(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&fe(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function q(a){return D(function(i){return i=+i,D(function(e,t){for(var n,r=a([],e.length,i),o=r.length;o--;)e[n=r[o]]&&(e[n]=!(t[n]=e[n]))})})}function ge(e){return e&&void 0!==e.getElementsByTagName&&e}for(e in f=I.support={},R=I.isXML=function(e){var t=e&&e.namespaceURI,e=e&&(e.ownerDocument||e).documentElement;return!ae.test(t||e&&e.nodeName||"HTML")},C=I.setDocument=function(e){var e=e?e.ownerDocument||e:c;return e!=T&&9===e.nodeType&&e.documentElement&&(n=(T=e).documentElement,E=!R(T),c!=T&&(e=T.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",_,!1):e.attachEvent&&e.attachEvent("onunload",_)),f.scope=O(function(e){return n.appendChild(e).appendChild(T.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),f.attributes=O(function(e){return e.className="i",!e.getAttribute("className")}),f.getElementsByTagName=O(function(e){return e.appendChild(T.createComment("")),!e.getElementsByTagName("*").length}),f.getElementsByClassName=N.test(T.getElementsByClassName),f.getById=O(function(e){return n.appendChild(e).id=S,!T.getElementsByName||!T.getElementsByName(S).length}),f.getById?(x.filter.ID=function(e){var t=e.replace(j,d);return function(e){return e.getAttribute("id")===t}},x.find.ID=function(e,t){if(void 0!==t.getElementById&&E)return(t=t.getElementById(e))?[t]:[]}):(x.filter.ID=function(e){var t=e.replace(j,d);return function(e){e=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return e&&e.value===t}},x.find.ID=function(e,t){if(void 0!==t.getElementById&&E){var n,r,o,i=t.getElementById(e);if(i){if((n=i.getAttributeNode("id"))&&n.value===e)return[i];for(o=t.getElementsByName(e),r=0;i=o[r++];)if((n=i.getAttributeNode("id"))&&n.value===e)return[i]}return[]}}),x.find.TAG=f.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):f.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if("*"!==e)return i;for(;n=i[o++];)1===n.nodeType&&r.push(n);return r},x.find.CLASS=f.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&E)return t.getElementsByClassName(e)},r=[],h=[],(f.qsa=N.test(T.querySelectorAll))&&(O(function(e){var t;n.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&h.push("[*^$]="+a+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||h.push("\\["+a+"*(?:value|"+K+")"),e.querySelectorAll("[id~="+S+"-]").length||h.push("~="),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||h.push("\\["+a+"*name"+a+"*="+a+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||h.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||h.push(".#.+[+~]"),e.querySelectorAll("\\\f"),h.push("[\\r\\n\\f]")}),O(function(e){e.innerHTML="";var t=T.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&h.push("name"+a+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&h.push(":enabled",":disabled"),n.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(f.matchesSelector=N.test(o=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.oMatchesSelector||n.msMatchesSelector))&&O(function(e){f.disconnectedMatch=o.call(e,"*"),o.call(e,"[s!='']:x"),r.push("!=",J)}),h=h.length&&new RegExp(h.join("|")),r=r.length&&new RegExp(r.join("|")),e=N.test(n.compareDocumentPosition),m=e||N.test(n.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,t=t&&t.parentNode;return e===t||!(!t||1!==t.nodeType||!(n.contains?n.contains(t):e.compareDocumentPosition&&16&e.compareDocumentPosition(t)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},X=e?function(e,t){var n;return e===t?(u=!0,0):(n=!e.compareDocumentPosition-!t.compareDocumentPosition)||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!f.sortDetached&&t.compareDocumentPosition(e)===n?e==T||e.ownerDocument==c&&m(c,e)?-1:t==T||t.ownerDocument==c&&m(c,t)?1:l?y(l,e)-y(l,t):0:4&n?-1:1)}:function(e,t){if(e===t)return u=!0,0;var n,r=0,o=e.parentNode,i=t.parentNode,a=[e],s=[t];if(!o||!i)return e==T?-1:t==T?1:o?-1:i?1:l?y(l,e)-y(l,t):0;if(o===i)return he(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?he(a[r],s[r]):a[r]==c?-1:s[r]==c?1:0}),T},I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(C(e),f.matchesSelector&&E&&!g[t+" "]&&(!r||!r.test(t))&&(!h||!h.test(t)))try{var n=o.call(e,t);if(n||f.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){g(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(j,d),e[3]=(e[3]||e[4]||e[5]||"").replace(j,d),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return b.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&oe.test(n)&&(t=(t=p(n,!0))&&n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(j,d).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=W[e+" "];return t||(t=new RegExp("(^|"+a+")"+e+"("+a+"|$)"))&&W(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(t,n,r){return function(e){e=I.attr(e,t);return null==e?"!="===n:!n||(e+="","="===n?e===r:"!="===n?e!==r:"^="===n?r&&0===e.indexOf(r):"*="===n?r&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function Z(e,n,r){return y(n)?T.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?T.grep(e,function(e){return e===n!==r}):"string"!=typeof n?T.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/,te=((T.fn.init=function(e,t,n){if(e){if(n=n||J,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):y(e)?void 0!==n.ready?n.ready(e):e(T):T.makeArray(e,this);if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:ee.exec(e))||!r[1]&&t)return(!t||t.jquery?t||n:this.constructor(t)).find(e);if(r[1]){if(t=t instanceof T?t[0]:t,T.merge(this,T.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),K.test(r[1])&&T.isPlainObject(t))for(var r in t)y(this[r])?this[r](t[r]):this.attr(r,t[r])}else(n=C.getElementById(r[2]))&&(this[0]=n,this.length=1)}return this}).prototype=T.fn,J=T(C),/^(?:parents|prev(?:Until|All))/),ne={children:!0,contents:!0,next:!0,prev:!0};function re(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}T.fn.extend({has:function(e){var t=T(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Te=/^$|^module$|\/(?:java|ecma)script/i,N=(D=C.createDocumentFragment().appendChild(C.createElement("div")),(a=C.createElement("input")).setAttribute("type","radio"),a.setAttribute("checked","checked"),a.setAttribute("name","t"),D.appendChild(a),g.checkClone=D.cloneNode(!0).cloneNode(!0).lastChild.checked,D.innerHTML="",g.noCloneChecked=!!D.cloneNode(!0).lastChild.defaultValue,D.innerHTML="",g.option=!!D.lastChild,{thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]});function j(e,t){var n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&l(e,t)?T.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var Se=/<|&#?\w+;/;function ke(e,t,n,r,o){for(var i,a,s,l,u,c=t.createDocumentFragment(),d=[],f=0,p=e.length;f\s*$/g;function qe(e,t){return l(e,"table")&&l(11!==t.nodeType?t:t.firstChild,"tr")&&T(e).children("tbody")[0]||e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Pe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,o,i;if(1===t.nodeType){if(x.hasData(e)&&(i=x.get(e).events))for(o in x.remove(t,"handle events"),i)for(n=0,r=i[o].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",o=function(e){r.remove(),o=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){o&&o()}}}),[]),Vt=/(=)\?(?=&|$)|\?\?/,Gt=(T.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Yt.pop()||T.expando+"_"+At.guid++;return this[e]=!0,e}}),T.ajaxPrefilter("json jsonp",function(e,t,n){var r,o,i,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=y(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Nt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return i||T.error(r+" was not called"),i[0]},e.dataTypes[0]="json",o=w[r],w[r]=function(){i=arguments},n.always(function(){void 0===o?T(w).removeProp(r):w[r]=o,e[r]&&(e.jsonpCallback=t.jsonpCallback,Yt.push(r)),i&&y(o)&&o(i[0]),i=o=void 0}),"script"}),g.createHTMLDocument=((e=C.implementation.createHTMLDocument("").body).innerHTML="
",2===e.childNodes.length),T.parseHTML=function(e,t,n){var r;return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(g.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),r=!n&&[],(n=K.exec(e))?[t.createElement(n[1])]:(n=ke([e],t,r),r&&r.length&&T(r).remove(),T.merge([],n.childNodes)))},T.fn.load=function(e,t,n){var r,o,i,a=this,s=e.indexOf(" ");return-1").append(T.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,i||[e.responseText,t,e])})}),this},T.expr.pseudos.animated=function(t){return T.grep(T.timers,function(e){return t===e.elem}).length},T.offset={setOffset:function(e,t,n){var r,o,i,a,s=T.css(e,"position"),l=T(e),u={};"static"===s&&(e.style.position="relative"),i=l.offset(),r=T.css(e,"top"),a=T.css(e,"left"),s=("absolute"===s||"fixed"===s)&&-1<(r+a).indexOf("auto")?(o=(s=l.position()).top,s.left):(o=parseFloat(r)||0,parseFloat(a)||0),null!=(t=y(t)?t.call(e,n,T.extend({},i)):t).top&&(u.top=t.top-i.top+o),null!=t.left&&(u.left=t.left-i.left+s),"using"in t?t.using.call(e,u):l.css(u)}},T.fn.extend({offset:function(t){var e,n;return arguments.length?void 0===t?this:this.each(function(e){T.offset.setOffset(this,t,e)}):(n=this[0])?n.getClientRects().length?(e=n.getBoundingClientRect(),n=n.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],o={top:0,left:0};if("fixed"===T.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===T.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((o=T(e).offset()).top+=T.css(e,"borderTopWidth",!0),o.left+=T.css(e,"borderLeftWidth",!0))}return{top:t.top-o.top-T.css(r,"marginTop",!0),left:t.left-o.left-T.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===T.css(e,"position");)e=e.offsetParent;return e||S})}}),T.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,o){var i="pageYOffset"===o;T.fn[t]=function(e){return d(this,function(e,t,n){var r;if(m(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[o]:e[t];r?r.scrollTo(i?r.pageXOffset:n,i?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),T.each(["top","left"],function(e,n){T.cssHooks[n]=Je(g.pixelPosition,function(e,t){if(t)return t=Ze(e,n),Ye.test(t)?T(e).position()[n]+"px":t})}),T.each({Height:"height",Width:"width"},function(a,s){T.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,i){T.fn[i]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),o=r||(!0===e||!0===t?"margin":"border");return d(this,function(e,t,n){var r;return m(e)?0===i.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?T.css(e,t,o):T.style(e,t,n,o)},s,n?e:void 0,n)}})}),T.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){T.fn[t]=function(e){return this.on(t,e)}}),T.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),T.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){T.fn[n]=function(e,t){return 0=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)}function f(e,t){var n;e&&(n=e.nav.closest("li"))&&(n.classList.remove(t.navClass),e.content.classList.remove(t.contentClass),o(n,t),h("gumshoeDeactivate",n,{link:e.nav,content:e.content,settings:t}))}var p={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},h=function(e,t,n){n.settings.events&&(e=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:n}),t.dispatchEvent(e))},r=function(e){var t=0;if(e.offsetParent)for(;e;)t+=e.offsetTop,e=e.offsetParent;return 0<=t?t:0},m=function(e,t,n){e=e.getBoundingClientRect(),t="function"==typeof(t=t).offset?parseFloat(t.offset()):parseFloat(t.offset);return n?parseInt(e.bottom,10)<(c.innerHeight||document.documentElement.clientHeight):parseInt(e.top,10)<=t},g=function(e,t){return!(!n()||!m(e.content,t,!0))},o=function(e,t){t.nested&&(e=e.parentNode.closest("li"))&&(e.classList.remove(t.nestedClass),o(e,t))},v=function(e,t){t.nested&&(e=e.parentNode.closest("li"))&&(e.classList.add(t.nestedClass),v(e,t))};return function(e,t){function n(e){s&&c.cancelAnimationFrame(s),s=c.requestAnimationFrame(u.detect)}function r(e){s&&c.cancelAnimationFrame(s),s=c.requestAnimationFrame(function(){d(i),u.detect()})}var o,i,a,s,l,u={setup:function(){o=document.querySelectorAll(e),i=[],Array.prototype.forEach.call(o,function(e){var t=document.getElementById(decodeURIComponent(e.hash.substr(1)));t&&i.push({nav:e,content:t})}),d(i)}};u.detect=function(){var e,t,n,r=function(e,t){var n=e[e.length-1];if(g(n,t))return n;for(var r=e.length-1;0<=r;r--)if(m(e[r].content,t))return e[r]}(i,l);r?a&&r.content===a.content||(f(a,l),t=l,(e=r)&&(n=e.nav.closest("li"))&&(n.classList.add(t.navClass),e.content.classList.add(t.contentClass),v(n,t),h("gumshoeActivate",n,{link:e.nav,content:e.content,settings:t})),a=r):a&&(f(a,l),a=null)},u.destroy=function(){a&&f(a,l),c.removeEventListener("scroll",n,!1),l.reflow&&c.removeEventListener("resize",r,!1),l=s=a=o=i=null};return l=function(){var n={};return Array.prototype.forEach.call(arguments,function(e){for(var t in e){if(!e.hasOwnProperty(t))return;n[t]=e[t]}}),n}(p,t||{}),u.setup(),u.detect(),c.addEventListener("scroll",n,!1),l.reflow&&c.addEventListener("resize",r,!1),u}}),function(e,c){var r,t=e.jQuery||e.Cowboy||(e.Cowboy={});t.throttle=r=function(o,i,a,s){var l,u=0;function e(){var e=this,t=+new Date-u,n=arguments;function r(){u=+new Date,a.apply(e,n)}s&&!l&&r(),l&&clearTimeout(l),s===c&&ox

',t.appendChild(n.childNodes[1])),e&&i.extend(o,e),this.each(function(){var e=['iframe[src*="player.vimeo.com"]','iframe[src*="youtube.com"]','iframe[src*="youtube-nocookie.com"]','iframe[src*="kickstarter.com"][src*="video.html"]',"object","embed"],r=(o.customSelector&&e.push(o.customSelector),".fitvidsignore"),e=(o.ignore&&(r=r+", "+o.ignore),i(this).find(e.join(",")));(e=(e=e.not("object object")).not(r)).each(function(e){var t,n=i(this);0').parent(".fluid-width-video-wrapper").css("padding-top",100*t+"%"),n.removeAttr("height").removeAttr("width"))})})}}(window.jQuery||window.Zepto),$(function(){var n,r,e,o,t=$("nav.greedy-nav .greedy-nav__toggle"),i=$("nav.greedy-nav .visible-links"),a=$("nav.greedy-nav .hidden-links"),s=$("nav.greedy-nav"),l=$("nav.greedy-nav .site-logo"),u=$("nav.greedy-nav .site-logo img"),c=$("nav.greedy-nav .site-title"),d=$("nav.greedy-nav button.search__toggle");function f(){function t(e,t){r+=t,n+=1,o.push(r)}r=n=0,e=1e3,o=[],i.children().outerWidth(t),a.children().each(function(){var e;(e=(e=$(this)).clone()).css("visibility","hidden"),i.append(e),t(0,e.outerWidth()),e.remove()})}f();var p,h,m,g,v=$(window).width(),y=v<768?0:v<1024?1:v<1280?2:3;function b(){var e=(v=$(window).width())<768?0:v<1024?1:v<1280?2:3;e!==y&&f(),y=e,h=i.children().length,p=s.innerWidth()-(0!==l.length?l.outerWidth(!0):0)-c.outerWidth(!0)-(0!==d.length?d.outerWidth(!0):0)-(h!==o.length?t.outerWidth(!0):0),m=o[h-1],po[h]&&(a.children().first().appendTo(i),h+=1,b()),t.attr("count",n-h),h===n?t.addClass("hidden"):t.removeClass("hidden")}$(window).resize(function(){b()}),t.on("click",function(){a.toggleClass("hidden"),$(this).toggleClass("close"),clearTimeout(g)}),a.on("mouseleave",function(){g=setTimeout(function(){a.addClass("hidden"),$(".greedy-nav__toggle").removeClass("close")},e)}).on("mouseenter",function(){clearTimeout(g)}),0===u.length||u[0].complete||0!==u[0].naturalWidth?b():u.one("load error",b)}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?e(require("jquery")):e(window.jQuery||window.Zepto)}(function(u){function e(){}function c(e,t){h.ev.on("mfp"+e+T,t)}function d(e,t,n,r){var o=document.createElement("div");return o.className="mfp-"+e,n&&(o.innerHTML=n),r?t&&t.appendChild(o):(o=u(o),t&&o.appendTo(t)),o}function f(e,t){h.ev.triggerHandler("mfp"+e,t),h.st.callbacks&&(e=e.charAt(0).toLowerCase()+e.slice(1),h.st.callbacks[e])&&h.st.callbacks[e].apply(h,u.isArray(t)?t:[t])}function p(e){return e===n&&h.currTemplate.closeBtn||(h.currTemplate.closeBtn=u(h.st.closeMarkup.replace("%title%",h.st.tClose)),n=e),h.currTemplate.closeBtn}function i(){u.magnificPopup.instance||((h=new e).init(),u.magnificPopup.instance=h)}function a(){y&&(v.after(y.addClass(l)).detach(),y=null)}function o(){b&&u(document.body).removeClass(b)}function t(){o(),h.req&&h.req.abort()}var h,r,m,s,g,n,l,v,y,b,x="Close",P="BeforeClose",w="MarkupParse",C="Open",T=".mfp",E="mfp-ready",M="mfp-removing",S="mfp-prevent-close",k=!!window.jQuery,A=u(window),N=(u.magnificPopup={instance:null,proto:e.prototype={constructor:e,init:function(){var e=navigator.appVersion;h.isLowIE=h.isIE8=document.all&&!document.addEventListener,h.isAndroid=/android/gi.test(e),h.isIOS=/iphone|ipad|ipod/gi.test(e),h.supportsTransition=function(){var e=document.createElement("p").style,t=["ms","O","Moz","Webkit"];if(void 0!==e.transition)return!0;for(;t.length;)if(t.pop()+"Transition"in e)return!0;return!1}(),h.probablyMobile=h.isAndroid||h.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),m=u(document),h.popupsCache={}},open:function(e){if(!1===e.isObj){h.items=e.items.toArray(),h.index=0;for(var t,n=e.items,r=0;r(e||A.height())},_setFocus:function(){(h.st.focus?h.content.find(h.st.focus).eq(0):h.wrap).focus()},_onFocusIn:function(e){if(e.target!==h.wrap[0]&&!u.contains(h.wrap[0],e.target))return h._setFocus(),!1},_parseMarkup:function(o,e,t){var i;t.data&&(e=u.extend(t.data,e)),f(w,[o,e,t]),u.each(e,function(e,t){if(void 0===t||!1===t)return!0;var n,r;1<(i=e.split("_")).length?0<(n=o.find(T+"-"+i[0])).length&&("replaceWith"===(r=i[1])?n[0]!==t[0]&&n.replaceWith(t):"img"===r?n.is("img")?n.attr("src",t):n.replaceWith(u("").attr("src",t).attr("class",n.attr("class"))):n.attr(i[1],t)):o.find(T+"-"+e).html(t)})},_getScrollbarSize:function(){var e;return void 0===h.scrollbarSize&&((e=document.createElement("div")).style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(e),h.scrollbarSize=e.offsetWidth-e.clientWidth,document.body.removeChild(e)),h.scrollbarSize}},modules:[],open:function(e,t){return i(),(e=e?u.extend(!0,{},e):{}).isObj=!0,e.index=t||0,this.instance.open(e)},close:function(){return u.magnificPopup.instance&&u.magnificPopup.instance.close()},registerModule:function(e,t){t.options&&(u.magnificPopup.defaults[e]=t.options),u.extend(this.proto,t.proto),this.modules.push(e)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'',tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}},u.fn.magnificPopup=function(e){i();var t,n,r,o=u(this);return"string"==typeof e?"open"===e?(t=k?o.data("magnificPopup"):o[0].magnificPopup,n=parseInt(arguments[1],10)||0,r=t.items?t.items[n]:(r=o,(r=t.delegate?r.find(t.delegate):r).eq(n)),h._openClick({mfpEl:r},o,t)):h.isOpen&&h[e].apply(h,Array.prototype.slice.call(arguments,1)):(e=u.extend(!0,{},e),k?o.data("magnificPopup",e):o[0].magnificPopup=e,h.addGroup(o,e)),o},"inline"),j=(u.magnificPopup.registerModule(N,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){h.types.push(N),c(x+"."+N,function(){a()})},getInline:function(e,t){var n,r,o;return a(),e.src?(n=h.st.inline,(r=u(e.src)).length?((o=r[0].parentNode)&&o.tagName&&(v||(l=n.hiddenClass,v=d(l),l="mfp-"+l),y=r.after(v).detach().removeClass(l)),h.updateStatus("ready")):(h.updateStatus("error",n.tNotFound),r=u("
")),e.inlineElement=r):(h.updateStatus("ready"),h._parseMarkup(t,{},e),t)}}}),"ajax");u.magnificPopup.registerModule(j,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'The content could not be loaded.'},proto:{initAjax:function(){h.types.push(j),b=h.st.ajax.cursor,c(x+"."+j,t),c("BeforeChange."+j,t)},getAjax:function(r){b&&u(document.body).addClass(b),h.updateStatus("loading");var e=u.extend({url:r.src,success:function(e,t,n){e={data:e,xhr:n};f("ParseAjax",e),h.appendContent(u(e.data),j),r.finished=!0,o(),h._setFocus(),setTimeout(function(){h.wrap.addClass(E)},16),h.updateStatus("ready"),f("AjaxContentAdded")},error:function(){o(),r.finished=r.loadError=!0,h.updateStatus("error",h.st.ajax.tError.replace("%url%",r.src))}},h.st.ajax.settings);return h.req=u.ajax(e),""}}});var I;u.magnificPopup.registerModule("image",{options:{markup:'
',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'The image could not be loaded.'},proto:{initImage:function(){var e=h.st.image,t=".image";h.types.push("image"),c(C+t,function(){"image"===h.currItem.type&&e.cursor&&u(document.body).addClass(e.cursor)}),c(x+t,function(){e.cursor&&u(document.body).removeClass(e.cursor),A.off("resize"+T)}),c("Resize"+t,h.resizeImage),h.isLowIE&&c("AfterChange",h.resizeImage)},resizeImage:function(){var e,t=h.currItem;t&&t.img&&h.st.image.verticalFit&&(e=0,h.isLowIE&&(e=parseInt(t.img.css("padding-top"),10)+parseInt(t.img.css("padding-bottom"),10)),t.img.css("max-height",h.wH-e))},_onImageHasSize:function(e){e.img&&(e.hasSize=!0,I&&clearInterval(I),e.isCheckingImgSize=!1,f("ImageHasSize",e),e.imgHidden)&&(h.content&&h.content.removeClass("mfp-loading"),e.imgHidden=!1)},findImageSize:function(t){function n(e){I&&clearInterval(I),I=setInterval(function(){0
',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){h.types.push(q),c("BeforeChange",function(e,t,n){t!==n&&(t===q?L():n===q&&L(!0))}),c(x+"."+q,function(){L()})},getIframe:function(e,t){var n=e.src,r=h.st.iframe,o=(u.each(r.patterns,function(){if(-1',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var i=h.st.gallery,e=".mfp-gallery";if(h.direction=!0,!i||!i.enabled)return!1;g+=" mfp-gallery",c(C+e,function(){i.navigateByImgClick&&h.wrap.on("click"+e,".mfp-img",function(){if(1=h.index,h.index=e,h.updateItemHTML()},preloadNearbyImages:function(){for(var e=h.st.gallery.preload,t=Math.min(e[0],h.items.length),n=Math.min(e[1],h.items.length),r=1;r<=(h.direction?n:t);r++)h._preloadItem(h.index+r);for(r=1;r<=(h.direction?t:n);r++)h._preloadItem(h.index-r)},_preloadItem:function(e){var t;e=D(e),h.items[e].preloaded||((t=h.items[e]).parsed||(t=h.parseEl(e)),f("LazyLoad",t),"image"===t.type&&(t.img=u('').on("load.mfploader",function(){t.hasSize=!0}).on("error.mfploader",function(){t.hasSize=!0,t.loadError=!0,f("LazyLoadError",t)}).attr("src",t.src)),t.preloaded=!0)}}}),"retina");u.magnificPopup.registerModule(H,{options:{replaceSrc:function(e){return e.src.replace(/\.\w+$/,function(e){return"@2x"+e})},ratio:1},proto:{initRetina:function(){var n,r;1t.durationMax?t.durationMax:t.durationMin&&e=l)return x.cancelScroll(!0),e=t,n=g,0===(t=r)&&document.body.focus(),n||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),w.scrollTo(0,e)),T("scrollStop",m,r,o),!(b=d=null)},h=function(e){var t,n,r;u+=e-(d=d||e),f=i+s*(n=1<(f=0===c?0:u/c)?1:f,"easeInQuad"===(t=m).easing&&(r=n*n),"easeOutQuad"===t.easing&&(r=n*(2-n)),"easeInOutQuad"===t.easing&&(r=n<.5?2*n*n:(4-2*n)*n-1),"easeInCubic"===t.easing&&(r=n*n*n),"easeOutCubic"===t.easing&&(r=--n*n*n+1),"easeInOutCubic"===t.easing&&(r=n<.5?4*n*n*n:(n-1)*(2*n-2)*(2*n-2)+1),"easeInQuart"===t.easing&&(r=n*n*n*n),"easeOutQuart"===t.easing&&(r=1- --n*n*n*n),"easeInOutQuart"===t.easing&&(r=n<.5?8*n*n*n*n:1-8*--n*n*n*n),"easeInQuint"===t.easing&&(r=n*n*n*n*n),"easeOutQuint"===t.easing&&(r=1+--n*n*n*n*n),"easeInOutQuint"===t.easing&&(r=n<.5?16*n*n*n*n*n:1+16*--n*n*n*n*n),(r=t.customEasing?t.customEasing(n):r)||n),w.scrollTo(0,Math.floor(f)),p(f,a)||(b=w.requestAnimationFrame(h),d=e)},0===w.pageYOffset&&w.scrollTo(0,0),e=r,t=m,g||history.pushState&&t.updateURL&&history.pushState({smoothScroll:JSON.stringify(t),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id),"matchMedia"in w&&w.matchMedia("(prefers-reduced-motion)").matches?w.scrollTo(0,Math.floor(a)):(T("scrollStart",m,r,o),x.cancelScroll(!0),w.requestAnimationFrame(h)))},x.destroy=function(){v&&(document.removeEventListener("click",t,!1),w.removeEventListener("popstate",n,!1),x.cancelScroll(),b=y=o=v=null)};if("querySelector"in document&&"addEventListener"in w&&"requestAnimationFrame"in w&&"closest"in w.Element.prototype)return x.destroy(),v=C(E,e||{}),y=v.header?document.querySelector(v.header):null,document.addEventListener("click",t,!1),v.updateURL&&v.popstate&&w.addEventListener("popstate",n,!1),x;throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs."}}),$(document).ready(function(){$("#main").fitVids(),$(".author__urls-wrapper button").on("click",function(){$(".author__urls").toggleClass("is--visible"),$(".author__urls-wrapper").find("button").toggleClass("open")}),$(document).keyup(function(e){27===e.keyCode&&$(".initial-content").hasClass("is--hidden")&&($(".search-content").toggleClass("is--visible"),$(".initial-content").toggleClass("is--hidden"))}),$(".search__toggle").on("click",function(){$(".search-content").toggleClass("is--visible"),$(".initial-content").toggleClass("is--hidden"),setTimeout(function(){$(".search-content input").focus()},400)});function o(e){for(var t=e.target,n=t.nextElementSibling;n&&"code"!==n.tagName.toLowerCase();)n=n.nextElementSibling;if(n)return e=function(e){if(document.queryCommandEnabled("copy")&&navigator.clipboard)return navigator.clipboard.writeText(e).then(()=>!0,()=>console.error("Failed to copy text to clipboard: "+e)),!0;var t="rtl"===document.documentElement.getAttribute("dir"),n=document.createElement("textarea"),t=(n.className="clipboard-helper",n.style[t?"right":"left"]="-9999px",window.pageYOffset||document.documentElement.scrollTop),t=(n.style.top=t+"px",n.setAttribute("readonly",""),n.value=e,document.body.appendChild(n),!0);try{n.select(),t=document.execCommand("copy")}catch(e){t=!1}return n.parentNode.removeChild(n),t}((n=(e=n.querySelector("td.code, td.rouge-code"))?e:n).innerText),t.focus(),e&&(null!==t.interval&&clearInterval(t.interval),t.classList.add("copied"),t.interval=setTimeout(function(){t.classList.remove("copied"),clearInterval(t.interval),t.interval=null},1500)),e;throw console.warn(t),new Error("No code block found for this button.")}new SmoothScroll('a[href*="#"]',{offset:20,speed:400,speedAsDuration:!0,durationMax:500}),0<$("nav.toc").length&&new Gumshoe("nav.toc a",{navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:20,reflow:!0,events:!0}),window.chrome&&document.addEventListener("gumshoeActivate",function(e){var e=e.target,t={behavior:"auto",block:"nearest",inline:"start"},n=document.querySelector("aside.sidebar__right.sticky");n&&"sticky"===window.getComputedStyle(n).position&&(e.parentElement.classList.contains("toc__menu")&&e==e.parentElement.firstElementChild?document.querySelector("nav.toc header"):e).scrollIntoView(t)}),$("a[href$='.jpg'],a[href$='.jpeg'],a[href$='.JPG'],a[href$='.png'],a[href$='.gif'],a[href$='.webp']").has("> img").addClass("image-popup"),$(".image-popup").magnificPopup({type:"image",tLoading:"Loading image #%curr%...",gallery:{enabled:!0,navigateByImgClick:!0,preload:[0,1]},image:{tError:'Image #%curr% could not be loaded.'},removalDelay:500,mainClass:"mfp-zoom-in",callbacks:{beforeOpen:function(){this.st.image.markup=this.st.image.markup.replace("mfp-figure","mfp-figure mfp-with-anim")}},closeOnContentClick:!0,midClick:!0}),document.querySelector(".page__content").querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(function(e){var t,n=e.getAttribute("id");n&&((t=document.createElement("a")).className="header-link",t.href="#"+n,t.innerHTML='Permalink',t.title="Permalink",e.appendChild(t))});window.enable_copy_code_button&&document.querySelectorAll(".page__content pre.highlight > code").forEach(function(e,t,n){var r,e=e.parentElement;"code"===e.firstElementChild.tagName.toLowerCase()&&((r=document.createElement("button")).title="Copy to clipboard",r.className="clipboard-copy-button",r.innerHTML='Copy code',r.addEventListener("click",o),e.prepend(r))})}); \ No newline at end of file diff --git a/en/assets/js/main.min.js.map b/en/assets/js/main.min.js.map new file mode 100644 index 0000000..454db8c --- /dev/null +++ b/en/assets/js/main.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["assets/js/vendor/jquery/jquery-3.6.0.js","assets/js/plugins/gumshoe.js","assets/js/plugins/jquery.ba-throttle-debounce.js","assets/js/plugins/jquery.fitvids.js","assets/js/plugins/jquery.greedy-navigation.js","assets/js/plugins/jquery.magnific-popup.js","assets/js/plugins/smooth-scroll.js","assets/js/_main.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","isFunction","obj","nodeType","item","isWindow","arr","getProto","Object","getPrototypeOf","slice","flat","array","call","concat","apply","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","support","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","i","val","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","version","jQuery","selector","context","fn","init","isArrayLike","length","prototype","jquery","constructor","toArray","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","name","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","invert","matches","callbackExpect","arg","value","guid","Symbol","iterator","split","_i","toLowerCase","dir","until","matched","truncate","is","siblings","n","nextSibling","Sizzle","funescape","escape","nonHex","high","String","fromCharCode","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","setDocument","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","rcssescape","inDisabledFieldset","addCombinator","disabled","nodeName","next","childNodes","e","els","seed","m","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","testContext","scope","toSelector","join","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","tmp","input","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","hasCompare","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","not","matcher","unmatched","has","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","header","button","_matchIndexes","lt","gt","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","matcherIn","matcherOut","matcherFromGroupMatchers","elementMatchers","setMatchers","superMatcher","outermost","matchedCount","setMatched","contextBackup","byElement","dirrunsUnique","bySet","filters","parseOnly","soFar","preFilters","cached","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","token","compiled","_name","defaultValue","rneedsContext","unique","isXMLDoc","escapeSelector","rsingleTag","winnow","qualifier","self","rootjQuery","rparentsprev","ready","parseHTML","guaranteedUnique","children","contents","prev","sibling","targets","l","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","object","_","flag","fire","locked","once","fired","firing","queue","firingIndex","memory","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","catch","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","mightThrow","that","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","updateFunc","resolveContexts","resolveValues","remaining","primary","rerrorNames","readyList","stack","console","warn","message","readyException","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","defineProperty","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","isHiddenWithinTree","style","display","isAttached","css","pnum","source","rcssNum","cssExpand","composed","getRootNode","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","showHide","show","values","body","hide","toggle","rcheckableType","rtagName","rscriptType","wrapMap","div","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","expectSync","err","on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","t","handlers","namespaces","origType","elemData","create","handle","triggered","dispatch","bindType","handleObj","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","enumerable","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","getStyles","opener","getComputedStyle","swap","old","pixelPositionVal","boxSizingReliableVal","scrollboxSizeVal","pixelBoxStylesVal","reliableTrDimensionsVal","reliableMarginLeftVal","container","rnumnonpx","rboxStyle","computeStyleTests","divStyle","cssText","roundPixelMeasures","marginLeft","right","width","position","offsetWidth","measure","round","parseFloat","curCSS","computed","maxWidth","getPropertyValue","pixelBoxStyles","minWidth","addGetHookIf","conditionFn","hookFn","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trStyle","trChild","height","parseInt","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","opt","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","bind","complete","timer","anim","*","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","speeds","fadeTo","to","animate","doAnimation","optall","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","rfocusable","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","for","class","addClass","classes","clazz","finalValue","curValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","stopPropagationCallback","rreturn","rfocusMorph","valHooks","optionSet","focusin","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","rbracket","parseXML","parserErrorElem","DOMParser","parseFromString","rCRLF","rsubmitterTypes","rsubmittable","param","traditional","valueOrFunction","s","encodeURIComponent","buildParams","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","fireGlobals","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","urlAnchor","host","hasContent","uncached","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","response","isSuccess","ct","finalDataType","firstDataType","conv2","current","conv","dataFilter","throws","modified","getJSON","getScript","text script","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","oldCallbacks","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curCSSTop","curTop","curOffset","curCSSLeft","curElem","curLeft","curPosition","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","_jQuery","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","trim","define","amd","_$","$","noConflict","Gumshoe","sortContents","item1","item2","getOffsetTop","isAtBottom","innerHeight","scrollHeight","clientHeight","deactivate","items","li","nav","classList","navClass","contentClass","deactivateNested","emitEvent","link","defaults","nested","nestedClass","reflow","CustomEvent","dispatchEvent","offsetTop","isInView","bottom","bounds","useLastItem","activateNested","scrollHandler","cancelAnimationFrame","publicAPIs","detect","resizeHandler","navItems","forEach","decodeURIComponent","substr","destroy","merged","jq_throttle","Cowboy","throttle","no_trailing","debounce_mode","timeout_id","last_exec","wrapper","elapsed","debounce","at_begin","fitVids","customSelector","ignore","ignoreList","$allVideos","aspectRatio","$this","tagName","Zepto","numOfItems","totalSpace","closingTime","breakWidths","$btn","$vlinks","$hlinks","$nav","$logo","$logoImg","$title","$search","measureLinks","addWidth","outerWidth","availableSpace","numOfVisibleItems","requiredSpace","winWidth","lastBreakpoint","curBreakpoint","innerWidth","resize","naturalWidth","require","MagnificPopup","_mfpOn","f","mfp","ev","EVENT_NS","_getEl","_mfpTrigger","st","callbacks","charAt","_getCloseBtn","_currPopupType","currTemplate","closeBtn","closeMarkup","tClose","_checkInstance","magnificPopup","instance","_putInlineElementsBack","_lastInlineElement","_inlinePlaceholder","_hiddenClass","_removeAjaxCursor","_ajaxCur","_destroyAjaxRequest","req","_prevStatus","_document","_prevContentType","_wrapClasses","CLOSE_EVENT","BEFORE_CLOSE_EVENT","MARKUP_PARSE_EVENT","OPEN_EVENT","READY_CLASS","REMOVING_CLASS","PREVENT_CLOSE_CLASS","_isJQ","_window","INLINE_NS","appVersion","navigator","isLowIE","isIE8","all","isAndroid","isIOS","supportsTransition","probablyMobile","userAgent","popupsCache","isObj","isOpen","mainEl","fixedContentPos","modal","closeOnContentClick","closeOnBgClick","showCloseBtn","enableEscapeKey","bgOverlay","close","_checkIfClose","contentContainer","preloader","tLoading","modules","closeBtnInside","template","close_replaceWith","alignTop","fixedBgPos","updateSize","windowHeight","wH","windowStyles","classesToadd","_hasScrollBar","_getScrollbarSize","marginRight","isIE7","mainClass","_addClassToMFP","updateItemHTML","_lastFocusedEl","_setFocus","_onFocusIn","removalDelay","_close","classesToRemove","_removeClassFromMFP","currItem","autoFocusLast","prevHeight","winHeight","zoomLevel","clientWidth","parseEl","newContent","markup","appendContent","preloaded","addGroup","eHandler","mfpEl","_openClick","eName","midClick","disableOn","updateStatus","closeOnContent","closeOnBg","cName","_parseMarkup","scrollDiv","scrollbarSize","registerModule","itemOpts","jqEl","AJAX_NS","hiddenClass","tNotFound","initInline","getInline","inlineSt","inline","inlineElement","cursor","tError","initAjax","getAjax","textStatus","finished","loadError","_imgInterval","titleSrc","verticalFit","initImage","imgSt","ns","resizeImage","decr","img","_onImageHasSize","hasSize","clearInterval","isCheckingImgSize","imgHidden","findImageSize","mfpSetInterval","setInterval","counter","getImage","onLoadComplete","loaded","guard","onLoadError","alt","title","img_replaceWith","loading","_fixIframeBugs","isShowing","IFRAME_NS","_getLoopedId","numSlides","_replaceCurrTotal","curr","total","element","initZoom","getElToAnimate","showMainContent","openTimeout","animatedImg","zoomSt","newImg","transition","cssObj","-webkit-backface-visibility","_allowZoom","_getItemToZoom","_getOffset","isLarge","paddingTop","paddingBottom","hasMozTransform","MozTransform","RETINA_NS","srcAction","patterns","youtube","vimeo","gmaps","initIframe","prevType","newType","getIframe","embedSrc","iframeSt","iframe","dataObj","lastIndexOf","arrowMarkup","preload","navigateByImgClick","arrows","tPrev","tNext","tCounter","initGallery","gSt","gallery","direction","arrowLeft","arrowRight","_preloadTimeout","preloadNearbyImages","goTo","newIndex","preloadBefore","min","preloadAfter","_preloadItem","replaceSrc","ratio","initRetina","devicePixelRatio","retina","max-width","SmoothScroll","escapeCharacters","codeUnit","firstCodeUnit","InvalidCharacterError","anchor","emitEvents","topOnEmptyHash","speedAsDuration","durationMax","durationMin","clip","customEasing","updateURL","popstate","getHeight","getDocumentHeight","clickHandler","hostname","pathname","querySelector","history","replaceState","smoothScroll","stringify","animateScroll","popstateHandler","fixedHeader","animationInterval","cancelScroll","noEvent","startLocation","endLocation","distance","documentHeight","timeLapsed","stopAnimateScroll","loopAnimateScroll","_settings","isNum","anchorElem","headerHeight","abs","currentLocation","outline","timestamp","percentage","floor","pushState","matchMedia","Element","keyup","copyButtonEventListener","thisButton","codeBlock","nextElementSibling","queryCommandEnabled","clipboard","writeText","isRTL","textarea","yPosition","execCommand","realCodeBlock","innerText","chrome","scrollOptions","behavior","block","tocElement","parentElement","scrollIntoView","beforeOpen","enable_copy_code_button","parentList","copyButton"],"mappings":";;;;;GAaA;CAAA,SAAYA,EAAQC,GAEnB,aAEuB,UAAlB,OAAOC,QAAiD,UAA1B,OAAOA,OAAOC,QAShDD,OAAOC,QAAUH,EAAOI,SACvBH,EAASD,EAAQ,CAAA,CAAK,EACtB,SAAUK,GACT,GAAMA,EAAED,SAGR,OAAOH,EAASI,CAAE,EAFjB,MAAM,IAAIC,MAAO,0CAA2C,CAG9D,EAEDL,EAASD,CAAO,CAIhB,EAAqB,aAAlB,OAAOO,OAAyBA,OAASC,KAAM,SAAUD,EAAQE,GAMtE,aA+BiB,SAAbC,EAAkCC,GASpC,MAAsB,YAAf,OAAOA,GAA8C,UAAxB,OAAOA,EAAIC,UAC1B,YAApB,OAAOD,EAAIE,IACb,CAGc,SAAXC,EAA8BH,GAChC,OAAc,MAAPA,GAAeA,IAAQA,EAAIJ,MACnC,CA7CD,IAAIQ,EAAM,GAENC,EAAWC,OAAOC,eAElBC,EAAQJ,EAAII,MAEZC,EAAOL,EAAIK,KAAO,SAAUC,GAC/B,OAAON,EAAIK,KAAKE,KAAMD,CAAM,CAC7B,EAAI,SAAUA,GACb,OAAON,EAAIQ,OAAOC,MAAO,GAAIH,CAAM,CACpC,EAGII,EAAOV,EAAIU,KAEXC,EAAUX,EAAIW,QAEdC,EAAa,GAEbC,EAAWD,EAAWC,SAEtBC,EAASF,EAAWG,eAEpBC,EAAaF,EAAOD,SAEpBI,EAAuBD,EAAWT,KAAML,MAAO,EAE/CgB,EAAU,GAqBV7B,EAAWG,EAAOH,SAIjB8B,EAA4B,CAC/BC,KAAM,CAAA,EACNC,IAAK,CAAA,EACLC,MAAO,CAAA,EACPC,SAAU,CAAA,CACX,EAEA,SAASC,EAASC,EAAMC,EAAMC,GAG7B,IAAIC,EAAGC,EACNC,GAHDH,EAAMA,GAAOtC,GAGC0C,cAAe,QAAS,EAGtC,GADAD,EAAOE,KAAOP,EACTC,EACJ,IAAME,KAAKT,GAYVU,EAAMH,EAAME,IAAOF,EAAKO,cAAgBP,EAAKO,aAAcL,CAAE,IAE5DE,EAAOI,aAAcN,EAAGC,CAAI,EAI/BF,EAAIQ,KAAKC,YAAaN,CAAO,EAAEO,WAAWC,YAAaR,CAAO,CAC/D,CAGD,SAASS,EAAQ3C,GAChB,OAAY,MAAPA,EACGA,EAAM,GAIQ,UAAf,OAAOA,GAAmC,YAAf,OAAOA,EACxCgB,EAAYC,EAASN,KAAMX,CAAI,IAAO,SACtC,OAAOA,CACT,CAOA,IACC4C,EAAU,QAGVC,EAAS,SAAUC,EAAUC,GAI5B,OAAO,IAAIF,EAAOG,GAAGC,KAAMH,EAAUC,CAAQ,CAC9C,EAyVD,SAASG,EAAalD,GAMrB,IAAImD,EAAS,CAAC,CAACnD,GAAO,WAAYA,GAAOA,EAAImD,OAC5C3B,EAAOmB,EAAQ3C,CAAI,EAEpB,MAAKD,CAAAA,EAAYC,CAAI,GAAKG,CAAAA,EAAUH,CAAI,IAIxB,UAATwB,GAA+B,IAAX2B,GACR,UAAlB,OAAOA,GAAgC,EAATA,GAAgBA,EAAS,KAAOnD,EAChE,CAtWA6C,EAAOG,GAAKH,EAAOO,UAAY,CAG9BC,OAAQT,EAERU,YAAaT,EAGbM,OAAQ,EAERI,QAAS,WACR,OAAO/C,EAAMG,KAAMd,IAAK,CACzB,EAIA2D,IAAK,SAAUC,GAGd,OAAY,MAAPA,EACGjD,EAAMG,KAAMd,IAAK,EAIlB4D,EAAM,EAAI5D,KAAM4D,EAAM5D,KAAKsD,QAAWtD,KAAM4D,EACpD,EAIAC,UAAW,SAAUC,GAGhBC,EAAMf,EAAOgB,MAAOhE,KAAKyD,YAAY,EAAGK,CAAM,EAMlD,OAHAC,EAAIE,WAAajE,KAGV+D,CACR,EAGAG,KAAM,SAAUC,GACf,OAAOnB,EAAOkB,KAAMlE,KAAMmE,CAAS,CACpC,EAEAC,IAAK,SAAUD,GACd,OAAOnE,KAAK6D,UAAWb,EAAOoB,IAAKpE,KAAM,SAAUqE,EAAMlC,GACxD,OAAOgC,EAASrD,KAAMuD,EAAMlC,EAAGkC,CAAK,CACrC,CAAE,CAAE,CACL,EAEA1D,MAAO,WACN,OAAOX,KAAK6D,UAAWlD,EAAMK,MAAOhB,KAAMsE,SAAU,CAAE,CACvD,EAEAC,MAAO,WACN,OAAOvE,KAAKwE,GAAI,CAAE,CACnB,EAEAC,KAAM,WACL,OAAOzE,KAAKwE,GAAI,CAAC,CAAE,CACpB,EAEAE,KAAM,WACL,OAAO1E,KAAK6D,UAAWb,EAAO2B,KAAM3E,KAAM,SAAU4E,EAAOzC,GAC1D,OAASA,EAAI,GAAM,CACpB,CAAE,CAAE,CACL,EAEA0C,IAAK,WACJ,OAAO7E,KAAK6D,UAAWb,EAAO2B,KAAM3E,KAAM,SAAU4E,EAAOzC,GAC1D,OAAOA,EAAI,CACZ,CAAE,CAAE,CACL,EAEAqC,GAAI,SAAUrC,GACb,IAAI2C,EAAM9E,KAAKsD,OACdyB,EAAI,CAAC5C,GAAMA,EAAI,EAAI2C,EAAM,GAC1B,OAAO9E,KAAK6D,UAAgB,GAALkB,GAAUA,EAAID,EAAM,CAAE9E,KAAM+E,IAAQ,EAAG,CAC/D,EAEAC,IAAK,WACJ,OAAOhF,KAAKiE,YAAcjE,KAAKyD,YAAY,CAC5C,EAIAxC,KAAMA,EACNgE,KAAM1E,EAAI0E,KACVC,OAAQ3E,EAAI2E,MACb,EAEAlC,EAAOmC,OAASnC,EAAOG,GAAGgC,OAAS,WAClC,IAAIC,EAASC,EAAWC,EAAMC,EAAaC,EAC1CC,EAASnB,UAAW,IAAO,GAC3BnC,EAAI,EACJmB,EAASgB,UAAUhB,OACnBoC,EAAO,CAAA,EAsBR,IAnBuB,WAAlB,OAAOD,IACXC,EAAOD,EAGPA,EAASnB,UAAWnC,IAAO,GAC3BA,CAAC,IAIqB,UAAlB,OAAOsD,GAAwBvF,EAAYuF,CAAO,IACtDA,EAAS,IAILtD,IAAMmB,IACVmC,EAASzF,KACTmC,CAAC,IAGMA,EAAImB,EAAQnB,CAAC,GAGpB,GAAqC,OAA9BiD,EAAUd,UAAWnC,IAG3B,IAAMkD,KAAQD,EACbE,EAAOF,EAASC,GAIF,cAATA,GAAwBI,IAAWH,IAKnCI,GAAQJ,IAAUtC,EAAO2C,cAAeL,CAAK,IAC/CC,EAAcK,MAAMC,QAASP,CAAK,KACpC1D,EAAM6D,EAAQJ,GAIbG,EADID,GAAe,CAACK,MAAMC,QAASjE,CAAI,EAC/B,GACI2D,GAAgBvC,EAAO2C,cAAe/D,CAAI,EAG9CA,EAFA,GAIT2D,EAAc,CAAA,EAGdE,EAAQJ,GAASrC,EAAOmC,OAAQO,EAAMF,EAAOF,CAAK,GAG9BQ,KAAAA,IAATR,IACXG,EAAQJ,GAASC,IAOrB,OAAOG,CACR,EAEAzC,EAAOmC,OAAQ,CAGdY,QAAS,UAAahD,EAAUiD,KAAKC,OAAO,GAAIC,QAAS,MAAO,EAAG,EAGnEC,QAAS,CAAA,EAETC,MAAO,SAAUC,GAChB,MAAM,IAAIvG,MAAOuG,CAAI,CACtB,EAEAC,KAAM,aAENX,cAAe,SAAUxF,GAKxB,MAAA,EAAMA,CAAAA,GAAgC,oBAAzBiB,EAASN,KAAMX,CAAI,IAIhCoG,EAAQ/F,EAAUL,CAAI,KASC,YAAhB,OADPqG,EAAOnF,EAAOP,KAAMyF,EAAO,aAAc,GAAKA,EAAM9C,cACflC,EAAWT,KAAM0F,CAAK,IAAMhF,GAClE,EAEAiF,cAAe,SAAUtG,GAGxB,IAFA,IAAIkF,KAEUlF,EACb,MAAO,CAAA,EAER,MAAO,CAAA,CACR,EAIAuG,WAAY,SAAU1E,EAAMoD,EAASlD,GACpCH,EAASC,EAAM,CAAEH,MAAOuD,GAAWA,EAAQvD,KAAM,EAAGK,CAAI,CACzD,EAEAgC,KAAM,SAAU/D,EAAKgE,GACpB,IAAIb,EAAQnB,EAAI,EAEhB,GAAKkB,EAAalD,CAAI,EAErB,IADAmD,EAASnD,EAAImD,OACLnB,EAAImB,GACqC,CAAA,IAA3Ca,EAASrD,KAAMX,EAAKgC,GAAKA,EAAGhC,EAAKgC,EAAI,EADvBA,CAAC,SAMrB,IAAMA,KAAKhC,EACV,GAAgD,CAAA,IAA3CgE,EAASrD,KAAMX,EAAKgC,GAAKA,EAAGhC,EAAKgC,EAAI,EACzC,MAKH,OAAOhC,CACR,EAGAwG,UAAW,SAAUpG,EAAKqG,GACrB7C,EAAM6C,GAAW,GAarB,OAXY,MAAPrG,IACC8C,EAAa5C,OAAQF,CAAI,CAAE,EAC/ByC,EAAOgB,MAAOD,EACE,UAAf,OAAOxD,EACN,CAAEA,GAAQA,CACZ,EAEAU,EAAKH,KAAMiD,EAAKxD,CAAI,GAIfwD,CACR,EAEA8C,QAAS,SAAUxC,EAAM9D,EAAK4B,GAC7B,OAAc,MAAP5B,EAAc,CAAC,EAAIW,EAAQJ,KAAMP,EAAK8D,EAAMlC,CAAE,CACtD,EAIA6B,MAAO,SAAUO,EAAOuC,GAKvB,IAJA,IAAIhC,EAAM,CAACgC,EAAOxD,OACjByB,EAAI,EACJ5C,EAAIoC,EAAMjB,OAEHyB,EAAID,EAAKC,CAAC,GACjBR,EAAOpC,CAAC,IAAO2E,EAAQ/B,GAKxB,OAFAR,EAAMjB,OAASnB,EAERoC,CACR,EAEAI,KAAM,SAAUb,EAAOK,EAAU4C,GAShC,IARA,IACCC,EAAU,GACV7E,EAAI,EACJmB,EAASQ,EAAMR,OACf2D,EAAiB,CAACF,EAIX5E,EAAImB,EAAQnB,CAAC,GACF,CAACgC,EAAUL,EAAO3B,GAAKA,CAAE,GAClB8E,GACxBD,EAAQ/F,KAAM6C,EAAO3B,EAAI,EAI3B,OAAO6E,CACR,EAGA5C,IAAK,SAAUN,EAAOK,EAAU+C,GAC/B,IAAI5D,EAAQ6D,EACXhF,EAAI,EACJ4B,EAAM,GAGP,GAAKV,EAAaS,CAAM,EAEvB,IADAR,EAASQ,EAAMR,OACPnB,EAAImB,EAAQnB,CAAC,GAGN,OAFdgF,EAAQhD,EAAUL,EAAO3B,GAAKA,EAAG+E,CAAI,IAGpCnD,EAAI9C,KAAMkG,CAAM,OAMlB,IAAMhF,KAAK2B,EAGI,OAFdqD,EAAQhD,EAAUL,EAAO3B,GAAKA,EAAG+E,CAAI,IAGpCnD,EAAI9C,KAAMkG,CAAM,EAMnB,OAAOvG,EAAMmD,CAAI,CAClB,EAGAqD,KAAM,EAIN3F,QAASA,CACV,CAAE,EAEqB,YAAlB,OAAO4F,SACXrE,EAAOG,GAAIkE,OAAOC,UAAa/G,EAAK8G,OAAOC,WAI5CtE,EAAOkB,KAAM,uEAAuEqD,MAAO,GAAI,EAC9F,SAAUC,EAAInC,GACblE,EAAY,WAAakE,EAAO,KAAQA,EAAKoC,YAAY,CAC1D,CAAE,EA27EO,SAANC,EAAgBrD,EAAMqD,EAAKC,GAI9B,IAHA,IAAIC,EAAU,GACbC,EAAqB/B,KAAAA,IAAV6B,GAEFtD,EAAOA,EAAMqD,KAA6B,IAAlBrD,EAAKjE,UACtC,GAAuB,IAAlBiE,EAAKjE,SAAiB,CAC1B,GAAKyH,GAAY7E,EAAQqB,CAAK,EAAEyD,GAAIH,CAAM,EACzC,MAEDC,EAAQ3G,KAAMoD,CAAK,CACpB,CAED,OAAOuD,CACR,CAGe,SAAXG,EAAqBC,EAAG3D,GAG3B,IAFA,IAAIuD,EAAU,GAENI,EAAGA,EAAIA,EAAEC,YACI,IAAfD,EAAE5H,UAAkB4H,IAAM3D,GAC9BuD,EAAQ3G,KAAM+G,CAAE,EAIlB,OAAOJ,CACR,CAn8EA,IAAIM,EAWJ,SAAYnI,GA6IC,SAAZoI,EAAsBC,EAAQC,GAG7B,OAFIC,EAAO,KAAOF,EAAOzH,MAAO,CAAE,EAAI,MAE/B0H,IASNC,EAAO,EACNC,OAAOC,aAAqB,MAAPF,CAAe,EACpCC,OAAOC,aAAcF,GAAQ,GAAK,MAAe,KAAPA,EAAe,KAAO,EACnE,CAKa,SAAbG,EAAuBC,EAAIC,GAC1B,OAAKA,EAGQ,OAAPD,EACG,IAIDA,EAAG/H,MAAO,EAAG,CAAC,CAAE,EAAI,KAC1B+H,EAAGE,WAAYF,EAAGpF,OAAS,CAAE,EAAElC,SAAU,EAAG,EAAI,IAI3C,KAAOsH,CACf,CAMgB,SAAhBG,IACCC,EAAY,CACb,CAvLD,IAAI3G,EACHV,EACAsH,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGAT,EACAlJ,EACA4J,EACAC,EACAC,EACAC,EACA3C,EACA4C,EAGA7D,EAAU,UAAW,CAAI,IAAI8D,KAC7BC,EAAe/J,EAAOH,SACtBmK,EAAU,EACVC,EAAO,EACPC,EAAaC,EAAY,EACzBC,EAAaD,EAAY,EACzBE,EAAgBF,EAAY,EAC5BG,EAAyBH,EAAY,EACrCI,EAAY,SAAUC,EAAGC,GAIxB,OAHKD,IAAMC,IACVjB,EAAe,CAAA,GAET,CACR,EAGAlI,EAAS,GAAOC,eAChBf,EAAM,GACNkK,EAAMlK,EAAIkK,IACVC,EAAanK,EAAIU,KACjBA,EAAOV,EAAIU,KACXN,EAAQJ,EAAII,MAIZO,EAAU,SAAUyJ,EAAMtG,GAGzB,IAFA,IAAIlC,EAAI,EACP2C,EAAM6F,EAAKrH,OACJnB,EAAI2C,EAAK3C,CAAC,GACjB,GAAKwI,EAAMxI,KAAQkC,EAClB,OAAOlC,EAGT,MAAO,CAAC,CACT,EAEAyI,EAAW,6HAMXC,EAAa,sBAGbC,EAAa,0BAA4BD,EACxC,0CAGDE,EAAa,MAAQF,EAAa,KAAOC,EAAa,OAASD,EAG9D,gBAAkBA,EAIlB,2DAA6DC,EAAa,OAC1ED,EAAa,OAEdG,EAAU,KAAOF,EAOhB,wFAA6BC,EAI7B,eAGDE,GAAc,IAAIC,OAAQL,EAAa,IAAK,GAAI,EAChDM,EAAQ,IAAID,OAAQ,IAAML,EAAa,8BACtCA,EAAa,KAAM,GAAI,EAExBO,GAAS,IAAIF,OAAQ,IAAML,EAAa,KAAOA,EAAa,GAAI,EAChEQ,GAAe,IAAIH,OAAQ,IAAML,EAAa,WAAaA,EAAa,IAAMA,EAC7E,GAAI,EACLS,GAAW,IAAIJ,OAAQL,EAAa,IAAK,EAEzCU,GAAU,IAAIL,OAAQF,CAAQ,EAC9BQ,GAAc,IAAIN,OAAQ,IAAMJ,EAAa,GAAI,EAEjDW,EAAY,CACXC,GAAM,IAAIR,OAAQ,MAAQJ,EAAa,GAAI,EAC3Ca,MAAS,IAAIT,OAAQ,QAAUJ,EAAa,GAAI,EAChDc,IAAO,IAAIV,OAAQ,KAAOJ,EAAa,OAAQ,EAC/Ce,KAAQ,IAAIX,OAAQ,IAAMH,CAAW,EACrCe,OAAU,IAAIZ,OAAQ,IAAMF,CAAQ,EACpCe,MAAS,IAAIb,OAAQ,yDACpBL,EAAa,+BAAiCA,EAAa,cAC3DA,EAAa,aAAeA,EAAa,SAAU,GAAI,EACxDmB,KAAQ,IAAId,OAAQ,OAASN,EAAW,KAAM,GAAI,EAIlDqB,aAAgB,IAAIf,OAAQ,IAAML,EACjC,mDAAqDA,EACrD,mBAAqBA,EAAa,mBAAoB,GAAI,CAC5D,EAEAqB,GAAQ,SACRC,GAAU,sCACVC,GAAU,SAEVC,EAAU,yBAGVC,GAAa,mCAEbC,GAAW,OAIXC,EAAY,IAAItB,OAAQ,uBAAyBL,EAAa,uBAAwB,GAAI,EAoB1F4B,GAAa,sDA0BbC,GAAqBC,GACpB,SAAUtI,GACT,MAAyB,CAAA,IAAlBA,EAAKuI,UAAqD,aAAhCvI,EAAKwI,SAASpF,YAAY,CAC5D,EACA,CAAEC,IAAK,aAAcoF,KAAM,QAAS,CACrC,EAGD,IACC7L,EAAKD,MACFT,EAAMI,EAAMG,KAAMgJ,EAAaiD,UAAW,EAC5CjD,EAAaiD,UACd,EAKAxM,EAAKuJ,EAAaiD,WAAWzJ,QAASlD,QAoBvC,CAnBE,MAAQ4M,GACT/L,EAAO,CAAED,MAAOT,EAAI+C,OAGnB,SAAUmC,EAAQwH,GACjBvC,EAAW1J,MAAOyE,EAAQ9E,EAAMG,KAAMmM,CAAI,CAAE,CAC7C,EAIA,SAAUxH,EAAQwH,GAKjB,IAJA,IAAIlI,EAAIU,EAAOnC,OACdnB,EAAI,EAGKsD,EAAQV,CAAC,IAAOkI,EAAK9K,CAAC,MAChCsD,EAAOnC,OAASyB,EAAI,CACrB,CACD,CACD,CAEA,SAASmD,EAAQjF,EAAUC,EAAS0D,EAASsG,GAC5C,IAAIC,EAAGhL,EAASiL,EAAKC,EAAOC,EAAQC,EACnCC,EAAatK,GAAWA,EAAQuK,cAGhCrN,EAAW8C,EAAUA,EAAQ9C,SAAW,EAKzC,GAHAwG,EAAUA,GAAW,GAGI,UAApB,OAAO3D,GAAyB,CAACA,GACxB,IAAb7C,GAA+B,IAAbA,GAA+B,KAAbA,EAEpC,OAAOwG,EAIR,GAAK,CAACsG,IACLpE,EAAa5F,CAAQ,EACrBA,EAAUA,GAAWtD,EAEhB6J,GAAiB,CAIrB,GAAkB,KAAbrJ,IAAqBiN,EAAQf,GAAWoB,KAAMzK,CAAS,GAG3D,GAAOkK,EAAIE,EAAO,IAGjB,GAAkB,IAAbjN,EAAiB,CACrB,GAAK,EAAEiE,EAAOnB,EAAQyK,eAAgBR,CAAE,GAUvC,OAAOvG,EALP,GAAKvC,EAAKuJ,KAAOT,EAEhB,OADAvG,EAAQ3F,KAAMoD,CAAK,EACZuC,CAOV,MAKC,GAAK4G,IAAgBnJ,EAAOmJ,EAAWG,eAAgBR,CAAE,IACxDvD,EAAU1G,EAASmB,CAAK,GACxBA,EAAKuJ,KAAOT,EAGZ,OADAvG,EAAQ3F,KAAMoD,CAAK,EACZuC,CAET,KAGM,CAAA,GAAKyG,EAAO,GAElB,OADApM,EAAKD,MAAO4F,EAAS1D,EAAQ2K,qBAAsB5K,CAAS,CAAE,EACvD2D,EAGD,IAAOuG,EAAIE,EAAO,KAAS5L,EAAQqM,wBACzC5K,EAAQ4K,uBAGR,OADA7M,EAAKD,MAAO4F,EAAS1D,EAAQ4K,uBAAwBX,CAAE,CAAE,EAClDvG,CACR,CAID,GAAKnF,EAAQsM,KACZ,CAAC1D,EAAwBpH,EAAW,OAClC,CAACyG,GAAa,CAACA,EAAUsE,KAAM/K,CAAS,KAI3B,IAAb7C,GAAqD,WAAnC8C,EAAQ2J,SAASpF,YAAY,GAAmB,CAYpE,GAVA8F,EAActK,EACduK,EAAatK,EASK,IAAb9C,IACFkL,GAAS0C,KAAM/K,CAAS,GAAKoI,GAAa2C,KAAM/K,CAAS,GAAM,CAqBjE,KAlBAuK,EAAajB,GAASyB,KAAM/K,CAAS,GAAKgL,GAAa/K,EAAQN,UAAW,GACzEM,KAImBA,GAAYzB,EAAQyM,SAGhCd,EAAMlK,EAAQV,aAAc,IAAK,GACvC4K,EAAMA,EAAIlH,QAASuG,GAAYhE,CAAW,EAE1CvF,EAAQT,aAAc,KAAQ2K,EAAMrH,CAAU,GAMhD5D,GADAmL,EAASpE,EAAUjG,CAAS,GACjBK,OACHnB,CAAC,IACRmL,EAAQnL,IAAQiL,EAAM,IAAMA,EAAM,UAAa,IAC9Ce,EAAYb,EAAQnL,EAAI,EAE1BoL,EAAcD,EAAOc,KAAM,GAAI,CAChC,CAEA,IAIC,OAHAnN,EAAKD,MAAO4F,EACX4G,EAAWa,iBAAkBd,CAAY,CAC1C,EACO3G,CAOR,CANE,MAAQ0H,GACTjE,EAAwBpH,EAAU,CAAA,CAAK,CACxC,CAAE,QACImK,IAAQrH,GACZ7C,EAAQqL,gBAAiB,IAAK,CAEhC,CACD,CACD,CAID,OAAOnF,EAAQnG,EAASiD,QAASiF,EAAO,IAAK,EAAGjI,EAAS0D,EAASsG,CAAK,CACxE,CAQA,SAAShD,IACR,IAAIsE,EAAO,GAEX,SAASC,EAAOC,EAAKvH,GAQpB,OALKqH,EAAKvN,KAAMyN,EAAM,GAAI,EAAI3F,EAAK4F,aAGlC,OAAOF,EAAOD,EAAKI,MAAM,GAEjBH,EAAOC,EAAM,KAAQvH,CAC/B,CACA,OAAOsH,CACR,CAMA,SAASI,EAAc1L,GAEtB,OADAA,EAAI4C,GAAY,CAAA,EACT5C,CACR,CAMA,SAAS2L,EAAQ3L,GAChB,IAAI4L,EAAKnP,EAAS0C,cAAe,UAAW,EAE5C,IACC,MAAO,CAAC,CAACa,EAAI4L,CAAG,CAYjB,CAXE,MAAQ/B,GACT,MAAO,CAAA,CACR,CAAE,QAGI+B,EAAGnM,YACPmM,EAAGnM,WAAWC,YAAakM,CAAG,CAKhC,CACD,CAOA,SAASC,GAAWC,EAAOC,GAI1B,IAHA,IAAI3O,EAAM0O,EAAM1H,MAAO,GAAI,EAC1BpF,EAAI5B,EAAI+C,OAEDnB,CAAC,IACR4G,EAAKoG,WAAY5O,EAAK4B,IAAQ+M,CAEhC,CAQA,SAASE,GAAc7E,EAAGC,GACzB,IAAI6E,EAAM7E,GAAKD,EACd+E,EAAOD,GAAsB,IAAf9E,EAAEnK,UAAiC,IAAfoK,EAAEpK,UACnCmK,EAAEgF,YAAc/E,EAAE+E,YAGpB,GAAKD,EACJ,OAAOA,EAIR,GAAKD,EACJ,KAAUA,EAAMA,EAAIpH,aACnB,GAAKoH,IAAQ7E,EACZ,MAAO,CAAC,EAKX,OAAOD,EAAI,EAAI,CAAC,CACjB,CA4BA,SAASiF,GAAsB5C,GAG9B,OAAO,SAAUvI,GAKhB,MAAK,SAAUA,EASTA,EAAKzB,YAAgC,CAAA,IAAlByB,EAAKuI,SAGvB,UAAWvI,EACV,UAAWA,EAAKzB,WACbyB,EAAKzB,WAAWgK,WAAaA,EAE7BvI,EAAKuI,WAAaA,EAMpBvI,EAAKoL,aAAe7C,GAI1BvI,EAAKoL,aAAe,CAAC7C,GACrBF,GAAoBrI,CAAK,IAAMuI,EAG1BvI,EAAKuI,WAAaA,EAKd,UAAWvI,GACfA,EAAKuI,WAAaA,CAK3B,CACD,CAMA,SAAS8C,EAAwBvM,GAChC,OAAO0L,EAAc,SAAUc,GAE9B,OADAA,EAAW,CAACA,EACLd,EAAc,SAAU3B,EAAMlG,GAMpC,IALA,IAAIjC,EACH6K,EAAezM,EAAI,GAAI+J,EAAK5J,OAAQqM,CAAS,EAC7CxN,EAAIyN,EAAatM,OAGVnB,CAAC,IACH+K,EAAQnI,EAAI6K,EAAczN,MAC9B+K,EAAMnI,GAAM,EAAGiC,EAASjC,GAAMmI,EAAMnI,IAGvC,CAAE,CACH,CAAE,CACH,CAOA,SAASkJ,GAAa/K,GACrB,OAAOA,GAAmD,KAAA,IAAjCA,EAAQ2K,sBAAwC3K,CAC1E,CAirCA,IAAMf,KA9qCNV,EAAUyG,EAAOzG,QAAU,GAO3BwH,EAAQf,EAAOe,MAAQ,SAAU5E,GAChC,IAAIwL,EAAYxL,GAAQA,EAAKyL,aAC5BtG,EAAUnF,IAAUA,EAAKoJ,eAAiBpJ,GAAO0L,gBAKlD,MAAO,CAAC7D,GAAM8B,KAAM6B,GAAarG,GAAWA,EAAQqD,UAAY,MAAO,CACxE,EAOA/D,EAAcZ,EAAOY,YAAc,SAAU7G,GAC5C,IACCC,EAAMD,EAAOA,EAAKwL,eAAiBxL,EAAO6H,EAud3C,OAhdK5H,GAAOtC,GAA6B,IAAjBsC,EAAI9B,UAAmB8B,EAAI6N,kBAMnDvG,GADA5J,EAAWsC,GACQ6N,gBACnBtG,EAAiB,CAACR,EAAOrJ,CAAS,EAQ7BkK,GAAgBlK,IAClBoQ,EAAYpQ,EAASqQ,cAAiBD,EAAUE,MAAQF,IAGrDA,EAAUG,iBACdH,EAAUG,iBAAkB,SAAUtH,EAAe,CAAA,CAAM,EAGhDmH,EAAUI,aACrBJ,EAAUI,YAAa,WAAYvH,CAAc,GASnDpH,EAAQyM,MAAQY,EAAQ,SAAUC,GAEjC,OADAvF,EAAQ7G,YAAaoM,CAAG,EAAEpM,YAAa/C,EAAS0C,cAAe,KAAM,CAAE,EACjC,KAAA,IAAxByM,EAAGV,kBAChB,CAACU,EAAGV,iBAAkB,qBAAsB,EAAE/K,MAChD,CAAE,EAQF7B,EAAQsJ,WAAa+D,EAAQ,SAAUC,GAEtC,OADAA,EAAGsB,UAAY,IACR,CAACtB,EAAGvM,aAAc,WAAY,CACtC,CAAE,EAMFf,EAAQoM,qBAAuBiB,EAAQ,SAAUC,GAEhD,OADAA,EAAGpM,YAAa/C,EAAS0Q,cAAe,EAAG,CAAE,EACtC,CAACvB,EAAGlB,qBAAsB,GAAI,EAAEvK,MACxC,CAAE,EAGF7B,EAAQqM,uBAAyBzB,EAAQ2B,KAAMpO,EAASkO,sBAAuB,EAM/ErM,EAAQ8O,QAAUzB,EAAQ,SAAUC,GAEnC,OADAvF,EAAQ7G,YAAaoM,CAAG,EAAEnB,GAAK7H,EACxB,CAACnG,EAAS4Q,mBAAqB,CAAC5Q,EAAS4Q,kBAAmBzK,CAAQ,EAAEzC,MAC9E,CAAE,EAGG7B,EAAQ8O,SACZxH,EAAK0H,OAAa,GAAI,SAAU7C,GAC/B,IAAI8C,EAAS9C,EAAG1H,QAASsG,EAAWrE,CAAU,EAC9C,OAAO,SAAU9D,GAChB,OAAOA,EAAK7B,aAAc,IAAK,IAAMkO,CACtC,CACD,EACA3H,EAAK4H,KAAW,GAAI,SAAU/C,EAAI1K,GACjC,GAAuC,KAAA,IAA3BA,EAAQyK,gBAAkClE,EAErD,OADIpF,EAAOnB,EAAQyK,eAAgBC,CAAG,GACxB,CAAEvJ,GAAS,EAE3B,IAEA0E,EAAK0H,OAAa,GAAK,SAAU7C,GAChC,IAAI8C,EAAS9C,EAAG1H,QAASsG,EAAWrE,CAAU,EAC9C,OAAO,SAAU9D,GACZpC,EAAwC,KAAA,IAA1BoC,EAAKuM,kBACtBvM,EAAKuM,iBAAkB,IAAK,EAC7B,OAAO3O,GAAQA,EAAKkF,QAAUuJ,CAC/B,CACD,EAIA3H,EAAK4H,KAAW,GAAI,SAAU/C,EAAI1K,GACjC,GAAuC,KAAA,IAA3BA,EAAQyK,gBAAkClE,EAAiB,CACtE,IAAIxH,EAAME,EAAG2B,EACZO,EAAOnB,EAAQyK,eAAgBC,CAAG,EAEnC,GAAKvJ,EAAO,CAIX,IADApC,EAAOoC,EAAKuM,iBAAkB,IAAK,IACtB3O,EAAKkF,QAAUyG,EAC3B,MAAO,CAAEvJ,GAMV,IAFAP,EAAQZ,EAAQsN,kBAAmB5C,CAAG,EACtCzL,EAAI,EACMkC,EAAOP,EAAO3B,CAAC,KAExB,IADAF,EAAOoC,EAAKuM,iBAAkB,IAAK,IACtB3O,EAAKkF,QAAUyG,EAC3B,MAAO,CAAEvJ,EAGZ,CAEA,MAAO,EACR,CACD,GAID0E,EAAK4H,KAAY,IAAIlP,EAAQoM,qBAC5B,SAAUgD,EAAK3N,GACd,OAA6C,KAAA,IAAjCA,EAAQ2K,qBACZ3K,EAAQ2K,qBAAsBgD,CAAI,EAG9BpP,EAAQsM,IACZ7K,EAAQmL,iBAAkBwC,CAAI,EAD/B,KAAA,CAGR,EAEA,SAAUA,EAAK3N,GACd,IAAImB,EACHyM,EAAM,GACN3O,EAAI,EAGJyE,EAAU1D,EAAQ2K,qBAAsBgD,CAAI,EAG7C,GAAa,MAARA,EASL,OAAOjK,EARN,KAAUvC,EAAOuC,EAASzE,CAAC,KACH,IAAlBkC,EAAKjE,UACT0Q,EAAI7P,KAAMoD,CAAK,EAIjB,OAAOyM,CAGT,EAGD/H,EAAK4H,KAAc,MAAIlP,EAAQqM,wBAA0B,SAAUuC,EAAWnN,GAC7E,GAA+C,KAAA,IAAnCA,EAAQ4K,wBAA0CrE,EAC7D,OAAOvG,EAAQ4K,uBAAwBuC,CAAU,CAEnD,EAQA1G,EAAgB,GAOhBD,EAAY,IAELjI,EAAQsM,IAAM1B,EAAQ2B,KAAMpO,EAASyO,gBAAiB,KAI5DS,EAAQ,SAAUC,GAEjB,IAAIgC,EAOJvH,EAAQ7G,YAAaoM,CAAG,EAAEiC,UAAY,UAAYjL,EACjD,qBAAiBA,EACjB,kEAMIgJ,EAAGV,iBAAkB,sBAAuB,EAAE/K,QAClDoG,EAAUzI,KAAM,SAAW4J,EAAa,cAAe,EAKlDkE,EAAGV,iBAAkB,YAAa,EAAE/K,QACzCoG,EAAUzI,KAAM,MAAQ4J,EAAa,aAAeD,EAAW,GAAI,EAI9DmE,EAAGV,iBAAkB,QAAUtI,EAAU,IAAK,EAAEzC,QACrDoG,EAAUzI,KAAM,IAAK,GAQtB8P,EAAQnR,EAAS0C,cAAe,OAAQ,GAClCG,aAAc,OAAQ,EAAG,EAC/BsM,EAAGpM,YAAaoO,CAAM,EAChBhC,EAAGV,iBAAkB,WAAY,EAAE/K,QACxCoG,EAAUzI,KAAM,MAAQ4J,EAAa,QAAUA,EAAa,KAC3DA,EAAa,cAAe,EAMxBkE,EAAGV,iBAAkB,UAAW,EAAE/K,QACvCoG,EAAUzI,KAAM,UAAW,EAMtB8N,EAAGV,iBAAkB,KAAOtI,EAAU,IAAK,EAAEzC,QAClDoG,EAAUzI,KAAM,UAAW,EAK5B8N,EAAGV,iBAAkB,MAAO,EAC5B3E,EAAUzI,KAAM,aAAc,CAC/B,CAAE,EAEF6N,EAAQ,SAAUC,GACjBA,EAAGiC,UAAY,oFAKf,IAAID,EAAQnR,EAAS0C,cAAe,OAAQ,EAC5CyO,EAAMtO,aAAc,OAAQ,QAAS,EACrCsM,EAAGpM,YAAaoO,CAAM,EAAEtO,aAAc,OAAQ,GAAI,EAI7CsM,EAAGV,iBAAkB,UAAW,EAAE/K,QACtCoG,EAAUzI,KAAM,OAAS4J,EAAa,aAAc,EAKH,IAA7CkE,EAAGV,iBAAkB,UAAW,EAAE/K,QACtCoG,EAAUzI,KAAM,WAAY,WAAY,EAKzCuI,EAAQ7G,YAAaoM,CAAG,EAAEnC,SAAW,CAAA,EACc,IAA9CmC,EAAGV,iBAAkB,WAAY,EAAE/K,QACvCoG,EAAUzI,KAAM,WAAY,WAAY,EAKzC8N,EAAGV,iBAAkB,MAAO,EAC5B3E,EAAUzI,KAAM,MAAO,CACxB,CAAE,IAGIQ,EAAQwP,gBAAkB5E,EAAQ2B,KAAQhH,EAAUwC,EAAQxC,SAClEwC,EAAQ0H,uBACR1H,EAAQ2H,oBACR3H,EAAQ4H,kBACR5H,EAAQ6H,iBAAoB,IAE5BvC,EAAQ,SAAUC,GAIjBtN,EAAQ6P,kBAAoBtK,EAAQlG,KAAMiO,EAAI,GAAI,EAIlD/H,EAAQlG,KAAMiO,EAAI,WAAY,EAC9BpF,EAAc1I,KAAM,KAAM+J,CAAQ,CACnC,CAAE,EAGHtB,EAAYA,EAAUpG,QAAU,IAAI4H,OAAQxB,EAAU0E,KAAM,GAAI,CAAE,EAClEzE,EAAgBA,EAAcrG,QAAU,IAAI4H,OAAQvB,EAAcyE,KAAM,GAAI,CAAE,EAI9EmD,EAAalF,EAAQ2B,KAAMxE,EAAQgI,uBAAwB,EAK3D5H,EAAW2H,GAAclF,EAAQ2B,KAAMxE,EAAQI,QAAS,EACvD,SAAUW,EAAGC,GACZ,IAAIiH,EAAuB,IAAflH,EAAEnK,SAAiBmK,EAAEwF,gBAAkBxF,EAClDmH,EAAMlH,GAAKA,EAAE5H,WACd,OAAO2H,IAAMmH,GAAO,EAAIA,CAAAA,GAAwB,IAAjBA,EAAItR,UAAkB,EACpDqR,EAAM7H,SACL6H,EAAM7H,SAAU8H,CAAI,EACpBnH,EAAEiH,yBAA8D,GAAnCjH,EAAEiH,wBAAyBE,CAAI,GAE/D,EACA,SAAUnH,EAAGC,GACZ,GAAKA,EACJ,KAAUA,EAAIA,EAAE5H,YACf,GAAK4H,IAAMD,EACV,MAAO,CAAA,EAIV,MAAO,CAAA,CACR,EAMDD,EAAYiH,EACZ,SAAUhH,EAAGC,GAGZ,IAMImH,EANJ,OAAKpH,IAAMC,GACVjB,EAAe,CAAA,EACR,IAIJoI,EAAU,CAACpH,EAAEiH,wBAA0B,CAAChH,EAAEgH,2BAiB/B,GAPfG,GAAYpH,EAAEkD,eAAiBlD,KAASC,EAAEiD,eAAiBjD,GAC1DD,EAAEiH,wBAAyBhH,CAAE,EAG7B,IAIE,CAAC/I,EAAQmQ,cAAgBpH,EAAEgH,wBAAyBjH,CAAE,IAAMoH,EAOzDpH,GAAK3K,GAAY2K,EAAEkD,eAAiB3D,GACxCF,EAAUE,EAAcS,CAAE,EACnB,CAAC,EAOJC,GAAK5K,GAAY4K,EAAEiD,eAAiB3D,GACxCF,EAAUE,EAAcU,CAAE,EACnB,EAIDlB,EACJpI,EAASoI,EAAWiB,CAAE,EAAIrJ,EAASoI,EAAWkB,CAAE,EAClD,EAGe,EAAVmH,EAAc,CAAC,EAAI,EAC3B,EACA,SAAUpH,EAAGC,GAGZ,GAAKD,IAAMC,EAEV,OADAjB,EAAe,CAAA,EACR,EAGR,IAAI8F,EACHlN,EAAI,EACJ0P,EAAMtH,EAAE3H,WACR8O,EAAMlH,EAAE5H,WACRkP,EAAK,CAAEvH,GACPwH,EAAK,CAAEvH,GAGR,GAAMqH,CAAAA,GAAQH,CAAAA,EAMb,OAAOnH,GAAK3K,EAAW,CAAC,EACvB4K,GAAK5K,EAAW,EAEhBiS,EAAM,CAAC,EACPH,EAAM,EACNpI,EACEpI,EAASoI,EAAWiB,CAAE,EAAIrJ,EAASoI,EAAWkB,CAAE,EAClD,EAGK,GAAKqH,IAAQH,EACnB,OAAOtC,GAAc7E,EAAGC,CAAE,EAK3B,IADA6E,EAAM9E,EACI8E,EAAMA,EAAIzM,YACnBkP,EAAGE,QAAS3C,CAAI,EAGjB,IADAA,EAAM7E,EACI6E,EAAMA,EAAIzM,YACnBmP,EAAGC,QAAS3C,CAAI,EAIjB,KAAQyC,EAAI3P,KAAQ4P,EAAI5P,IACvBA,CAAC,GAGF,OAAOA,EAGNiN,GAAc0C,EAAI3P,GAAK4P,EAAI5P,EAAI,EAO/B2P,EAAI3P,IAAO2H,EAAe,CAAC,EAC3BiI,EAAI5P,IAAO2H,EAAe,EAE1B,CACF,GAEOlK,CACR,EAEAsI,EAAOlB,QAAU,SAAUiL,EAAMC,GAChC,OAAOhK,EAAQ+J,EAAM,KAAM,KAAMC,CAAS,CAC3C,EAEAhK,EAAO+I,gBAAkB,SAAU5M,EAAM4N,GAGxC,GAFAnJ,EAAazE,CAAK,EAEb5C,EAAQwP,iBAAmBxH,GAC/B,CAACY,EAAwB4H,EAAO,OAC9B,CAACtI,GAAiB,CAACA,EAAcqE,KAAMiE,CAAK,KAC5C,CAACvI,GAAiB,CAACA,EAAUsE,KAAMiE,CAAK,GAE1C,IACC,IAAIlO,EAAMiD,EAAQlG,KAAMuD,EAAM4N,CAAK,EAGnC,GAAKlO,GAAOtC,EAAQ6P,mBAInBjN,EAAKzE,UAAuC,KAA3ByE,EAAKzE,SAASQ,SAC/B,OAAO2D,CAIT,CAFE,MAAQiJ,GACT3C,EAAwB4H,EAAM,CAAA,CAAK,CACpC,CAGD,OAAyD,EAAlD/J,EAAQ+J,EAAMrS,EAAU,KAAM,CAAEyE,EAAO,EAAEf,MACjD,EAEA4E,EAAO0B,SAAW,SAAU1G,EAASmB,GAUpC,OAHOnB,EAAQuK,eAAiBvK,IAAatD,GAC5CkJ,EAAa5F,CAAQ,EAEf0G,EAAU1G,EAASmB,CAAK,CAChC,EAEA6D,EAAOiK,KAAO,SAAU9N,EAAMgB,IAOtBhB,EAAKoJ,eAAiBpJ,IAAUzE,GACtCkJ,EAAazE,CAAK,EAGnB,IAAIlB,EAAK4F,EAAKoG,WAAY9J,EAAKoC,YAAY,GAG1CrF,EAAMe,GAAM9B,EAAOP,KAAMiI,EAAKoG,WAAY9J,EAAKoC,YAAY,CAAE,EAC5DtE,EAAIkB,EAAMgB,EAAM,CAACoE,CAAe,EAChC3D,KAAAA,EAEF,OAAeA,KAAAA,IAAR1D,EACNA,EACAX,EAAQsJ,YAAc,CAACtB,EACtBpF,EAAK7B,aAAc6C,CAAK,GACtBjD,EAAMiC,EAAKuM,iBAAkBvL,CAAK,IAAOjD,EAAIgQ,UAC9ChQ,EAAI+E,MACJ,IACJ,EAEAe,EAAOE,OAAS,SAAUiK,GACzB,OAASA,EAAM,IAAKnM,QAASuG,GAAYhE,CAAW,CACrD,EAEAP,EAAO9B,MAAQ,SAAUC,GACxB,MAAM,IAAIvG,MAAO,0CAA4CuG,CAAI,CAClE,EAMA6B,EAAOoK,WAAa,SAAU1L,GAC7B,IAAIvC,EACHkO,EAAa,GACbxN,EAAI,EACJ5C,EAAI,EAOL,GAJAoH,EAAe,CAAC9H,EAAQ+Q,iBACxBlJ,EAAY,CAAC7H,EAAQgR,YAAc7L,EAAQjG,MAAO,CAAE,EACpDiG,EAAQ3B,KAAMqF,CAAU,EAEnBf,EAAe,CACnB,KAAUlF,EAAOuC,EAASzE,CAAC,KACrBkC,IAASuC,EAASzE,KACtB4C,EAAIwN,EAAWtR,KAAMkB,CAAE,GAGzB,KAAQ4C,CAAC,IACR6B,EAAQ1B,OAAQqN,EAAYxN,GAAK,CAAE,CAErC,CAMA,OAFAuE,EAAY,KAEL1C,CACR,EAMAoC,EAAUd,EAAOc,QAAU,SAAU3E,GACpC,IAAIpC,EACH8B,EAAM,GACN5B,EAAI,EACJ/B,EAAWiE,EAAKjE,SAEjB,GAAMA,GAQC,GAAkB,IAAbA,GAA+B,IAAbA,GAA+B,KAAbA,EAAkB,CAIjE,GAAiC,UAA5B,OAAOiE,EAAKqO,YAChB,OAAOrO,EAAKqO,YAIZ,IAAMrO,EAAOA,EAAKsO,WAAYtO,EAAMA,EAAOA,EAAK4D,YAC/ClE,GAAOiF,EAAS3E,CAAK,CAGxB,MAAO,GAAkB,IAAbjE,GAA+B,IAAbA,EAC7B,OAAOiE,EAAKuO,SACb,MApBC,KAAU3Q,EAAOoC,EAAMlC,CAAC,KAGvB4B,GAAOiF,EAAS/G,CAAK,EAqBvB,OAAO8B,CACR,GAEAgF,EAAOb,EAAO2K,UAAY,CAGzBlE,YAAa,GAEbmE,aAAcjE,EAEdxB,MAAO5B,EAEP0D,WAAY,GAEZwB,KAAM,GAENoC,SAAU,CACTC,IAAK,CAAEtL,IAAK,aAAcnD,MAAO,CAAA,CAAK,EACtC0O,IAAK,CAAEvL,IAAK,YAAa,EACzBwL,IAAK,CAAExL,IAAK,kBAAmBnD,MAAO,CAAA,CAAK,EAC3C4O,IAAK,CAAEzL,IAAK,iBAAkB,CAC/B,EAEA0L,UAAW,CACVvH,KAAQ,SAAUwB,GAWjB,OAVAA,EAAO,GAAMA,EAAO,GAAInH,QAASsG,EAAWrE,CAAU,EAGtDkF,EAAO,IAAQA,EAAO,IAAOA,EAAO,IACnCA,EAAO,IAAO,IAAKnH,QAASsG,EAAWrE,CAAU,EAE9B,OAAfkF,EAAO,KACXA,EAAO,GAAM,IAAMA,EAAO,GAAM,KAG1BA,EAAM1M,MAAO,EAAG,CAAE,CAC1B,EAEAoL,MAAS,SAAUsB,GAiClB,OArBAA,EAAO,GAAMA,EAAO,GAAI5F,YAAY,EAEF,QAA7B4F,EAAO,GAAI1M,MAAO,EAAG,CAAE,GAGrB0M,EAAO,IACZnF,EAAO9B,MAAOiH,EAAO,EAAI,EAK1BA,EAAO,GAAM,EAAGA,EAAO,GACtBA,EAAO,IAAQA,EAAO,IAAO,GAC7B,GAAqB,SAAfA,EAAO,IAAiC,QAAfA,EAAO,KACvCA,EAAO,GAAM,EAAKA,EAAO,GAAMA,EAAO,IAAwB,QAAfA,EAAO,KAG3CA,EAAO,IAClBnF,EAAO9B,MAAOiH,EAAO,EAAI,EAGnBA,CACR,EAEAvB,OAAU,SAAUuB,GACnB,IAAIgG,EACHC,EAAW,CAACjG,EAAO,IAAOA,EAAO,GAElC,OAAK5B,EAAmB,MAAEuC,KAAMX,EAAO,EAAI,EACnC,MAIHA,EAAO,GACXA,EAAO,GAAMA,EAAO,IAAOA,EAAO,IAAO,GAG9BiG,GAAY/H,GAAQyC,KAAMsF,CAAS,IAG5CD,GAAAA,EAASnK,EAAUoK,EAAU,CAAA,CAAK,IAGzBA,EAASpS,QAAS,IAAKoS,EAAShQ,OAAS+P,CAAO,EAAIC,EAAShQ,UAGxE+J,EAAO,GAAMA,EAAO,GAAI1M,MAAO,EAAG0S,CAAO,EACzChG,EAAO,GAAMiG,EAAS3S,MAAO,EAAG0S,CAAO,GAIjChG,EAAM1M,MAAO,EAAG,CAAE,EAC1B,CACD,EAEA8P,OAAQ,CAEP7E,IAAO,SAAU2H,GAChB,IAAI1G,EAAW0G,EAAiBrN,QAASsG,EAAWrE,CAAU,EAAEV,YAAY,EAC5E,MAA4B,MAArB8L,EACN,WACC,MAAO,CAAA,CACR,EACA,SAAUlP,GACT,OAAOA,EAAKwI,UAAYxI,EAAKwI,SAASpF,YAAY,IAAMoF,CACzD,CACF,EAEAlB,MAAS,SAAU0E,GAClB,IAAImD,EAAUvJ,EAAYoG,EAAY,KAEtC,OAAOmD,IACJA,EAAU,IAAItI,OAAQ,MAAQL,EAC/B,IAAMwF,EAAY,IAAMxF,EAAa,KAAM,IAAOZ,EACjDoG,EAAW,SAAUhM,GACpB,OAAOmP,EAAQxF,KACY,UAA1B,OAAO3J,EAAKgM,WAA0BhM,EAAKgM,WACd,KAAA,IAAtBhM,EAAK7B,cACX6B,EAAK7B,aAAc,OAAQ,GAC5B,EACD,CACH,CAAE,CACJ,EAEAqJ,KAAQ,SAAUxG,EAAMoO,EAAUC,GACjC,OAAO,SAAUrP,GACZsP,EAASzL,EAAOiK,KAAM9N,EAAMgB,CAAK,EAErC,OAAe,MAAVsO,EACgB,OAAbF,EAEFA,CAAAA,IAINE,GAAU,GAIU,MAAbF,EAAmBE,IAAWD,EACvB,OAAbD,EAAoBE,IAAWD,EAClB,OAAbD,EAAoBC,GAAqC,IAA5BC,EAAOzS,QAASwS,CAAM,EACtC,OAAbD,EAAoBC,GAAmC,CAAC,EAA3BC,EAAOzS,QAASwS,CAAM,EACtC,OAAbD,EAAoBC,GAASC,EAAOhT,MAAO,CAAC+S,EAAMpQ,MAAO,IAAMoQ,EAClD,OAAbD,EAA0F,CAAC,GAArE,IAAME,EAAOzN,QAAS+E,GAAa,GAAI,EAAI,KAAM/J,QAASwS,CAAM,EACzE,OAAbD,IAAoBE,IAAWD,GAASC,EAAOhT,MAAO,EAAG+S,EAAMpQ,OAAS,CAAE,IAAMoQ,EAAQ,KAI1F,CACD,EAEA3H,MAAS,SAAUpK,EAAMiS,EAAMC,EAAWtP,EAAOE,GAChD,IAAIqP,EAAgC,QAAvBnS,EAAKhB,MAAO,EAAG,CAAE,EAC7BoT,EAA+B,SAArBpS,EAAKhB,MAAO,CAAC,CAAE,EACzBqT,EAAkB,YAATJ,EAEV,OAAiB,IAAVrP,GAAwB,IAATE,EAGrB,SAAUJ,GACT,MAAO,CAAC,CAACA,EAAKzB,UACf,EAEA,SAAUyB,EAAM4P,EAAUC,GACzB,IAAIzF,EAAO0F,EAAaC,EAAYnS,EAAMoS,EAAWC,EACpD5M,EAAMoM,GAAWC,EAAU,cAAgB,kBAC3CQ,EAASlQ,EAAKzB,WACdyC,EAAO2O,GAAU3P,EAAKwI,SAASpF,YAAY,EAC3C+M,EAAW,CAACN,GAAO,CAACF,EACpB1E,EAAO,CAAA,EAER,GAAKiF,EAAS,CAGb,GAAKT,EAAS,CACb,KAAQpM,GAAM,CAEb,IADAzF,EAAOoC,EACGpC,EAAOA,EAAMyF,IACtB,GAAKsM,EACJ/R,EAAK4K,SAASpF,YAAY,IAAMpC,EACd,IAAlBpD,EAAK7B,SAEL,MAAO,CAAA,EAKTkU,EAAQ5M,EAAe,SAAT/F,GAAmB,CAAC2S,GAAS,aAC5C,CACA,MAAO,CAAA,CACR,CAKA,GAHAA,EAAQ,CAAEP,EAAUQ,EAAO5B,WAAa4B,EAAOE,WAG1CV,GAAWS,GAkBf,IAHAlF,GADA+E,GADA5F,GAHA0F,GAJAC,GADAnS,EAAOsS,GACYxO,KAAe9D,EAAM8D,GAAY,KAI1B9D,EAAKyS,YAC5BN,EAAYnS,EAAKyS,UAAa,KAEZ/S,IAAU,IACZ,KAAQoI,GAAW0E,EAAO,KACzBA,EAAO,GAC3BxM,EAAOoS,GAAaE,EAAOxH,WAAYsH,GAE7BpS,EAAO,EAAEoS,GAAapS,GAAQA,EAAMyF,KAG3C4H,EAAO+E,EAAY,EAAOC,EAAM7J,IAAI,IAGtC,GAAuB,IAAlBxI,EAAK7B,UAAkB,EAAEkP,GAAQrN,IAASoC,EAAO,CACrD8P,EAAaxS,GAAS,CAAEoI,EAASsK,EAAW/E,GAC5C,KACD,CACD,MAuBA,GAAc,CAAA,KALbA,EAbIkF,EAYJH,GADA5F,GAHA0F,GAJAC,GADAnS,EAAOoC,GACY0B,KAAe9D,EAAM8D,GAAY,KAI1B9D,EAAKyS,YAC5BN,EAAYnS,EAAKyS,UAAa,KAEZ/S,IAAU,IACZ,KAAQoI,GAAW0E,EAAO,GAMzCa,GAGJ,MAAUrN,EAAO,EAAEoS,GAAapS,GAAQA,EAAMyF,KAC3C4H,EAAO+E,EAAY,EAAOC,EAAM7J,IAAI,OAE/BuJ,EACN/R,EAAK4K,SAASpF,YAAY,IAAMpC,EACd,IAAlBpD,EAAK7B,WACL,CAAA,EAAEkP,IAGGkF,KAMJL,GALAC,EAAanS,EAAM8D,KAChB9D,EAAM8D,GAAY,KAIK9D,EAAKyS,YAC5BN,EAAYnS,EAAKyS,UAAa,KAEpB/S,GAAS,CAAEoI,EAASuF,IAG7BrN,IAASoC,MAUlB,OADAiL,GAAQ7K,KACQF,GAAW+K,EAAO/K,GAAU,GAAqB,GAAhB+K,EAAO/K,CACzD,CACD,CACF,EAEAuH,OAAU,SAAU6I,EAAQhF,GAM3B,IAAIiF,EACHzR,EAAK4F,EAAKiC,QAAS2J,IAAY5L,EAAK8L,WAAYF,EAAOlN,YAAY,IAClES,EAAO9B,MAAO,uBAAyBuO,CAAO,EAKhD,OAAKxR,EAAI4C,GACD5C,EAAIwM,CAAS,EAIJ,EAAZxM,EAAGG,QACPsR,EAAO,CAAED,EAAQA,EAAQ,GAAIhF,GACtB5G,EAAK8L,WAAWvT,eAAgBqT,EAAOlN,YAAY,CAAE,EAC3DoH,EAAc,SAAU3B,EAAMlG,GAI7B,IAHA,IAAI8N,EACHlN,EAAUzE,EAAI+J,EAAMyC,CAAS,EAC7BxN,EAAIyF,EAAQtE,OACLnB,CAAC,IAER+K,EADA4H,EAAM5T,EAASgM,EAAMtF,EAASzF,EAAI,GACpB,EAAG6E,EAAS8N,GAAQlN,EAASzF,GAE7C,CAAE,EACF,SAAUkC,GACT,OAAOlB,EAAIkB,EAAM,EAAGuQ,CAAK,CAC1B,GAGKzR,CACR,CACD,EAEA6H,QAAS,CAGR+J,IAAOlG,EAAc,SAAU5L,GAK9B,IAAI8N,EAAQ,GACXnK,EAAU,GACVoO,EAAU7L,EAASlG,EAASiD,QAASiF,EAAO,IAAK,CAAE,EAEpD,OAAO6J,EAASjP,GACf8I,EAAc,SAAU3B,EAAMlG,EAASiN,EAAUC,GAMhD,IALA,IAAI7P,EACH4Q,EAAYD,EAAS9H,EAAM,KAAMgH,EAAK,EAAG,EACzC/R,EAAI+K,EAAK5J,OAGFnB,CAAC,KACDkC,EAAO4Q,EAAW9S,MACxB+K,EAAM/K,GAAM,EAAG6E,EAAS7E,GAAMkC,GAGjC,CAAE,EACF,SAAUA,EAAM4P,EAAUC,GAMzB,OALAnD,EAAO,GAAM1M,EACb2Q,EAASjE,EAAO,KAAMmD,EAAKtN,CAAQ,EAGnCmK,EAAO,GAAM,KACN,CAACnK,EAAQ6D,IAAI,CACrB,CACF,CAAE,EAEFyK,IAAOrG,EAAc,SAAU5L,GAC9B,OAAO,SAAUoB,GAChB,OAAyC,EAAlC6D,EAAQjF,EAAUoB,CAAK,EAAEf,MACjC,CACD,CAAE,EAEFsG,SAAYiF,EAAc,SAAUtM,GAEnC,OADAA,EAAOA,EAAK2D,QAASsG,EAAWrE,CAAU,EACnC,SAAU9D,GAChB,MAAiE,CAAC,GAAzDA,EAAKqO,aAAe1J,EAAS3E,CAAK,GAAInD,QAASqB,CAAK,CAC9D,CACD,CAAE,EASF4S,KAAQtG,EAAc,SAAUsG,GAO/B,OAJM3J,GAAYwC,KAAMmH,GAAQ,EAAG,GAClCjN,EAAO9B,MAAO,qBAAuB+O,CAAK,EAE3CA,EAAOA,EAAKjP,QAASsG,EAAWrE,CAAU,EAAEV,YAAY,EACjD,SAAUpD,GAChB,IAAI+Q,EACJ,GACC,GAAOA,EAAW3L,EACjBpF,EAAK8Q,KACL9Q,EAAK7B,aAAc,UAAW,GAAK6B,EAAK7B,aAAc,MAAO,EAG7D,OADA4S,EAAWA,EAAS3N,YAAY,KACZ0N,GAA2C,IAAnCC,EAASlU,QAASiU,EAAO,GAAI,CAC1D,QACW9Q,EAAOA,EAAKzB,aAAkC,IAAlByB,EAAKjE,UAC7C,MAAO,CAAA,CACR,CACD,CAAE,EAGFqF,OAAU,SAAUpB,GACnB,IAAIgR,EAAOtV,EAAOuV,UAAYvV,EAAOuV,SAASD,KAC9C,OAAOA,GAAQA,EAAK1U,MAAO,CAAE,IAAM0D,EAAKuJ,EACzC,EAEA2H,KAAQ,SAAUlR,GACjB,OAAOA,IAASmF,CACjB,EAEAgM,MAAS,SAAUnR,GAClB,OAAOA,IAASzE,EAAS6V,gBACtB,CAAC7V,EAAS8V,UAAY9V,EAAS8V,SAAS,IAC1C,CAAC,EAAGrR,EAAK1C,MAAQ0C,EAAKsR,MAAQ,CAACtR,EAAKuR,SACtC,EAGAC,QAAWrG,GAAsB,CAAA,CAAM,EACvC5C,SAAY4C,GAAsB,CAAA,CAAK,EAEvCsG,QAAW,SAAUzR,GAIpB,IAAIwI,EAAWxI,EAAKwI,SAASpF,YAAY,EACzC,MAAsB,UAAboF,GAAwB,CAAC,CAACxI,EAAKyR,SACxB,WAAbjJ,GAAyB,CAAC,CAACxI,EAAK0R,QACpC,EAEAA,SAAY,SAAU1R,GASrB,OALKA,EAAKzB,YAETyB,EAAKzB,WAAWoT,cAGQ,CAAA,IAAlB3R,EAAK0R,QACb,EAGAE,MAAS,SAAU5R,GAMlB,IAAMA,EAAOA,EAAKsO,WAAYtO,EAAMA,EAAOA,EAAK4D,YAC/C,GAAK5D,EAAKjE,SAAW,EACpB,MAAO,CAAA,EAGT,MAAO,CAAA,CACR,EAEAmU,OAAU,SAAUlQ,GACnB,MAAO,CAAC0E,EAAKiC,QAAiB,MAAG3G,CAAK,CACvC,EAGA6R,OAAU,SAAU7R,GACnB,OAAO+H,GAAQ4B,KAAM3J,EAAKwI,QAAS,CACpC,EAEAkE,MAAS,SAAU1M,GAClB,OAAO8H,GAAQ6B,KAAM3J,EAAKwI,QAAS,CACpC,EAEAsJ,OAAU,SAAU9R,GACnB,IAAIgB,EAAOhB,EAAKwI,SAASpF,YAAY,EACrC,MAAgB,UAATpC,GAAkC,WAAdhB,EAAK1C,MAA8B,WAAT0D,CACtD,EAEA9C,KAAQ,SAAU8B,GAEjB,MAAuC,UAAhCA,EAAKwI,SAASpF,YAAY,GAClB,SAAdpD,EAAK1C,OAIuC,OAAxCwQ,EAAO9N,EAAK7B,aAAc,MAAO,IACb,SAAvB2P,EAAK1K,YAAY,EACpB,EAGAlD,MAASmL,EAAwB,WAChC,MAAO,CAAE,EACV,CAAE,EAEFjL,KAAQiL,EAAwB,SAAU0G,EAAe9S,GACxD,MAAO,CAAEA,EAAS,EACnB,CAAE,EAEFkB,GAAMkL,EAAwB,SAAU0G,EAAe9S,EAAQqM,GAC9D,MAAO,CAAEA,EAAW,EAAIA,EAAWrM,EAASqM,EAC7C,CAAE,EAEFjL,KAAQgL,EAAwB,SAAUE,EAActM,GAEvD,IADA,IAAInB,EAAI,EACAA,EAAImB,EAAQnB,GAAK,EACxByN,EAAa3O,KAAMkB,CAAE,EAEtB,OAAOyN,CACR,CAAE,EAEF/K,IAAO6K,EAAwB,SAAUE,EAActM,GAEtD,IADA,IAAInB,EAAI,EACAA,EAAImB,EAAQnB,GAAK,EACxByN,EAAa3O,KAAMkB,CAAE,EAEtB,OAAOyN,CACR,CAAE,EAEFyG,GAAM3G,EAAwB,SAAUE,EAActM,EAAQqM,GAM7D,IALA,IAAIxN,EAAIwN,EAAW,EAClBA,EAAWrM,EACAA,EAAXqM,EACCrM,EACAqM,EACa,GAAP,EAAExN,GACTyN,EAAa3O,KAAMkB,CAAE,EAEtB,OAAOyN,CACR,CAAE,EAEF0G,GAAM5G,EAAwB,SAAUE,EAActM,EAAQqM,GAE7D,IADA,IAAIxN,EAAIwN,EAAW,EAAIA,EAAWrM,EAASqM,EACnC,EAAExN,EAAImB,GACbsM,EAAa3O,KAAMkB,CAAE,EAEtB,OAAOyN,CACR,CAAE,CACH,CACD,GAEK5E,QAAe,IAAIjC,EAAKiC,QAAc,GAGhC,CAAEuL,MAAO,CAAA,EAAMC,SAAU,CAAA,EAAMC,KAAM,CAAA,EAAMC,SAAU,CAAA,EAAMC,MAAO,CAAA,CAAK,EACjF5N,EAAKiC,QAAS7I,GAzxCf,SAA4BR,GAC3B,OAAO,SAAU0C,GAEhB,MAAgB,UADLA,EAAKwI,SAASpF,YAAY,GACVpD,EAAK1C,OAASA,CAC1C,CACD,EAoxCwCQ,CAAE,EAE1C,IAAMA,IAAK,CAAEyU,OAAQ,CAAA,EAAMC,MAAO,CAAA,CAAK,EACtC9N,EAAKiC,QAAS7I,GAjxCf,SAA6BR,GAC5B,OAAO,SAAU0C,GAChB,IAAIgB,EAAOhB,EAAKwI,SAASpF,YAAY,EACrC,OAAkB,UAATpC,GAA6B,WAATA,IAAuBhB,EAAK1C,OAASA,CACnE,CACD,EA4wCyCQ,CAAE,EAI3C,SAAS0S,MA0ET,SAAS1G,EAAY2I,GAIpB,IAHA,IAAI3U,EAAI,EACP2C,EAAMgS,EAAOxT,OACbL,EAAW,GACJd,EAAI2C,EAAK3C,CAAC,GACjBc,GAAY6T,EAAQ3U,GAAIgF,MAEzB,OAAOlE,CACR,CAEA,SAAS0J,GAAeqI,EAAS+B,EAAYC,GAC5C,IAAItP,EAAMqP,EAAWrP,IACpBuP,EAAOF,EAAWjK,KAClB4B,EAAMuI,GAAQvP,EACdwP,EAAmBF,GAAgB,eAARtI,EAC3ByI,EAAWnN,CAAI,GAEhB,OAAO+M,EAAWxS,MAGjB,SAAUF,EAAMnB,EAASgR,GACxB,KAAU7P,EAAOA,EAAMqD,IACtB,GAAuB,IAAlBrD,EAAKjE,UAAkB8W,EAC3B,OAAOlC,EAAS3Q,EAAMnB,EAASgR,CAAI,EAGrC,MAAO,CAAA,CACR,EAGA,SAAU7P,EAAMnB,EAASgR,GACxB,IAAIkD,EAAuBhD,EAC1BiD,EAAW,CAAEtN,EAASoN,GAGvB,GAAKjD,GACJ,KAAU7P,EAAOA,EAAMqD,IACtB,IAAuB,IAAlBrD,EAAKjE,UAAkB8W,IACtBlC,EAAS3Q,EAAMnB,EAASgR,CAAI,EAChC,MAAO,CAAA,CAGV,MAEA,KAAU7P,EAAOA,EAAMqD,IACtB,GAAuB,IAAlBrD,EAAKjE,UAAkB8W,EAQ3B,GAHA/C,GAJAC,EAAa/P,EAAM0B,KAAe1B,EAAM0B,GAAY,KAI1B1B,EAAKqQ,YAC5BN,EAAY/P,EAAKqQ,UAAa,IAE5BuC,GAAQA,IAAS5S,EAAKwI,SAASpF,YAAY,EAC/CpD,EAAOA,EAAMqD,IAASrD,MAChB,CAAA,IAAO+S,EAAWjD,EAAazF,KACrC0I,EAAU,KAAQrN,GAAWqN,EAAU,KAAQD,EAG/C,OAASE,EAAU,GAAMD,EAAU,GAOnC,IAHAjD,EAAazF,GAAQ2I,GAGJ,GAAMrC,EAAS3Q,EAAMnB,EAASgR,CAAI,EAClD,MAAO,CAAA,CAET,CAIH,MAAO,CAAA,CACR,CACF,CAEA,SAASoD,GAAgBC,GACxB,OAAyB,EAAlBA,EAASjU,OACf,SAAUe,EAAMnB,EAASgR,GAExB,IADA,IAAI/R,EAAIoV,EAASjU,OACTnB,CAAC,IACR,GAAK,CAACoV,EAAUpV,GAAKkC,EAAMnB,EAASgR,CAAI,EACvC,MAAO,CAAA,EAGT,MAAO,CAAA,CACR,EACAqD,EAAU,EACZ,CAWA,SAASC,GAAUvC,EAAW7Q,EAAKqM,EAAQvN,EAASgR,GAOnD,IANA,IAAI7P,EACHoT,EAAe,GACftV,EAAI,EACJ2C,EAAMmQ,EAAU3R,OAChBoU,EAAgB,MAAPtT,EAEFjC,EAAI2C,EAAK3C,CAAC,GACZ,EAAEkC,EAAO4Q,EAAW9S,KAClBsO,GAAUA,CAAAA,EAAQpM,EAAMnB,EAASgR,CAAI,IAC1CuD,EAAaxW,KAAMoD,CAAK,EACnBqT,GACJtT,EAAInD,KAAMkB,CAAE,GAMhB,OAAOsV,CACR,CAEA,SAASE,GAAYvE,EAAWnQ,EAAU+R,EAAS4C,EAAYC,EAAYC,GAO1E,OANKF,GAAc,CAACA,EAAY7R,KAC/B6R,EAAaD,GAAYC,CAAW,GAEhCC,GAAc,CAACA,EAAY9R,KAC/B8R,EAAaF,GAAYE,EAAYC,CAAa,GAE5CjJ,EAAc,SAAU3B,EAAMtG,EAAS1D,EAASgR,GACtD,IAAI6D,EAAM5V,EAAGkC,EACZ2T,EAAS,GACTC,EAAU,GACVC,EAActR,EAAQtD,OAGtBQ,EAAQoJ,GA5CX,SAA2BjK,EAAUkV,EAAUvR,GAG9C,IAFA,IAAIzE,EAAI,EACP2C,EAAMqT,EAAS7U,OACRnB,EAAI2C,EAAK3C,CAAC,GACjB+F,EAAQjF,EAAUkV,EAAUhW,GAAKyE,CAAQ,EAE1C,OAAOA,CACR,EAsCI3D,GAAY,IACZC,EAAQ9C,SAAW,CAAE8C,GAAYA,EACjC,EACD,EAGAkV,EAAYhF,CAAAA,GAAelG,CAAAA,GAASjK,EAEnCa,EADA0T,GAAU1T,EAAOkU,EAAQ5E,EAAWlQ,EAASgR,CAAI,EAGlDmE,EAAarD,EAGZ6C,IAAgB3K,EAAOkG,EAAY8E,GAAeN,GAGjD,GAGAhR,EACDwR,EAQF,GALKpD,GACJA,EAASoD,EAAWC,EAAYnV,EAASgR,CAAI,EAIzC0D,EAMJ,IALAG,EAAOP,GAAUa,EAAYJ,CAAQ,EACrCL,EAAYG,EAAM,GAAI7U,EAASgR,CAAI,EAGnC/R,EAAI4V,EAAKzU,OACDnB,CAAC,KACDkC,EAAO0T,EAAM5V,MACnBkW,EAAYJ,EAAS9V,IAAQ,EAAGiW,EAAWH,EAAS9V,IAAQkC,IAK/D,GAAK6I,GACJ,GAAK2K,GAAczE,EAAY,CAC9B,GAAKyE,EAAa,CAKjB,IAFAE,EAAO,GACP5V,EAAIkW,EAAW/U,OACPnB,CAAC,KACDkC,EAAOgU,EAAYlW,KAGzB4V,EAAK9W,KAAQmX,EAAWjW,GAAMkC,CAAO,EAGvCwT,EAAY,KAAQQ,EAAa,GAAMN,EAAM7D,CAAI,CAClD,CAIA,IADA/R,EAAIkW,EAAW/U,OACPnB,CAAC,KACDkC,EAAOgU,EAAYlW,KACqC,CAAC,GAA7D4V,EAAOF,EAAa3W,EAASgM,EAAM7I,CAAK,EAAI2T,EAAQ7V,MAEtD+K,EAAM6K,GAAS,EAAGnR,EAASmR,GAAS1T,GAGvC,CAAA,MAIAgU,EAAab,GACZa,IAAezR,EACdyR,EAAWnT,OAAQgT,EAAaG,EAAW/U,MAAO,EAClD+U,CACF,EACKR,EACJA,EAAY,KAAMjR,EAASyR,EAAYnE,CAAI,EAE3CjT,EAAKD,MAAO4F,EAASyR,CAAW,CAGnC,CAAE,CACH,CAiEA,SAASC,GAA0BC,EAAiBC,GAGnC,SAAfC,EAAyBvL,EAAMhK,EAASgR,EAAKtN,EAAS8R,GACrD,IAAIrU,EAAMU,EAAGiQ,EACZ2D,EAAe,EACfxW,EAAI,IACJ8S,EAAY/H,GAAQ,GACpB0L,EAAa,GACbC,EAAgBxP,EAGhBvF,EAAQoJ,GAAQ4L,GAAa/P,EAAK4H,KAAY,IAAG,IAAK+H,CAAU,EAGhEK,EAAkBhP,GAA4B,MAAjB8O,EAAwB,EAAI7S,KAAKC,OAAO,GAAK,GAC1EnB,EAAMhB,EAAMR,OAcb,IAZKoV,IAMJrP,EAAmBnG,GAAWtD,GAAYsD,GAAWwV,GAM9CvW,IAAM2C,GAAgC,OAAvBT,EAAOP,EAAO3B,IAAeA,CAAC,GAAK,CACzD,GAAK2W,GAAazU,EAAO,CAWxB,IAVAU,EAAI,EAME7B,GAAWmB,EAAKoJ,eAAiB7N,IACtCkJ,EAAazE,CAAK,EAClB6P,EAAM,CAACzK,GAEEuL,EAAUuD,EAAiBxT,CAAC,KACrC,GAAKiQ,EAAS3Q,EAAMnB,GAAWtD,EAAUsU,CAAI,EAAI,CAChDtN,EAAQ3F,KAAMoD,CAAK,EACnB,KACD,CAEIqU,IACJ3O,EAAUgP,EAEZ,CAGKC,KAGG3U,EAAO,CAAC2Q,GAAW3Q,IACzBsU,CAAY,GAIRzL,IACJ+H,EAAUhU,KAAMoD,CAAK,CAGxB,CAaA,GATAsU,GAAgBxW,EASX6W,GAAS7W,IAAMwW,EAAe,CAElC,IADA5T,EAAI,EACMiQ,EAAUwD,EAAazT,CAAC,KACjCiQ,EAASC,EAAW2D,EAAY1V,EAASgR,CAAI,EAG9C,GAAKhH,EAAO,CAGX,GAAoB,EAAfyL,EACJ,KAAQxW,CAAC,IACA8S,EAAW9S,IAAOyW,EAAYzW,KACrCyW,EAAYzW,GAAMsI,EAAI3J,KAAM8F,CAAQ,GAMvCgS,EAAapB,GAAUoB,CAAW,CACnC,CAGA3X,EAAKD,MAAO4F,EAASgS,CAAW,EAG3BF,GAAa,CAACxL,GAA4B,EAApB0L,EAAWtV,QACG,EAAtCqV,EAAeH,EAAYlV,QAE7B4E,EAAOoK,WAAY1L,CAAQ,CAE7B,CAQA,OALK8R,IACJ3O,EAAUgP,EACV1P,EAAmBwP,GAGb5D,CACR,CArHD,IAAI+D,EAA6B,EAArBR,EAAYlV,OACvBwV,EAAqC,EAAzBP,EAAgBjV,OAsH7B,OAAO0V,EACNnK,EAAc4J,CAAa,EAC3BA,CACF,CAsLA,OAtpBA5D,GAAWtR,UAAYwF,EAAKkQ,QAAUlQ,EAAKiC,QAC3CjC,EAAK8L,WAAa,IAAIA,GAEtB3L,EAAWhB,EAAOgB,SAAW,SAAUjG,EAAUiW,GAChD,IAAItR,EAASyF,EAAOyJ,EAAQnV,EAC3BwX,EAAO7L,EAAQ8L,EACfC,EAASlP,EAAYlH,EAAW,KAEjC,GAAKoW,EACJ,OAAOH,EAAY,EAAIG,EAAO1Y,MAAO,CAAE,EAOxC,IAJAwY,EAAQlW,EACRqK,EAAS,GACT8L,EAAarQ,EAAKqK,UAEV+F,GAAQ,CA2Bf,IAAMxX,KAxBAiG,GAAW,EAAEyF,EAAQjC,GAAOsC,KAAMyL,CAAM,KACxC9L,IAGJ8L,EAAQA,EAAMxY,MAAO0M,EAAO,GAAI/J,MAAO,GAAK6V,GAE7C7L,EAAOrM,KAAQ6V,EAAS,EAAK,GAG9BlP,EAAU,CAAA,GAGHyF,EAAQhC,GAAaqC,KAAMyL,CAAM,KACvCvR,EAAUyF,EAAMuB,MAAM,EACtBkI,EAAO7V,KAAM,CACZkG,MAAOS,EAGPjG,KAAM0L,EAAO,GAAInH,QAASiF,EAAO,GAAI,CACtC,CAAE,EACFgO,EAAQA,EAAMxY,MAAOiH,EAAQtE,MAAO,GAIvByF,EAAK0H,OACb,EAAEpD,EAAQ5B,EAAW9J,GAAO+L,KAAMyL,CAAM,IAAUC,EAAYzX,IAClE,EAAE0L,EAAQ+L,EAAYzX,GAAQ0L,CAAM,KACpCzF,EAAUyF,EAAMuB,MAAM,EACtBkI,EAAO7V,KAAM,CACZkG,MAAOS,EACPjG,KAAMA,EACNqF,QAASqG,CACV,CAAE,EACF8L,EAAQA,EAAMxY,MAAOiH,EAAQtE,MAAO,GAItC,GAAK,CAACsE,EACL,KAEF,CAKA,OAAOsR,EACNC,EAAM7V,OACN6V,EACCjR,EAAO9B,MAAOnD,CAAS,EAGvBkH,EAAYlH,EAAUqK,CAAO,EAAE3M,MAAO,CAAE,CAC3C,EA2ZAwI,EAAUjB,EAAOiB,QAAU,SAAUlG,EAAUoK,GAC9C,IAAIlL,EACHqW,EAAc,GACdD,EAAkB,GAClBc,EAASjP,EAAenH,EAAW,KAEpC,GAAK,CAACoW,EAAS,CAOd,IADAlX,GAHMkL,EAAAA,GACGnE,EAAUjG,CAAS,GAElBK,OACFnB,CAAC,MACRkX,EA1MH,SAASC,EAAmBxC,GAyB3B,IAxBA,IAAIyC,EAAcvE,EAASjQ,EAC1BD,EAAMgS,EAAOxT,OACbkW,EAAkBzQ,EAAKgK,SAAU+D,EAAQ,GAAInV,MAC7C8X,EAAmBD,GAAmBzQ,EAAKgK,SAAU,KACrD5Q,EAAIqX,EAAkB,EAAI,EAG1BE,EAAe/M,GAAe,SAAUtI,GACvC,OAAOA,IAASkV,CACjB,EAAGE,EAAkB,CAAA,CAAK,EAC1BE,EAAkBhN,GAAe,SAAUtI,GAC1C,MAAuC,CAAC,EAAjCnD,EAASqY,EAAclV,CAAK,CACpC,EAAGoV,EAAkB,CAAA,CAAK,EAC1BlC,EAAW,CAAE,SAAUlT,EAAMnB,EAASgR,GAQrC,OAPInQ,EAAQ,CAACyV,IAAqBtF,GAAOhR,IAAYmG,MAClDkQ,EAAerW,GAAU9C,SAC1BsZ,EACAC,GADctV,EAAMnB,EAASgR,CAAI,EAInCqF,EAAe,KACRxV,CACR,GAEO5B,EAAI2C,EAAK3C,CAAC,GACjB,GAAO6S,EAAUjM,EAAKgK,SAAU+D,EAAQ3U,GAAIR,MAC3C4V,EAAW,CAAE5K,GAAe2K,GAAgBC,CAAS,EAAGvC,CAAQ,OAC1D,CAIN,IAHAA,EAAUjM,EAAK0H,OAAQqG,EAAQ3U,GAAIR,MAAOX,MAAO,KAAM8V,EAAQ3U,GAAI6E,OAAQ,GAG7DjB,GAAY,CAIzB,IADAhB,EAAI,EAAE5C,EACE4C,EAAID,GACNiE,CAAAA,EAAKgK,SAAU+D,EAAQ/R,GAAIpD,MADhBoD,CAAC,IAKlB,OAAO4S,GACF,EAAJxV,GAASmV,GAAgBC,CAAS,EAC9B,EAAJpV,GAASgM,EAGT2I,EACEnW,MAAO,EAAGwB,EAAI,CAAE,EAChBpB,OAAQ,CAAEoG,MAAgC,MAAzB2P,EAAQ3U,EAAI,GAAIR,KAAe,IAAM,EAAG,CAAE,CAC7D,EAAEuE,QAASiF,EAAO,IAAK,EACvB6J,EACA7S,EAAI4C,GAAKuU,EAAmBxC,EAAOnW,MAAOwB,EAAG4C,CAAE,CAAE,EACjDA,EAAID,GAAOwU,EAAqBxC,EAASA,EAAOnW,MAAOoE,CAAE,CAAI,EAC7DA,EAAID,GAAOqJ,EAAY2I,CAAO,CAC/B,CACD,CACAS,EAAStW,KAAM+T,CAAQ,CACxB,CAGD,OAAOsC,GAAgBC,CAAS,CACjC,EA6I+BlK,EAAOlL,EAAI,GAC1B4D,GACZyS,EAEAD,GAFYtX,KAAMoY,CAAO,GAO3BA,EAASjP,EACRnH,EACAqV,GAA0BC,EAAiBC,CAAY,CACxD,GAGOvV,SAAWA,CACnB,CACA,OAAOoW,CACR,EAWAjQ,EAASlB,EAAOkB,OAAS,SAAUnG,EAAUC,EAAS0D,EAASsG,GAC9D,IAAI/K,EAAG2U,EAAQ8C,EAAOjY,EAAMgP,EAC3BkJ,EAA+B,YAApB,OAAO5W,GAA2BA,EAC7CoK,EAAQ,CAACH,GAAQhE,EAAYjG,EAAW4W,EAAS5W,UAAYA,CAAW,EAMzE,GAJA2D,EAAUA,GAAW,GAIC,IAAjByG,EAAM/J,OAAe,CAIzB,GAAqB,GADrBwT,EAASzJ,EAAO,GAAMA,EAAO,GAAI1M,MAAO,CAAE,GAC9B2C,QAA+C,QAA/BsW,EAAQ9C,EAAQ,IAAMnV,MAC5B,IAArBuB,EAAQ9C,UAAkBqJ,GAAkBV,EAAKgK,SAAU+D,EAAQ,GAAInV,MAAS,CAIhF,GAAMuB,EAFNA,GAAY6F,EAAK4H,KAAW,GAAGiJ,EAAM5S,QAAS,GAC5Cd,QAASsG,EAAWrE,CAAU,EAAGjF,CAAQ,GAAK,IAAM,IAErD,OAAO0D,EAGIiT,IACX3W,EAAUA,EAAQN,YAGnBK,EAAWA,EAAStC,MAAOmW,EAAOlI,MAAM,EAAEzH,MAAM7D,MAAO,CACxD,CAIA,IADAnB,EAAIsJ,EAA0B,aAAEuC,KAAM/K,CAAS,EAAI,EAAI6T,EAAOxT,OACtDnB,CAAC,KACRyX,EAAQ9C,EAAQ3U,GAGX4G,CAAAA,EAAKgK,SAAYpR,EAAOiY,EAAMjY,QAGnC,IAAOgP,EAAO5H,EAAK4H,KAAMhP,MAGjBuL,EAAOyD,EACbiJ,EAAM5S,QAAS,GAAId,QAASsG,EAAWrE,CAAU,EACjDoE,GAASyB,KAAM8I,EAAQ,GAAInV,IAAK,GAAKsM,GAAa/K,EAAQN,UAAW,GACpEM,CACF,GAAM,CAKL,GAFA4T,EAAO5R,OAAQ/C,EAAG,CAAE,EACpBc,EAAWiK,EAAK5J,QAAU6K,EAAY2I,CAAO,EAM7C,MAHC,OADA7V,EAAKD,MAAO4F,EAASsG,CAAK,EACnBtG,CAIT,CAGH,CAWA,OAPEiT,GAAY1Q,EAASlG,EAAUoK,CAAM,GACtCH,EACAhK,EACA,CAACuG,EACD7C,EACA,CAAC1D,GAAWqJ,GAASyB,KAAM/K,CAAS,GAAKgL,GAAa/K,EAAQN,UAAW,GAAKM,CAC/E,EACO0D,CACR,EAKAnF,EAAQgR,WAAa1M,EAAQwB,MAAO,EAAG,EAAEtC,KAAMqF,CAAU,EAAE8D,KAAM,EAAG,IAAMrI,EAI1EtE,EAAQ+Q,iBAAmB,CAAC,CAACjJ,EAG7BT,EAAY,EAIZrH,EAAQmQ,aAAe9C,EAAQ,SAAUC,GAGxC,OAA4E,EAArEA,EAAGyC,wBAAyB5R,EAAS0C,cAAe,UAAW,CAAE,CACzE,CAAE,EAKIwM,EAAQ,SAAUC,GAEvB,OADAA,EAAGiC,UAAY,mBACiC,MAAzCjC,EAAG4D,WAAWnQ,aAAc,MAAO,CAC3C,CAAE,GACDwM,GAAW,yBAA0B,SAAU3K,EAAMgB,EAAM4D,GAC1D,GAAK,CAACA,EACL,OAAO5E,EAAK7B,aAAc6C,EAA6B,SAAvBA,EAAKoC,YAAY,EAAe,EAAI,CAAE,CAExE,CAAE,EAKGhG,EAAQsJ,YAAe+D,EAAQ,SAAUC,GAG9C,OAFAA,EAAGiC,UAAY,WACfjC,EAAG4D,WAAWlQ,aAAc,QAAS,EAAG,EACS,KAA1CsM,EAAG4D,WAAWnQ,aAAc,OAAQ,CAC5C,CAAE,GACDwM,GAAW,QAAS,SAAU3K,EAAMyV,EAAO7Q,GAC1C,GAAK,CAACA,GAAyC,UAAhC5E,EAAKwI,SAASpF,YAAY,EACxC,OAAOpD,EAAK0V,YAEd,CAAE,EAKGjL,EAAQ,SAAUC,GACvB,OAAwC,MAAjCA,EAAGvM,aAAc,UAAW,CACpC,CAAE,GACDwM,GAAWpE,EAAU,SAAUvG,EAAMgB,EAAM4D,GAE1C,GAAK,CAACA,EACL,MAAwB,CAAA,IAAjB5E,EAAMgB,GAAkBA,EAAKoC,YAAY,GAC7CrF,EAAMiC,EAAKuM,iBAAkBvL,CAAK,IAAOjD,EAAIgQ,UAC9ChQ,EAAI+E,MACJ,IAEJ,CAAE,EAGIe,CAEL,EAAGnI,CAAO,EA+CRia,GA3CJhX,EAAO2N,KAAOzI,EACdlF,EAAOiP,KAAO/J,EAAO2K,UAGrB7P,EAAOiP,KAAM,KAAQjP,EAAOiP,KAAKjH,QACjChI,EAAOsP,WAAatP,EAAOiX,OAAS/R,EAAOoK,WAC3CtP,EAAOT,KAAO2F,EAAOc,QACrBhG,EAAOkX,SAAWhS,EAAOe,MACzBjG,EAAO4G,SAAW1B,EAAO0B,SACzB5G,EAAOmX,eAAiBjS,EAAOE,OAkCXpF,EAAOiP,KAAK5E,MAAMpB,cAItC,SAASY,EAAUxI,EAAMgB,GAExB,OAAOhB,EAAKwI,UAAYxI,EAAKwI,SAASpF,YAAY,IAAMpC,EAAKoC,YAAY,CAE1E,CACA,IAAI2S,EAAa,kEAKjB,SAASC,EAAQnI,EAAUoI,EAAWvF,GACrC,OAAK7U,EAAYoa,CAAU,EACnBtX,EAAO2B,KAAMuN,EAAU,SAAU7N,EAAMlC,GAC7C,MAAO,CAAC,CAACmY,EAAUxZ,KAAMuD,EAAMlC,EAAGkC,CAAK,IAAM0Q,CAC9C,CAAE,EAIEuF,EAAUla,SACP4C,EAAO2B,KAAMuN,EAAU,SAAU7N,GACvC,OAASA,IAASiW,IAAgBvF,CACnC,CAAE,EAIuB,UAArB,OAAOuF,EACJtX,EAAO2B,KAAMuN,EAAU,SAAU7N,GACvC,MAA2C,CAAC,EAAnCnD,EAAQJ,KAAMwZ,EAAWjW,CAAK,IAAa0Q,CACrD,CAAE,EAII/R,EAAOyN,OAAQ6J,EAAWpI,EAAU6C,CAAI,CAChD,CAEA/R,EAAOyN,OAAS,SAAUwB,EAAMnO,EAAOiR,GACtC,IAAI1Q,EAAOP,EAAO,GAMlB,OAJKiR,IACJ9C,EAAO,QAAUA,EAAO,KAGH,IAAjBnO,EAAMR,QAAkC,IAAlBe,EAAKjE,SACxB4C,EAAO2N,KAAKM,gBAAiB5M,EAAM4N,CAAK,EAAI,CAAE5N,GAAS,GAGxDrB,EAAO2N,KAAK3J,QAASiL,EAAMjP,EAAO2B,KAAMb,EAAO,SAAUO,GAC/D,OAAyB,IAAlBA,EAAKjE,QACb,CAAE,CAAE,CACL,EAEA4C,EAAOG,GAAGgC,OAAQ,CACjBwL,KAAM,SAAU1N,GACf,IAAId,EAAG4B,EACNe,EAAM9E,KAAKsD,OACXiX,EAAOva,KAER,GAAyB,UAApB,OAAOiD,EACX,OAAOjD,KAAK6D,UAAWb,EAAQC,CAAS,EAAEwN,OAAQ,WACjD,IAAMtO,EAAI,EAAGA,EAAI2C,EAAK3C,CAAC,GACtB,GAAKa,EAAO4G,SAAU2Q,EAAMpY,GAAKnC,IAAK,EACrC,MAAO,CAAA,CAGV,CAAE,CAAE,EAKL,IAFA+D,EAAM/D,KAAK6D,UAAW,EAAG,EAEnB1B,EAAI,EAAGA,EAAI2C,EAAK3C,CAAC,GACtBa,EAAO2N,KAAM1N,EAAUsX,EAAMpY,GAAK4B,CAAI,EAGvC,OAAa,EAANe,EAAU9B,EAAOsP,WAAYvO,CAAI,EAAIA,CAC7C,EACA0M,OAAQ,SAAUxN,GACjB,OAAOjD,KAAK6D,UAAWwW,EAAQra,KAAMiD,GAAY,GAAI,CAAA,CAAM,CAAE,CAC9D,EACA8R,IAAK,SAAU9R,GACd,OAAOjD,KAAK6D,UAAWwW,EAAQra,KAAMiD,GAAY,GAAI,CAAA,CAAK,CAAE,CAC7D,EACA6E,GAAI,SAAU7E,GACb,MAAO,CAAC,CAACoX,EACRra,KAIoB,UAApB,OAAOiD,GAAyB+W,EAAchM,KAAM/K,CAAS,EAC5DD,EAAQC,CAAS,EACjBA,GAAY,GACb,CAAA,CACD,EAAEK,MACH,CACD,CAAE,EAOF,IAAIkX,EAMHlO,GAAa,sCA4GVmO,KA1GIzX,EAAOG,GAAGC,KAAO,SAAUH,EAAUC,EAASqS,GAIpD,GAAMtS,EAAN,CASA,GAHAsS,EAAOA,GAAQiF,EAGU,UAApB,OAAOvX,EAoEL,OAAKA,EAAS7C,UACpBJ,KAAM,GAAMiD,EACZjD,KAAKsD,OAAS,EACPtD,MAIIE,EAAY+C,CAAS,EACV6C,KAAAA,IAAfyP,EAAKmF,MACXnF,EAAKmF,MAAOzX,CAAS,EAGrBA,EAAUD,CAAO,EAGZA,EAAO2D,UAAW1D,EAAUjD,IAAK,EAtEvC,GAAKqN,EAPJA,EALsB,MAAlBpK,EAAU,IACsB,MAApCA,EAAUA,EAASK,OAAS,IACT,GAAnBL,EAASK,OAGD,CAAE,KAAML,EAAU,MAGlBqJ,GAAWoB,KAAMzK,CAAS,IAInBoK,CAAAA,EAAO,IAAQnK,EA6CxB,OAAK,CAACA,GAAWA,EAAQM,OACtBN,GAAWqS,EAKbvV,KAAKyD,YAAaP,CAAQ,GALNyN,KAAM1N,CAAS,EA3C1C,GAAKoK,EAAO,IAYX,GAXAnK,EAAUA,aAAmBF,EAASE,EAAS,GAAMA,EAIrDF,EAAOgB,MAAOhE,KAAMgD,EAAO2X,UAC1BtN,EAAO,GACPnK,GAAWA,EAAQ9C,SAAW8C,EAAQuK,eAAiBvK,EAAUtD,EACjE,CAAA,CACD,CAAE,EAGGwa,EAAWpM,KAAMX,EAAO,EAAI,GAAKrK,EAAO2C,cAAezC,CAAQ,EACnE,IAzCJ,IAAImK,KAyCenK,EAGThD,EAAYF,KAAMqN,EAAQ,EAC9BrN,KAAMqN,GAASnK,EAASmK,EAAQ,EAIhCrN,KAAKmS,KAAM9E,EAAOnK,EAASmK,EAAQ,CAGtC,MAMAhJ,EAAOzE,EAAS+N,eAAgBN,EAAO,EAAI,KAK1CrN,KAAM,GAAMqE,EACZrE,KAAKsD,OAAS,EA3DlB,CA6DG,OAAOtD,IA8BX,GAGIuD,UAAYP,EAAOG,GAGxBqX,EAAaxX,EAAQpD,CAAS,EAGX,kCAGlBgb,GAAmB,CAClBC,SAAU,CAAA,EACVC,SAAU,CAAA,EACVhO,KAAM,CAAA,EACNiO,KAAM,CAAA,CACP,EAmFD,SAASC,GAAS3L,EAAK3H,GACtB,MAAU2H,EAAMA,EAAK3H,KAA4B,IAAjB2H,EAAIjP,WACpC,OAAOiP,CACR,CApFArM,EAAOG,GAAGgC,OAAQ,CACjB+P,IAAK,SAAUzP,GACd,IAAIwV,EAAUjY,EAAQyC,EAAQzF,IAAK,EAClCkb,EAAID,EAAQ3X,OAEb,OAAOtD,KAAKyQ,OAAQ,WAEnB,IADA,IAAItO,EAAI,EACAA,EAAI+Y,EAAG/Y,CAAC,GACf,GAAKa,EAAO4G,SAAU5J,KAAMib,EAAS9Y,EAAI,EACxC,MAAO,CAAA,CAGV,CAAE,CACH,EAEAgZ,QAAS,SAAUtI,EAAW3P,GAC7B,IAAImM,EACHlN,EAAI,EACJ+Y,EAAIlb,KAAKsD,OACTsE,EAAU,GACVqT,EAA+B,UAArB,OAAOpI,GAA0B7P,EAAQ6P,CAAU,EAG9D,GAAK,CAACmH,EAAchM,KAAM6E,CAAU,EACnC,KAAQ1Q,EAAI+Y,EAAG/Y,CAAC,GACf,IAAMkN,EAAMrP,KAAMmC,GAAKkN,GAAOA,IAAQnM,EAASmM,EAAMA,EAAIzM,WAGxD,GAAKyM,EAAIjP,SAAW,KAAQ6a,EACJ,CAAC,EAAxBA,EAAQG,MAAO/L,CAAI,EAGF,IAAjBA,EAAIjP,UACH4C,EAAO2N,KAAKM,gBAAiB5B,EAAKwD,CAAU,GAAM,CAEnDjL,EAAQ3G,KAAMoO,CAAI,EAClB,KACD,CAKH,OAAOrP,KAAK6D,UAA4B,EAAjB+D,EAAQtE,OAAaN,EAAOsP,WAAY1K,CAAQ,EAAIA,CAAQ,CACpF,EAGAwT,MAAO,SAAU/W,GAGhB,OAAMA,EAKe,UAAhB,OAAOA,EACJnD,EAAQJ,KAAMkC,EAAQqB,CAAK,EAAGrE,KAAM,EAAI,EAIzCkB,EAAQJ,KAAMd,KAGpBqE,EAAKb,OAASa,EAAM,GAAMA,CAC3B,EAbUrE,KAAM,IAAOA,KAAM,GAAI4C,WAAe5C,KAAKuE,MAAM,EAAE8W,QAAQ,EAAE/X,OAAS,CAAC,CAclF,EAEAgY,IAAK,SAAUrY,EAAUC,GACxB,OAAOlD,KAAK6D,UACXb,EAAOsP,WACNtP,EAAOgB,MAAOhE,KAAK2D,IAAI,EAAGX,EAAQC,EAAUC,CAAQ,CAAE,CACvD,CACD,CACD,EAEAqY,QAAS,SAAUtY,GAClB,OAAOjD,KAAKsb,IAAiB,MAAZrY,EAChBjD,KAAKiE,WAAajE,KAAKiE,WAAWwM,OAAQxN,CAAS,CACpD,CACD,CACD,CAAE,EAOFD,EAAOkB,KAAM,CACZqQ,OAAQ,SAAUlQ,GACbkQ,EAASlQ,EAAKzB,WAClB,OAAO2R,GAA8B,KAApBA,EAAOnU,SAAkBmU,EAAS,IACpD,EACAiH,QAAS,SAAUnX,GAClB,OAAOqD,EAAKrD,EAAM,YAAa,CAChC,EACAoX,aAAc,SAAUpX,EAAMmD,EAAIG,GACjC,OAAOD,EAAKrD,EAAM,aAAcsD,CAAM,CACvC,EACAmF,KAAM,SAAUzI,GACf,OAAO2W,GAAS3W,EAAM,aAAc,CACrC,EACA0W,KAAM,SAAU1W,GACf,OAAO2W,GAAS3W,EAAM,iBAAkB,CACzC,EACAqX,QAAS,SAAUrX,GAClB,OAAOqD,EAAKrD,EAAM,aAAc,CACjC,EACAgX,QAAS,SAAUhX,GAClB,OAAOqD,EAAKrD,EAAM,iBAAkB,CACrC,EACAsX,UAAW,SAAUtX,EAAMmD,EAAIG,GAC9B,OAAOD,EAAKrD,EAAM,cAAesD,CAAM,CACxC,EACAiU,UAAW,SAAUvX,EAAMmD,EAAIG,GAC9B,OAAOD,EAAKrD,EAAM,kBAAmBsD,CAAM,CAC5C,EACAI,SAAU,SAAU1D,GACnB,OAAO0D,GAAY1D,EAAKzB,YAAc,IAAK+P,WAAYtO,CAAK,CAC7D,EACAwW,SAAU,SAAUxW,GACnB,OAAO0D,EAAU1D,EAAKsO,UAAW,CAClC,EACAmI,SAAU,SAAUzW,GACnB,OAA6B,MAAxBA,EAAKwX,iBAKTrb,EAAU6D,EAAKwX,eAAgB,EAExBxX,EAAKwX,iBAMRhP,EAAUxI,EAAM,UAAW,IAC/BA,EAAOA,EAAKyX,SAAWzX,GAGjBrB,EAAOgB,MAAO,GAAIK,EAAK0I,UAAW,EAC1C,CACD,EAAG,SAAU1H,EAAMlC,GAClBH,EAAOG,GAAIkC,GAAS,SAAUsC,EAAO1E,GACpC,IAAI2E,EAAU5E,EAAOoB,IAAKpE,KAAMmD,EAAIwE,CAAM,EAuB1C,OApBC1E,EADyB,UAArBoC,EAAK1E,MAAO,CAAC,CAAE,EACRgH,EAGP1E,IAAgC,UAApB,OAAOA,IACvB2E,EAAU5E,EAAOyN,OAAQxN,EAAU2E,CAAQ,GAGzB,EAAd5H,KAAKsD,SAGHsX,GAAkBvV,IACvBrC,EAAOsP,WAAY1K,CAAQ,EAIvB6S,GAAazM,KAAM3I,CAAK,IAC5BuC,EAAQmU,QAAQ,EAIX/b,KAAK6D,UAAW+D,CAAQ,CAChC,CACD,CAAE,EACF,IAAIoU,EAAgB,oBAsOpB,SAASC,EAAUC,GAClB,OAAOA,CACR,CACA,SAASC,GAASC,GACjB,MAAMA,CACP,CAEA,SAASC,GAAYlV,EAAOmV,EAASC,EAAQC,GAC5C,IAAIC,EAEJ,IAGMtV,GAASjH,EAAcuc,EAAStV,EAAMuV,OAAU,EACpDD,EAAO3b,KAAMqG,CAAM,EAAE6C,KAAMsS,CAAQ,EAAEK,KAAMJ,CAAO,EAGvCpV,GAASjH,EAAcuc,EAAStV,EAAMyV,IAAO,EACxDH,EAAO3b,KAAMqG,EAAOmV,EAASC,CAAO,EAQpCD,EAAQtb,MAAO8E,KAAAA,EAAW,CAAEqB,GAAQxG,MAAO6b,CAAQ,CAAE,CAWvD,CALE,MAAQrV,GAIToV,EAAOvb,MAAO8E,KAAAA,EAAW,CAAEqB,EAAQ,CACpC,CACD,CAzOAnE,EAAO6Z,UAAY,SAAUzX,GA9B7B,IAAwBA,EACnB0X,EAiCJ1X,EAA6B,UAAnB,OAAOA,GAlCMA,EAmCPA,EAlCZ0X,EAAS,GACb9Z,EAAOkB,KAAMkB,EAAQiI,MAAO2O,CAAc,GAAK,GAAI,SAAUe,EAAGC,GAC/DF,EAAQE,GAAS,CAAA,CAClB,CAAE,EACKF,GA+BN9Z,EAAOmC,OAAQ,GAAIC,CAAQ,EAwBpB,SAAP6X,IAQC,IALAC,EAASA,GAAU9X,EAAQ+X,KAI3BC,EAAQC,EAAS,CAAA,EACTC,EAAMha,OAAQia,EAAc,CAAC,EAEpC,IADAC,EAASF,EAAM1O,MAAM,EACb,EAAE2O,EAAc5S,EAAKrH,QAGmC,CAAA,IAA1DqH,EAAM4S,GAAcvc,MAAOwc,EAAQ,GAAKA,EAAQ,EAAI,GACxDpY,EAAQqY,cAGRF,EAAc5S,EAAKrH,OACnBka,EAAS,CAAA,GAMNpY,EAAQoY,SACbA,EAAS,CAAA,GAGVH,EAAS,CAAA,EAGJH,IAIHvS,EADI6S,EACG,GAIA,GAGV,CAhED,IACCH,EAGAG,EAGAJ,EAGAF,EAGAvS,EAAO,GAGP2S,EAAQ,GAGRC,EAAc,CAAC,EAgDfhD,EAAO,CAGNe,IAAK,WA2BJ,OA1BK3Q,IAGC6S,GAAU,CAACH,IACfE,EAAc5S,EAAKrH,OAAS,EAC5Bga,EAAMrc,KAAMuc,CAAO,GAGpB,SAAWlC,EAAK1G,GACf5R,EAAOkB,KAAM0Q,EAAM,SAAUmI,EAAG7V,GAC1BhH,EAAYgH,CAAI,EACd9B,EAAQ6U,QAAWM,EAAKrF,IAAKhO,CAAI,GACtCyD,EAAK1J,KAAMiG,CAAI,EAELA,GAAOA,EAAI5D,QAA4B,WAAlBR,EAAQoE,CAAI,GAG5CoU,EAAKpU,CAAI,CAEX,CAAE,CACD,EAAG5C,SAAU,EAEVkZ,IAAU,CAACH,GACfJ,EAAK,EAGAjd,IACR,EAGA0d,OAAQ,WAYP,OAXA1a,EAAOkB,KAAMI,UAAW,SAAUyY,EAAG7V,GAEpC,IADA,IAAIkU,EACqD,CAAC,GAAhDA,EAAQpY,EAAO6D,QAASK,EAAKyD,EAAMyQ,CAAM,IAClDzQ,EAAKzF,OAAQkW,EAAO,CAAE,EAGjBA,GAASmC,GACbA,CAAW,EAGd,CAAE,EACKvd,IACR,EAIAkV,IAAK,SAAU/R,GACd,OAAOA,EACuB,CAAC,EAA9BH,EAAO6D,QAAS1D,EAAIwH,CAAK,EACX,EAAdA,EAAKrH,MACP,EAGA2S,MAAO,WAIN,OAHKtL,EAAAA,GACG,GAED3K,IACR,EAKA2d,QAAS,WAGR,OAFAT,EAASI,EAAQ,GACjB3S,EAAO6S,EAAS,GACTxd,IACR,EACA4M,SAAU,WACT,MAAO,CAACjC,CACT,EAKAiT,KAAM,WAKL,OAJAV,EAASI,EAAQ,GACXE,GAAWH,IAChB1S,EAAO6S,EAAS,IAEVxd,IACR,EACAkd,OAAQ,WACP,MAAO,CAAC,CAACA,CACV,EAGAW,SAAU,SAAU3a,EAAS0R,GAS5B,OARMsI,IAELtI,EAAO,CAAE1R,GADT0R,EAAOA,GAAQ,IACQjU,MAAQiU,EAAKjU,MAAM,EAAIiU,GAC9C0I,EAAMrc,KAAM2T,CAAK,EACXyI,IACLJ,EAAK,EAGAjd,IACR,EAGAid,KAAM,WAEL,OADA1C,EAAKsD,SAAU7d,KAAMsE,SAAU,EACxBtE,IACR,EAGAod,MAAO,WACN,MAAO,CAAC,CAACA,CACV,CACD,EAED,OAAO7C,CACR,EA2CAvX,EAAOmC,OAAQ,CAEd2Y,SAAU,SAAUC,GACnB,IAAIC,EAAS,CAIX,CAAE,SAAU,WAAYhb,EAAO6Z,UAAW,QAAS,EAClD7Z,EAAO6Z,UAAW,QAAS,EAAG,GAC/B,CAAE,UAAW,OAAQ7Z,EAAO6Z,UAAW,aAAc,EACpD7Z,EAAO6Z,UAAW,aAAc,EAAG,EAAG,YACvC,CAAE,SAAU,OAAQ7Z,EAAO6Z,UAAW,aAAc,EACnD7Z,EAAO6Z,UAAW,aAAc,EAAG,EAAG,aAExCoB,EAAQ,UACRvB,EAAU,CACTuB,MAAO,WACN,OAAOA,CACR,EACAC,OAAQ,WAEP,OADAC,EAASnU,KAAM1F,SAAU,EAAEqY,KAAMrY,SAAU,EACpCtE,IACR,EACAoe,MAAS,SAAUjb,GAClB,OAAOuZ,EAAQE,KAAM,KAAMzZ,CAAG,CAC/B,EAGAkb,KAAM,WACL,IAAIC,EAAMha,UAEV,OAAOtB,EAAO8a,SAAU,SAAUS,GACjCvb,EAAOkB,KAAM8Z,EAAQ,SAAUxW,EAAIgX,GAGlC,IAAIrb,EAAKjD,EAAYoe,EAAKE,EAAO,GAAM,GAAKF,EAAKE,EAAO,IAKxDL,EAAUK,EAAO,IAAO,WACvB,IAAIC,EAAWtb,GAAMA,EAAGnC,MAAOhB,KAAMsE,SAAU,EAC1Cma,GAAYve,EAAYue,EAAS/B,OAAQ,EAC7C+B,EAAS/B,QAAQ,EACfgC,SAAUH,EAASI,MAAO,EAC1B3U,KAAMuU,EAASjC,OAAQ,EACvBK,KAAM4B,EAAShC,MAAO,EAExBgC,EAAUC,EAAO,GAAM,QACtBxe,KACAmD,EAAK,CAAEsb,GAAana,SACrB,CAEF,CAAE,CACH,CAAE,EACFga,EAAM,IACP,CAAE,EAAE5B,QAAQ,CACb,EACAE,KAAM,SAAUgC,EAAaC,EAAYC,GACxC,IAAIC,EAAW,EACf,SAASzC,EAAS0C,EAAOb,EAAUjP,EAAS+P,GAC3C,OAAO,WAGQ,SAAbC,IACC,IAAIT,EAAU7B,EAKd,GAAKoC,EAAAA,EAAQD,GAAb,CAQA,IAJAN,EAAWvP,EAAQlO,MAAOme,EAAMvK,CAAK,KAInBuJ,EAASzB,QAAQ,EAClC,MAAM,IAAI0C,UAAW,0BAA2B,EAOjDxC,EAAO6B,IAKgB,UAApB,OAAOA,GACY,YAApB,OAAOA,IACRA,EAAS7B,KAGL1c,EAAY0c,CAAK,EAGhBqC,EACJrC,EAAK9b,KACJ2d,EACAnC,EAASyC,EAAUZ,EAAUlC,EAAUgD,CAAQ,EAC/C3C,EAASyC,EAAUZ,EAAUhC,GAAS8C,CAAQ,CAC/C,GAMAF,CAAQ,GAERnC,EAAK9b,KACJ2d,EACAnC,EAASyC,EAAUZ,EAAUlC,EAAUgD,CAAQ,EAC/C3C,EAASyC,EAAUZ,EAAUhC,GAAS8C,CAAQ,EAC9C3C,EAASyC,EAAUZ,EAAUlC,EAC5BkC,EAASkB,UAAW,CACtB,IAQInQ,IAAY+M,IAChBkD,EAAOrZ,KAAAA,EACP8O,EAAO,CAAE6J,KAKRQ,GAAWd,EAASmB,aAAeH,EAAMvK,CAAK,EA7DjD,CA+DD,CAzED,IAAIuK,EAAOnf,KACV4U,EAAOtQ,UA2EPib,EAAUN,EACTC,EACA,WACC,IACCA,EAAW,CAsBZ,CArBE,MAAQlS,GAEJhK,EAAO8a,SAAS0B,eACpBxc,EAAO8a,SAAS0B,cAAexS,EAC9BuS,EAAQE,UAAW,EAMHV,GAAbC,EAAQ,IAIP9P,IAAYiN,KAChBgD,EAAOrZ,KAAAA,EACP8O,EAAO,CAAE5H,IAGVmR,EAASuB,WAAYP,EAAMvK,CAAK,EAElC,CACD,EAMGoK,EACJO,EAAQ,GAKHvc,EAAO8a,SAAS6B,eACpBJ,EAAQE,WAAazc,EAAO8a,SAAS6B,aAAa,GAEnD5f,EAAO6f,WAAYL,CAAQ,EAE7B,CACD,CAEA,OAAOvc,EAAO8a,SAAU,SAAUS,GAGjCP,EAAQ,GAAK,GAAI1C,IAChBgB,EACC,EACAiC,EACAre,EAAY4e,CAAW,EACtBA,EACA7C,EACDsC,EAASc,UACV,CACD,EAGArB,EAAQ,GAAK,GAAI1C,IAChBgB,EACC,EACAiC,EACAre,EAAY0e,CAAY,EACvBA,EACA3C,CACF,CACD,EAGA+B,EAAQ,GAAK,GAAI1C,IAChBgB,EACC,EACAiC,EACAre,EAAY2e,CAAW,EACtBA,EACA1C,EACF,CACD,CACD,CAAE,EAAEO,QAAQ,CACb,EAIAA,QAAS,SAAUvc,GAClB,OAAc,MAAPA,EAAc6C,EAAOmC,OAAQhF,EAAKuc,CAAQ,EAAIA,CACtD,CACD,EACAyB,EAAW,GAkEZ,OA/DAnb,EAAOkB,KAAM8Z,EAAQ,SAAU7b,EAAGqc,GACjC,IAAI7T,EAAO6T,EAAO,GACjBqB,EAAcrB,EAAO,GAKtB9B,EAAS8B,EAAO,IAAQ7T,EAAK2Q,IAGxBuE,GACJlV,EAAK2Q,IACJ,WAIC2C,EAAQ4B,CACT,EAIA7B,EAAQ,EAAI7b,GAAK,GAAIwb,QAIrBK,EAAQ,EAAI7b,GAAK,GAAIwb,QAGrBK,EAAQ,GAAK,GAAIJ,KAGjBI,EAAQ,GAAK,GAAIJ,IAClB,EAMDjT,EAAK2Q,IAAKkD,EAAO,GAAIvB,IAAK,EAK1BkB,EAAUK,EAAO,IAAQ,WAExB,OADAL,EAAUK,EAAO,GAAM,QAAUxe,OAASme,EAAWrY,KAAAA,EAAY9F,KAAMsE,SAAU,EAC1EtE,IACR,EAKAme,EAAUK,EAAO,GAAM,QAAW7T,EAAKkT,QACxC,CAAE,EAGFnB,EAAQA,QAASyB,CAAS,EAGrBJ,GACJA,EAAKjd,KAAMqd,EAAUA,CAAS,EAIxBA,CACR,EAGA2B,KAAM,SAAUC,GAiBD,SAAbC,EAAuB7d,GACtB,OAAO,SAAUgF,GAChB8Y,EAAiB9d,GAAMnC,KACvBkgB,EAAe/d,GAAyB,EAAnBmC,UAAUhB,OAAa3C,EAAMG,KAAMwD,SAAU,EAAI6C,EAChE,EAAIgZ,GACTC,EAAQd,YAAaW,EAAiBC,CAAc,CAEtD,CACD,CAxBD,IAGCC,EAAY7b,UAAUhB,OAGtBnB,EAAIge,EAGJF,EAAkBra,MAAOzD,CAAE,EAC3B+d,EAAgBvf,EAAMG,KAAMwD,SAAU,EAGtC8b,EAAUpd,EAAO8a,SAAS,EAc3B,GAAKqC,GAAa,IACjB9D,GAAY0D,EAAaK,EAAQpW,KAAMgW,EAAY7d,CAAE,CAAE,EAAEma,QAAS8D,EAAQ7D,OACzE,CAAC4D,CAAU,EAGa,YAApBC,EAAQnC,MAAM,GAClB/d,EAAYggB,EAAe/d,IAAO+d,EAAe/d,GAAIya,IAAK,GAE1D,OAAOwD,EAAQxD,KAAK,EAKtB,KAAQza,CAAC,IACRka,GAAY6D,EAAe/d,GAAK6d,EAAY7d,CAAE,EAAGie,EAAQ7D,MAAO,EAGjE,OAAO6D,EAAQ1D,QAAQ,CACxB,CACD,CAAE,EAKF,IAAI2D,GAAc,yDAwBdC,IAtBJtd,EAAO8a,SAAS0B,cAAgB,SAAUpZ,EAAOma,GAI3CxgB,EAAOygB,SAAWzgB,EAAOygB,QAAQC,MAAQra,GAASia,GAAYrS,KAAM5H,EAAMf,IAAK,GACnFtF,EAAOygB,QAAQC,KAAM,8BAAgCra,EAAMsa,QAASta,EAAMma,MAAOA,CAAM,CAEzF,EAKAvd,EAAO2d,eAAiB,SAAUva,GACjCrG,EAAO6f,WAAY,WAClB,MAAMxZ,CACP,CAAE,CACH,EAMgBpD,EAAO8a,SAAS,GAkDhC,SAAS8C,KACRhhB,EAASihB,oBAAqB,mBAAoBD,EAAU,EAC5D7gB,EAAO8gB,oBAAqB,OAAQD,EAAU,EAC9C5d,EAAO0X,MAAM,CACd,CApDA1X,EAAOG,GAAGuX,MAAQ,SAAUvX,GAY3B,OAVAmd,GACE1D,KAAMzZ,CAAG,EAKTib,MAAO,SAAUhY,GACjBpD,EAAO2d,eAAgBva,CAAM,CAC9B,CAAE,EAEIpG,IACR,EAEAgD,EAAOmC,OAAQ,CAGdgB,QAAS,CAAA,EAIT2a,UAAW,EAGXpG,MAAO,SAAUqG,IAGF,CAAA,IAATA,EAAgB,EAAE/d,EAAO8d,UAAY9d,EAAOmD,WAKjDnD,EAAOmD,QAAU,CAAA,KAGZ4a,GAAsC,EAArB,EAAE/d,EAAO8d,WAK/BR,GAAUhB,YAAa1f,EAAU,CAAEoD,EAAS,CAC7C,CACD,CAAE,EAEFA,EAAO0X,MAAMkC,KAAO0D,GAAU1D,KAaD,aAAxBhd,EAASohB,YACa,YAAxBphB,EAASohB,YAA4B,CAACphB,EAASmQ,gBAAgBkR,SAGjElhB,EAAO6f,WAAY5c,EAAO0X,KAAM,GAKhC9a,EAASuQ,iBAAkB,mBAAoByQ,EAAU,EAGzD7gB,EAAOoQ,iBAAkB,OAAQyQ,EAAU,GAQ/B,SAATM,EAAmBpd,EAAOX,EAAIuL,EAAKvH,EAAOga,EAAWC,EAAUC,GAClE,IAAIlf,EAAI,EACP2C,EAAMhB,EAAMR,OACZge,EAAc,MAAP5S,EAGR,GAAuB,WAAlB5L,EAAQ4L,CAAI,EAEhB,IAAMvM,KADNgf,EAAY,CAAA,EACDzS,EACVwS,EAAQpd,EAAOX,EAAIhB,EAAGuM,EAAKvM,GAAK,CAAA,EAAMif,EAAUC,CAAI,OAI/C,GAAevb,KAAAA,IAAVqB,IACXga,EAAY,CAAA,EAENjhB,EAAYiH,CAAM,IACvBka,EAAM,CAAA,GAQLle,EALGme,EAGCD,GACJle,EAAGrC,KAAMgD,EAAOqD,CAAM,EACjB,OAILma,EAAOne,EACF,SAAUkB,EAAMkd,EAAMpa,GAC1B,OAAOma,EAAKxgB,KAAMkC,EAAQqB,CAAK,EAAG8C,CAAM,CACzC,GAIGhE,GACJ,KAAQhB,EAAI2C,EAAK3C,CAAC,GACjBgB,EACCW,EAAO3B,GAAKuM,EAAK2S,EAChBla,EACAA,EAAMrG,KAAMgD,EAAO3B,GAAKA,EAAGgB,EAAIW,EAAO3B,GAAKuM,CAAI,CAAE,CACnD,EAKH,OAAKyS,EACGrd,EAIHwd,EACGne,EAAGrC,KAAMgD,CAAM,EAGhBgB,EAAM3B,EAAIW,EAAO,GAAK4K,CAAI,EAAI0S,CACtC,CAzDA,IA6DII,GAAY,QACfC,GAAa,YAGd,SAASC,GAAYC,EAAMC,GAC1B,OAAOA,EAAOC,YAAY,CAC3B,CAKA,SAASC,EAAWC,GACnB,OAAOA,EAAO7b,QAASsb,GAAW,KAAM,EAAEtb,QAASub,GAAYC,EAAW,CAC3E,CACiB,SAAbM,EAAuBC,GAQ1B,OAA0B,IAAnBA,EAAM7hB,UAAqC,IAAnB6hB,EAAM7hB,UAAkB,CAAC,CAAG6hB,EAAM7hB,QAClE,CAKA,SAAS8hB,KACRliB,KAAK+F,QAAU/C,EAAO+C,QAAUmc,GAAKC,GAAG,EACzC,CAEAD,GAAKC,IAAM,EAEXD,GAAK3e,UAAY,CAEhBkL,MAAO,SAAUwT,GAGhB,IAAI9a,EAAQ8a,EAAOjiB,KAAK+F,SA4BxB,OAzBMoB,IACLA,EAAQ,GAKH6a,EAAYC,CAAM,IAIjBA,EAAM7hB,SACV6hB,EAAOjiB,KAAK+F,SAAYoB,EAMxB1G,OAAO2hB,eAAgBH,EAAOjiB,KAAK+F,QAAS,CAC3CoB,MAAOA,EACPkb,aAAc,CAAA,CACf,CAAE,IAKElb,CACR,EACAmb,IAAK,SAAUL,EAAOM,EAAMpb,GAC3B,IAAIqb,EACH/T,EAAQzO,KAAKyO,MAAOwT,CAAM,EAI3B,GAAqB,UAAhB,OAAOM,EACX9T,EAAOqT,EAAWS,CAAK,GAAMpb,OAM7B,IAAMqb,KAAQD,EACb9T,EAAOqT,EAAWU,CAAK,GAAMD,EAAMC,GAGrC,OAAO/T,CACR,EACA9K,IAAK,SAAUse,EAAOvT,GACrB,OAAe5I,KAAAA,IAAR4I,EACN1O,KAAKyO,MAAOwT,CAAM,EAGlBA,EAAOjiB,KAAK+F,UAAakc,EAAOjiB,KAAK+F,SAAW+b,EAAWpT,CAAI,EACjE,EACAwS,OAAQ,SAAUe,EAAOvT,EAAKvH,GAa7B,OAAarB,KAAAA,IAAR4I,GACCA,GAAsB,UAAf,OAAOA,GAAgC5I,KAAAA,IAAVqB,EAElCnH,KAAK2D,IAAKse,EAAOvT,CAAI,GAS7B1O,KAAKsiB,IAAKL,EAAOvT,EAAKvH,CAAM,EAIXrB,KAAAA,IAAVqB,EAAsBA,EAAQuH,EACtC,EACAgP,OAAQ,SAAUuE,EAAOvT,GACxB,IAAIvM,EACHsM,EAAQwT,EAAOjiB,KAAK+F,SAErB,GAAeD,KAAAA,IAAV2I,EAAL,CAIA,GAAa3I,KAAAA,IAAR4I,EAAoB,CAkBxBvM,GAXCuM,EAJI9I,MAAMC,QAAS6I,CAAI,EAIjBA,EAAItK,IAAK0d,CAAU,GAEzBpT,EAAMoT,EAAWpT,CAAI,KAIRD,EACZ,CAAEC,GACAA,EAAIrB,MAAO2O,CAAc,GAAK,IAG1B1Y,OAER,KAAQnB,CAAC,IACR,OAAOsM,EAAOC,EAAKvM,GAErB,CAGa2D,KAAAA,IAAR4I,GAAqB1L,CAAAA,EAAOyD,cAAegI,CAAM,IAMhDwT,EAAM7hB,SACV6hB,EAAOjiB,KAAK+F,SAAYD,KAAAA,EAExB,OAAOmc,EAAOjiB,KAAK+F,SArCrB,CAwCD,EACA0c,QAAS,SAAUR,GACdxT,EAAQwT,EAAOjiB,KAAK+F,SACxB,OAAiBD,KAAAA,IAAV2I,GAAuB,CAACzL,EAAOyD,cAAegI,CAAM,CAC5D,CACD,EACA,IAAIiU,EAAW,IAAIR,GAEfS,EAAW,IAAIT,GAcfU,GAAS,gCACZC,GAAa,SA2Bd,SAASC,GAAUze,EAAMqK,EAAK6T,GAC7B,IAAIld,EA1Bakd,EA8BjB,GAAczc,KAAAA,IAATyc,GAAwC,IAAlBle,EAAKjE,SAI/B,GAHAiF,EAAO,QAAUqJ,EAAIxI,QAAS2c,GAAY,KAAM,EAAEpb,YAAY,EAGzC,UAAhB,OAFL8a,EAAOle,EAAK7B,aAAc6C,CAAK,GAEC,CAC/B,IACCkd,EAnCW,UADGA,EAoCEA,IA/BL,UAATA,IAIS,SAATA,EACG,KAIHA,IAAS,CAACA,EAAO,GACd,CAACA,EAGJK,GAAO5U,KAAMuU,CAAK,EACfQ,KAAKC,MAAOT,CAAK,EAGlBA,EAeU,CAAb,MAAQvV,IAGV2V,EAASL,IAAKje,EAAMqK,EAAK6T,CAAK,CAC/B,MACCA,EAAOzc,KAAAA,EAGT,OAAOyc,CACR,CAEAvf,EAAOmC,OAAQ,CACdsd,QAAS,SAAUpe,GAClB,OAAOse,EAASF,QAASpe,CAAK,GAAKqe,EAASD,QAASpe,CAAK,CAC3D,EAEAke,KAAM,SAAUle,EAAMgB,EAAMkd,GAC3B,OAAOI,EAASzB,OAAQ7c,EAAMgB,EAAMkd,CAAK,CAC1C,EAEAU,WAAY,SAAU5e,EAAMgB,GAC3Bsd,EAASjF,OAAQrZ,EAAMgB,CAAK,CAC7B,EAIA6d,MAAO,SAAU7e,EAAMgB,EAAMkd,GAC5B,OAAOG,EAASxB,OAAQ7c,EAAMgB,EAAMkd,CAAK,CAC1C,EAEAY,YAAa,SAAU9e,EAAMgB,GAC5Bqd,EAAShF,OAAQrZ,EAAMgB,CAAK,CAC7B,CACD,CAAE,EAEFrC,EAAOG,GAAGgC,OAAQ,CACjBod,KAAM,SAAU7T,EAAKvH,GACpB,IAAIhF,EAAGkD,EAAMkd,EACZle,EAAOrE,KAAM,GACbiP,EAAQ5K,GAAQA,EAAK0G,WAGtB,GAAajF,KAAAA,IAAR4I,EA0BL,MAAoB,UAAf,OAAOA,EACJ1O,KAAKkE,KAAM,WACjBye,EAASL,IAAKtiB,KAAM0O,CAAI,CACzB,CAAE,EAGIwS,EAAQlhB,KAAM,SAAUmH,GAC9B,IAAIob,EAOJ,GAAKle,GAAkByB,KAAAA,IAAVqB,EAKZ,OAAcrB,KAAAA,KADdyc,EAAOI,EAAShf,IAAKU,EAAMqK,CAAI,IAQjB5I,KAAAA,KADdyc,EAAOO,GAAUze,EAAMqK,CAAI,GAEnB6T,EAIR,KAAA,EAIDviB,KAAKkE,KAAM,WAGVye,EAASL,IAAKtiB,KAAM0O,EAAKvH,CAAM,CAChC,CAAE,CACH,EAAG,KAAMA,EAA0B,EAAnB7C,UAAUhB,OAAY,KAAM,CAAA,CAAK,EAjEhD,GAAKtD,KAAKsD,SACTif,EAAOI,EAAShf,IAAKU,CAAK,EAEH,IAAlBA,EAAKjE,WAAkB,CAACsiB,EAAS/e,IAAKU,EAAM,cAAe,EAAI,CAEnE,IADAlC,EAAI8M,EAAM3L,OACFnB,CAAC,IAIH8M,EAAO9M,IAEsB,KADjCkD,EAAO4J,EAAO9M,GAAIkD,MACRnE,QAAS,OAAQ,IAC1BmE,EAAOyc,EAAWzc,EAAK1E,MAAO,CAAE,CAAE,EAClCmiB,GAAUze,EAAMgB,EAAMkd,EAAMld,EAAO,GAItCqd,EAASJ,IAAKje,EAAM,eAAgB,CAAA,CAAK,CAC1C,CAGD,OAAOke,CA6CT,EAEAU,WAAY,SAAUvU,GACrB,OAAO1O,KAAKkE,KAAM,WACjBye,EAASjF,OAAQ1d,KAAM0O,CAAI,CAC5B,CAAE,CACH,CACD,CAAE,EAGF1L,EAAOmC,OAAQ,CACdmY,MAAO,SAAUjZ,EAAM1C,EAAM4gB,GAC5B,IAAIjF,EAEJ,GAAKjZ,EAYJ,OAVAiZ,EAAQoF,EAAS/e,IAAKU,EADtB1C,GAASA,GAAQ,MAAS,OACO,EAG5B4gB,IACC,CAACjF,GAAS1X,MAAMC,QAAS0c,CAAK,EAClCjF,EAAQoF,EAASxB,OAAQ7c,EAAM1C,EAAMqB,EAAO2D,UAAW4b,CAAK,CAAE,EAE9DjF,EAAMrc,KAAMshB,CAAK,GAGZjF,GAAS,EAElB,EAEA8F,QAAS,SAAU/e,EAAM1C,GACxBA,EAAOA,GAAQ,KAEf,IAAI2b,EAAQta,EAAOsa,MAAOjZ,EAAM1C,CAAK,EACpC0hB,EAAc/F,EAAMha,OACpBH,EAAKma,EAAM1O,MAAM,EACjB0U,EAAQtgB,EAAOugB,YAAalf,EAAM1C,CAAK,EAM5B,eAAPwB,IACJA,EAAKma,EAAM1O,MAAM,EACjByU,CAAW,IAGPlgB,IAIU,OAATxB,GACJ2b,EAAMtL,QAAS,YAAa,EAI7B,OAAOsR,EAAME,KACbrgB,EAAGrC,KAAMuD,EApBF,WACNrB,EAAOogB,QAAS/e,EAAM1C,CAAK,CAC5B,EAkBqB2hB,CAAM,GAGvB,CAACD,GAAeC,GACpBA,EAAMrN,MAAMgH,KAAK,CAEnB,EAGAsG,YAAa,SAAUlf,EAAM1C,GAC5B,IAAI+M,EAAM/M,EAAO,aACjB,OAAO+gB,EAAS/e,IAAKU,EAAMqK,CAAI,GAAKgU,EAASxB,OAAQ7c,EAAMqK,EAAK,CAC/DuH,MAAOjT,EAAO6Z,UAAW,aAAc,EAAEvB,IAAK,WAC7CoH,EAAShF,OAAQrZ,EAAM,CAAE1C,EAAO,QAAS+M,EAAM,CAChD,CAAE,CACH,CAAE,CACH,CACD,CAAE,EAEF1L,EAAOG,GAAGgC,OAAQ,CACjBmY,MAAO,SAAU3b,EAAM4gB,GACtB,IAAIkB,EAAS,EAQb,MANqB,UAAhB,OAAO9hB,IACX4gB,EAAO5gB,EACPA,EAAO,KACP8hB,CAAM,IAGFnf,UAAUhB,OAASmgB,EAChBzgB,EAAOsa,MAAOtd,KAAM,GAAK2B,CAAK,EAGtBmE,KAAAA,IAATyc,EACNviB,KACAA,KAAKkE,KAAM,WACV,IAAIoZ,EAAQta,EAAOsa,MAAOtd,KAAM2B,EAAM4gB,CAAK,EAG3Cvf,EAAOugB,YAAavjB,KAAM2B,CAAK,EAEjB,OAATA,GAAgC,eAAf2b,EAAO,IAC5Bta,EAAOogB,QAASpjB,KAAM2B,CAAK,CAE7B,CAAE,CACJ,EACAyhB,QAAS,SAAUzhB,GAClB,OAAO3B,KAAKkE,KAAM,WACjBlB,EAAOogB,QAASpjB,KAAM2B,CAAK,CAC5B,CAAE,CACH,EACA+hB,WAAY,SAAU/hB,GACrB,OAAO3B,KAAKsd,MAAO3b,GAAQ,KAAM,EAAG,CACrC,EAIA+a,QAAS,SAAU/a,EAAMxB,GAMb,SAAVmc,IACO,EAAIqH,GACTC,EAAMtE,YAAapN,EAAU,CAAEA,EAAW,CAE5C,CATD,IAAIpB,EACH6S,EAAQ,EACRC,EAAQ5gB,EAAO8a,SAAS,EACxB5L,EAAWlS,KACXmC,EAAInC,KAAKsD,OAaV,IANqB,UAAhB,OAAO3B,IACXxB,EAAMwB,EACNA,EAAOmE,KAAAA,GAERnE,EAAOA,GAAQ,KAEPQ,CAAC,KACR2O,EAAM4R,EAAS/e,IAAKuO,EAAU/P,GAAKR,EAAO,YAAa,IAC3CmP,EAAImF,QACf0N,CAAK,GACL7S,EAAImF,MAAMqF,IAAKgB,CAAQ,GAIzB,OADAA,EAAQ,EACDsH,EAAMlH,QAASvc,CAAI,CAC3B,CACD,CAAE,EA4BuB,SAArB0jB,GAA+Bxf,EAAM0K,GAOvC,MAA8B,UAH9B1K,EAAO0K,GAAM1K,GAGDyf,MAAMC,SACM,KAAvB1f,EAAKyf,MAAMC,SAMXC,EAAY3f,CAAK,GAEiB,SAAlCrB,EAAOihB,IAAK5f,EAAM,SAAU,CAC9B,CA5CD,IAAI6f,EAAO,sCAA0CC,OAEjDC,GAAU,IAAIlZ,OAAQ,iBAAmBgZ,EAAO,cAAe,GAAI,EAGnEG,EAAY,CAAE,MAAO,QAAS,SAAU,QAExCtU,EAAkBnQ,EAASmQ,gBAI1BiU,EAAa,SAAU3f,GACzB,OAAOrB,EAAO4G,SAAUvF,EAAKoJ,cAAepJ,CAAK,CAClD,EACAigB,GAAW,CAAEA,SAAU,CAAA,CAAK,EAOxBvU,EAAgBwU,cACpBP,EAAa,SAAU3f,GACtB,OAAOrB,EAAO4G,SAAUvF,EAAKoJ,cAAepJ,CAAK,GAChDA,EAAKkgB,YAAaD,EAAS,IAAMjgB,EAAKoJ,aACxC,GAuBF,SAAS+W,GAAWngB,EAAMme,EAAMiC,EAAYC,GAC3C,IAAIC,EAAUC,EACbC,EAAgB,GAChBC,EAAeJ,EACd,WACC,OAAOA,EAAMrV,IAAI,CAClB,EACA,WACC,OAAOrM,EAAOihB,IAAK5f,EAAMme,EAAM,EAAG,CACnC,EACDuC,EAAUD,EAAa,EACvBE,EAAOP,GAAcA,EAAY,KAASzhB,EAAOiiB,UAAWzC,GAAS,GAAK,MAG1E0C,EAAgB7gB,EAAKjE,WAClB4C,EAAOiiB,UAAWzC,IAAmB,OAATwC,GAAiB,CAACD,IAChDX,GAAQ1W,KAAM1K,EAAOihB,IAAK5f,EAAMme,CAAK,CAAE,EAEzC,GAAK0C,GAAiBA,EAAe,KAAQF,EAAO,CAYnD,IALAA,EAAOA,GAAQE,EAAe,GAG9BA,EAAgB,EANhBH,GAAoB,IAMQ,EAEpBF,CAAa,IAIpB7hB,EAAO8gB,MAAOzf,EAAMme,EAAM0C,EAAgBF,CAAK,GACxC,EAAIJ,IAAY,GAAMA,EAAQE,EAAa,EAAIC,GAAW,MAAW,IAC3EF,EAAgB,GAEjBK,GAAgCN,EAKjC5hB,EAAO8gB,MAAOzf,EAAMme,GADpB0C,GAAgC,GACUF,CAAK,EAG/CP,EAAaA,GAAc,EAC5B,CAeA,OAbKA,IACJS,EAAgB,CAACA,GAAiB,CAACH,GAAW,EAG9CJ,EAAWF,EAAY,GACtBS,GAAkBT,EAAY,GAAM,GAAMA,EAAY,GACtD,CAACA,EAAY,GACTC,KACJA,EAAMM,KAAOA,EACbN,EAAMpQ,MAAQ4Q,EACdR,EAAM1f,IAAM2f,GAGPA,CACR,CAGA,IAAIQ,GAAoB,GAyBxB,SAASC,EAAUlT,EAAUmT,GAO5B,IANA,IAAItB,EAAS1f,EAxBcA,EAE1BnC,EAEA6hB,EAqBAuB,EAAS,GACTlK,EAAQ,EACR9X,EAAS4O,EAAS5O,OAGX8X,EAAQ9X,EAAQ8X,CAAK,IAC5B/W,EAAO6N,EAAUkJ,IACN0I,QAIXC,EAAU1f,EAAKyf,MAAMC,QAChBsB,GAKa,SAAZtB,IACJuB,EAAQlK,GAAUsH,EAAS/e,IAAKU,EAAM,SAAU,GAAK,KAC/CihB,EAAQlK,KACb/W,EAAKyf,MAAMC,QAAU,KAGK,KAAvB1f,EAAKyf,MAAMC,SAAkBF,GAAoBxf,CAAK,IAC1DihB,EAAQlK,IA7CV2I,EAFA7hB,EAAAA,KAAAA,EAAAA,GAF0BmC,EAiDaA,GA/C5BoJ,cACXZ,EAAWxI,EAAKwI,UAChBkX,EAAUoB,GAAmBtY,MAM9BkL,EAAO7V,EAAIqjB,KAAK5iB,YAAaT,EAAII,cAAeuK,CAAS,CAAE,EAC3DkX,EAAU/gB,EAAOihB,IAAKlM,EAAM,SAAU,EAEtCA,EAAKnV,WAAWC,YAAakV,CAAK,EAKlCoN,GAAmBtY,GAFlBkX,EADgB,SAAZA,EACM,QAEqBA,GAEzBA,KAgCY,SAAZA,IACJuB,EAAQlK,GAAU,OAGlBsH,EAASJ,IAAKje,EAAM,UAAW0f,CAAQ,IAM1C,IAAM3I,EAAQ,EAAGA,EAAQ9X,EAAQ8X,CAAK,GACb,MAAnBkK,EAAQlK,KACZlJ,EAAUkJ,GAAQ0I,MAAMC,QAAUuB,EAAQlK,IAI5C,OAAOlJ,CACR,CAEAlP,EAAOG,GAAGgC,OAAQ,CACjBkgB,KAAM,WACL,OAAOD,EAAUplB,KAAM,CAAA,CAAK,CAC7B,EACAwlB,KAAM,WACL,OAAOJ,EAAUplB,IAAK,CACvB,EACAylB,OAAQ,SAAUxH,GACjB,MAAsB,WAAjB,OAAOA,EACJA,EAAQje,KAAKqlB,KAAK,EAAIrlB,KAAKwlB,KAAK,EAGjCxlB,KAAKkE,KAAM,WACZ2f,GAAoB7jB,IAAK,EAC7BgD,EAAQhD,IAAK,EAAEqlB,KAAK,EAEpBriB,EAAQhD,IAAK,EAAEwlB,KAAK,CAEtB,CAAE,CACH,CACD,CAAE,EACF,IAAIE,GAAiB,wBAEjBC,GAAW,iCAEXC,GAAc,qCAqCdC,GA/BFC,EADclmB,EAASmmB,uBAAuB,EAC/BpjB,YAAa/C,EAAS0C,cAAe,KAAM,CAAE,GAC5DyO,EAAQnR,EAAS0C,cAAe,OAAQ,GAMnCG,aAAc,OAAQ,OAAQ,EACpCsO,EAAMtO,aAAc,UAAW,SAAU,EACzCsO,EAAMtO,aAAc,OAAQ,GAAI,EAEhCqjB,EAAInjB,YAAaoO,CAAM,EAIvBtP,EAAQukB,WAAaF,EAAIG,UAAW,CAAA,CAAK,EAAEA,UAAW,CAAA,CAAK,EAAExR,UAAUqB,QAIvEgQ,EAAI9U,UAAY,yBAChBvP,EAAQykB,eAAiB,CAAC,CAACJ,EAAIG,UAAW,CAAA,CAAK,EAAExR,UAAUsF,aAK3D+L,EAAI9U,UAAY,oBAChBvP,EAAQ0kB,OAAS,CAAC,CAACL,EAAIrR,UAKV,CAKb2R,MAAO,CAAE,EAAG,UAAW,YACvBC,IAAK,CAAE,EAAG,oBAAqB,uBAC/BC,GAAI,CAAE,EAAG,iBAAkB,oBAC3BC,GAAI,CAAE,EAAG,qBAAsB,yBAE/BC,SAAU,CAAE,EAAG,GAAI,GACpB,GAWA,SAASC,EAAQvjB,EAAS2N,GAIzB,IAGC9M,EAD4C,KAAA,IAAjCb,EAAQ2K,qBACb3K,EAAQ2K,qBAAsBgD,GAAO,GAAI,EAEA,KAAA,IAA7B3N,EAAQmL,iBACpBnL,EAAQmL,iBAAkBwC,GAAO,GAAI,EAGrC,GAGP,OAAa/K,KAAAA,IAAR+K,GAAqBA,GAAOhE,EAAU3J,EAAS2N,CAAI,EAChD7N,EAAOgB,MAAO,CAAEd,GAAWa,CAAI,EAGhCA,CACR,CAIA,SAAS2iB,GAAe5iB,EAAO6iB,GAI9B,IAHA,IAAIxkB,EAAI,EACP+Y,EAAIpX,EAAMR,OAEHnB,EAAI+Y,EAAG/Y,CAAC,GACfugB,EAASJ,IACRxe,EAAO3B,GACP,aACA,CAACwkB,GAAejE,EAAS/e,IAAKgjB,EAAaxkB,GAAK,YAAa,CAC9D,CAEF,CA7CA0jB,EAAQe,MAAQf,EAAQgB,MAAQhB,EAAQiB,SAAWjB,EAAQkB,QAAUlB,EAAQO,MAC7EP,EAAQmB,GAAKnB,EAAQU,GAGf9kB,EAAQ0kB,SACbN,EAAQoB,SAAWpB,EAAQM,OAAS,CAAE,EAAG,+BAAgC,cA2C1E,IAAIja,GAAQ,YAEZ,SAASgb,GAAepjB,EAAOZ,EAASikB,EAASC,EAAWC,GAO3D,IANA,IAAIhjB,EAAMyM,EAAUwW,EAAMC,EAAUxiB,EACnCyiB,EAAWtkB,EAAQ6iB,uBAAuB,EAC1C0B,EAAQ,GACRtlB,EAAI,EACJ+Y,EAAIpX,EAAMR,OAEHnB,EAAI+Y,EAAG/Y,CAAC,GAGf,IAFAkC,EAAOP,EAAO3B,KAEQ,IAATkC,EAGZ,GAAwB,WAAnBvB,EAAQuB,CAAK,EAIjBrB,EAAOgB,MAAOyjB,EAAOpjB,EAAKjE,SAAW,CAAEiE,GAASA,CAAK,OAG/C,GAAM6H,GAAM8B,KAAM3J,CAAK,EAIvB,CAUN,IATAyM,EAAMA,GAAO0W,EAAS7kB,YAAaO,EAAQZ,cAAe,KAAM,CAAE,EAGlEuO,GAAQ8U,GAASjY,KAAMrJ,CAAK,GAAK,CAAE,GAAI,KAAQ,GAAIoD,YAAY,EAC/D6f,EAAOzB,EAAShV,IAASgV,EAAQW,SACjC1V,EAAIE,UAAYsW,EAAM,GAAMtkB,EAAO0kB,cAAerjB,CAAK,EAAIijB,EAAM,GAGjEviB,EAAIuiB,EAAM,GACFviB,CAAC,IACR+L,EAAMA,EAAI2D,UAKXzR,EAAOgB,MAAOyjB,EAAO3W,EAAI/D,UAAW,GAGpC+D,EAAM0W,EAAS7U,YAGXD,YAAc,EACnB,MA1BC+U,EAAMxmB,KAAMiC,EAAQykB,eAAgBtjB,CAAK,CAAE,EAkC9C,IAHAmjB,EAAS9U,YAAc,GAEvBvQ,EAAI,EACMkC,EAAOojB,EAAOtlB,CAAC,KAGxB,GAAKilB,GAAiD,CAAC,EAArCpkB,EAAO6D,QAASxC,EAAM+iB,CAAU,EAC5CC,GACJA,EAAQpmB,KAAMoD,CAAK,OAgBrB,GAXAkjB,EAAWvD,EAAY3f,CAAK,EAG5ByM,EAAM2V,EAAQe,EAAS7kB,YAAa0B,CAAK,EAAG,QAAS,EAGhDkjB,GACJb,GAAe5V,CAAI,EAIfqW,EAEJ,IADApiB,EAAI,EACMV,EAAOyM,EAAK/L,CAAC,KACjB6gB,GAAY5X,KAAM3J,EAAK1C,MAAQ,EAAG,GACtCwlB,EAAQlmB,KAAMoD,CAAK,EAMvB,OAAOmjB,CACR,CAGA,IAAII,GAAiB,sBAErB,SAASC,IACR,MAAO,CAAA,CACR,CAEA,SAASC,IACR,MAAO,CAAA,CACR,CAQA,SAASC,GAAY1jB,EAAM1C,GAC1B,OAAS0C,IAMV,WACC,IACC,OAAOzE,EAAS6V,aACC,CAAhB,MAAQuS,IACX,EAVqC,IAAmB,UAATrmB,EAC/C,CAWA,SAASsmB,GAAI5jB,EAAM6jB,EAAOjlB,EAAUsf,EAAMpf,EAAIglB,GAC7C,IAAIC,EAAQzmB,EAGZ,GAAsB,UAAjB,OAAOumB,EAAqB,CAShC,IAAMvmB,IANmB,UAApB,OAAOsB,IAGXsf,EAAOA,GAAQtf,EACfA,EAAW6C,KAAAA,GAEEoiB,EACbD,GAAI5jB,EAAM1C,EAAMsB,EAAUsf,EAAM2F,EAAOvmB,GAAQwmB,CAAI,EAEpD,OAAO9jB,CACR,CAqBA,GAnBa,MAARke,GAAsB,MAANpf,GAGpBA,EAAKF,EACLsf,EAAOtf,EAAW6C,KAAAA,GACD,MAAN3C,IACc,UAApB,OAAOF,GAGXE,EAAKof,EACLA,EAAOzc,KAAAA,IAIP3C,EAAKof,EACLA,EAAOtf,EACPA,EAAW6C,KAAAA,IAGD,CAAA,IAAP3C,EACJA,EAAK2kB,OACC,GAAK,CAAC3kB,EACZ,OAAOkB,EAeR,OAZa,IAAR8jB,IACJC,EAASjlB,GACTA,EAAK,SAAUklB,GAId,OADArlB,EAAO,EAAEslB,IAAKD,CAAM,EACbD,EAAOpnB,MAAOhB,KAAMsE,SAAU,CACtC,GAGG8C,KAAOghB,EAAOhhB,OAAUghB,EAAOhhB,KAAOpE,EAAOoE,IAAI,KAE9C/C,EAAKH,KAAM,WACjBlB,EAAOqlB,MAAM/M,IAAKtb,KAAMkoB,EAAO/kB,EAAIof,EAAMtf,CAAS,CACnD,CAAE,CACH,CA6aA,SAASslB,GAAgBxZ,EAAIpN,EAAMomB,GAG5BA,GAQNrF,EAASJ,IAAKvT,EAAIpN,EAAM,CAAA,CAAM,EAC9BqB,EAAOqlB,MAAM/M,IAAKvM,EAAIpN,EAAM,CAC3BkO,UAAW,CAAA,EACXX,QAAS,SAAUmZ,GAClB,IAAIG,EAAU7U,EACb8U,EAAQ/F,EAAS/e,IAAK3D,KAAM2B,CAAK,EAElC,GAAyB,EAAlB0mB,EAAMK,WAAmB1oB,KAAM2B,IAKrC,GAAM8mB,EAAMnlB,QAuCEN,EAAOqlB,MAAMpJ,QAAStd,IAAU,IAAKgnB,cAClDN,EAAMO,gBAAgB,OArBtB,GAdAH,EAAQ9nB,EAAMG,KAAMwD,SAAU,EAC9Boe,EAASJ,IAAKtiB,KAAM2B,EAAM8mB,CAAM,EAKhCD,EAAWT,EAAY/nB,KAAM2B,CAAK,EAClC3B,KAAM2B,GAAO,EAER8mB,KADL9U,EAAS+O,EAAS/e,IAAK3D,KAAM2B,CAAK,IACT6mB,EACxB9F,EAASJ,IAAKtiB,KAAM2B,EAAM,CAAA,CAAM,EAEhCgS,EAAS,GAEL8U,IAAU9U,EAWd,OARA0U,EAAMQ,yBAAyB,EAC/BR,EAAMS,eAAe,EAOdnV,GAAUA,EAAOxM,KAW1B,MAIWshB,EAAMnlB,SAGjBof,EAASJ,IAAKtiB,KAAM2B,EAAM,CACzBwF,MAAOnE,EAAOqlB,MAAMU,QAInB/lB,EAAOmC,OAAQsjB,EAAO,GAAKzlB,EAAOgmB,MAAMzlB,SAAU,EAClDklB,EAAM9nB,MAAO,CAAE,EACfX,IACD,CACD,CAAE,EAGFqoB,EAAMQ,yBAAyB,EAEjC,CACD,CAAE,GAlFiC/iB,KAAAA,IAA7B4c,EAAS/e,IAAKoL,EAAIpN,CAAK,GAC3BqB,EAAOqlB,MAAM/M,IAAKvM,EAAIpN,EAAMkmB,CAAW,CAkF1C,CA9fA7kB,EAAOqlB,MAAQ,CAEd7oB,OAAQ,GAER8b,IAAK,SAAUjX,EAAM6jB,EAAOhZ,EAASqT,EAAMtf,GAE1C,IAAIgmB,EAAaC,EAChBC,EAAQC,EACRnK,EAASoK,EAAU1nB,EAAM2nB,EAAYC,EACrCC,EAAW9G,EAAS/e,IAAKU,CAAK,EAG/B,GAAM2d,EAAY3d,CAAK,EAuCvB,IAlCK6K,EAAQA,UAEZA,GADA+Z,EAAc/Z,GACQA,QACtBjM,EAAWgmB,EAAYhmB,UAKnBA,GACJD,EAAO2N,KAAKM,gBAAiBlB,EAAiB9M,CAAS,EAIlDiM,EAAQ9H,OACb8H,EAAQ9H,KAAOpE,EAAOoE,IAAI,IAInB+hB,GAAAA,EAASK,EAASL,UAChBK,EAASL,OAAS1oB,OAAOgpB,OAAQ,IAAK,GAExCP,GAAAA,EAAcM,EAASE,UAChBF,EAASE,OAAS,SAAU1c,GAIzC,OAAyB,KAAA,IAAXhK,GAA0BA,EAAOqlB,MAAMsB,YAAc3c,EAAErL,KACpEqB,EAAOqlB,MAAMuB,SAAS5oB,MAAOqD,EAAMC,SAAU,EAAIwB,KAAAA,CACnD,GAKDsjB,GADAlB,GAAUA,GAAS,IAAK7a,MAAO2O,CAAc,GAAK,CAAE,KAC1C1Y,OACF8lB,CAAC,IAERznB,EAAO4nB,GADPzY,EAAM8W,GAAela,KAAMwa,EAAOkB,EAAI,GAAK,IACpB,GACvBE,GAAexY,EAAK,IAAO,IAAKvJ,MAAO,GAAI,EAAEtC,KAAK,EAG5CtD,IAKNsd,EAAUjc,EAAOqlB,MAAMpJ,QAAStd,IAAU,GAG1CA,GAASsB,EAAWgc,EAAQ0J,aAAe1J,EAAQ4K,WAAcloB,EAGjEsd,EAAUjc,EAAOqlB,MAAMpJ,QAAStd,IAAU,GAG1CmoB,EAAY9mB,EAAOmC,OAAQ,CAC1BxD,KAAMA,EACN4nB,SAAUA,EACVhH,KAAMA,EACNrT,QAASA,EACT9H,KAAM8H,EAAQ9H,KACdnE,SAAUA,EACVgJ,aAAchJ,GAAYD,EAAOiP,KAAK5E,MAAMpB,aAAa+B,KAAM/K,CAAS,EACxE4M,UAAWyZ,EAAWlb,KAAM,GAAI,CACjC,EAAG6a,CAAY,GAGPI,EAAWF,EAAQxnB,OAC1B0nB,EAAWF,EAAQxnB,GAAS,IACnBooB,cAAgB,EAGnB9K,EAAQ+K,OACiD,CAAA,IAA9D/K,EAAQ+K,MAAMlpB,KAAMuD,EAAMke,EAAM+G,EAAYJ,CAAY,IAEnD7kB,EAAK8L,kBACT9L,EAAK8L,iBAAkBxO,EAAMunB,CAAY,EAKvCjK,EAAQ3D,MACZ2D,EAAQ3D,IAAIxa,KAAMuD,EAAMylB,CAAU,EAE5BA,EAAU5a,QAAQ9H,OACvB0iB,EAAU5a,QAAQ9H,KAAO8H,EAAQ9H,OAK9BnE,EACJomB,EAASnkB,OAAQmkB,EAASU,aAAa,GAAI,EAAGD,CAAU,EAExDT,EAASpoB,KAAM6oB,CAAU,EAI1B9mB,EAAOqlB,MAAM7oB,OAAQmC,GAAS,CAAA,EAGhC,EAGA+b,OAAQ,SAAUrZ,EAAM6jB,EAAOhZ,EAASjM,EAAUgnB,GAEjD,IAAIllB,EAAGmlB,EAAWpZ,EACjBqY,EAAQC,EAAGU,EACX7K,EAASoK,EAAU1nB,EAAM2nB,EAAYC,EACrCC,EAAW9G,EAASD,QAASpe,CAAK,GAAKqe,EAAS/e,IAAKU,CAAK,EAE3D,GAAMmlB,IAAeL,EAASK,EAASL,QAAvC,CAOA,IADAC,GADAlB,GAAUA,GAAS,IAAK7a,MAAO2O,CAAc,GAAK,CAAE,KAC1C1Y,OACF8lB,CAAC,IAMR,GAJAznB,EAAO4nB,GADPzY,EAAM8W,GAAela,KAAMwa,EAAOkB,EAAI,GAAK,IACpB,GACvBE,GAAexY,EAAK,IAAO,IAAKvJ,MAAO,GAAI,EAAEtC,KAAK,EAG5CtD,EAAN,CAeA,IARAsd,EAAUjc,EAAOqlB,MAAMpJ,QAAStd,IAAU,GAE1C0nB,EAAWF,EADXxnB,GAASsB,EAAWgc,EAAQ0J,aAAe1J,EAAQ4K,WAAcloB,IACpC,GAC7BmP,EAAMA,EAAK,IACV,IAAI5F,OAAQ,UAAYoe,EAAWlb,KAAM,eAAgB,EAAI,SAAU,EAGxE8b,EAAYnlB,EAAIskB,EAAS/lB,OACjByB,CAAC,IACR+kB,EAAYT,EAAUtkB,GAEfklB,CAAAA,GAAeV,IAAaO,EAAUP,UACzCra,GAAWA,EAAQ9H,OAAS0iB,EAAU1iB,MACtC0J,GAAOA,CAAAA,EAAI9C,KAAM8b,EAAUja,SAAU,GACrC5M,GAAYA,IAAa6mB,EAAU7mB,WACxB,OAAbA,GAAqB6mB,CAAAA,EAAU7mB,YAChComB,EAASnkB,OAAQH,EAAG,CAAE,EAEjB+kB,EAAU7mB,UACdomB,EAASU,aAAa,GAElB9K,EAAQvB,QACZuB,EAAQvB,OAAO5c,KAAMuD,EAAMylB,CAAU,GAOnCI,GAAa,CAACb,EAAS/lB,SACrB2b,EAAQkL,UACkD,CAAA,IAA/DlL,EAAQkL,SAASrpB,KAAMuD,EAAMilB,EAAYE,EAASE,MAAO,GAEzD1mB,EAAOonB,YAAa/lB,EAAM1C,EAAM6nB,EAASE,MAAO,EAGjD,OAAOP,EAAQxnB,GAtChB,MAJC,IAAMA,KAAQwnB,EACbnmB,EAAOqlB,MAAM3K,OAAQrZ,EAAM1C,EAAOumB,EAAOkB,GAAKla,EAASjM,EAAU,CAAA,CAAK,EA8CpED,EAAOyD,cAAe0iB,CAAO,GACjCzG,EAAShF,OAAQrZ,EAAM,eAAgB,CA5DxC,CA8DD,EAEAulB,SAAU,SAAUS,GAEnB,IAAIloB,EAAG4C,EAAQ6C,EAASkiB,EAAWQ,EAClC1V,EAAO,IAAIhP,MAAOtB,UAAUhB,MAAO,EAGnC+kB,EAAQrlB,EAAOqlB,MAAMkC,IAAKF,CAAY,EAEtChB,GACC3G,EAAS/e,IAAK3D,KAAM,QAAS,GAAKS,OAAOgpB,OAAQ,IAAK,GACpDpB,EAAM1mB,OAAU,GACnBsd,EAAUjc,EAAOqlB,MAAMpJ,QAASoJ,EAAM1mB,OAAU,GAKjD,IAFAiT,EAAM,GAAMyT,EAENlmB,EAAI,EAAGA,EAAImC,UAAUhB,OAAQnB,CAAC,GACnCyS,EAAMzS,GAAMmC,UAAWnC,GAMxB,GAHAkmB,EAAMmC,eAAiBxqB,KAGlBif,CAAAA,EAAQwL,aAA2D,CAAA,IAA5CxL,EAAQwL,YAAY3pB,KAAMd,KAAMqoB,CAAM,EAAlE,CASA,IAJAiC,EAAetnB,EAAOqlB,MAAMgB,SAASvoB,KAAMd,KAAMqoB,EAAOgB,CAAS,EAGjElnB,EAAI,GACMyF,EAAU0iB,EAAcnoB,CAAC,MAAU,CAACkmB,EAAMqC,qBAAqB,GAIxE,IAHArC,EAAMsC,cAAgB/iB,EAAQvD,KAE9BU,EAAI,GACM+kB,EAAYliB,EAAQyhB,SAAUtkB,CAAC,MACxC,CAACsjB,EAAMuC,8BAA8B,GAI/BvC,EAAMwC,YAAsC,CAAA,IAAxBf,EAAUja,WACnCwY,CAAAA,EAAMwC,WAAW7c,KAAM8b,EAAUja,SAAU,IAE3CwY,EAAMyB,UAAYA,EAClBzB,EAAM9F,KAAOuH,EAAUvH,KAKVzc,KAAAA,KAHb/B,IAAUf,EAAOqlB,MAAMpJ,QAAS6K,EAAUP,WAAc,IAAKG,QAC5DI,EAAU5a,SAAUlO,MAAO4G,EAAQvD,KAAMuQ,CAAK,IAGd,CAAA,KAAzByT,EAAM1U,OAAS5P,KACrBskB,EAAMS,eAAe,EACrBT,EAAMO,gBAAgB,IAY3B,OAJK3J,EAAQ6L,cACZ7L,EAAQ6L,aAAahqB,KAAMd,KAAMqoB,CAAM,EAGjCA,EAAM1U,MAxCb,CAyCD,EAEA0V,SAAU,SAAUhB,EAAOgB,GAC1B,IAAIlnB,EAAG2nB,EAAWzX,EAAK0Y,EAAiBC,EACvCV,EAAe,GACfP,EAAgBV,EAASU,cACzB1a,EAAMgZ,EAAM5iB,OAGb,GAAKskB,GAIJ1a,EAAIjP,UAOJ,EAAkB,UAAfioB,EAAM1mB,MAAoC,GAAhB0mB,EAAMlS,QAEnC,KAAQ9G,IAAQrP,KAAMqP,EAAMA,EAAIzM,YAAc5C,KAI7C,GAAsB,IAAjBqP,EAAIjP,WAAoC,UAAfioB,EAAM1mB,MAAqC,CAAA,IAAjB0N,EAAIzC,UAAsB,CAGjF,IAFAme,EAAkB,GAClBC,EAAmB,GACb7oB,EAAI,EAAGA,EAAI4nB,EAAe5nB,CAAC,GAMC2D,KAAAA,IAA5BklB,EAFL3Y,GAHAyX,EAAYT,EAAUlnB,IAGNc,SAAW,OAG1B+nB,EAAkB3Y,GAAQyX,EAAU7d,aACA,CAAC,EAApCjJ,EAAQqP,EAAKrS,IAAK,EAAEob,MAAO/L,CAAI,EAC/BrM,EAAO2N,KAAM0B,EAAKrS,KAAM,KAAM,CAAEqP,EAAM,EAAE/L,QAErC0nB,EAAkB3Y,IACtB0Y,EAAgB9pB,KAAM6oB,CAAU,EAG7BiB,EAAgBznB,QACpBgnB,EAAarpB,KAAM,CAAEoD,KAAMgL,EAAKga,SAAU0B,CAAgB,CAAE,CAE9D,CAUF,OALA1b,EAAMrP,KACD+pB,EAAgBV,EAAS/lB,QAC7BgnB,EAAarpB,KAAM,CAAEoD,KAAMgL,EAAKga,SAAUA,EAAS1oB,MAAOopB,CAAc,CAAE,CAAE,EAGtEO,CACR,EAEAW,QAAS,SAAU5lB,EAAM6lB,GACxBzqB,OAAO2hB,eAAgBpf,EAAOgmB,MAAMzlB,UAAW8B,EAAM,CACpD8lB,WAAY,CAAA,EACZ9I,aAAc,CAAA,EAEd1e,IAAKzD,EAAYgrB,CAAK,EACrB,WACC,GAAKlrB,KAAKorB,cACT,OAAOF,EAAMlrB,KAAKorB,aAAc,CAElC,EACA,WACC,GAAKprB,KAAKorB,cACT,OAAOprB,KAAKorB,cAAe/lB,EAE7B,EAEDid,IAAK,SAAUnb,GACd1G,OAAO2hB,eAAgBpiB,KAAMqF,EAAM,CAClC8lB,WAAY,CAAA,EACZ9I,aAAc,CAAA,EACdgJ,SAAU,CAAA,EACVlkB,MAAOA,CACR,CAAE,CACH,CACD,CAAE,CACH,EAEAojB,IAAK,SAAUa,GACd,OAAOA,EAAepoB,EAAO+C,SAC5BqlB,EACA,IAAIpoB,EAAOgmB,MAAOoC,CAAc,CAClC,EAEAnM,QAAS,CACRqM,KAAM,CAGLC,SAAU,CAAA,CACX,EACAC,MAAO,CAGNxB,MAAO,SAAUzH,GAIZxT,EAAK/O,MAAQuiB,EAWjB,OARKmD,GAAe1X,KAAMe,EAAGpN,IAAK,GACjCoN,EAAGyc,OAAS3e,EAAUkC,EAAI,OAAQ,GAGlCwZ,GAAgBxZ,EAAI,QAAS8Y,CAAW,EAIlC,CAAA,CACR,EACAkB,QAAS,SAAUxG,GAIdxT,EAAK/O,MAAQuiB,EAUjB,OAPKmD,GAAe1X,KAAMe,EAAGpN,IAAK,GACjCoN,EAAGyc,OAAS3e,EAAUkC,EAAI,OAAQ,GAElCwZ,GAAgBxZ,EAAI,OAAQ,EAItB,CAAA,CACR,EAIAyX,SAAU,SAAU6B,GACf5iB,EAAS4iB,EAAM5iB,OACnB,OAAOigB,GAAe1X,KAAMvI,EAAO9D,IAAK,GACvC8D,EAAO+lB,OAAS3e,EAAUpH,EAAQ,OAAQ,GAC1Cid,EAAS/e,IAAK8B,EAAQ,OAAQ,GAC9BoH,EAAUpH,EAAQ,GAAI,CACxB,CACD,EAEAgmB,aAAc,CACbX,aAAc,SAAUzC,GAIDviB,KAAAA,IAAjBuiB,EAAM1U,QAAwB0U,EAAM+C,gBACxC/C,EAAM+C,cAAcM,YAAcrD,EAAM1U,OAE1C,CACD,CACD,CACD,EA+FA3Q,EAAOonB,YAAc,SAAU/lB,EAAM1C,EAAM+nB,GAGrCrlB,EAAKwc,qBACTxc,EAAKwc,oBAAqBlf,EAAM+nB,CAAO,CAEzC,EAEA1mB,EAAOgmB,MAAQ,SAAUpnB,EAAK+pB,GAG7B,GAAK,EAAG3rB,gBAAgBgD,EAAOgmB,OAC9B,OAAO,IAAIhmB,EAAOgmB,MAAOpnB,EAAK+pB,CAAM,EAIhC/pB,GAAOA,EAAID,MACf3B,KAAKorB,cAAgBxpB,EACrB5B,KAAK2B,KAAOC,EAAID,KAIhB3B,KAAK4rB,mBAAqBhqB,EAAIiqB,kBACH/lB,KAAAA,IAAzBlE,EAAIiqB,kBAGgB,CAAA,IAApBjqB,EAAI8pB,YACL7D,EACAC,EAKD9nB,KAAKyF,OAAW7D,EAAI6D,QAAkC,IAAxB7D,EAAI6D,OAAOrF,SACxCwB,EAAI6D,OAAO7C,WACXhB,EAAI6D,OAELzF,KAAK2qB,cAAgB/oB,EAAI+oB,cACzB3qB,KAAK8rB,cAAgBlqB,EAAIkqB,eAIzB9rB,KAAK2B,KAAOC,EAIR+pB,GACJ3oB,EAAOmC,OAAQnF,KAAM2rB,CAAM,EAI5B3rB,KAAK+rB,UAAYnqB,GAAOA,EAAImqB,WAAaliB,KAAKmiB,IAAI,EAGlDhsB,KAAMgD,EAAO+C,SAAY,CAAA,CAC1B,EAIA/C,EAAOgmB,MAAMzlB,UAAY,CACxBE,YAAaT,EAAOgmB,MACpB4C,mBAAoB9D,EACpB4C,qBAAsB5C,EACtB8C,8BAA+B9C,EAC/BmE,YAAa,CAAA,EAEbnD,eAAgB,WACf,IAAI9b,EAAIhN,KAAKorB,cAEbprB,KAAK4rB,mBAAqB/D,EAErB7a,GAAK,CAAChN,KAAKisB,aACfjf,EAAE8b,eAAe,CAEnB,EACAF,gBAAiB,WAChB,IAAI5b,EAAIhN,KAAKorB,cAEbprB,KAAK0qB,qBAAuB7C,EAEvB7a,GAAK,CAAChN,KAAKisB,aACfjf,EAAE4b,gBAAgB,CAEpB,EACAC,yBAA0B,WACzB,IAAI7b,EAAIhN,KAAKorB,cAEbprB,KAAK4qB,8BAAgC/C,EAEhC7a,GAAK,CAAChN,KAAKisB,aACfjf,EAAE6b,yBAAyB,EAG5B7oB,KAAK4oB,gBAAgB,CACtB,CACD,EAGA5lB,EAAOkB,KAAM,CACZgoB,OAAQ,CAAA,EACRC,QAAS,CAAA,EACTC,WAAY,CAAA,EACZC,eAAgB,CAAA,EAChBC,QAAS,CAAA,EACTC,OAAQ,CAAA,EACRC,WAAY,CAAA,EACZC,QAAS,CAAA,EACTC,MAAO,CAAA,EACPC,MAAO,CAAA,EACPC,SAAU,CAAA,EACVC,KAAM,CAAA,EACNC,KAAQ,CAAA,EACR9qB,KAAM,CAAA,EACN+qB,SAAU,CAAA,EACVre,IAAK,CAAA,EACLse,QAAS,CAAA,EACT7W,OAAQ,CAAA,EACR8W,QAAS,CAAA,EACTC,QAAS,CAAA,EACTC,QAAS,CAAA,EACTC,QAAS,CAAA,EACTC,QAAS,CAAA,EACTC,UAAW,CAAA,EACXC,YAAa,CAAA,EACbC,QAAS,CAAA,EACTC,QAAS,CAAA,EACTC,cAAe,CAAA,EACfC,UAAW,CAAA,EACXC,QAAS,CAAA,EACTC,MAAO,CAAA,CACR,EAAG7qB,EAAOqlB,MAAM4C,OAAQ,EAExBjoB,EAAOkB,KAAM,CAAEsR,MAAO,UAAWsY,KAAM,UAAW,EAAG,SAAUnsB,EAAMgnB,GACpE3lB,EAAOqlB,MAAMpJ,QAAStd,GAAS,CAG9BqoB,MAAO,WAQN,OAHAzB,GAAgBvoB,KAAM2B,EAAMomB,EAAW,EAGhC,CAAA,CACR,EACAgB,QAAS,WAMR,OAHAR,GAAgBvoB,KAAM2B,CAAK,EAGpB,CAAA,CACR,EAIA6kB,SAAU,WACT,MAAO,CAAA,CACR,EAEAmC,aAAcA,CACf,CACD,CAAE,EAUF3lB,EAAOkB,KAAM,CACZ6pB,WAAY,YACZC,WAAY,WACZC,aAAc,cACdC,aAAc,YACf,EAAG,SAAUC,EAAM5D,GAClBvnB,EAAOqlB,MAAMpJ,QAASkP,GAAS,CAC9BxF,aAAc4B,EACdV,SAAUU,EAEVb,OAAQ,SAAUrB,GACjB,IAAItkB,EAEHqqB,EAAU/F,EAAMyD,cAChBhC,EAAYzB,EAAMyB,UASnB,OALMsE,IAAaA,IANTpuB,MAMgCgD,EAAO4G,SANvC5J,KAMyDouB,CAAQ,KAC1E/F,EAAM1mB,KAAOmoB,EAAUP,SACvBxlB,EAAM+lB,EAAU5a,QAAQlO,MAAOhB,KAAMsE,SAAU,EAC/C+jB,EAAM1mB,KAAO4oB,GAEPxmB,CACR,CACD,CACD,CAAE,EAEFf,EAAOG,GAAGgC,OAAQ,CAEjB8iB,GAAI,SAAUC,EAAOjlB,EAAUsf,EAAMpf,GACpC,OAAO8kB,GAAIjoB,KAAMkoB,EAAOjlB,EAAUsf,EAAMpf,CAAG,CAC5C,EACAglB,IAAK,SAAUD,EAAOjlB,EAAUsf,EAAMpf,GACrC,OAAO8kB,GAAIjoB,KAAMkoB,EAAOjlB,EAAUsf,EAAMpf,EAAI,CAAE,CAC/C,EACAmlB,IAAK,SAAUJ,EAAOjlB,EAAUE,GAC/B,IAAI2mB,EAAWnoB,EACf,GAAKumB,GAASA,EAAMY,gBAAkBZ,EAAM4B,UAG3CA,EAAY5B,EAAM4B,UAClB9mB,EAAQklB,EAAMsC,cAAe,EAAElC,IAC9BwB,EAAUja,UACTia,EAAUP,SAAW,IAAMO,EAAUja,UACrCia,EAAUP,SACXO,EAAU7mB,SACV6mB,EAAU5a,OACX,MAVD,CAaA,GAAsB,UAAjB,OAAOgZ,EAiBZ,MATkB,CAAA,IAAbjlB,GAA0C,YAApB,OAAOA,IAGjCE,EAAKF,EACLA,EAAW6C,KAAAA,GAEA,CAAA,IAAP3C,IACJA,EAAK2kB,GAEC9nB,KAAKkE,KAAM,WACjBlB,EAAOqlB,MAAM3K,OAAQ1d,KAAMkoB,EAAO/kB,EAAIF,CAAS,CAChD,CAAE,EAhBD,IAAMtB,KAAQumB,EACbloB,KAAKsoB,IAAK3mB,EAAMsB,EAAUilB,EAAOvmB,EAAO,CAL1C,CAOC,OAAO3B,IAcT,CACD,CAAE,EAGF,IAKCquB,GAAe,wBAGfC,GAAW,oCACXC,GAAe,2CAGhB,SAASC,GAAoBnqB,EAAMyX,GAClC,OAAKjP,EAAUxI,EAAM,OAAQ,GAC5BwI,EAA+B,KAArBiP,EAAQ1b,SAAkB0b,EAAUA,EAAQnJ,WAAY,IAAK,GAEhE3P,EAAQqB,CAAK,EAAEwW,SAAU,OAAQ,EAAG,IAGrCxW,CACR,CAGA,SAASoqB,GAAepqB,GAEvB,OADAA,EAAK1C,MAAyC,OAAhC0C,EAAK7B,aAAc,MAAO,GAAe,IAAM6B,EAAK1C,KAC3D0C,CACR,CACA,SAASqqB,GAAerqB,GAOvB,MAN2C,WAApCA,EAAK1C,MAAQ,IAAKhB,MAAO,EAAG,CAAE,EACpC0D,EAAK1C,KAAO0C,EAAK1C,KAAKhB,MAAO,CAAE,EAE/B0D,EAAKkK,gBAAiB,MAAO,EAGvBlK,CACR,CAEA,SAASsqB,GAAgB/sB,EAAKgtB,GAC7B,IAAIzsB,EAAG+Y,EAAGvZ,EAAoCwnB,EAE9C,GAAuB,IAAlByF,EAAKxuB,SAAV,CAKA,GAAKsiB,EAASD,QAAS7gB,CAAI,IAE1BunB,EADWzG,EAAS/e,IAAK/B,CAAI,EACXunB,QAKjB,IAAMxnB,KAFN+gB,EAAShF,OAAQkR,EAAM,eAAgB,EAEzBzF,EACb,IAAMhnB,EAAI,EAAG+Y,EAAIiO,EAAQxnB,GAAO2B,OAAQnB,EAAI+Y,EAAG/Y,CAAC,GAC/Ca,EAAOqlB,MAAM/M,IAAKsT,EAAMjtB,EAAMwnB,EAAQxnB,GAAQQ,EAAI,EAOjDwgB,EAASF,QAAS7gB,CAAI,IAC1BitB,EAAWlM,EAASzB,OAAQtf,CAAI,EAChCktB,EAAW9rB,EAAOmC,OAAQ,GAAI0pB,CAAS,EAEvClM,EAASL,IAAKsM,EAAME,CAAS,EAvB9B,CAyBD,CAgBA,SAASC,EAAUC,EAAYpa,EAAMzQ,EAAUkjB,GAG9CzS,EAAOhU,EAAMgU,CAAK,EAElB,IAAI4S,EAAUjjB,EAAO4iB,EAAS8H,EAAYhtB,EAAMC,EAC/CC,EAAI,EACJ+Y,EAAI8T,EAAW1rB,OACf4rB,EAAWhU,EAAI,EACf/T,EAAQyN,EAAM,GACdua,EAAkBjvB,EAAYiH,CAAM,EAGrC,GAAKgoB,GACG,EAAJjU,GAA0B,UAAjB,OAAO/T,GACjB,CAAC1F,EAAQukB,YAAcsI,GAAStgB,KAAM7G,CAAM,EAC9C,OAAO6nB,EAAW9qB,KAAM,SAAUkX,GACjC,IAAIb,EAAOyU,EAAWxqB,GAAI4W,CAAM,EAC3B+T,IACJva,EAAM,GAAMzN,EAAMrG,KAAMd,KAAMob,EAAOb,EAAK6U,KAAK,CAAE,GAElDL,EAAUxU,EAAM3F,EAAMzQ,EAAUkjB,CAAQ,CACzC,CAAE,EAGH,GAAKnM,IAEJ3W,GADAijB,EAAWN,GAAetS,EAAMoa,EAAY,GAAIvhB,cAAe,CAAA,EAAOuhB,EAAY3H,CAAQ,GACzE1U,WAEmB,IAA/B6U,EAASza,WAAWzJ,SACxBkkB,EAAWjjB,GAIPA,GAAS8iB,GAAU,CAOvB,IALA4H,GADA9H,EAAUnkB,EAAOoB,IAAKqiB,EAAQe,EAAU,QAAS,EAAGiH,EAAc,GAC7CnrB,OAKbnB,EAAI+Y,EAAG/Y,CAAC,GACfF,EAAOulB,EAEFrlB,IAAM+sB,IACVjtB,EAAOe,EAAOwC,MAAOvD,EAAM,CAAA,EAAM,CAAA,CAAK,EAGjCgtB,IAIJjsB,EAAOgB,MAAOmjB,EAASV,EAAQxkB,EAAM,QAAS,CAAE,EAIlDkC,EAASrD,KAAMkuB,EAAY7sB,GAAKF,EAAME,CAAE,EAGzC,GAAK8sB,EAOJ,IANA/sB,EAAMilB,EAASA,EAAQ7jB,OAAS,GAAImK,cAGpCzK,EAAOoB,IAAK+iB,EAASuH,EAAc,EAG7BvsB,EAAI,EAAGA,EAAI8sB,EAAY9sB,CAAC,GAC7BF,EAAOklB,EAAShlB,GACXyjB,GAAY5X,KAAM/L,EAAKN,MAAQ,EAAG,GACtC,CAAC+gB,EAASxB,OAAQjf,EAAM,YAAa,GACrCe,EAAO4G,SAAU1H,EAAKD,CAAK,IAEtBA,EAAKL,KAA8C,YAArCK,EAAKN,MAAQ,IAAK8F,YAAY,EAG3CzE,EAAOqsB,UAAY,CAACptB,EAAKH,UAC7BkB,EAAOqsB,SAAUptB,EAAKL,IAAK,CAC1BC,MAAOI,EAAKJ,OAASI,EAAKO,aAAc,OAAQ,CACjD,EAAGN,CAAI,EAGRH,EAASE,EAAKyQ,YAAYxM,QAASqoB,GAAc,EAAG,EAAGtsB,EAAMC,CAAI,EAKtE,CAGD,OAAO8sB,CACR,CAEA,SAAStR,GAAQrZ,EAAMpB,EAAUqsB,GAKhC,IAJA,IAAIrtB,EACHwlB,EAAQxkB,EAAWD,EAAOyN,OAAQxN,EAAUoB,CAAK,EAAIA,EACrDlC,EAAI,EAE4B,OAAvBF,EAAOwlB,EAAOtlB,IAAeA,CAAC,GACjCmtB,GAA8B,IAAlBrtB,EAAK7B,UACtB4C,EAAOusB,UAAW9I,EAAQxkB,CAAK,CAAE,EAG7BA,EAAKW,aACJ0sB,GAAYtL,EAAY/hB,CAAK,GACjCykB,GAAeD,EAAQxkB,EAAM,QAAS,CAAE,EAEzCA,EAAKW,WAAWC,YAAaZ,CAAK,GAIpC,OAAOoC,CACR,CAEArB,EAAOmC,OAAQ,CACduiB,cAAe,SAAU0H,GACxB,OAAOA,CACR,EAEA5pB,MAAO,SAAUnB,EAAMmrB,EAAeC,GACrC,IAAIttB,EAAG+Y,EAAGwU,EAAaC,EApIN/tB,EAAKgtB,EACnB/hB,EAoIFrH,EAAQnB,EAAK4hB,UAAW,CAAA,CAAK,EAC7B2J,EAAS5L,EAAY3f,CAAK,EAG3B,GAAK,EAAC5C,EAAQykB,gBAAsC,IAAlB7hB,EAAKjE,UAAoC,KAAlBiE,EAAKjE,UAC3D4C,EAAOkX,SAAU7V,CAAK,GAMxB,IAHAsrB,EAAelJ,EAAQjhB,CAAM,EAGvBrD,EAAI,EAAG+Y,GAFbwU,EAAcjJ,EAAQpiB,CAAK,GAEEf,OAAQnB,EAAI+Y,EAAG/Y,CAAC,GAhJ7BP,EAiJL8tB,EAAavtB,GAjJHysB,EAiJQe,EAAcxtB,GAhJzC0K,EAAAA,KAAAA,EAGc,WAHdA,EAAW+hB,EAAK/hB,SAASpF,YAAY,IAGZie,GAAe1X,KAAMpM,EAAID,IAAK,EAC1DitB,EAAK9Y,QAAUlU,EAAIkU,QAGK,UAAbjJ,GAAqC,aAAbA,IACnC+hB,EAAK7U,aAAenY,EAAImY,cA6IxB,GAAKyV,EACJ,GAAKC,EAIJ,IAHAC,EAAcA,GAAejJ,EAAQpiB,CAAK,EAC1CsrB,EAAeA,GAAgBlJ,EAAQjhB,CAAM,EAEvCrD,EAAI,EAAG+Y,EAAIwU,EAAYpsB,OAAQnB,EAAI+Y,EAAG/Y,CAAC,GAC5CwsB,GAAgBe,EAAavtB,GAAKwtB,EAAcxtB,EAAI,OAGrDwsB,GAAgBtqB,EAAMmB,CAAM,EAW9B,OAL2B,GAD3BmqB,EAAelJ,EAAQjhB,EAAO,QAAS,GACrBlC,QACjBojB,GAAeiJ,EAAc,CAACC,GAAUnJ,EAAQpiB,EAAM,QAAS,CAAE,EAI3DmB,CACR,EAEA+pB,UAAW,SAAUzrB,GAKpB,IAJA,IAAIye,EAAMle,EAAM1C,EACfsd,EAAUjc,EAAOqlB,MAAMpJ,QACvB9c,EAAI,EAE6B2D,KAAAA,KAAxBzB,EAAOP,EAAO3B,IAAqBA,CAAC,GAC7C,GAAK6f,EAAY3d,CAAK,EAAI,CACzB,GAAOke,EAAOle,EAAMqe,EAAS3c,SAAc,CAC1C,GAAKwc,EAAK4G,OACT,IAAMxnB,KAAQ4gB,EAAK4G,OACblK,EAAStd,GACbqB,EAAOqlB,MAAM3K,OAAQrZ,EAAM1C,CAAK,EAIhCqB,EAAOonB,YAAa/lB,EAAM1C,EAAM4gB,EAAKmH,MAAO,EAO/CrlB,EAAMqe,EAAS3c,SAAYD,KAAAA,CAC5B,CACKzB,EAAMse,EAAS5c,WAInB1B,EAAMse,EAAS5c,SAAYD,KAAAA,EAE7B,CAEF,CACD,CAAE,EAEF9C,EAAOG,GAAGgC,OAAQ,CACjB0qB,OAAQ,SAAU5sB,GACjB,OAAOya,GAAQ1d,KAAMiD,EAAU,CAAA,CAAK,CACrC,EAEAya,OAAQ,SAAUza,GACjB,OAAOya,GAAQ1d,KAAMiD,CAAS,CAC/B,EAEAV,KAAM,SAAU4E,GACf,OAAO+Z,EAAQlhB,KAAM,SAAUmH,GAC9B,OAAiBrB,KAAAA,IAAVqB,EACNnE,EAAOT,KAAMvC,IAAK,EAClBA,KAAKiW,MAAM,EAAE/R,KAAM,WACK,IAAlBlE,KAAKI,UAAoC,KAAlBJ,KAAKI,UAAqC,IAAlBJ,KAAKI,WACxDJ,KAAK0S,YAAcvL,EAErB,CAAE,CACJ,EAAG,KAAMA,EAAO7C,UAAUhB,MAAO,CAClC,EAEAwsB,OAAQ,WACP,OAAOf,EAAU/uB,KAAMsE,UAAW,SAAUD,GACpB,IAAlBrE,KAAKI,UAAoC,KAAlBJ,KAAKI,UAAqC,IAAlBJ,KAAKI,UAC3CouB,GAAoBxuB,KAAMqE,CAAK,EACrC1B,YAAa0B,CAAK,CAE3B,CAAE,CACH,EAEA0rB,QAAS,WACR,OAAOhB,EAAU/uB,KAAMsE,UAAW,SAAUD,GAC3C,IACKoB,EADkB,IAAlBzF,KAAKI,UAAoC,KAAlBJ,KAAKI,UAAqC,IAAlBJ,KAAKI,WACpDqF,EAAS+oB,GAAoBxuB,KAAMqE,CAAK,GACrC2rB,aAAc3rB,EAAMoB,EAAOkN,UAAW,CAE/C,CAAE,CACH,EAEAsd,OAAQ,WACP,OAAOlB,EAAU/uB,KAAMsE,UAAW,SAAUD,GACtCrE,KAAK4C,YACT5C,KAAK4C,WAAWotB,aAAc3rB,EAAMrE,IAAK,CAE3C,CAAE,CACH,EAEAkwB,MAAO,WACN,OAAOnB,EAAU/uB,KAAMsE,UAAW,SAAUD,GACtCrE,KAAK4C,YACT5C,KAAK4C,WAAWotB,aAAc3rB,EAAMrE,KAAKiI,WAAY,CAEvD,CAAE,CACH,EAEAgO,MAAO,WAIN,IAHA,IAAI5R,EACHlC,EAAI,EAE2B,OAAtBkC,EAAOrE,KAAMmC,IAAeA,CAAC,GACf,IAAlBkC,EAAKjE,WAGT4C,EAAOusB,UAAW9I,EAAQpiB,EAAM,CAAA,CAAM,CAAE,EAGxCA,EAAKqO,YAAc,IAIrB,OAAO1S,IACR,EAEAwF,MAAO,SAAUgqB,EAAeC,GAI/B,OAHAD,EAAiC,MAAjBA,GAAgCA,EAChDC,EAAyC,MAArBA,EAA4BD,EAAgBC,EAEzDzvB,KAAKoE,IAAK,WAChB,OAAOpB,EAAOwC,MAAOxF,KAAMwvB,EAAeC,CAAkB,CAC7D,CAAE,CACH,EAEAL,KAAM,SAAUjoB,GACf,OAAO+Z,EAAQlhB,KAAM,SAAUmH,GAC9B,IAAI9C,EAAOrE,KAAM,IAAO,GACvBmC,EAAI,EACJ+Y,EAAIlb,KAAKsD,OAEV,GAAewC,KAAAA,IAAVqB,GAAyC,IAAlB9C,EAAKjE,SAChC,OAAOiE,EAAK2M,UAIb,GAAsB,UAAjB,OAAO7J,GAAsB,CAACknB,GAAargB,KAAM7G,CAAM,GAC3D,CAAC0e,GAAWF,GAASjY,KAAMvG,CAAM,GAAK,CAAE,GAAI,KAAQ,GAAIM,YAAY,GAAM,CAE1EN,EAAQnE,EAAO0kB,cAAevgB,CAAM,EAEpC,IACC,KAAQhF,EAAI+Y,EAAG/Y,CAAC,GAIQ,KAHvBkC,EAAOrE,KAAMmC,IAAO,IAGV/B,WACT4C,EAAOusB,UAAW9I,EAAQpiB,EAAM,CAAA,CAAM,CAAE,EACxCA,EAAK2M,UAAY7J,GAInB9C,EAAO,CAGO,CAAb,MAAQ2I,IACX,CAEK3I,GACJrE,KAAKiW,MAAM,EAAE6Z,OAAQ3oB,CAAM,CAE7B,EAAG,KAAMA,EAAO7C,UAAUhB,MAAO,CAClC,EAEA6sB,YAAa,WACZ,IAAI9I,EAAU,GAGd,OAAO0H,EAAU/uB,KAAMsE,UAAW,SAAUD,GAC3C,IAAIkQ,EAASvU,KAAK4C,WAEbI,EAAO6D,QAAS7G,KAAMqnB,CAAQ,EAAI,IACtCrkB,EAAOusB,UAAW9I,EAAQzmB,IAAK,CAAE,EAC5BuU,IACJA,EAAO6b,aAAc/rB,EAAMrE,IAAK,CAKnC,EAAGqnB,CAAQ,CACZ,CACD,CAAE,EAEFrkB,EAAOkB,KAAM,CACZmsB,SAAU,SACVC,UAAW,UACXN,aAAc,SACdO,YAAa,QACbC,WAAY,aACb,EAAG,SAAUnrB,EAAMorB,GAClBztB,EAAOG,GAAIkC,GAAS,SAAUpC,GAO7B,IANA,IAAIa,EACHC,EAAM,GACN2sB,EAAS1tB,EAAQC,CAAS,EAC1BwB,EAAOisB,EAAOptB,OAAS,EACvBnB,EAAI,EAEGA,GAAKsC,EAAMtC,CAAC,GACnB2B,EAAQ3B,IAAMsC,EAAOzE,KAAOA,KAAKwF,MAAO,CAAA,CAAK,EAC7CxC,EAAQ0tB,EAAQvuB,EAAI,EAAGsuB,GAAY3sB,CAAM,EAIzC7C,EAAKD,MAAO+C,EAAKD,EAAMH,IAAI,CAAE,EAG9B,OAAO3D,KAAK6D,UAAWE,CAAI,CAC5B,CACD,CAAE,EAGc,SAAZ4sB,GAAsBtsB,GAKxB,IAAIwoB,EAAOxoB,EAAKoJ,cAAcwC,YAM9B,OAHC4c,EADKA,GAASA,EAAK+D,OAIb/D,EAHC9sB,GAGI8wB,iBAAkBxsB,CAAK,CACpC,CAEU,SAAPysB,GAAiBzsB,EAAMe,EAASjB,GACnC,IAASkB,EACR0rB,EAAM,GAGP,IAAM1rB,KAAQD,EACb2rB,EAAK1rB,GAAShB,EAAKyf,MAAOze,GAC1BhB,EAAKyf,MAAOze,GAASD,EAASC,GAM/B,IAAMA,KAHNtB,EAAMI,EAASrD,KAAMuD,CAAK,EAGZe,EACbf,EAAKyf,MAAOze,GAAS0rB,EAAK1rB,GAG3B,OAAOtB,CACR,CAlCA,IA6FKitB,GAAkBC,GAAsBC,GAAkBC,GAC7DC,GAAyBC,GACzBC,GACAxL,EAhGEyL,GAAY,IAAIrmB,OAAQ,KAAOgZ,EAAO,kBAAmB,GAAI,EAqC7DsN,GAAY,IAAItmB,OAAQmZ,EAAUjW,KAAM,GAAI,EAAG,GAAI,EAQtD,SAASqjB,KAGR,IAYIC,EAZE5L,IAINwL,GAAUxN,MAAM6N,QAAU,+EAE1B7L,EAAIhC,MAAM6N,QACT,4HAGD5hB,EAAgBpN,YAAa2uB,EAAU,EAAE3uB,YAAamjB,CAAI,EAEtD4L,EAAW3xB,EAAO8wB,iBAAkB/K,CAAI,EAC5CkL,GAAoC,OAAjBU,EAASxhB,IAG5BmhB,GAAsE,KAA9CO,GAAoBF,EAASG,UAAW,EAIhE/L,EAAIhC,MAAMgO,MAAQ,MAClBX,GAA6D,KAAzCS,GAAoBF,EAASI,KAAM,EAIvDb,GAAgE,KAAzCW,GAAoBF,EAASK,KAAM,EAM1DjM,EAAIhC,MAAMkO,SAAW,WACrBd,GAAiE,KAA9CU,GAAoB9L,EAAImM,YAAc,CAAE,EAE3DliB,EAAgBlN,YAAayuB,EAAU,EAIvCxL,EAAM,KACP,CAEA,SAAS8L,GAAoBM,GAC5B,OAAOlsB,KAAKmsB,MAAOC,WAAYF,CAAQ,CAAE,CAC1C,CA2FD,SAASG,GAAQhuB,EAAMgB,EAAMitB,GAC5B,IAAqBC,EAAUxuB,EAM9B+f,EAAQzf,EAAKyf,MAqCd,OAnCAwO,EAAWA,GAAY3B,GAAWtsB,CAAK,KAQzB,MAFbN,EAAMuuB,EAASE,iBAAkBntB,CAAK,GAAKitB,EAAUjtB,KAEjC2e,EAAY3f,CAAK,IACpCN,EAAMf,EAAO8gB,MAAOzf,EAAMgB,CAAK,GAQ3B,CAAC5D,EAAQgxB,eAAe,IAAKlB,GAAUvjB,KAAMjK,CAAI,GAAKytB,GAAUxjB,KAAM3I,CAAK,IAG/E0sB,EAAQjO,EAAMiO,MACdW,EAAW5O,EAAM4O,SACjBH,EAAWzO,EAAMyO,SAGjBzO,EAAM4O,SAAW5O,EAAMyO,SAAWzO,EAAMiO,MAAQhuB,EAChDA,EAAMuuB,EAASP,MAGfjO,EAAMiO,MAAQA,EACdjO,EAAM4O,SAAWA,EACjB5O,EAAMyO,SAAWA,GAIJzsB,KAAAA,IAAR/B,EAINA,EAAM,GACNA,CACF,CAGA,SAAS4uB,GAAcC,EAAaC,GAGnC,MAAO,CACNlvB,IAAK,WACJ,GAAKivB,CAAAA,EAAY,EASjB,OAAS5yB,KAAK2D,IAAMkvB,GAAS7xB,MAAOhB,KAAMsE,SAAU,EALnD,OAAOtE,KAAK2D,GAMd,CACD,CACD,CA7JE2tB,GAAY1xB,EAAS0C,cAAe,KAAM,GAC1CwjB,EAAMlmB,EAAS0C,cAAe,KAAM,GAG3BwhB,QAMVgC,EAAIhC,MAAMgP,eAAiB,cAC3BhN,EAAIG,UAAW,CAAA,CAAK,EAAEnC,MAAMgP,eAAiB,GAC7CrxB,EAAQsxB,gBAA+C,gBAA7BjN,EAAIhC,MAAMgP,eAEpC9vB,EAAOmC,OAAQ1D,EAAS,CACvBuxB,kBAAmB,WAElB,OADAvB,GAAkB,EACXR,EACR,EACAwB,eAAgB,WAEf,OADAhB,GAAkB,EACXN,EACR,EACA8B,cAAe,WAEd,OADAxB,GAAkB,EACXT,EACR,EACAkC,mBAAoB,WAEnB,OADAzB,GAAkB,EACXJ,EACR,EACA8B,cAAe,WAEd,OADA1B,GAAkB,EACXP,EACR,EAWAkC,qBAAsB,WACrB,IAAIC,EAAO/M,EAAagN,EAmCxB,OAlCgC,MAA3BlC,KACJiC,EAAQzzB,EAAS0C,cAAe,OAAQ,EACxCgkB,EAAK1mB,EAAS0C,cAAe,IAAK,EAClCixB,EAAU3zB,EAAS0C,cAAe,KAAM,EAExC+wB,EAAMvP,MAAM6N,QAAU,2DACtBrL,EAAGxC,MAAM6N,QAAU,mBAKnBrL,EAAGxC,MAAM0P,OAAS,MAClBD,EAAQzP,MAAM0P,OAAS,MAQvBD,EAAQzP,MAAMC,QAAU,QAExBhU,EACEpN,YAAa0wB,CAAM,EACnB1wB,YAAa2jB,CAAG,EAChB3jB,YAAa4wB,CAAQ,EAEvBD,EAAUvzB,EAAO8wB,iBAAkBvK,CAAG,EACtC8K,GAA4BqC,SAAUH,EAAQE,OAAQ,EAAG,EACxDC,SAAUH,EAAQI,eAAgB,EAAG,EACrCD,SAAUH,EAAQK,kBAAmB,EAAG,IAAQrN,EAAGsN,aAEpD7jB,EAAgBlN,YAAawwB,CAAM,GAE7BjC,EACR,CACD,CAAE,GA6EH,IAAIyC,GAAc,CAAE,SAAU,MAAO,MACpCC,GAAal0B,EAAS0C,cAAe,KAAM,EAAEwhB,MAC7CiQ,GAAc,GAkBf,SAASC,GAAe3uB,GACvB,IAAI4uB,EAAQjxB,EAAOkxB,SAAU7uB,IAAU0uB,GAAa1uB,GAEpD,OAAK4uB,IAGA5uB,KAAQyuB,GACLzuB,EAED0uB,GAAa1uB,GAxBrB,SAAyBA,GAMxB,IAHA,IAAI8uB,EAAU9uB,EAAM,GAAIwc,YAAY,EAAIxc,EAAK1E,MAAO,CAAE,EACrDwB,EAAI0xB,GAAYvwB,OAETnB,CAAC,IAER,IADAkD,EAAOwuB,GAAa1xB,GAAMgyB,KACbL,GACZ,OAAOzuB,CAGV,EAY8CA,CAAK,GAAKA,EACxD,CAGA,IAKC+uB,GAAe,4BACfC,GAAc,MACdC,GAAU,CAAEtC,SAAU,WAAYuC,WAAY,SAAUxQ,QAAS,OAAQ,EACzEyQ,GAAqB,CACpBC,cAAe,IACfC,WAAY,KACb,EAED,SAASC,GAAmB/vB,EAAOuC,EAAOytB,GAIzC,IAAI5tB,EAAUod,GAAQ1W,KAAMvG,CAAM,EAClC,OAAOH,EAGNhB,KAAK6uB,IAAK,EAAG7tB,EAAS,IAAQ4tB,GAAY,EAAI,GAAM5tB,EAAS,IAAO,MACpEG,CACF,CAEA,SAAS2tB,GAAoBzwB,EAAM0wB,EAAWC,EAAKC,EAAaC,EAAQC,GACvE,IAAIhzB,EAAkB,UAAd4yB,EAAwB,EAAI,EACnCK,EAAQ,EACRC,EAAQ,EAGT,GAAKL,KAAUC,EAAc,SAAW,WACvC,OAAO,EAGR,KAAQ9yB,EAAI,EAAGA,GAAK,EAGN,WAAR6yB,IACJK,GAASryB,EAAOihB,IAAK5f,EAAM2wB,EAAM3Q,EAAWliB,GAAK,CAAA,EAAM+yB,CAAO,GAIzDD,GAmBQ,YAARD,IACJK,GAASryB,EAAOihB,IAAK5f,EAAM,UAAYggB,EAAWliB,GAAK,CAAA,EAAM+yB,CAAO,GAIxD,WAARF,IACJK,GAASryB,EAAOihB,IAAK5f,EAAM,SAAWggB,EAAWliB,GAAM,QAAS,CAAA,EAAM+yB,CAAO,KAtB9EG,GAASryB,EAAOihB,IAAK5f,EAAM,UAAYggB,EAAWliB,GAAK,CAAA,EAAM+yB,CAAO,EAGvD,YAARF,EACJK,GAASryB,EAAOihB,IAAK5f,EAAM,SAAWggB,EAAWliB,GAAM,QAAS,CAAA,EAAM+yB,CAAO,EAI7EE,GAASpyB,EAAOihB,IAAK5f,EAAM,SAAWggB,EAAWliB,GAAM,QAAS,CAAA,EAAM+yB,CAAO,GAoChF,MAhBK,CAACD,GAA8B,GAAfE,IAIpBE,GAASrvB,KAAK6uB,IAAK,EAAG7uB,KAAKsvB,KAC1BjxB,EAAM,SAAW0wB,EAAW,GAAIlT,YAAY,EAAIkT,EAAUp0B,MAAO,CAAE,GACnEw0B,EACAE,EACAD,EACA,EAID,CAAE,GAAK,GAGDC,CACR,CAEA,SAASE,GAAkBlxB,EAAM0wB,EAAWK,GAG3C,IAAIF,EAASvE,GAAWtsB,CAAK,EAK5B4wB,GADkB,CAACxzB,EAAQuxB,kBAAkB,GAAKoC,IAEE,eAAnDpyB,EAAOihB,IAAK5f,EAAM,YAAa,CAAA,EAAO6wB,CAAO,EAC9CM,EAAmBP,EAEnB7yB,EAAMiwB,GAAQhuB,EAAM0wB,EAAWG,CAAO,EACtCO,EAAa,SAAWV,EAAW,GAAIlT,YAAY,EAAIkT,EAAUp0B,MAAO,CAAE,EAI3E,GAAK4wB,GAAUvjB,KAAM5L,CAAI,EAAI,CAC5B,GAAK,CAACgzB,EACL,OAAOhzB,EAERA,EAAM,MACP,CAwCA,OAlCO,CAACX,EAAQuxB,kBAAkB,GAAKiC,GAMtC,CAACxzB,EAAQ2xB,qBAAqB,GAAKvmB,EAAUxI,EAAM,IAAK,GAIhD,SAARjC,GAIA,CAACgwB,WAAYhwB,CAAI,GAAsD,WAAjDY,EAAOihB,IAAK5f,EAAM,UAAW,CAAA,EAAO6wB,CAAO,IAGjE7wB,EAAKqxB,eAAe,EAAEpyB,SAEtB2xB,EAAiE,eAAnDjyB,EAAOihB,IAAK5f,EAAM,YAAa,CAAA,EAAO6wB,CAAO,EAK3DM,EAAmBC,KAAcpxB,KAEhCjC,EAAMiC,EAAMoxB,KAKdrzB,EAAMgwB,WAAYhwB,CAAI,GAAK,GAI1B0yB,GACCzwB,EACA0wB,EACAK,IAAWH,EAAc,SAAW,WACpCO,EACAN,EAGA9yB,CACD,EACG,IACL,CA8SA,SAASuzB,EAAOtxB,EAAMe,EAASod,EAAMxd,EAAK4wB,GACzC,OAAO,IAAID,EAAMpyB,UAAUH,KAAMiB,EAAMe,EAASod,EAAMxd,EAAK4wB,CAAO,CACnE,CA9SA5yB,EAAOmC,OAAQ,CAId0wB,SAAU,CACTC,QAAS,CACRnyB,IAAK,SAAUU,EAAMiuB,GACpB,GAAKA,EAIJ,MAAe,MADXvuB,EAAMsuB,GAAQhuB,EAAM,SAAU,GACd,IAAMN,CAE5B,CACD,CACD,EAGAkhB,UAAW,CACV8Q,wBAA2B,CAAA,EAC3BC,YAAe,CAAA,EACfC,YAAe,CAAA,EACfC,SAAY,CAAA,EACZC,WAAc,CAAA,EACdzB,WAAc,CAAA,EACd0B,SAAY,CAAA,EACZC,WAAc,CAAA,EACdC,cAAiB,CAAA,EACjBC,gBAAmB,CAAA,EACnBC,QAAW,CAAA,EACXC,WAAc,CAAA,EACdC,aAAgB,CAAA,EAChBC,WAAc,CAAA,EACdb,QAAW,CAAA,EACXc,MAAS,CAAA,EACTC,QAAW,CAAA,EACXC,OAAU,CAAA,EACVC,OAAU,CAAA,EACVC,KAAQ,CAAA,CACT,EAIA9C,SAAU,GAGVpQ,MAAO,SAAUzf,EAAMgB,EAAM8B,EAAOiuB,GAGnC,GAAM/wB,GAA0B,IAAlBA,EAAKjE,UAAoC,IAAlBiE,EAAKjE,UAAmBiE,EAAKyf,MAAlE,CAKA,IAAI/f,EAAKpC,EAAM2hB,EACd2T,EAAWnV,EAAWzc,CAAK,EAC3B6xB,EAAe7C,GAAYrmB,KAAM3I,CAAK,EACtCye,EAAQzf,EAAKyf,MAad,GARMoT,IACL7xB,EAAO2uB,GAAeiD,CAAS,GAIhC3T,EAAQtgB,EAAO6yB,SAAUxwB,IAAUrC,EAAO6yB,SAAUoB,GAGrCnxB,KAAAA,IAAVqB,EA0CJ,OAAKmc,GAAS,QAASA,GACwBxd,KAAAA,KAA5C/B,EAAMuf,EAAM3f,IAAKU,EAAM,CAAA,EAAO+wB,CAAM,GAE/BrxB,EAID+f,EAAOze,GA7CA,YAHd1D,EAAO,OAAOwF,KAGcpD,EAAMqgB,GAAQ1W,KAAMvG,CAAM,IAAOpD,EAAK,KACjEoD,EAAQqd,GAAWngB,EAAMgB,EAAMtB,CAAI,EAGnCpC,EAAO,UAIM,MAATwF,GAAiBA,GAAUA,IAOlB,WAATxF,GAAsBu1B,IAC1B/vB,GAASpD,GAAOA,EAAK,KAASf,EAAOiiB,UAAWgS,GAAa,GAAK,OAI7Dx1B,EAAQsxB,iBAA6B,KAAV5rB,GAAiD,IAAjC9B,EAAKnE,QAAS,YAAa,IAC3E4iB,EAAOze,GAAS,WAIXie,GAAY,QAASA,GACsBxd,KAAAA,KAA9CqB,EAAQmc,EAAMhB,IAAKje,EAAM8C,EAAOiuB,CAAM,MAEnC8B,EACJpT,EAAMqT,YAAa9xB,EAAM8B,CAAM,EAE/B2c,EAAOze,GAAS8B,EAtDnB,CAsED,EAEA8c,IAAK,SAAU5f,EAAMgB,EAAM+vB,EAAOF,GACjC,IAAI9yB,EACH60B,EAAWnV,EAAWzc,CAAK,EA6B5B,OA5BgBgvB,GAAYrmB,KAAM3I,CAAK,IAMtCA,EAAO2uB,GAAeiD,CAAS,GAiBnB,YAJZ70B,EADY0D,KAAAA,KAJZ1D,GAJDkhB,EAAQtgB,EAAO6yB,SAAUxwB,IAAUrC,EAAO6yB,SAAUoB,KAGtC,QAAS3T,EAChBA,EAAM3f,IAAKU,EAAM,CAAA,EAAM+wB,CAAM,EAI/BhzB,GACEiwB,GAAQhuB,EAAMgB,EAAM6vB,CAAO,EAI7B9yB,IAAoBiD,KAAQmvB,KAChCpyB,EAAMoyB,GAAoBnvB,KAIZ,KAAV+vB,GAAgBA,KACpBxxB,EAAMwuB,WAAYhwB,CAAI,EACL,CAAA,IAAVgzB,GAAkBgC,SAAUxzB,CAAI,GAAIA,GAAO,EAG5CxB,CACR,CACD,CAAE,EAEFY,EAAOkB,KAAM,CAAE,SAAU,SAAW,SAAUsD,EAAIutB,GACjD/xB,EAAO6yB,SAAUd,GAAc,CAC9BpxB,IAAK,SAAUU,EAAMiuB,EAAU8C,GAC9B,GAAK9C,EAIJ,MAAO8B,CAAAA,GAAapmB,KAAMhL,EAAOihB,IAAK5f,EAAM,SAAU,CAAE,GAQpDA,EAAKqxB,eAAe,EAAEpyB,QAAWe,EAAKgzB,sBAAsB,EAAEtF,MAIjEwD,GAAkBlxB,EAAM0wB,EAAWK,CAAM,EAHzCtE,GAAMzsB,EAAMiwB,GAAS,WACpB,OAAOiB,GAAkBlxB,EAAM0wB,EAAWK,CAAM,CACjD,CAAE,CAGL,EAEA9S,IAAK,SAAUje,EAAM8C,EAAOiuB,GAC3B,IACCF,EAASvE,GAAWtsB,CAAK,EAIzBizB,EAAqB,CAAC71B,EAAQ0xB,cAAc,GACvB,aAApB+B,EAAOlD,SAIRiD,GADkBqC,GAAsBlC,IAEY,eAAnDpyB,EAAOihB,IAAK5f,EAAM,YAAa,CAAA,EAAO6wB,CAAO,EAC9CN,EAAWQ,EACVN,GACCzwB,EACA0wB,EACAK,EACAH,EACAC,CACD,EACA,EAqBF,OAjBKD,GAAeqC,IACnB1C,GAAY5uB,KAAKsvB,KAChBjxB,EAAM,SAAW0wB,EAAW,GAAIlT,YAAY,EAAIkT,EAAUp0B,MAAO,CAAE,GACnEyxB,WAAY8C,EAAQH,EAAY,EAChCD,GAAoBzwB,EAAM0wB,EAAW,SAAU,CAAA,EAAOG,CAAO,EAC7D,EACD,GAIIN,IAAc5tB,EAAUod,GAAQ1W,KAAMvG,CAAM,IACnB,QAA3BH,EAAS,IAAO,QAElB3C,EAAKyf,MAAOiR,GAAc5tB,EAC1BA,EAAQnE,EAAOihB,IAAK5f,EAAM0wB,CAAU,GAG9BJ,GAAmBtwB,EAAM8C,EAAOytB,CAAS,CACjD,CACD,CACD,CAAE,EAEF5xB,EAAO6yB,SAAShE,WAAac,GAAclxB,EAAQyxB,mBAClD,SAAU7uB,EAAMiuB,GACf,GAAKA,EACJ,OAASF,WAAYC,GAAQhuB,EAAM,YAAa,CAAE,GACjDA,EAAKgzB,sBAAsB,EAAEE,KAC5BzG,GAAMzsB,EAAM,CAAEwtB,WAAY,CAAE,EAAG,WAC9B,OAAOxtB,EAAKgzB,sBAAsB,EAAEE,IACrC,CAAE,GACA,IAEN,CACD,EAGAv0B,EAAOkB,KAAM,CACZszB,OAAQ,GACRC,QAAS,GACTC,OAAQ,OACT,EAAG,SAAUC,EAAQC,GACpB50B,EAAO6yB,SAAU8B,EAASC,GAAW,CACpCC,OAAQ,SAAU1wB,GAOjB,IANA,IAAIhF,EAAI,EACP21B,EAAW,GAGXC,EAAyB,UAAjB,OAAO5wB,EAAqBA,EAAMI,MAAO,GAAI,EAAI,CAAEJ,GAEpDhF,EAAI,EAAGA,CAAC,GACf21B,EAAUH,EAAStT,EAAWliB,GAAMy1B,GACnCG,EAAO51B,IAAO41B,EAAO51B,EAAI,IAAO41B,EAAO,GAGzC,OAAOD,CACR,CACD,EAEgB,WAAXH,IACJ30B,EAAO6yB,SAAU8B,EAASC,GAAStV,IAAMqS,GAE3C,CAAE,EAEF3xB,EAAOG,GAAGgC,OAAQ,CACjB8e,IAAK,SAAU5e,EAAM8B,GACpB,OAAO+Z,EAAQlhB,KAAM,SAAUqE,EAAMgB,EAAM8B,GAC1C,IAAI+tB,EAAQpwB,EACXV,EAAM,GACNjC,EAAI,EAEL,GAAKyD,MAAMC,QAASR,CAAK,EAAI,CAI5B,IAHA6vB,EAASvE,GAAWtsB,CAAK,EACzBS,EAAMO,EAAK/B,OAEHnB,EAAI2C,EAAK3C,CAAC,GACjBiC,EAAKiB,EAAMlD,IAAQa,EAAOihB,IAAK5f,EAAMgB,EAAMlD,GAAK,CAAA,EAAO+yB,CAAO,EAG/D,OAAO9wB,CACR,CAEA,OAAiB0B,KAAAA,IAAVqB,EACNnE,EAAO8gB,MAAOzf,EAAMgB,EAAM8B,CAAM,EAChCnE,EAAOihB,IAAK5f,EAAMgB,CAAK,CACzB,EAAGA,EAAM8B,EAA0B,EAAnB7C,UAAUhB,MAAW,CACtC,CACD,CAAE,IAMFN,EAAO2yB,MAAQA,GAETpyB,UAAY,CACjBE,YAAakyB,EACbvyB,KAAM,SAAUiB,EAAMe,EAASod,EAAMxd,EAAK4wB,EAAQ5Q,GACjDhlB,KAAKqE,KAAOA,EACZrE,KAAKwiB,KAAOA,EACZxiB,KAAK41B,OAASA,GAAU5yB,EAAO4yB,OAAOpP,SACtCxmB,KAAKoF,QAAUA,EACfpF,KAAKsU,MAAQtU,KAAKgsB,IAAMhsB,KAAKqP,IAAI,EACjCrP,KAAKgF,IAAMA,EACXhF,KAAKglB,KAAOA,IAAUhiB,EAAOiiB,UAAWzC,GAAS,GAAK,KACvD,EACAnT,IAAK,WACJ,IAAIiU,EAAQqS,EAAMqC,UAAWh4B,KAAKwiB,MAElC,OAAOc,GAASA,EAAM3f,IACrB2f,EACAqS,EAAMqC,UAAUxR,UADV7iB,IAAK3D,IAAK,CAElB,EACAi4B,IAAK,SAAUC,GACd,IAAIC,EACH7U,EAAQqS,EAAMqC,UAAWh4B,KAAKwiB,MAoB/B,OAlBKxiB,KAAKoF,QAAQgzB,SACjBp4B,KAAKq4B,IAAMF,EAAQn1B,EAAO4yB,OAAQ51B,KAAK41B,QACtCsC,EAASl4B,KAAKoF,QAAQgzB,SAAWF,EAAS,EAAG,EAAGl4B,KAAKoF,QAAQgzB,QAC9D,EAEAp4B,KAAKq4B,IAAMF,EAAQD,EAEpBl4B,KAAKgsB,KAAQhsB,KAAKgF,IAAMhF,KAAKsU,OAAU6jB,EAAQn4B,KAAKsU,MAE/CtU,KAAKoF,QAAQkzB,MACjBt4B,KAAKoF,QAAQkzB,KAAKx3B,KAAMd,KAAKqE,KAAMrE,KAAKgsB,IAAKhsB,IAAK,GAG9CsjB,GAASA,EAAMhB,IACnBgB,EAEAqS,EAAMqC,UAAUxR,UAFVlE,IAAKtiB,IAAK,EAIVA,IACR,CACD,GAEgBoD,KAAKG,UAAYoyB,EAAMpyB,WAEvCoyB,EAAMqC,UAAY,CACjBxR,SAAU,CACT7iB,IAAK,SAAU+gB,GAKd,OAA6B,IAAxBA,EAAMrgB,KAAKjE,UACa,MAA5BskB,EAAMrgB,KAAMqgB,EAAMlC,OAAoD,MAAlCkC,EAAMrgB,KAAKyf,MAAOY,EAAMlC,MACrDkC,EAAMrgB,KAAMqgB,EAAMlC,OAO1B7O,EAAS3Q,EAAOihB,IAAKS,EAAMrgB,KAAMqgB,EAAMlC,KAAM,EAAG,IAGnB,SAAX7O,EAAwBA,EAAJ,CACvC,EACA2O,IAAK,SAAUoC,GAKT1hB,EAAOu1B,GAAGD,KAAM5T,EAAMlC,MAC1Bxf,EAAOu1B,GAAGD,KAAM5T,EAAMlC,MAAQkC,CAAM,EACD,IAAxBA,EAAMrgB,KAAKjE,UACtB4C,CAAAA,EAAO6yB,SAAUnR,EAAMlC,OAC6B,MAAnDkC,EAAMrgB,KAAKyf,MAAOkQ,GAAetP,EAAMlC,IAAK,GAG7CkC,EAAMrgB,KAAMqgB,EAAMlC,MAASkC,EAAMsH,IAFjChpB,EAAO8gB,MAAOY,EAAMrgB,KAAMqgB,EAAMlC,KAAMkC,EAAMsH,IAAMtH,EAAMM,IAAK,CAI/D,CACD,CACD,GAIgBwT,UAAY7C,EAAMqC,UAAUS,WAAa,CACxDnW,IAAK,SAAUoC,GACTA,EAAMrgB,KAAKjE,UAAYskB,EAAMrgB,KAAKzB,aACtC8hB,EAAMrgB,KAAMqgB,EAAMlC,MAASkC,EAAMsH,IAEnC,CACD,EAEAhpB,EAAO4yB,OAAS,CACf8C,OAAQ,SAAUC,GACjB,OAAOA,CACR,EACAC,MAAO,SAAUD,GAChB,MAAO,GAAM3yB,KAAK6yB,IAAKF,EAAI3yB,KAAK8yB,EAAG,EAAI,CACxC,EACAtS,SAAU,OACX,EAEAxjB,EAAOu1B,GAAK5C,EAAMpyB,UAAUH,KAG5BJ,EAAOu1B,GAAGD,KAAO,GAKjB,IACCS,EAAOC,GAmrBHjoB,EAEHkoB,EAprBDC,GAAW,yBACXC,GAAO,cAER,SAASC,KACHJ,KACqB,CAAA,IAApBp5B,EAASy5B,QAAoBt5B,EAAOu5B,sBACxCv5B,EAAOu5B,sBAAuBF,EAAS,EAEvCr5B,EAAO6f,WAAYwZ,GAAUp2B,EAAOu1B,GAAGgB,QAAS,EAGjDv2B,EAAOu1B,GAAGiB,KAAK,EAEjB,CAGA,SAASC,KAIR,OAHA15B,EAAO6f,WAAY,WAClBmZ,EAAQjzB,KAAAA,CACT,CAAE,EACOizB,EAAQlvB,KAAKmiB,IAAI,CAC3B,CAGA,SAAS0N,GAAO/3B,EAAMg4B,GACrB,IAAI9L,EACH1rB,EAAI,EACJ8M,EAAQ,CAAEukB,OAAQ7xB,CAAK,EAKxB,IADAg4B,EAAeA,EAAe,EAAI,EAC1Bx3B,EAAI,EAAGA,GAAK,EAAIw3B,EAEvB1qB,EAAO,UADP4e,EAAQxJ,EAAWliB,KACS8M,EAAO,UAAY4e,GAAUlsB,EAO1D,OAJKg4B,IACJ1qB,EAAM6mB,QAAU7mB,EAAM8iB,MAAQpwB,GAGxBsN,CACR,CAEA,SAAS2qB,GAAazyB,EAAOqb,EAAMqX,GAKlC,IAJA,IAAInV,EACHsK,GAAe8K,EAAUC,SAAUvX,IAAU,IAAKzhB,OAAQ+4B,EAAUC,SAAU,IAAM,EACpF3e,EAAQ,EACR9X,EAAS0rB,EAAW1rB,OACb8X,EAAQ9X,EAAQ8X,CAAK,GAC5B,GAAOsJ,EAAQsK,EAAY5T,GAAQta,KAAM+4B,EAAWrX,EAAMrb,CAAM,EAG/D,OAAOud,CAGV,CAmNA,SAASoV,EAAWz1B,EAAM21B,EAAY50B,GACrC,IAAIuO,EACHsmB,EAtCG7e,EAAO/V,EAAMuwB,EAAQzuB,EAAOmc,EAuC/BlI,EAAQ,EACR9X,EAASw2B,EAAUI,WAAW52B,OAC9B6a,EAAWnb,EAAO8a,SAAS,EAAEI,OAAQ,WAGpC,OAAOsb,EAAKn1B,IACb,CAAE,EACFm1B,EAAO,WACN,GAAKS,CAAAA,EAAL,CAaA,IAVA,IAAIE,EAAcpB,GAASU,GAAY,EACtCtZ,EAAYna,KAAK6uB,IAAK,EAAGgF,EAAUO,UAAYP,EAAUzB,SAAW+B,CAAY,EAKhFjC,EAAU,GADH/X,EAAY0Z,EAAUzB,UAAY,GAEzChd,EAAQ,EACR9X,EAASu2B,EAAUQ,OAAO/2B,OAEnB8X,EAAQ9X,EAAQ8X,CAAK,GAC5Bye,EAAUQ,OAAQjf,GAAQ6c,IAAKC,CAAQ,EAMxC,GAHA/Z,EAASkB,WAAYhb,EAAM,CAAEw1B,EAAW3B,EAAS/X,EAAY,EAGxD+X,EAAU,GAAK50B,EACnB,OAAO6c,EAIF7c,GACL6a,EAASkB,WAAYhb,EAAM,CAAEw1B,EAAW,EAAG,EAAI,EAIhD1b,EAASmB,YAAajb,EAAM,CAAEw1B,EAAY,CA5B1C,CA6BA,MAAO,CAAA,CACR,EACAA,EAAY1b,EAASzB,QAAS,CAC7BrY,KAAMA,EACNsnB,MAAO3oB,EAAOmC,OAAQ,GAAI60B,CAAW,EACrCM,KAAMt3B,EAAOmC,OAAQ,CAAA,EAAM,CAC1Bo1B,cAAe,GACf3E,OAAQ5yB,EAAO4yB,OAAOpP,QACvB,EAAGphB,CAAQ,EACXo1B,mBAAoBR,EACpBS,gBAAiBr1B,EACjBg1B,UAAWrB,GAASU,GAAY,EAChCrB,SAAUhzB,EAAQgzB,SAClBiC,OAAQ,GACRT,YAAa,SAAUpX,EAAMxd,GACxB0f,EAAQ1hB,EAAO2yB,MAAOtxB,EAAMw1B,EAAUS,KAAM9X,EAAMxd,EACrD60B,EAAUS,KAAKC,cAAe/X,IAAUqX,EAAUS,KAAK1E,MAAO,EAE/D,OADAiE,EAAUQ,OAAOp5B,KAAMyjB,CAAM,EACtBA,CACR,EACAlB,KAAM,SAAUkX,GACf,IAAItf,EAAQ,EAIX9X,EAASo3B,EAAUb,EAAUQ,OAAO/2B,OAAS,EAC9C,GAAK22B,CAAAA,EAAL,CAIA,IADAA,EAAU,CAAA,EACF7e,EAAQ9X,EAAQ8X,CAAK,GAC5Bye,EAAUQ,OAAQjf,GAAQ6c,IAAK,CAAE,EAI7ByC,GACJvc,EAASkB,WAAYhb,EAAM,CAAEw1B,EAAW,EAAG,EAAI,EAC/C1b,EAASmB,YAAajb,EAAM,CAAEw1B,EAAWa,EAAU,GAEnDvc,EAASuB,WAAYrb,EAAM,CAAEw1B,EAAWa,EAAU,CAXnD,CAaA,OAAO16B,IACR,CACD,CAAE,EACF2rB,EAAQkO,EAAUlO,MA3HCA,EA6HRA,EA7He4O,EA6HRV,EAAUS,KAAKC,cAzHlC,IAAMnf,KAASuQ,EAed,GAbAiK,EAAS2E,EADTl1B,EAAOyc,EAAW1G,CAAM,GAExBjU,EAAQwkB,EAAOvQ,GACVxV,MAAMC,QAASsB,CAAM,IACzByuB,EAASzuB,EAAO,GAChBA,EAAQwkB,EAAOvQ,GAAUjU,EAAO,IAG5BiU,IAAU/V,IACdsmB,EAAOtmB,GAAS8B,EAChB,OAAOwkB,EAAOvQ,KAGfkI,EAAQtgB,EAAO6yB,SAAUxwB,KACX,WAAYie,EAMzB,IAAMlI,KALNjU,EAAQmc,EAAMuU,OAAQ1wB,CAAM,EAC5B,OAAOwkB,EAAOtmB,GAIC8B,EACNiU,KAASuQ,IAChBA,EAAOvQ,GAAUjU,EAAOiU,GACxBmf,EAAenf,GAAUwa,QAI3B2E,EAAel1B,GAASuwB,EA+F1B,KAAQxa,EAAQ9X,EAAQ8X,CAAK,GAE5B,GADAzH,EAASmmB,EAAUI,WAAY9e,GAAQta,KAAM+4B,EAAWx1B,EAAMsnB,EAAOkO,EAAUS,IAAK,EAMnF,OAJKp6B,EAAYyT,EAAO6P,IAAK,IAC5BxgB,EAAOugB,YAAasW,EAAUx1B,KAAMw1B,EAAUS,KAAKhd,KAAM,EAAEkG,KAC1D7P,EAAO6P,KAAKmX,KAAMhnB,CAAO,GAEpBA,EAyBT,OArBA3Q,EAAOoB,IAAKunB,EAAOiO,GAAaC,CAAU,EAErC35B,EAAY25B,EAAUS,KAAKhmB,KAAM,GACrCulB,EAAUS,KAAKhmB,MAAMxT,KAAMuD,EAAMw1B,CAAU,EAI5CA,EACEnb,SAAUmb,EAAUS,KAAK5b,QAAS,EAClC1U,KAAM6vB,EAAUS,KAAKtwB,KAAM6vB,EAAUS,KAAKM,QAAS,EACnDje,KAAMkd,EAAUS,KAAK3d,IAAK,EAC1BuB,OAAQ2b,EAAUS,KAAKpc,MAAO,EAEhClb,EAAOu1B,GAAGsC,MACT73B,EAAOmC,OAAQq0B,EAAM,CACpBn1B,KAAMA,EACNy2B,KAAMjB,EACNvc,MAAOuc,EAAUS,KAAKhd,KACvB,CAAE,CACH,EAEOuc,CACR,CAEA72B,EAAO82B,UAAY92B,EAAOmC,OAAQ20B,EAAW,CAE5CC,SAAU,CACTgB,IAAK,CAAE,SAAUvY,EAAMrb,GACtB,IAAIud,EAAQ1kB,KAAK45B,YAAapX,EAAMrb,CAAM,EAE1C,OADAqd,GAAWE,EAAMrgB,KAAMme,EAAM4B,GAAQ1W,KAAMvG,CAAM,EAAGud,CAAM,EACnDA,CACR,EACD,EAEAsW,QAAS,SAAUrP,EAAOxnB,GAYzB,IAJA,IAAIqe,EACHpH,EAAQ,EACR9X,GAPAqoB,EAFIzrB,EAAYyrB,CAAM,GACtBxnB,EAAWwnB,EACH,CAAE,MAEFA,EAAMte,MAAO2O,CAAc,GAKpB1Y,OAER8X,EAAQ9X,EAAQ8X,CAAK,GAC5BoH,EAAOmJ,EAAOvQ,GACd0e,EAAUC,SAAUvX,GAASsX,EAAUC,SAAUvX,IAAU,GAC3DsX,EAAUC,SAAUvX,GAAOxQ,QAAS7N,CAAS,CAE/C,EAEA+1B,WAAY,CA3Wb,SAA2B71B,EAAMsnB,EAAO2O,GACvC,IAAI9X,EAAMrb,EAAOse,EAAQnC,EAAO2X,EAASC,EAAWC,EACnDC,EAAQ,UAAWzP,GAAS,WAAYA,EACxCmP,EAAO96B,KACPmuB,EAAO,GACPrK,EAAQzf,EAAKyf,MACbuV,EAASh1B,EAAKjE,UAAYyjB,GAAoBxf,CAAK,EACnDg3B,EAAW3Y,EAAS/e,IAAKU,EAAM,QAAS,EA6BzC,IAAMme,KA1BA8X,EAAKhd,QAEa,OADvBgG,EAAQtgB,EAAOugB,YAAalf,EAAM,IAAK,GAC5Bi3B,WACVhY,EAAMgY,SAAW,EACjBL,EAAU3X,EAAMrN,MAAMgH,KACtBqG,EAAMrN,MAAMgH,KAAO,WACZqG,EAAMgY,UACXL,EAAQ,CAEV,GAED3X,EAAMgY,QAAQ,GAEdR,EAAK5c,OAAQ,WAGZ4c,EAAK5c,OAAQ,WACZoF,EAAMgY,QAAQ,GACRt4B,EAAOsa,MAAOjZ,EAAM,IAAK,EAAEf,QAChCggB,EAAMrN,MAAMgH,KAAK,CAEnB,CAAE,CACH,CAAE,GAIW0O,EAEb,GADAxkB,EAAQwkB,EAAOnJ,GACV0W,GAASlrB,KAAM7G,CAAM,EAAI,CAG7B,GAFA,OAAOwkB,EAAOnJ,GACdiD,EAASA,GAAoB,WAAVte,EACdA,KAAYkyB,EAAS,OAAS,QAAW,CAI7C,GAAe,SAAVlyB,GAAoBk0B,CAAAA,GAAiCv1B,KAAAA,IAArBu1B,EAAU7Y,GAK9C,SAJA6W,EAAS,CAAA,CAMX,CACAlL,EAAM3L,GAAS6Y,GAAYA,EAAU7Y,IAAUxf,EAAO8gB,MAAOzf,EAAMme,CAAK,CACzE,CAKD,IADA0Y,EAAY,CAACl4B,EAAOyD,cAAeklB,CAAM,IACtB3oB,CAAAA,EAAOyD,cAAe0nB,CAAK,EA8D9C,IAAM3L,KAzDD4Y,GAA2B,IAAlB/2B,EAAKjE,WAMlBk6B,EAAKiB,SAAW,CAAEzX,EAAMyX,SAAUzX,EAAM0X,UAAW1X,EAAM2X,WAIlC,OADvBN,EAAiBE,GAAYA,EAAStX,WAErCoX,EAAiBzY,EAAS/e,IAAKU,EAAM,SAAU,GAG/B,UADjB0f,EAAU/gB,EAAOihB,IAAK5f,EAAM,SAAU,KAEhC82B,EACJpX,EAAUoX,GAIV/V,EAAU,CAAE/gB,GAAQ,CAAA,CAAK,EACzB82B,EAAiB92B,EAAKyf,MAAMC,SAAWoX,EACvCpX,EAAU/gB,EAAOihB,IAAK5f,EAAM,SAAU,EACtC+gB,EAAU,CAAE/gB,EAAO,IAKJ,WAAZ0f,GAAoC,iBAAZA,GAAgD,MAAlBoX,IACrB,SAAhCn4B,EAAOihB,IAAK5f,EAAM,OAAQ,IAGxB62B,IACLJ,EAAK9wB,KAAM,WACV8Z,EAAMC,QAAUoX,CACjB,CAAE,EACqB,MAAlBA,IACJpX,EAAUD,EAAMC,QAChBoX,EAA6B,SAAZpX,EAAqB,GAAKA,IAG7CD,EAAMC,QAAU,gBAKduW,EAAKiB,WACTzX,EAAMyX,SAAW,SACjBT,EAAK5c,OAAQ,WACZ4F,EAAMyX,SAAWjB,EAAKiB,SAAU,GAChCzX,EAAM0X,UAAYlB,EAAKiB,SAAU,GACjCzX,EAAM2X,UAAYnB,EAAKiB,SAAU,EAClC,CAAE,GAIHL,EAAY,CAAA,EACE/M,EAGP+M,IACAG,EACC,WAAYA,IAChBhC,EAASgC,EAAShC,QAGnBgC,EAAW3Y,EAASxB,OAAQ7c,EAAM,SAAU,CAAE0f,QAASoX,CAAe,CAAE,EAIpE1V,IACJ4V,EAAShC,OAAS,CAACA,GAIfA,GACJjU,EAAU,CAAE/gB,GAAQ,CAAA,CAAK,EAK1By2B,EAAK9wB,KAAM,WASV,IAAMwY,KAJA6W,GACLjU,EAAU,CAAE/gB,EAAO,EAEpBqe,EAAShF,OAAQrZ,EAAM,QAAS,EAClB8pB,EACbnrB,EAAO8gB,MAAOzf,EAAMme,EAAM2L,EAAM3L,EAAO,CAEzC,CAAE,GAIH0Y,EAAYtB,GAAaP,EAASgC,EAAU7Y,GAAS,EAAGA,EAAMsY,CAAK,EAC3DtY,KAAQ6Y,IACfA,EAAU7Y,GAAS0Y,EAAU5mB,MACxB+kB,IACJ6B,EAAUl2B,IAAMk2B,EAAU5mB,MAC1B4mB,EAAU5mB,MAAQ,GAItB,GAmMConB,UAAW,SAAUv3B,EAAU4rB,GACzBA,EACJ+J,EAAUI,WAAWloB,QAAS7N,CAAS,EAEvC21B,EAAUI,WAAWj5B,KAAMkD,CAAS,CAEtC,CACD,CAAE,EAEFnB,EAAO24B,MAAQ,SAAUA,EAAO/F,EAAQzyB,GACvC,IAAI81B,EAAM0C,GAA0B,UAAjB,OAAOA,EAAqB34B,EAAOmC,OAAQ,GAAIw2B,CAAM,EAAI,CAC3Ef,SAAUz3B,GAAM,CAACA,GAAMyyB,GACtB11B,EAAYy7B,CAAM,GAAKA,EACxBvD,SAAUuD,EACV/F,OAAQzyB,GAAMyyB,GAAUA,GAAU,CAAC11B,EAAY01B,CAAO,GAAKA,CAC5D,EAmCA,OAhCK5yB,EAAOu1B,GAAGjQ,IACd2Q,EAAIb,SAAW,EAGc,UAAxB,OAAOa,EAAIb,WACVa,EAAIb,YAAYp1B,EAAOu1B,GAAGqD,OAC9B3C,EAAIb,SAAWp1B,EAAOu1B,GAAGqD,OAAQ3C,EAAIb,UAGrCa,EAAIb,SAAWp1B,EAAOu1B,GAAGqD,OAAOpV,UAMjB,MAAbyS,EAAI3b,OAA+B,CAAA,IAAd2b,EAAI3b,QAC7B2b,EAAI3b,MAAQ,MAIb2b,EAAIlI,IAAMkI,EAAI2B,SAEd3B,EAAI2B,SAAW,WACT16B,EAAY+4B,EAAIlI,GAAI,GACxBkI,EAAIlI,IAAIjwB,KAAMd,IAAK,EAGfi5B,EAAI3b,OACRta,EAAOogB,QAASpjB,KAAMi5B,EAAI3b,KAAM,CAElC,EAEO2b,CACR,EAEAj2B,EAAOG,GAAGgC,OAAQ,CACjB02B,OAAQ,SAAUF,EAAOG,EAAIlG,EAAQzxB,GAGpC,OAAOnE,KAAKyQ,OAAQoT,EAAmB,EAAEI,IAAK,UAAW,CAAE,EAAEoB,KAAK,EAGhErgB,IAAI,EAAE+2B,QAAS,CAAEjG,QAASgG,CAAG,EAAGH,EAAO/F,EAAQzxB,CAAS,CAC3D,EACA43B,QAAS,SAAUvZ,EAAMmZ,EAAO/F,EAAQzxB,GAGxB,SAAd63B,IAGC,IAAIlB,EAAOhB,EAAW95B,KAAMgD,EAAOmC,OAAQ,GAAIqd,CAAK,EAAGyZ,CAAO,GAGzDhmB,GAASyM,EAAS/e,IAAK3D,KAAM,QAAS,IAC1C86B,EAAKtX,KAAM,CAAA,CAAK,CAElB,CAXD,IAAIvN,EAAQjT,EAAOyD,cAAe+b,CAAK,EACtCyZ,EAASj5B,EAAO24B,MAAOA,EAAO/F,EAAQzxB,CAAS,EAchD,OAFA63B,EAAYE,OAASF,EAEd/lB,GAA0B,CAAA,IAAjBgmB,EAAO3e,MACtBtd,KAAKkE,KAAM83B,CAAY,EACvBh8B,KAAKsd,MAAO2e,EAAO3e,MAAO0e,CAAY,CACxC,EACAxY,KAAM,SAAU7hB,EAAM+hB,EAAYgX,GACjB,SAAZyB,EAAsB7Y,GACzB,IAAIE,EAAOF,EAAME,KACjB,OAAOF,EAAME,KACbA,EAAMkX,CAAQ,CACf,CAWA,MATqB,UAAhB,OAAO/4B,IACX+4B,EAAUhX,EACVA,EAAa/hB,EACbA,EAAOmE,KAAAA,GAEH4d,GACJ1jB,KAAKsd,MAAO3b,GAAQ,KAAM,EAAG,EAGvB3B,KAAKkE,KAAM,WACjB,IAAIkf,EAAU,CAAA,EACbhI,EAAgB,MAARzZ,GAAgBA,EAAO,aAC/By6B,EAASp5B,EAAOo5B,OAChB7Z,EAAOG,EAAS/e,IAAK3D,IAAK,EAE3B,GAAKob,EACCmH,EAAMnH,IAAWmH,EAAMnH,GAAQoI,MACnC2Y,EAAW5Z,EAAMnH,EAAQ,OAG1B,IAAMA,KAASmH,EACTA,EAAMnH,IAAWmH,EAAMnH,GAAQoI,MAAQ2V,GAAKnrB,KAAMoN,CAAM,GAC5D+gB,EAAW5Z,EAAMnH,EAAQ,EAK5B,IAAMA,EAAQghB,EAAO94B,OAAQ8X,CAAK,IAC5BghB,EAAQhhB,GAAQ/W,OAASrE,MACnB,MAAR2B,GAAgBy6B,EAAQhhB,GAAQkC,QAAU3b,IAE5Cy6B,EAAQhhB,GAAQ0f,KAAKtX,KAAMkX,CAAQ,EACnCtX,EAAU,CAAA,EACVgZ,EAAOl3B,OAAQkW,EAAO,CAAE,GAOrBgI,CAAAA,GAAYsX,GAChB13B,EAAOogB,QAASpjB,KAAM2B,CAAK,CAE7B,CAAE,CACH,EACAu6B,OAAQ,SAAUv6B,GAIjB,MAHc,CAAA,IAATA,IACJA,EAAOA,GAAQ,MAET3B,KAAKkE,KAAM,WACjB,IAAIkX,EACHmH,EAAOG,EAAS/e,IAAK3D,IAAK,EAC1Bsd,EAAQiF,EAAM5gB,EAAO,SACrB2hB,EAAQf,EAAM5gB,EAAO,cACrBy6B,EAASp5B,EAAOo5B,OAChB94B,EAASga,EAAQA,EAAMha,OAAS,EAajC,IAVAif,EAAK2Z,OAAS,CAAA,EAGdl5B,EAAOsa,MAAOtd,KAAM2B,EAAM,EAAG,EAExB2hB,GAASA,EAAME,MACnBF,EAAME,KAAK1iB,KAAMd,KAAM,CAAA,CAAK,EAIvBob,EAAQghB,EAAO94B,OAAQ8X,CAAK,IAC5BghB,EAAQhhB,GAAQ/W,OAASrE,MAAQo8B,EAAQhhB,GAAQkC,QAAU3b,IAC/Dy6B,EAAQhhB,GAAQ0f,KAAKtX,KAAM,CAAA,CAAK,EAChC4Y,EAAOl3B,OAAQkW,EAAO,CAAE,GAK1B,IAAMA,EAAQ,EAAGA,EAAQ9X,EAAQ8X,CAAK,GAChCkC,EAAOlC,IAAWkC,EAAOlC,GAAQ8gB,QACrC5e,EAAOlC,GAAQ8gB,OAAOp7B,KAAMd,IAAK,EAKnC,OAAOuiB,EAAK2Z,MACb,CAAE,CACH,CACD,CAAE,EAEFl5B,EAAOkB,KAAM,CAAE,SAAU,OAAQ,QAAU,SAAUsD,EAAInC,GACxD,IAAIg3B,EAAQr5B,EAAOG,GAAIkC,GACvBrC,EAAOG,GAAIkC,GAAS,SAAUs2B,EAAO/F,EAAQzxB,GAC5C,OAAgB,MAATw3B,GAAkC,WAAjB,OAAOA,EAC9BU,EAAMr7B,MAAOhB,KAAMsE,SAAU,EAC7BtE,KAAK+7B,QAASrC,GAAOr0B,EAAM,CAAA,CAAK,EAAGs2B,EAAO/F,EAAQzxB,CAAS,CAC7D,CACD,CAAE,EAGFnB,EAAOkB,KAAM,CACZo4B,UAAW5C,GAAO,MAAO,EACzB6C,QAAS7C,GAAO,MAAO,EACvB8C,YAAa9C,GAAO,QAAS,EAC7B+C,OAAQ,CAAE3G,QAAS,MAAO,EAC1B4G,QAAS,CAAE5G,QAAS,MAAO,EAC3B6G,WAAY,CAAE7G,QAAS,QAAS,CACjC,EAAG,SAAUzwB,EAAMsmB,GAClB3oB,EAAOG,GAAIkC,GAAS,SAAUs2B,EAAO/F,EAAQzxB,GAC5C,OAAOnE,KAAK+7B,QAASpQ,EAAOgQ,EAAO/F,EAAQzxB,CAAS,CACrD,CACD,CAAE,EAEFnB,EAAOo5B,OAAS,GAChBp5B,EAAOu1B,GAAGiB,KAAO,WAChB,IAAIqB,EACH14B,EAAI,EACJi6B,EAASp5B,EAAOo5B,OAIjB,IAFArD,EAAQlvB,KAAKmiB,IAAI,EAET7pB,EAAIi6B,EAAO94B,OAAQnB,CAAC,IAC3B04B,EAAQuB,EAAQj6B,IAGJ,GAAKi6B,EAAQj6B,KAAQ04B,GAChCuB,EAAOl3B,OAAQ/C,CAAC,GAAI,CAAE,EAIlBi6B,EAAO94B,QACZN,EAAOu1B,GAAG/U,KAAK,EAEhBuV,EAAQjzB,KAAAA,CACT,EAEA9C,EAAOu1B,GAAGsC,MAAQ,SAAUA,GAC3B73B,EAAOo5B,OAAOn7B,KAAM45B,CAAM,EAC1B73B,EAAOu1B,GAAGjkB,MAAM,CACjB,EAEAtR,EAAOu1B,GAAGgB,SAAW,GACrBv2B,EAAOu1B,GAAGjkB,MAAQ,WACZ0kB,KAILA,GAAa,CAAA,EACbI,GAAS,EACV,EAEAp2B,EAAOu1B,GAAG/U,KAAO,WAChBwV,GAAa,IACd,EAEAh2B,EAAOu1B,GAAGqD,OAAS,CAClBgB,KAAM,IACNC,KAAM,IAGNrW,SAAU,GACX,EAKAxjB,EAAOG,GAAG25B,MAAQ,SAAUC,EAAMp7B,GAIjC,OAHAo7B,EAAO/5B,EAAOu1B,IAAKv1B,EAAOu1B,GAAGqD,OAAQmB,IAAiBA,EAG/C/8B,KAAKsd,MAFZ3b,EAAOA,GAAQ,KAEU,SAAUmL,EAAMwW,GACxC,IAAI0Z,EAAUj9B,EAAO6f,WAAY9S,EAAMiwB,CAAK,EAC5CzZ,EAAME,KAAO,WACZzjB,EAAOk9B,aAAcD,CAAQ,CAC9B,CACD,CAAE,CACH,EAIKjsB,EAAQnR,EAAS0C,cAAe,OAAQ,EAE3C22B,EADSr5B,EAAS0C,cAAe,QAAS,EAC7BK,YAAa/C,EAAS0C,cAAe,QAAS,CAAE,EAE9DyO,EAAMpP,KAAO,WAIbF,EAAQy7B,QAA0B,KAAhBnsB,EAAM5J,MAIxB1F,EAAQ07B,YAAclE,EAAIljB,UAI1BhF,EAAQnR,EAAS0C,cAAe,OAAQ,GAClC6E,MAAQ,IACd4J,EAAMpP,KAAO,QACbF,EAAQ27B,WAA6B,MAAhBrsB,EAAM5J,MAI5B,IAAIk2B,GACHluB,GAAanM,EAAOiP,KAAK9C,WAmItBmuB,IAjIJt6B,EAAOG,GAAGgC,OAAQ,CACjBgN,KAAM,SAAU9M,EAAM8B,GACrB,OAAO+Z,EAAQlhB,KAAMgD,EAAOmP,KAAM9M,EAAM8B,EAA0B,EAAnB7C,UAAUhB,MAAW,CACrE,EAEAi6B,WAAY,SAAUl4B,GACrB,OAAOrF,KAAKkE,KAAM,WACjBlB,EAAOu6B,WAAYv9B,KAAMqF,CAAK,CAC/B,CAAE,CACH,CACD,CAAE,EAEFrC,EAAOmC,OAAQ,CACdgN,KAAM,SAAU9N,EAAMgB,EAAM8B,GAC3B,IAAIpD,EAAKuf,EACRka,EAAQn5B,EAAKjE,SAGd,GAAe,IAAVo9B,GAAyB,IAAVA,GAAyB,IAAVA,EAKnC,OAAkC,KAAA,IAAtBn5B,EAAK7B,aACTQ,EAAOwf,KAAMne,EAAMgB,EAAM8B,CAAM,GAKxB,IAAVq2B,GAAgBx6B,EAAOkX,SAAU7V,CAAK,IAC1Cif,EAAQtgB,EAAOy6B,UAAWp4B,EAAKoC,YAAY,KACxCzE,EAAOiP,KAAK5E,MAAMrB,KAAKgC,KAAM3I,CAAK,EAAIg4B,GAAWv3B,KAAAA,IAGtCA,KAAAA,IAAVqB,EACW,OAAVA,EACJnE,KAAAA,EAAOu6B,WAAYl5B,EAAMgB,CAAK,EAI1Bie,GAAS,QAASA,GACuBxd,KAAAA,KAA3C/B,EAAMuf,EAAMhB,IAAKje,EAAM8C,EAAO9B,CAAK,GAC9BtB,GAGRM,EAAK5B,aAAc4C,EAAM8B,EAAQ,EAAG,EAC7BA,GAGHmc,EAAAA,GAAS,QAASA,GAA+C,QAApCvf,EAAMuf,EAAM3f,IAAKU,EAAMgB,CAAK,KAOhD,OAHdtB,EAAMf,EAAO2N,KAAKwB,KAAM9N,EAAMgB,CAAK,GAGdS,KAAAA,EAAY/B,EAClC,EAEA05B,UAAW,CACV97B,KAAM,CACL2gB,IAAK,SAAUje,EAAM8C,GACpB,IAEK/E,EAFL,GAAK,CAACX,EAAQ27B,YAAwB,UAAVj2B,GAC3B0F,EAAUxI,EAAM,OAAQ,EAMxB,OALIjC,EAAMiC,EAAK8C,MACf9C,EAAK5B,aAAc,OAAQ0E,CAAM,EAC5B/E,IACJiC,EAAK8C,MAAQ/E,GAEP+E,CAET,CACD,CACD,EAEAo2B,WAAY,SAAUl5B,EAAM8C,GAC3B,IAAI9B,EACHlD,EAAI,EAIJu7B,EAAYv2B,GAASA,EAAMkG,MAAO2O,CAAc,EAEjD,GAAK0hB,GAA+B,IAAlBr5B,EAAKjE,SACtB,KAAUiF,EAAOq4B,EAAWv7B,CAAC,KAC5BkC,EAAKkK,gBAAiBlJ,CAAK,CAG9B,CACD,CAAE,EAGFg4B,GAAW,CACV/a,IAAK,SAAUje,EAAM8C,EAAO9B,GAQ3B,MAPe,CAAA,IAAV8B,EAGJnE,EAAOu6B,WAAYl5B,EAAMgB,CAAK,EAE9BhB,EAAK5B,aAAc4C,EAAMA,CAAK,EAExBA,CACR,CACD,EAEArC,EAAOkB,KAAMlB,EAAOiP,KAAK5E,MAAMrB,KAAKmY,OAAO9W,MAAO,MAAO,EAAG,SAAU7F,EAAInC,GACzE,IAAIs4B,EAASxuB,GAAY9J,IAAUrC,EAAO2N,KAAKwB,KAE/ChD,GAAY9J,GAAS,SAAUhB,EAAMgB,EAAM4D,GAC1C,IAAIlF,EAAK2lB,EACRkU,EAAgBv4B,EAAKoC,YAAY,EAYlC,OAVMwB,IAGLygB,EAASva,GAAYyuB,GACrBzuB,GAAYyuB,GAAkB75B,EAC9BA,EAAqC,MAA/B45B,EAAQt5B,EAAMgB,EAAM4D,CAAM,EAC/B20B,EACA,KACDzuB,GAAYyuB,GAAkBlU,GAExB3lB,CACR,CACD,CAAE,EAKe,uCAChB85B,GAAa,gBAyIb,SAASC,EAAkB32B,GAE1B,OADaA,EAAMkG,MAAO2O,CAAc,GAAK,IAC/B5N,KAAM,GAAI,CACzB,CAGD,SAAS2vB,EAAU15B,GAClB,OAAOA,EAAK7B,cAAgB6B,EAAK7B,aAAc,OAAQ,GAAK,EAC7D,CAEA,SAASw7B,GAAgB72B,GACxB,OAAKvB,MAAMC,QAASsB,CAAM,EAClBA,EAEc,UAAjB,OAAOA,GACJA,EAAMkG,MAAO2O,CAAc,GAE5B,EACR,CAzJAhZ,EAAOG,GAAGgC,OAAQ,CACjBqd,KAAM,SAAUnd,EAAM8B,GACrB,OAAO+Z,EAAQlhB,KAAMgD,EAAOwf,KAAMnd,EAAM8B,EAA0B,EAAnB7C,UAAUhB,MAAW,CACrE,EAEA26B,WAAY,SAAU54B,GACrB,OAAOrF,KAAKkE,KAAM,WACjB,OAAOlE,KAAMgD,EAAOk7B,QAAS74B,IAAUA,EACxC,CAAE,CACH,CACD,CAAE,EAEFrC,EAAOmC,OAAQ,CACdqd,KAAM,SAAUne,EAAMgB,EAAM8B,GAC3B,IAAIpD,EAAKuf,EACRka,EAAQn5B,EAAKjE,SAGd,GAAe,IAAVo9B,GAAyB,IAAVA,GAAyB,IAAVA,EAWnC,OAPe,IAAVA,GAAgBx6B,EAAOkX,SAAU7V,CAAK,IAG1CgB,EAAOrC,EAAOk7B,QAAS74B,IAAUA,EACjCie,EAAQtgB,EAAOg1B,UAAW3yB,IAGZS,KAAAA,IAAVqB,EACCmc,GAAS,QAASA,GACuBxd,KAAAA,KAA3C/B,EAAMuf,EAAMhB,IAAKje,EAAM8C,EAAO9B,CAAK,GAC9BtB,EAGCM,EAAMgB,GAAS8B,EAGpBmc,GAAS,QAASA,GAA+C,QAApCvf,EAAMuf,EAAM3f,IAAKU,EAAMgB,CAAK,GACtDtB,EAGDM,EAAMgB,EACd,EAEA2yB,UAAW,CACVpiB,SAAU,CACTjS,IAAK,SAAUU,GAOd,IAAI85B,EAAWn7B,EAAO2N,KAAKwB,KAAM9N,EAAM,UAAW,EAElD,OAAK85B,EACG1K,SAAU0K,EAAU,EAAG,EAI9Bb,GAAWtvB,KAAM3J,EAAKwI,QAAS,GAC/BgxB,GAAW7vB,KAAM3J,EAAKwI,QAAS,GAC/BxI,EAAKsR,KAEE,EAGD,CAAC,CACT,CACD,CACD,EAEAuoB,QAAS,CACRE,IAAO,UACPC,MAAS,WACV,CACD,CAAE,EAUI58B,EAAQ07B,cACbn6B,EAAOg1B,UAAUjiB,SAAW,CAC3BpS,IAAK,SAAUU,GAIVkQ,EAASlQ,EAAKzB,WAIlB,OAHK2R,GAAUA,EAAO3R,YACrB2R,EAAO3R,WAAWoT,cAEZ,IACR,EACAsM,IAAK,SAAUje,GAIVkQ,EAASlQ,EAAKzB,WACb2R,IACJA,EAAOyB,cAEFzB,EAAO3R,aACX2R,EAAO3R,WAAWoT,aAGrB,CACD,GAGDhT,EAAOkB,KAAM,CACZ,WACA,WACA,YACA,cACA,cACA,UACA,UACA,SACA,cACA,mBACE,WACFlB,EAAOk7B,QAASl+B,KAAKyH,YAAY,GAAMzH,IACxC,CAAE,EA2BFgD,EAAOG,GAAGgC,OAAQ,CACjBm5B,SAAU,SAAUn3B,GACnB,IAAIo3B,EAASl6B,EAAMgL,EAAemvB,EAAOz5B,EAAG05B,EAC3Ct8B,EAAI,EAEL,GAAKjC,EAAYiH,CAAM,EACtB,OAAOnH,KAAKkE,KAAM,SAAUa,GAC3B/B,EAAQhD,IAAK,EAAEs+B,SAAUn3B,EAAMrG,KAAMd,KAAM+E,EAAGg5B,EAAU/9B,IAAK,CAAE,CAAE,CAClE,CAAE,EAKH,IAFAu+B,EAAUP,GAAgB72B,CAAM,GAEnB7D,OACZ,KAAUe,EAAOrE,KAAMmC,CAAC,KAIvB,GAHAu8B,EAAWX,EAAU15B,CAAK,EAC1BgL,EAAwB,IAAlBhL,EAAKjE,UAAoB,IAAM09B,EAAkBY,CAAS,EAAI,IAEzD,CAEV,IADA35B,EAAI,EACMy5B,EAAQD,EAASx5B,CAAC,KACtBsK,EAAInO,QAAS,IAAMs9B,EAAQ,GAAI,EAAI,IACvCnvB,GAAOmvB,EAAQ,KAMZE,KADLD,EAAaX,EAAkBzuB,CAAI,IAElChL,EAAK5B,aAAc,QAASg8B,CAAW,CAEzC,CAIF,OAAOz+B,IACR,EAEA2+B,YAAa,SAAUx3B,GACtB,IAAIo3B,EAASl6B,EAAMgL,EAAemvB,EAAOz5B,EAAG05B,EAC3Ct8B,EAAI,EAEL,GAAKjC,EAAYiH,CAAM,EACtB,OAAOnH,KAAKkE,KAAM,SAAUa,GAC3B/B,EAAQhD,IAAK,EAAE2+B,YAAax3B,EAAMrG,KAAMd,KAAM+E,EAAGg5B,EAAU/9B,IAAK,CAAE,CAAE,CACrE,CAAE,EAGH,GAAK,CAACsE,UAAUhB,OACf,OAAOtD,KAAKmS,KAAM,QAAS,EAAG,EAK/B,IAFAosB,EAAUP,GAAgB72B,CAAM,GAEnB7D,OACZ,KAAUe,EAAOrE,KAAMmC,CAAC,KAMvB,GALAu8B,EAAWX,EAAU15B,CAAK,EAG1BgL,EAAwB,IAAlBhL,EAAKjE,UAAoB,IAAM09B,EAAkBY,CAAS,EAAI,IAEzD,CAEV,IADA35B,EAAI,EACMy5B,EAAQD,EAASx5B,CAAC,KAG3B,KAA2C,CAAC,EAApCsK,EAAInO,QAAS,IAAMs9B,EAAQ,GAAI,GACtCnvB,EAAMA,EAAInJ,QAAS,IAAMs4B,EAAQ,IAAK,GAAI,EAMvCE,KADLD,EAAaX,EAAkBzuB,CAAI,IAElChL,EAAK5B,aAAc,QAASg8B,CAAW,CAEzC,CAIF,OAAOz+B,IACR,EAEA4+B,YAAa,SAAUz3B,EAAO03B,GAC7B,IAAIl9B,EAAO,OAAOwF,EACjB23B,EAAwB,UAATn9B,GAAqBiE,MAAMC,QAASsB,CAAM,EAE1D,MAAyB,WAApB,OAAO03B,GAA0BC,EAC9BD,EAAW7+B,KAAKs+B,SAAUn3B,CAAM,EAAInH,KAAK2+B,YAAax3B,CAAM,EAG/DjH,EAAYiH,CAAM,EACfnH,KAAKkE,KAAM,SAAU/B,GAC3Ba,EAAQhD,IAAK,EAAE4+B,YACdz3B,EAAMrG,KAAMd,KAAMmC,EAAG47B,EAAU/9B,IAAK,EAAG6+B,CAAS,EAChDA,CACD,CACD,CAAE,EAGI7+B,KAAKkE,KAAM,WACjB,IAAImM,EAAWlO,EAAGoY,EAAMwkB,EAExB,GAAKD,EAOJ,IAJA38B,EAAI,EACJoY,EAAOvX,EAAQhD,IAAK,EACpB++B,EAAaf,GAAgB72B,CAAM,EAEzBkJ,EAAY0uB,EAAY58B,CAAC,KAG7BoY,EAAKykB,SAAU3uB,CAAU,EAC7BkK,EAAKokB,YAAatuB,CAAU,EAE5BkK,EAAK+jB,SAAUjuB,CAAU,OAKNvK,KAAAA,IAAVqB,GAAgC,WAATxF,KAClC0O,EAAY0tB,EAAU/9B,IAAK,IAI1B0iB,EAASJ,IAAKtiB,KAAM,gBAAiBqQ,CAAU,EAO3CrQ,KAAKyC,cACTzC,KAAKyC,aAAc,QAClB4N,CAAAA,GAAuB,CAAA,IAAVlJ,GAEZub,EAAS/e,IAAK3D,KAAM,eAAgB,GAAK,EAC3C,EAGH,CAAE,CACH,EAEAg/B,SAAU,SAAU/7B,GAKnB,IAJA,IAAeoB,EACdlC,EAAI,EAELkO,EAAY,IAAMpN,EAAW,IACnBoB,EAAOrE,KAAMmC,CAAC,KACvB,GAAuB,IAAlBkC,EAAKjE,UACmE,CAAC,GAA3E,IAAM09B,EAAkBC,EAAU15B,CAAK,CAAE,EAAI,KAAMnD,QAASmP,CAAU,EACxE,MAAO,CAAA,EAIT,MAAO,CAAA,CACR,CACD,CAAE,EAiMyB,SAA1B4uB,GAAoCjyB,GACnCA,EAAE4b,gBAAgB,CACnB,CA9LD,IAAIsW,GAAU,MA2LVC,IAzLJn8B,EAAOG,GAAGgC,OAAQ,CACjB/C,IAAK,SAAU+E,GACd,IAAImc,EAAOvf,EAAKorB,EACf9qB,EAAOrE,KAAM,GAEd,OAAMsE,UAAUhB,QA0BhB6rB,EAAkBjvB,EAAYiH,CAAM,EAE7BnH,KAAKkE,KAAM,SAAU/B,GAGJ,IAAlBnC,KAAKI,WAWE,OANXgC,EADI+sB,EACEhoB,EAAMrG,KAAMd,KAAMmC,EAAGa,EAAQhD,IAAK,EAAEoC,IAAI,CAAE,EAE1C+E,GAKN/E,EAAM,GAEoB,UAAf,OAAOA,EAClBA,GAAO,GAEIwD,MAAMC,QAASzD,CAAI,IAC9BA,EAAMY,EAAOoB,IAAKhC,EAAK,SAAU+E,GAChC,OAAgB,MAATA,EAAgB,GAAKA,EAAQ,EACrC,CAAE,IAGHmc,EAAQtgB,EAAOo8B,SAAUp/B,KAAK2B,OAAUqB,EAAOo8B,SAAUp/B,KAAK6M,SAASpF,YAAY,KAGjE,QAAS6b,GAA+Cxd,KAAAA,IAApCwd,EAAMhB,IAAKtiB,KAAMoC,EAAK,OAAQ,KACnEpC,KAAKmH,MAAQ/E,EAEf,CAAE,GA3DIiC,GACJif,EAAQtgB,EAAOo8B,SAAU/6B,EAAK1C,OAC7BqB,EAAOo8B,SAAU/6B,EAAKwI,SAASpF,YAAY,KAG3C,QAAS6b,GACgCxd,KAAAA,KAAvC/B,EAAMuf,EAAM3f,IAAKU,EAAM,OAAQ,GAE1BN,EAMY,UAAf,OAHLA,EAAMM,EAAK8C,OAIHpD,EAAImC,QAASg5B,GAAS,EAAG,EAInB,MAAPn7B,EAAc,GAAKA,EAG3B,KAAA,CAsCF,CACD,CAAE,EAEFf,EAAOmC,OAAQ,CACdi6B,SAAU,CACTjZ,OAAQ,CACPxiB,IAAK,SAAUU,GAEd,IAAIjC,EAAMY,EAAO2N,KAAKwB,KAAM9N,EAAM,OAAQ,EAC1C,OAAc,MAAPjC,EACNA,EAMA07B,EAAkB96B,EAAOT,KAAM8B,CAAK,CAAE,CACxC,CACD,EACA+E,OAAQ,CACPzF,IAAK,SAAUU,GAgBd,IAfA,IAAW8hB,EACV/gB,EAAUf,EAAKe,QACfgW,EAAQ/W,EAAK2R,cACbmS,EAAoB,eAAd9jB,EAAK1C,KACX2jB,EAAS6C,EAAM,KAAO,GACtB0M,EAAM1M,EAAM/M,EAAQ,EAAIhW,EAAQ9B,OAGhCnB,EADIiZ,EAAQ,EACRyZ,EAGA1M,EAAM/M,EAAQ,EAIXjZ,EAAI0yB,EAAK1yB,CAAC,GAKjB,KAJAgkB,EAAS/gB,EAASjD,IAIJ4T,UAAY5T,IAAMiZ,IAG9B,CAAC+K,EAAOvZ,WACN,CAACuZ,EAAOvjB,WAAWgK,UACpB,CAACC,EAAUsZ,EAAOvjB,WAAY,UAAW,GAAM,CAMjD,GAHAuE,EAAQnE,EAAQmjB,CAAO,EAAE/jB,IAAI,EAGxB+lB,EACJ,OAAOhhB,EAIRme,EAAOrkB,KAAMkG,CAAM,CACpB,CAGD,OAAOme,CACR,EAEAhD,IAAK,SAAUje,EAAM8C,GAMpB,IALA,IAAIk4B,EAAWlZ,EACd/gB,EAAUf,EAAKe,QACfkgB,EAAStiB,EAAO2D,UAAWQ,CAAM,EACjChF,EAAIiD,EAAQ9B,OAELnB,CAAC,MACRgkB,EAAS/gB,EAASjD,IAIN4T,SACsD,CAAC,EAAlE/S,EAAO6D,QAAS7D,EAAOo8B,SAASjZ,OAAOxiB,IAAKwiB,CAAO,EAAGb,CAAO,KAE7D+Z,EAAY,CAAA,GAUd,OAHMA,IACLh7B,EAAK2R,cAAgB,CAAC,GAEhBsP,CACR,CACD,CACD,CACD,CAAE,EAGFtiB,EAAOkB,KAAM,CAAE,QAAS,YAAc,WACrClB,EAAOo8B,SAAUp/B,MAAS,CACzBsiB,IAAK,SAAUje,EAAM8C,GACpB,GAAKvB,MAAMC,QAASsB,CAAM,EACzB,OAAS9C,EAAKyR,QAA0D,CAAC,EAAjD9S,EAAO6D,QAAS7D,EAAQqB,CAAK,EAAEjC,IAAI,EAAG+E,CAAM,CAEtE,CACD,EACM1F,EAAQy7B,UACbl6B,EAAOo8B,SAAUp/B,MAAO2D,IAAM,SAAUU,GACvC,OAAwC,OAAjCA,EAAK7B,aAAc,OAAQ,EAAa,KAAO6B,EAAK8C,KAC5D,EAEF,CAAE,EAQF1F,EAAQ69B,QAAU,cAAev/B,EAGf,mCAqOduV,IAhOJtS,EAAOmC,OAAQnC,EAAOqlB,MAAO,CAE5BU,QAAS,SAAUV,EAAO9F,EAAMle,EAAMk7B,GAErC,IAAIp9B,EAAQ2O,EAAK0uB,EAAYC,EAAQ/V,EAAQzK,EAASygB,EACrDC,EAAY,CAAEt7B,GAAQzE,GACtB+B,EAAON,EAAOP,KAAMunB,EAAO,MAAO,EAAIA,EAAM1mB,KAAO0mB,EACnDiB,EAAajoB,EAAOP,KAAMunB,EAAO,WAAY,EAAIA,EAAMxY,UAAUtI,MAAO,GAAI,EAAI,GAEjF8H,EAAMqwB,EAAc5uB,EAAMzM,EAAOA,GAAQzE,EAGzC,GAAuB,IAAlByE,EAAKjE,UAAoC,IAAlBiE,EAAKjE,UAK5B++B,CAAAA,GAAYnxB,KAAMrM,EAAOqB,EAAOqlB,MAAMsB,SAAU,IAI1B,CAAC,EAAvBhoB,EAAKT,QAAS,GAAI,IAItBS,GADA2nB,EAAa3nB,EAAK4F,MAAO,GAAI,GACXqH,MAAM,EACxB0a,EAAWrkB,KAAK,GAEjBw6B,EAAS99B,EAAKT,QAAS,GAAI,EAAI,GAAK,KAAOS,GAG3C0mB,EAAQA,EAAOrlB,EAAO+C,SACrBsiB,EACA,IAAIrlB,EAAOgmB,MAAOrnB,EAAuB,UAAjB,OAAO0mB,GAAsBA,CAAM,GAGtDK,UAAY6W,EAAe,EAAI,EACrClX,EAAMxY,UAAYyZ,EAAWlb,KAAM,GAAI,EACvCia,EAAMwC,WAAaxC,EAAMxY,UACxB,IAAI3E,OAAQ,UAAYoe,EAAWlb,KAAM,eAAgB,EAAI,SAAU,EACvE,KAGDia,EAAM1U,OAAS7N,KAAAA,EACTuiB,EAAM5iB,SACX4iB,EAAM5iB,OAASpB,GAIhBke,EAAe,MAARA,EACN,CAAE8F,GACFrlB,EAAO2D,UAAW4b,EAAM,CAAE8F,EAAQ,EAGnCpJ,EAAUjc,EAAOqlB,MAAMpJ,QAAStd,IAAU,GACpC49B,GAAgBtgB,CAAAA,EAAQ8J,SAAmD,CAAA,IAAxC9J,EAAQ8J,QAAQ/nB,MAAOqD,EAAMke,CAAK,GAA3E,CAMA,GAAK,CAACgd,GAAgB,CAACtgB,EAAQsM,UAAY,CAACjrB,EAAU+D,CAAK,EAAI,CAM9D,IAJAm7B,EAAavgB,EAAQ0J,cAAgBhnB,EAC/Bw9B,GAAYnxB,KAAMwxB,EAAa79B,CAAK,IACzC0N,EAAMA,EAAIzM,YAEHyM,EAAKA,EAAMA,EAAIzM,WACtB+8B,EAAU1+B,KAAMoO,CAAI,EACpByB,EAAMzB,EAIFyB,KAAUzM,EAAKoJ,eAAiB7N,IACpC+/B,EAAU1+B,KAAM6P,EAAIb,aAAea,EAAI8uB,cAAgB7/B,CAAO,CAEhE,CAIA,IADAoC,EAAI,GACMkN,EAAMswB,EAAWx9B,CAAC,MAAU,CAACkmB,EAAMqC,qBAAqB,GACjEgV,EAAcrwB,EACdgZ,EAAM1mB,KAAW,EAAJQ,EACZq9B,EACAvgB,EAAQ4K,UAAYloB,GAGrB+nB,GAAWhH,EAAS/e,IAAK0L,EAAK,QAAS,GAAK5O,OAAOgpB,OAAQ,IAAK,GAAKpB,EAAM1mB,OAC1E+gB,EAAS/e,IAAK0L,EAAK,QAAS,IAE5Bqa,EAAO1oB,MAAOqO,EAAKkT,CAAK,GAIzBmH,EAAS+V,GAAUpwB,EAAKowB,KACT/V,EAAO1oB,OAASghB,EAAY3S,CAAI,IAC9CgZ,EAAM1U,OAAS+V,EAAO1oB,MAAOqO,EAAKkT,CAAK,EACjB,CAAA,IAAjB8F,EAAM1U,SACV0U,EAAMS,eAAe,EA8CxB,OA1CAT,EAAM1mB,KAAOA,EAGP49B,GAAiBlX,EAAMuD,mBAAmB,GAEvC3M,EAAQuH,UACqC,CAAA,IAApDvH,EAAQuH,SAASxlB,MAAO2+B,EAAUl1B,IAAI,EAAG8X,CAAK,GAC9CP,CAAAA,EAAY3d,CAAK,GAIZo7B,GAAUv/B,EAAYmE,EAAM1C,EAAO,GAAK,CAACrB,EAAU+D,CAAK,KAG5DyM,EAAMzM,EAAMo7B,MAGXp7B,EAAMo7B,GAAW,MAIlBz8B,EAAOqlB,MAAMsB,UAAYhoB,EAEpB0mB,EAAMqC,qBAAqB,GAC/BgV,EAAYvvB,iBAAkBxO,EAAMs9B,EAAwB,EAG7D56B,EAAM1C,GAAO,EAER0mB,EAAMqC,qBAAqB,GAC/BgV,EAAY7e,oBAAqBlf,EAAMs9B,EAAwB,EAGhEj8B,EAAOqlB,MAAMsB,UAAY7jB,KAAAA,EAEpBgL,KACJzM,EAAMo7B,GAAW3uB,GAMduX,EAAM1U,MAvFb,CAwFD,EAIAksB,SAAU,SAAUl+B,EAAM0C,EAAMgkB,GAC3Brb,EAAIhK,EAAOmC,OACd,IAAInC,EAAOgmB,MACXX,EACA,CACC1mB,KAAMA,EACNsqB,YAAa,CAAA,CACd,CACD,EAEAjpB,EAAOqlB,MAAMU,QAAS/b,EAAG,KAAM3I,CAAK,CACrC,CAED,CAAE,EAEFrB,EAAOG,GAAGgC,OAAQ,CAEjB4jB,QAAS,SAAUpnB,EAAM4gB,GACxB,OAAOviB,KAAKkE,KAAM,WACjBlB,EAAOqlB,MAAMU,QAASpnB,EAAM4gB,EAAMviB,IAAK,CACxC,CAAE,CACH,EACA8/B,eAAgB,SAAUn+B,EAAM4gB,GAC/B,IAAIle,EAAOrE,KAAM,GACjB,GAAKqE,EACJ,OAAOrB,EAAOqlB,MAAMU,QAASpnB,EAAM4gB,EAAMle,EAAM,CAAA,CAAK,CAEtD,CACD,CAAE,EAWI5C,EAAQ69B,SACbt8B,EAAOkB,KAAM,CAAEsR,MAAO,UAAWsY,KAAM,UAAW,EAAG,SAAUK,EAAM5D,GAGtD,SAAVrb,EAAoBmZ,GACvBrlB,EAAOqlB,MAAMwX,SAAUtV,EAAKlC,EAAM5iB,OAAQzC,EAAOqlB,MAAMkC,IAAKlC,CAAM,CAAE,CACrE,CAEArlB,EAAOqlB,MAAMpJ,QAASsL,GAAQ,CAC7BP,MAAO,WAIN,IAAI9nB,EAAMlC,KAAKyN,eAAiBzN,KAAKJ,UAAYI,KAChD+/B,EAAWrd,EAASxB,OAAQhf,EAAKqoB,CAAI,EAEhCwV,GACL79B,EAAIiO,iBAAkBge,EAAMjf,EAAS,CAAA,CAAK,EAE3CwT,EAASxB,OAAQhf,EAAKqoB,GAAOwV,GAAY,GAAM,CAAE,CAClD,EACA5V,SAAU,WACT,IAAIjoB,EAAMlC,KAAKyN,eAAiBzN,KAAKJ,UAAYI,KAChD+/B,EAAWrd,EAASxB,OAAQhf,EAAKqoB,CAAI,EAAI,EAEpCwV,EAKLrd,EAASxB,OAAQhf,EAAKqoB,EAAKwV,CAAS,GAJpC79B,EAAI2e,oBAAqBsN,EAAMjf,EAAS,CAAA,CAAK,EAC7CwT,EAAShF,OAAQxb,EAAKqoB,CAAI,EAK5B,CACD,CACD,CAAE,EAEYxqB,EAAOuV,UAElBzT,GAAQ,CAAEuF,KAAMyC,KAAKmiB,IAAI,CAAE,EAE3BgU,GAAS,KAgCZC,IA3BDj9B,EAAOk9B,SAAW,SAAU3d,GAC3B,IAAIrO,EAAKisB,EACT,GAAK,CAAC5d,GAAwB,UAAhB,OAAOA,EACpB,OAAO,KAKR,IACCrO,GAAM,IAAMnU,EAAOqgC,WAAcC,gBAAiB9d,EAAM,UAAW,CACrD,CAAb,MAAQvV,IAYV,OAVAmzB,EAAkBjsB,GAAOA,EAAIrG,qBAAsB,aAAc,EAAG,GAC9DqG,GAAOisB,CAAAA,GACZn9B,EAAOoD,MAAO,iBACb+5B,EACCn9B,EAAOoB,IAAK+7B,EAAgBpzB,WAAY,SAAUgC,GACjD,OAAOA,EAAG2D,WACX,CAAE,EAAEtE,KAAM,IAAK,EACfmU,EACA,EAEIrO,CACR,EAIY,SACXosB,GAAQ,SACRC,GAAkB,wCAClBC,GAAe,qCA0ChBx9B,EAAOy9B,MAAQ,SAAUl2B,EAAGm2B,GAGpB,SAANplB,EAAgB5M,EAAKiyB,GAGhBx5B,EAAQjH,EAAYygC,CAAgB,EACvCA,EAAgB,EAChBA,EAEDC,EAAGA,EAAEt9B,QAAWu9B,mBAAoBnyB,CAAI,EAAI,IAC3CmyB,mBAA6B,MAAT15B,EAAgB,GAAKA,CAAM,CACjD,CAXD,IAAIwwB,EACHiJ,EAAI,GAYL,GAAU,MAALr2B,EACJ,MAAO,GAIR,GAAK3E,MAAMC,QAAS0E,CAAE,GAAOA,EAAE/G,QAAU,CAACR,EAAO2C,cAAe4E,CAAE,EAGjEvH,EAAOkB,KAAMqG,EAAG,WACf+Q,EAAKtb,KAAKqF,KAAMrF,KAAKmH,KAAM,CAC5B,CAAE,OAMF,IAAMwwB,KAAUptB,EACfu2B,CAvEH,SAASA,EAAanJ,EAAQx3B,EAAKugC,EAAaplB,GAG/C,GAAK1V,MAAMC,QAAS1F,CAAI,EAGvB6C,EAAOkB,KAAM/D,EAAK,SAAUgC,EAAG+Z,GACzBwkB,GAAeT,GAASjyB,KAAM2pB,CAAO,EAGzCrc,EAAKqc,EAAQzb,CAAE,EAKf4kB,EACCnJ,EAAS,KAAqB,UAAb,OAAOzb,GAAuB,MAALA,EAAY/Z,EAAI,IAAO,IACjE+Z,EACAwkB,EACAplB,CACD,CAEF,CAAE,OAEI,GAAMolB,GAAiC,WAAlB59B,EAAQ3C,CAAI,EAUvCmb,EAAKqc,EAAQx3B,CAAI,OAPjB,IA1BD,IAAIkF,KA0BWlF,EACb2gC,EAAanJ,EAAS,IAAMtyB,EAAO,IAAKlF,EAAKkF,GAAQq7B,EAAaplB,CAAI,CAQzE,EAmCgBqc,EAAQptB,EAAGotB,GAAU+I,EAAaplB,CAAI,EAKrD,OAAOslB,EAAExyB,KAAM,GAAI,CACpB,EAEApL,EAAOG,GAAGgC,OAAQ,CACjB47B,UAAW,WACV,OAAO/9B,EAAOy9B,MAAOzgC,KAAKghC,eAAe,CAAE,CAC5C,EACAA,eAAgB,WACf,OAAOhhC,KAAKoE,IAAK,WAGhB,IAAI8N,EAAWlP,EAAOwf,KAAMxiB,KAAM,UAAW,EAC7C,OAAOkS,EAAWlP,EAAO2D,UAAWuL,CAAS,EAAIlS,IAClD,CAAE,EAAEyQ,OAAQ,WACX,IAAI9O,EAAO3B,KAAK2B,KAGhB,OAAO3B,KAAKqF,MAAQ,CAACrC,EAAQhD,IAAK,EAAE8H,GAAI,WAAY,GACnD04B,GAAaxyB,KAAMhO,KAAK6M,QAAS,GAAK,CAAC0zB,GAAgBvyB,KAAMrM,CAAK,IAChE3B,KAAK8V,SAAW,CAAC4P,GAAe1X,KAAMrM,CAAK,EAC/C,CAAE,EAAEyC,IAAK,SAAUoD,EAAInD,GACtB,IAAIjC,EAAMY,EAAQhD,IAAK,EAAEoC,IAAI,EAE7B,OAAY,MAAPA,EACG,KAGHwD,MAAMC,QAASzD,CAAI,EAChBY,EAAOoB,IAAKhC,EAAK,SAAUA,GACjC,MAAO,CAAEiD,KAAMhB,EAAKgB,KAAM8B,MAAO/E,EAAI8D,QAASo6B,GAAO,MAAO,CAAE,CAC/D,CAAE,EAGI,CAAEj7B,KAAMhB,EAAKgB,KAAM8B,MAAO/E,EAAI8D,QAASo6B,GAAO,MAAO,CAAE,CAC/D,CAAE,EAAE38B,IAAI,CACT,CACD,CAAE,EAGF,IACCs9B,GAAM,OACNC,GAAQ,OACRC,GAAa,gBACbC,GAAW,6BAIXC,GAAa,iBACbC,GAAY,QAWZpH,GAAa,GAObqH,GAAa,GAGbC,GAAW,KAAKzgC,OAAQ,GAAI,EAG5B0gC,GAAe7hC,EAAS0C,cAAe,GAAI,EAK5C,SAASo/B,GAA6BC,GAGrC,OAAO,SAAUC,EAAoB7jB,GAED,UAA9B,OAAO6jB,IACX7jB,EAAO6jB,EACPA,EAAqB,KAGtB,IAAIC,EACH1/B,EAAI,EACJ2/B,EAAYF,EAAmBn6B,YAAY,EAAE4F,MAAO2O,CAAc,GAAK,GAExE,GAAK9b,EAAY6d,CAAK,EAGrB,KAAU8jB,EAAWC,EAAW3/B,CAAC,KAGT,MAAlB0/B,EAAU,IACdA,EAAWA,EAASlhC,MAAO,CAAE,GAAK,KAChCghC,EAAWE,GAAaF,EAAWE,IAAc,IAAK7vB,QAAS+L,CAAK,IAIpE4jB,EAAWE,GAAaF,EAAWE,IAAc,IAAK5gC,KAAM8c,CAAK,CAIvE,CACD,CAGA,SAASgkB,GAA+BJ,EAAWv8B,EAASq1B,EAAiBuH,GAE5E,IAAIC,EAAY,GACfC,EAAqBP,IAAcJ,GAEpC,SAASY,EAASN,GACjB,IAAI9rB,EAcJ,OAbAksB,EAAWJ,GAAa,CAAA,EACxB7+B,EAAOkB,KAAMy9B,EAAWE,IAAc,GAAI,SAAU9kB,EAAGqlB,GAClDC,EAAsBD,EAAoBh9B,EAASq1B,EAAiBuH,CAAM,EAC9E,MAAoC,UAA/B,OAAOK,GACVH,GAAqBD,EAAWI,GAKtBH,EACJ,EAAGnsB,EAAWssB,GADf,KAAA,GAHNj9B,EAAQ08B,UAAU9vB,QAASqwB,CAAoB,EAC/CF,EAASE,CAAoB,EACtB,CAAA,EAIT,CAAE,EACKtsB,CACR,CAEA,OAAOosB,EAAS/8B,EAAQ08B,UAAW,EAAI,GAAK,CAACG,EAAW,MAASE,EAAS,GAAI,CAC/E,CAKA,SAASG,GAAY78B,EAAQ7D,GAC5B,IAAI8M,EAAKhJ,EACR68B,EAAcv/B,EAAOw/B,aAAaD,aAAe,GAElD,IAAM7zB,KAAO9M,EACQkE,KAAAA,IAAflE,EAAK8M,MACP6zB,EAAa7zB,GAAQjJ,EAAWC,EAAAA,GAAiB,IAAUgJ,GAAQ9M,EAAK8M,IAO5E,OAJKhJ,GACJ1C,EAAOmC,OAAQ,CAAA,EAAMM,EAAQC,CAAK,EAG5BD,CACR,CAhFAg8B,GAAa9rB,KAAOL,GAASK,KAgP7B3S,EAAOmC,OAAQ,CAGds9B,OAAQ,EAGRC,aAAc,GACdC,KAAM,GAENH,aAAc,CACbI,IAAKttB,GAASK,KACdhU,KAAM,MACNkhC,QAxRgB,4DAwRQ70B,KAAMsH,GAASwtB,QAAS,EAChDtjC,OAAQ,CAAA,EACRujC,YAAa,CAAA,EACbC,MAAO,CAAA,EACPC,YAAa,mDAcbC,QAAS,CACRnI,IAAKyG,GACLj/B,KAAM,aACN6sB,KAAM,YACNlb,IAAK,4BACLivB,KAAM,mCACP,EAEAroB,SAAU,CACT5G,IAAK,UACLkb,KAAM,SACN+T,KAAM,UACP,EAEAC,eAAgB,CACflvB,IAAK,cACL3R,KAAM,eACN4gC,KAAM,cACP,EAIAE,WAAY,CAGXC,SAAU/6B,OAGVg7B,YAAa,CAAA,EAGbC,YAAazgB,KAAKC,MAGlBygB,WAAYzgC,EAAOk9B,QACpB,EAMAqC,YAAa,CACZK,IAAK,CAAA,EACL1/B,QAAS,CAAA,CACV,CACD,EAKAwgC,UAAW,SAAUj+B,EAAQk+B,GAC5B,OAAOA,EAGNrB,GAAYA,GAAY78B,EAAQzC,EAAOw/B,YAAa,EAAGmB,CAAS,EAGhErB,GAAYt/B,EAAOw/B,aAAc/8B,CAAO,CAC1C,EAEAm+B,cAAelC,GAA6BxH,EAAW,EACvD2J,cAAenC,GAA6BH,EAAW,EAGvDuC,KAAM,SAAUlB,EAAKx9B,GAGA,UAAf,OAAOw9B,IACXx9B,EAAUw9B,EACVA,EAAM98B,KAAAA,GAMP,IAAIi+B,EAGHC,EAGAC,EACAC,EAGAC,EAMAvjB,EAGAwjB,EAGAjiC,EAMAy+B,EAAI59B,EAAO0gC,UAAW,GA9BvBt+B,EAAUA,GAAW,EA8Bc,EAGlCi/B,EAAkBzD,EAAE19B,SAAW09B,EAG/B0D,EAAqB1D,EAAE19B,UACpBmhC,EAAgBjkC,UAAYikC,EAAgB7gC,QAC9CR,EAAQqhC,CAAgB,EACxBrhC,EAAOqlB,MAGRlK,EAAWnb,EAAO8a,SAAS,EAC3BymB,EAAmBvhC,EAAO6Z,UAAW,aAAc,EAGnD2nB,EAAa5D,EAAE4D,YAAc,GAG7BC,EAAiB,GACjBC,EAAsB,GAGtBC,EAAW,WAGX3C,EAAQ,CACPhhB,WAAY,EAGZ4jB,kBAAmB,SAAUl2B,GAC5B,IAAIrB,EACJ,GAAKuT,EAAY,CAChB,GAAK,CAACsjB,EAEL,IADAA,EAAkB,GACR72B,EAAQ+zB,GAAS1zB,KAAMu2B,CAAsB,GACtDC,EAAiB72B,EAAO,GAAI5F,YAAY,EAAI,MACzCy8B,EAAiB72B,EAAO,GAAI5F,YAAY,EAAI,MAAS,IACrD1G,OAAQsM,EAAO,EAAI,EAGxBA,EAAQ62B,EAAiBx1B,EAAIjH,YAAY,EAAI,IAC9C,CACA,OAAgB,MAAT4F,EAAgB,KAAOA,EAAMe,KAAM,IAAK,CAChD,EAGAy2B,sBAAuB,WACtB,OAAOjkB,EAAYqjB,EAAwB,IAC5C,EAGAa,iBAAkB,SAAUz/B,EAAM8B,GAMjC,OALkB,MAAbyZ,IACJvb,EAAOq/B,EAAqBr/B,EAAKoC,YAAY,GAC5Ci9B,EAAqBr/B,EAAKoC,YAAY,IAAOpC,EAC9Co/B,EAAgBp/B,GAAS8B,GAEnBnH,IACR,EAGA+kC,iBAAkB,SAAUpjC,GAI3B,OAHkB,MAAbif,IACJggB,EAAEoE,SAAWrjC,GAEP3B,IACR,EAGAwkC,WAAY,SAAUpgC,GAErB,GAAKA,EACJ,GAAKwc,EAGJohB,EAAM9jB,OAAQ9Z,EAAK49B,EAAMiD,OAAS,OAIlC,IATF,IAAIjjC,KASYoC,EACbogC,EAAYxiC,GAAS,CAAEwiC,EAAYxiC,GAAQoC,EAAKpC,IAInD,OAAOhC,IACR,EAGAklC,MAAO,SAAUC,GACZC,EAAYD,GAAcR,EAK9B,OAJKZ,GACJA,EAAUmB,MAAOE,CAAU,EAE5Bp7B,EAAM,EAAGo7B,CAAU,EACZplC,IACR,CACD,EAkBD,GAfAme,EAASzB,QAASslB,CAAM,EAKxBpB,EAAEgC,MAAUA,GAAOhC,EAAEgC,KAAOttB,GAASK,MAAS,IAC5CzP,QAASo7B,GAAWhsB,GAASwtB,SAAW,IAAK,EAG/ClC,EAAEj/B,KAAOyD,EAAQqX,QAAUrX,EAAQzD,MAAQi/B,EAAEnkB,QAAUmkB,EAAEj/B,KAGzDi/B,EAAEkB,WAAclB,EAAEiB,UAAY,KAAMp6B,YAAY,EAAE4F,MAAO2O,CAAc,GAAK,CAAE,IAGxD,MAAjB4kB,EAAEyE,YAAsB,CAC5BC,EAAY1lC,EAAS0C,cAAe,GAAI,EAKxC,IACCgjC,EAAU3vB,KAAOirB,EAAEgC,IAInB0C,EAAU3vB,KAAO2vB,EAAU3vB,KAC3BirB,EAAEyE,YAAc5D,GAAaqB,SAAW,KAAOrB,GAAa8D,MAC3DD,EAAUxC,SAAW,KAAOwC,EAAUC,IAMxC,CALE,MAAQv4B,GAIT4zB,EAAEyE,YAAc,CAAA,CACjB,CACD,CAWA,GARKzE,EAAEre,MAAQqe,EAAEmC,aAAiC,UAAlB,OAAOnC,EAAEre,OACxCqe,EAAEre,KAAOvf,EAAOy9B,MAAOG,EAAEre,KAAMqe,EAAEF,WAAY,GAI9CqB,GAA+B7H,GAAY0G,EAAGx7B,EAAS48B,CAAM,EAGxDphB,CAAAA,EAAL,CA+EA,IAAMze,KAzENiiC,EAAcphC,EAAOqlB,OAASuY,EAAEphC,SAGQ,GAApBwD,EAAOy/B,MAAM,IAChCz/B,EAAOqlB,MAAMU,QAAS,WAAY,EAInC6X,EAAEj/B,KAAOi/B,EAAEj/B,KAAKkgB,YAAY,EAG5B+e,EAAE4E,WAAa,CAACnE,GAAWrzB,KAAM4yB,EAAEj/B,IAAK,EAKxCqiC,EAAWpD,EAAEgC,IAAI18B,QAASg7B,GAAO,EAAG,EAG9BN,EAAE4E,WAwBI5E,EAAEre,MAAQqe,EAAEmC,aACoD,KAAzEnC,EAAEqC,aAAe,IAAK/hC,QAAS,mCAAoC,IACrE0/B,EAAEre,KAAOqe,EAAEre,KAAKrc,QAAS+6B,GAAK,GAAI,IAvBlCwE,EAAW7E,EAAEgC,IAAIjiC,MAAOqjC,EAAS1gC,MAAO,EAGnCs9B,EAAEre,OAAUqe,EAAEmC,aAAiC,UAAlB,OAAOnC,EAAEre,QAC1CyhB,IAAchE,GAAOhyB,KAAMg2B,CAAS,EAAI,IAAM,KAAQpD,EAAEre,KAGxD,OAAOqe,EAAEre,MAIO,CAAA,IAAZqe,EAAEnyB,QACNu1B,EAAWA,EAAS99B,QAASi7B,GAAY,IAAK,EAC9CsE,GAAazF,GAAOhyB,KAAMg2B,CAAS,EAAI,IAAM,KAAQ,KAASniC,GAAMuF,IAAO,GAC1Eq+B,GAIF7E,EAAEgC,IAAMoB,EAAWyB,GASf7E,EAAE8E,aACD1iC,EAAO0/B,aAAcsB,IACzBhC,EAAM8C,iBAAkB,oBAAqB9hC,EAAO0/B,aAAcsB,EAAW,EAEzEhhC,EAAO2/B,KAAMqB,KACjBhC,EAAM8C,iBAAkB,gBAAiB9hC,EAAO2/B,KAAMqB,EAAW,GAK9DpD,EAAEre,MAAQqe,EAAE4E,YAAgC,CAAA,IAAlB5E,EAAEqC,aAAyB79B,EAAQ69B,cACjEjB,EAAM8C,iBAAkB,eAAgBlE,EAAEqC,WAAY,EAIvDjB,EAAM8C,iBACL,SACAlE,EAAEkB,UAAW,IAAOlB,EAAEsC,QAAStC,EAAEkB,UAAW,IAC3ClB,EAAEsC,QAAStC,EAAEkB,UAAW,KACA,MAArBlB,EAAEkB,UAAW,GAAc,KAAON,GAAW,WAAa,IAC7DZ,EAAEsC,QAAS,IACb,EAGWtC,EAAE+E,QACZ3D,EAAM8C,iBAAkB3iC,EAAGy+B,EAAE+E,QAASxjC,EAAI,EAI3C,GAAKy+B,EAAEgF,aAC+C,CAAA,IAAnDhF,EAAEgF,WAAW9kC,KAAMujC,EAAiBrC,EAAOpB,CAAE,GAAehgB,GAG9D,OAAOohB,EAAMkD,MAAM,EAepB,GAXAP,EAAW,QAGXJ,EAAiBjpB,IAAKslB,EAAEhG,QAAS,EACjCoH,EAAMh4B,KAAM42B,EAAEiF,OAAQ,EACtB7D,EAAMrlB,KAAMikB,EAAEx6B,KAAM,EAGpB29B,EAAYhC,GAA+BR,GAAYX,EAAGx7B,EAAS48B,CAAM,EAKlE,CASN,GARAA,EAAMhhB,WAAa,EAGdojB,GACJE,EAAmBvb,QAAS,WAAY,CAAEiZ,EAAOpB,EAAI,EAIjDhgB,EACJ,OAAOohB,EAIHpB,EAAEoC,OAAqB,EAAZpC,EAAE5D,UACjBmH,EAAepkC,EAAO6f,WAAY,WACjCoiB,EAAMkD,MAAO,SAAU,CACxB,EAAGtE,EAAE5D,OAAQ,GAGd,IACCpc,EAAY,CAAA,EACZmjB,EAAU+B,KAAMrB,EAAgBz6B,CAAK,CAUtC,CATE,MAAQgD,GAGT,GAAK4T,EACJ,MAAM5T,EAIPhD,EAAM,CAAC,EAAGgD,CAAE,CACb,CACD,MAlCChD,EAAM,CAAC,EAAG,cAAe,CAtG1B,CAkQA,OAAOg4B,EAvHP,SAASh4B,EAAMi7B,EAAQc,EAAkBC,EAAWL,GACnD,IAAeE,EAASz/B,EAAO6/B,EAC9Bd,EAAaY,EAGTnlB,IAILA,EAAY,CAAA,EAGPujB,GACJpkC,EAAOk9B,aAAckH,CAAa,EAKnCJ,EAAYj+B,KAAAA,EAGZm+B,EAAwB0B,GAAW,GAGnC3D,EAAMhhB,WAAsB,EAATikB,EAAa,EAAI,EAGpCiB,EAAsB,KAAVjB,GAAiBA,EAAS,KAAkB,MAAXA,EAGxCe,IACJC,EA7lBJ,SAA8BrF,EAAGoB,EAAOgE,GAOvC,IALA,IAAIG,EAAIxkC,EAAMykC,EAAeC,EAC5BvrB,EAAW8lB,EAAE9lB,SACbgnB,EAAYlB,EAAEkB,UAGY,MAAnBA,EAAW,IAClBA,EAAUlzB,MAAM,EACJ9I,KAAAA,IAAPqgC,IACJA,EAAKvF,EAAEoE,UAAYhD,EAAM4C,kBAAmB,cAAe,GAK7D,GAAKuB,EACJ,IAAMxkC,KAAQmZ,EACb,GAAKA,EAAUnZ,IAAUmZ,EAAUnZ,GAAOqM,KAAMm4B,CAAG,EAAI,CACtDrE,EAAU9vB,QAASrQ,CAAK,EACxB,KACD,CAKF,GAAKmgC,EAAW,KAAOkE,EACtBI,EAAgBtE,EAAW,OACrB,CAGN,IAAMngC,KAAQqkC,EAAY,CACzB,GAAK,CAAClE,EAAW,IAAOlB,EAAEyC,WAAY1hC,EAAO,IAAMmgC,EAAW,IAAQ,CACrEsE,EAAgBzkC,EAChB,KACD,CACM0kC,EAAAA,GACW1kC,CAElB,CAGAykC,EAAgBA,GAAiBC,CAClC,CAKA,GAAKD,EAIJ,OAHKA,IAAkBtE,EAAW,IACjCA,EAAU9vB,QAASo0B,CAAc,EAE3BJ,EAAWI,EAEpB,EAwiBoCxF,EAAGoB,EAAOgE,CAAU,GAIhD,CAACE,GACqC,CAAC,EAA3CljC,EAAO6D,QAAS,SAAU+5B,EAAEkB,SAAU,GACtC9+B,EAAO6D,QAAS,OAAQ+5B,EAAEkB,SAAU,EAAI,IACxClB,EAAEyC,WAAY,eAAkB,cAIjC4C,EA9iBH,SAAsBrF,EAAGqF,EAAUjE,EAAOkE,GACzC,IAAII,EAAOC,EAASC,EAAM11B,EAAKiK,EAC9BsoB,EAAa,GAGbvB,EAAYlB,EAAEkB,UAAUnhC,MAAM,EAG/B,GAAKmhC,EAAW,GACf,IAAM0E,KAAQ5F,EAAEyC,WACfA,EAAYmD,EAAK/+B,YAAY,GAAMm5B,EAAEyC,WAAYmD,GAOnD,IAHAD,EAAUzE,EAAUlzB,MAAM,EAGlB23B,GAcP,GAZK3F,EAAEwC,eAAgBmD,KACtBvE,EAAOpB,EAAEwC,eAAgBmD,IAAcN,GAInC,CAAClrB,GAAQmrB,GAAatF,EAAE6F,aAC5BR,EAAWrF,EAAE6F,WAAYR,EAAUrF,EAAEiB,QAAS,GAG/C9mB,EAAOwrB,EACPA,EAAUzE,EAAUlzB,MAAM,EAKzB,GAAiB,MAAZ23B,EAEJA,EAAUxrB,OAGJ,GAAc,MAATA,GAAgBA,IAASwrB,EAAU,CAM9C,GAAK,EAHLC,EAAOnD,EAAYtoB,EAAO,IAAMwrB,IAAalD,EAAY,KAAOkD,IAI/D,IAAMD,KAASjD,EAId,IADAvyB,EAAMw1B,EAAM/+B,MAAO,GAAI,GACb,KAAQg/B,IAGjBC,EAAOnD,EAAYtoB,EAAO,IAAMjK,EAAK,KACpCuyB,EAAY,KAAOvyB,EAAK,KACb,CAGG,CAAA,IAAT01B,EACJA,EAAOnD,EAAYiD,GAGgB,CAAA,IAAxBjD,EAAYiD,KACvBC,EAAUz1B,EAAK,GACfgxB,EAAU9vB,QAASlB,EAAK,EAAI,GAE7B,KACD,CAMH,GAAc,CAAA,IAAT01B,EAGJ,GAAKA,GAAQ5F,EAAE8F,OACdT,EAAWO,EAAMP,CAAS,OAE1B,IACCA,EAAWO,EAAMP,CAAS,CAM3B,CALE,MAAQj5B,GACT,MAAO,CACNiR,MAAO,cACP7X,MAAOogC,EAAOx5B,EAAI,sBAAwB+N,EAAO,OAASwrB,CAC3D,CACD,CAGH,CAIF,MAAO,CAAEtoB,MAAO,UAAWsE,KAAM0jB,CAAS,CAC3C,EAgd2BrF,EAAGqF,EAAUjE,EAAOkE,CAAU,EAGjDA,GAGCtF,EAAE8E,cACNiB,EAAW3E,EAAM4C,kBAAmB,eAAgB,KAEnD5hC,EAAO0/B,aAAcsB,GAAa2C,GAEnCA,EAAW3E,EAAM4C,kBAAmB,MAAO,KAE1C5hC,EAAO2/B,KAAMqB,GAAa2C,GAKZ,MAAX1B,GAA6B,SAAXrE,EAAEj/B,KACxBwjC,EAAa,YAGS,MAAXF,EACXE,EAAa,eAIbA,EAAac,EAAShoB,MACtB4nB,EAAUI,EAAS1jB,KAEnB2jB,EAAY,EADZ9/B,EAAQ6/B,EAAS7/B,UAMlBA,EAAQ++B,EACHF,CAAAA,GAAWE,IACfA,EAAa,QACRF,EAAS,IACbA,EAAS,KAMZjD,EAAMiD,OAASA,EACfjD,EAAMmD,YAAeY,GAAoBZ,GAAe,GAGnDe,EACJ/nB,EAASmB,YAAa+kB,EAAiB,CAAEwB,EAASV,EAAYnD,EAAQ,EAEtE7jB,EAASuB,WAAY2kB,EAAiB,CAAErC,EAAOmD,EAAY/+B,EAAQ,EAIpE47B,EAAMwC,WAAYA,CAAW,EAC7BA,EAAa1+B,KAAAA,EAERs+B,GACJE,EAAmBvb,QAASmd,EAAY,cAAgB,YACvD,CAAElE,EAAOpB,EAAGsF,EAAYL,EAAUz/B,EAAQ,EAI5Cm+B,EAAiB1mB,SAAUwmB,EAAiB,CAAErC,EAAOmD,EAAa,EAE7Df,IACJE,EAAmBvb,QAAS,eAAgB,CAAEiZ,EAAOpB,EAAI,EAGnD,EAAI59B,EAAOy/B,QAChBz/B,EAAOqlB,MAAMU,QAAS,UAAW,GAGpC,CAGD,EAEA6d,QAAS,SAAUhE,EAAKrgB,EAAMpe,GAC7B,OAAOnB,EAAOW,IAAKi/B,EAAKrgB,EAAMpe,EAAU,MAAO,CAChD,EAEA0iC,UAAW,SAAUjE,EAAKz+B,GACzB,OAAOnB,EAAOW,IAAKi/B,EAAK98B,KAAAA,EAAW3B,EAAU,QAAS,CACvD,CACD,CAAE,EAEFnB,EAAOkB,KAAM,CAAE,MAAO,QAAU,SAAUsD,EAAIiV,GAC7CzZ,EAAQyZ,GAAW,SAAUmmB,EAAKrgB,EAAMpe,EAAUxC,GAUjD,OAPKzB,EAAYqiB,CAAK,IACrB5gB,EAAOA,GAAQwC,EACfA,EAAWoe,EACXA,EAAOzc,KAAAA,GAID9C,EAAO8gC,KAAM9gC,EAAOmC,OAAQ,CAClCy9B,IAAKA,EACLjhC,KAAM8a,EACNolB,SAAUlgC,EACV4gB,KAAMA,EACNsjB,QAAS1hC,CACV,EAAGnB,EAAO2C,cAAei9B,CAAI,GAAKA,CAAI,CAAE,CACzC,CACD,CAAE,EAEF5/B,EAAO4gC,cAAe,SAAUhD,GAE/B,IADA,IAAIz+B,KACOy+B,EAAE+E,QACa,iBAApBxjC,EAAEsF,YAAY,IAClBm5B,EAAEqC,YAAcrC,EAAE+E,QAASxjC,IAAO,GAGrC,CAAE,EAGFa,EAAOqsB,SAAW,SAAUuT,EAAKx9B,EAASlD,GACzC,OAAOc,EAAO8gC,KAAM,CACnBlB,IAAKA,EAGLjhC,KAAM,MACNkgC,SAAU,SACVpzB,MAAO,CAAA,EACPu0B,MAAO,CAAA,EACPxjC,OAAQ,CAAA,EAKR6jC,WAAY,CACXyD,cAAe,YAChB,EACAL,WAAY,SAAUR,GACrBjjC,EAAO0D,WAAYu/B,EAAU7gC,EAASlD,CAAI,CAC3C,CACD,CAAE,CACH,EAGAc,EAAOG,GAAGgC,OAAQ,CACjB4hC,QAAS,SAAU3X,GA0BlB,OAvBKpvB,KAAM,KACLE,EAAYkvB,CAAK,IACrBA,EAAOA,EAAKtuB,KAAMd,KAAM,EAAI,GAI7BsnB,EAAOtkB,EAAQosB,EAAMpvB,KAAM,GAAIyN,aAAc,EAAEjJ,GAAI,CAAE,EAAEgB,MAAO,CAAA,CAAK,EAE9DxF,KAAM,GAAI4C,YACd0kB,EAAK0I,aAAchwB,KAAM,EAAI,EAG9BsnB,EAAKljB,IAAK,WAGT,IAFA,IAAIC,EAAOrE,KAEHqE,EAAK2iC,mBACZ3iC,EAAOA,EAAK2iC,kBAGb,OAAO3iC,CACR,CAAE,EAAEyrB,OAAQ9vB,IAAK,GAGXA,IACR,EAEAinC,UAAW,SAAU7X,GACpB,OAAKlvB,EAAYkvB,CAAK,EACdpvB,KAAKkE,KAAM,SAAU/B,GAC3Ba,EAAQhD,IAAK,EAAEinC,UAAW7X,EAAKtuB,KAAMd,KAAMmC,CAAE,CAAE,CAChD,CAAE,EAGInC,KAAKkE,KAAM,WACjB,IAAIqW,EAAOvX,EAAQhD,IAAK,EACvB8a,EAAWP,EAAKO,SAAS,EAErBA,EAASxX,OACbwX,EAASisB,QAAS3X,CAAK,EAGvB7U,EAAKuV,OAAQV,CAAK,CAEpB,CAAE,CACH,EAEA9H,KAAM,SAAU8H,GACf,IAAI8X,EAAiBhnC,EAAYkvB,CAAK,EAEtC,OAAOpvB,KAAKkE,KAAM,SAAU/B,GAC3Ba,EAAQhD,IAAK,EAAE+mC,QAASG,EAAiB9X,EAAKtuB,KAAMd,KAAMmC,CAAE,EAAIitB,CAAK,CACtE,CAAE,CACH,EAEA+X,OAAQ,SAAUlkC,GAIjB,OAHAjD,KAAKuU,OAAQtR,CAAS,EAAE8R,IAAK,MAAO,EAAE7Q,KAAM,WAC3ClB,EAAQhD,IAAK,EAAEmwB,YAAanwB,KAAK+M,UAAW,CAC7C,CAAE,EACK/M,IACR,CACD,CAAE,EAGFgD,EAAOiP,KAAKjH,QAAQquB,OAAS,SAAUh1B,GACtC,MAAO,CAACrB,EAAOiP,KAAKjH,QAAQo8B,QAAS/iC,CAAK,CAC3C,EACArB,EAAOiP,KAAKjH,QAAQo8B,QAAU,SAAU/iC,GACvC,MAAO,CAAC,EAAGA,EAAK4tB,aAAe5tB,EAAKuvB,cAAgBvvB,EAAKqxB,eAAe,EAAEpyB,OAC3E,EAKAN,EAAOw/B,aAAa6E,IAAM,WACzB,IACC,OAAO,IAAItnC,EAAOunC,cACJ,CAAb,MAAQt6B,IACX,EAEA,IAAIu6B,GAAmB,CAGrBC,EAAG,IAIHC,KAAM,GACP,EACAC,GAAe1kC,EAAOw/B,aAAa6E,IAAI,EAyNpCM,IAvNJlmC,EAAQmmC,KAAO,CAAC,CAACF,IAAkB,oBAAqBA,GACxDjmC,EAAQqiC,KAAO4D,GAAe,CAAC,CAACA,GAEhC1kC,EAAO6gC,cAAe,SAAUz+B,GAC/B,IAAIjB,EAAU0jC,EAGd,GAAKpmC,EAAQmmC,MAAQF,IAAgB,CAACtiC,EAAQigC,YAC7C,MAAO,CACNS,KAAM,SAAUH,EAAS/K,GACxB,IAAIz4B,EACHklC,EAAMjiC,EAAQiiC,IAAI,EAWnB,GATAA,EAAIS,KACH1iC,EAAQzD,KACRyD,EAAQw9B,IACRx9B,EAAQ49B,MACR59B,EAAQ2iC,SACR3iC,EAAQsR,QACT,EAGKtR,EAAQ4iC,UACZ,IAAM7lC,KAAKiD,EAAQ4iC,UAClBX,EAAKllC,GAAMiD,EAAQ4iC,UAAW7lC,GAmBhC,IAAMA,KAdDiD,EAAQ4/B,UAAYqC,EAAItC,kBAC5BsC,EAAItC,iBAAkB3/B,EAAQ4/B,QAAS,EAQlC5/B,EAAQigC,aAAgBM,EAAS,sBACtCA,EAAS,oBAAuB,kBAItBA,EACV0B,EAAIvC,iBAAkB3iC,EAAGwjC,EAASxjC,EAAI,EAIvCgC,EAAW,SAAUxC,GACpB,OAAO,WACDwC,IACJA,EAAW0jC,EAAgBR,EAAIY,OAC9BZ,EAAIa,QAAUb,EAAIc,QAAUd,EAAIe,UAC/Bf,EAAIgB,mBAAqB,KAEb,UAAT1mC,EACJ0lC,EAAInC,MAAM,EACU,UAATvjC,EAKgB,UAAtB,OAAO0lC,EAAIpC,OACfrK,EAAU,EAAG,OAAQ,EAErBA,EAGCyM,EAAIpC,OACJoC,EAAIlC,UACL,EAGDvK,EACC2M,GAAkBF,EAAIpC,SAAYoC,EAAIpC,OACtCoC,EAAIlC,WAK+B,UAAjCkC,EAAIiB,cAAgB,SACM,UAA5B,OAAOjB,EAAIkB,aACV,CAAEC,OAAQnB,EAAIpB,QAAS,EACvB,CAAE1jC,KAAM8kC,EAAIkB,YAAa,EAC1BlB,EAAIxC,sBAAsB,CAC3B,EAGH,CACD,EAGAwC,EAAIY,OAAS9jC,EAAS,EACtB0jC,EAAgBR,EAAIa,QAAUb,EAAIe,UAAYjkC,EAAU,OAAQ,EAK3C2B,KAAAA,IAAhBuhC,EAAIc,QACRd,EAAIc,QAAUN,EAEdR,EAAIgB,mBAAqB,WAGA,IAAnBhB,EAAIrmB,YAMRjhB,EAAO6f,WAAY,WACbzb,GACJ0jC,EAAc,CAEhB,CAAE,CAEJ,EAID1jC,EAAWA,EAAU,OAAQ,EAE7B,IAGCkjC,EAAIvB,KAAM1gC,EAAQogC,YAAcpgC,EAAQmd,MAAQ,IAAK,CAOtD,CANE,MAAQvV,GAGT,GAAK7I,EACJ,MAAM6I,CAER,CACD,EAEAk4B,MAAO,WACD/gC,GACJA,EAAS,CAEX,CACD,CAEF,CAAE,EAMFnB,EAAO4gC,cAAe,SAAUhD,GAC1BA,EAAEyE,cACNzE,EAAE9lB,SAASzY,OAAS,CAAA,EAEtB,CAAE,EAGFW,EAAO0gC,UAAW,CACjBR,QAAS,CACR7gC,OAAQ,2FAET,EACAyY,SAAU,CACTzY,OAAQ,yBACT,EACAghC,WAAY,CACXyD,cAAe,SAAUvkC,GAExB,OADAS,EAAO0D,WAAYnE,CAAK,EACjBA,CACR,CACD,CACD,CAAE,EAGFS,EAAO4gC,cAAe,SAAU,SAAUhD,GACxB96B,KAAAA,IAAZ86B,EAAEnyB,QACNmyB,EAAEnyB,MAAQ,CAAA,GAENmyB,EAAEyE,cACNzE,EAAEj/B,KAAO,MAEX,CAAE,EAGFqB,EAAO6gC,cAAe,SAAU,SAAUjD,GAGzC,IACKv+B,EAAQ8B,EADb,GAAKy8B,EAAEyE,aAAezE,EAAE6H,YAEvB,MAAO,CACN3C,KAAM,SAAU/oB,EAAG6d,GAClBv4B,EAASW,EAAQ,UAAW,EAC1BmP,KAAMyuB,EAAE6H,aAAe,EAAG,EAC1BjmB,KAAM,CAAEkmB,QAAS9H,EAAE+H,cAAe/mC,IAAKg/B,EAAEgC,GAAI,CAAE,EAC/C3a,GAAI,aAAc9jB,EAAW,SAAUykC,GACvCvmC,EAAOqb,OAAO,EACdvZ,EAAW,KACNykC,GACJhO,EAAuB,UAAbgO,EAAIjnC,KAAmB,IAAM,IAAKinC,EAAIjnC,IAAK,CAEvD,CAAE,EAGH/B,EAAS8C,KAAKC,YAAaN,EAAQ,EAAI,CACxC,EACA6iC,MAAO,WACD/gC,GACJA,EAAS,CAEX,CACD,CAEF,CAAE,EAKiB,IAClB0kC,GAAS,oBA4iBN19B,IAziBJnI,EAAO0gC,UAAW,CACjBoF,MAAO,WACPC,cAAe,WACd,IAAI5kC,EAAWwjC,GAAal9B,IAAI,GAAOzH,EAAO+C,QAAU,IAAQlE,GAAMuF,IAAO,GAE7E,OADApH,KAAMmE,GAAa,CAAA,EACZA,CACR,CACD,CAAE,EAGFnB,EAAO4gC,cAAe,aAAc,SAAUhD,EAAGoI,EAAkBhH,GAElE,IAAIiH,EAAcC,EAAaC,EAC9BC,EAAuB,CAAA,IAAZxI,EAAEkI,QAAqBD,GAAO76B,KAAM4yB,EAAEgC,GAAI,EACpD,MACkB,UAAlB,OAAOhC,EAAEre,MAE6C,KADnDqe,EAAEqC,aAAe,IACjB/hC,QAAS,mCAAoC,GAC/C2nC,GAAO76B,KAAM4yB,EAAEre,IAAK,GAAK,QAI5B,GAAK6mB,GAAiC,UAArBxI,EAAEkB,UAAW,GA8D7B,OA3DAmH,EAAerI,EAAEmI,cAAgB7oC,EAAY0gC,EAAEmI,aAAc,EAC5DnI,EAAEmI,cAAc,EAChBnI,EAAEmI,cAGEK,EACJxI,EAAGwI,GAAaxI,EAAGwI,GAAWljC,QAAS2iC,GAAQ,KAAOI,CAAa,EAC5C,CAAA,IAAZrI,EAAEkI,QACblI,EAAEgC,MAAS5C,GAAOhyB,KAAM4yB,EAAEgC,GAAI,EAAI,IAAM,KAAQhC,EAAEkI,MAAQ,IAAMG,GAIjErI,EAAEyC,WAAY,eAAkB,WAI/B,OAHM8F,GACLnmC,EAAOoD,MAAO6iC,EAAe,iBAAkB,EAEzCE,EAAmB,EAC3B,EAGAvI,EAAEkB,UAAW,GAAM,OAGnBoH,EAAcnpC,EAAQkpC,GACtBlpC,EAAQkpC,GAAiB,WACxBE,EAAoB7kC,SACrB,EAGA09B,EAAM9jB,OAAQ,WAGQpY,KAAAA,IAAhBojC,EACJlmC,EAAQjD,CAAO,EAAEk+B,WAAYgL,CAAa,EAI1ClpC,EAAQkpC,GAAiBC,EAIrBtI,EAAGqI,KAGPrI,EAAEmI,cAAgBC,EAAiBD,cAGnCpB,GAAa1mC,KAAMgoC,CAAa,GAI5BE,GAAqBjpC,EAAYgpC,CAAY,GACjDA,EAAaC,EAAmB,EAAI,EAGrCA,EAAoBD,EAAcpjC,KAAAA,CACnC,CAAE,EAGK,QAET,CAAE,EAUFrE,EAAQ4nC,qBACH9jB,EAAO3lB,EAAS0pC,eAAeD,mBAAoB,EAAG,EAAE9jB,MACvDvU,UAAY,6BACiB,IAA3BuU,EAAKxY,WAAWzJ,QAQxBN,EAAO2X,UAAY,SAAU4H,EAAMrf,EAASqmC,GAC3C,IAQkBpiB,EARlB,MAAqB,UAAhB,OAAO5E,EACJ,IAEgB,WAAnB,OAAOrf,IACXqmC,EAAcrmC,EACdA,EAAU,CAAA,GAKLA,IAIAzB,EAAQ4nC,qBAMZryB,GALA9T,EAAUtD,EAAS0pC,eAAeD,mBAAoB,EAAG,GAK1C/mC,cAAe,MAAO,GAChCqT,KAAO/V,EAAS0V,SAASK,KAC9BzS,EAAQR,KAAKC,YAAaqU,CAAK,GAE/B9T,EAAUtD,GAKZunB,EAAU,CAACoiB,GAAe,IAD1BC,EAASpvB,EAAW1M,KAAM6U,CAAK,GAKvB,CAAErf,EAAQZ,cAAeknC,EAAQ,EAAI,IAG7CA,EAAStiB,GAAe,CAAE3E,GAAQrf,EAASikB,CAAQ,EAE9CA,GAAWA,EAAQ7jB,QACvBN,EAAQmkB,CAAQ,EAAEzJ,OAAO,EAGnB1a,EAAOgB,MAAO,GAAIwlC,EAAOz8B,UAAW,GAC5C,EAMA/J,EAAOG,GAAGmoB,KAAO,SAAUsX,EAAK6G,EAAQtlC,GACvC,IAAIlB,EAAUtB,EAAMskC,EACnB1rB,EAAOva,KACPsoB,EAAMsa,EAAI1hC,QAAS,GAAI,EAsDxB,MApDW,CAAC,EAAPonB,IACJrlB,EAAW66B,EAAkB8E,EAAIjiC,MAAO2nB,CAAI,CAAE,EAC9Csa,EAAMA,EAAIjiC,MAAO,EAAG2nB,CAAI,GAIpBpoB,EAAYupC,CAAO,GAGvBtlC,EAAWslC,EACXA,EAAS3jC,KAAAA,GAGE2jC,GAA4B,UAAlB,OAAOA,IAC5B9nC,EAAO,QAIW,EAAd4Y,EAAKjX,QACTN,EAAO8gC,KAAM,CACZlB,IAAKA,EAKLjhC,KAAMA,GAAQ,MACdkgC,SAAU,OACVtf,KAAMknB,CACP,CAAE,EAAEz/B,KAAM,SAAUu+B,GAGnBtC,EAAW3hC,UAEXiW,EAAK6U,KAAMnsB,EAIVD,EAAQ,OAAQ,EAAE8sB,OAAQ9sB,EAAO2X,UAAW4tB,CAAa,CAAE,EAAE53B,KAAM1N,CAAS,EAG5EslC,CAAa,CAKf,CAAE,EAAErqB,OAAQ/Z,GAAY,SAAU69B,EAAOiD,GACxC1qB,EAAKrW,KAAM,WACVC,EAASnD,MAAOhB,KAAMimC,GAAY,CAAEjE,EAAMuG,aAActD,EAAQjD,EAAQ,CACzE,CAAE,CACH,CAAE,EAGIhiC,IACR,EAKAgD,EAAOiP,KAAKjH,QAAQ0+B,SAAW,SAAUrlC,GACxC,OAAOrB,EAAO2B,KAAM3B,EAAOo5B,OAAQ,SAAUj5B,GAC5C,OAAOkB,IAASlB,EAAGkB,IACpB,CAAE,EAAEf,MACL,EAKAN,EAAO2mC,OAAS,CACfC,UAAW,SAAUvlC,EAAMe,EAASjD,GACnC,IAA0B0nC,EAAWC,EAAQC,EAAWC,EACvDhY,EAAWhvB,EAAOihB,IAAK5f,EAAM,UAAW,EACxC4lC,EAAUjnC,EAAQqB,CAAK,EACvBsnB,EAAQ,GAGS,WAAbqG,IACJ3tB,EAAKyf,MAAMkO,SAAW,YAGvB+X,EAAYE,EAAQN,OAAO,EAC3BE,EAAY7mC,EAAOihB,IAAK5f,EAAM,KAAM,EACpC2lC,EAAahnC,EAAOihB,IAAK5f,EAAM,MAAO,EASrC6lC,GARkC,aAAblY,GAAwC,UAAbA,IACD,CAAC,GAA9C6X,EAAYG,GAAa9oC,QAAS,MAAO,GAM3C4oC,GADAK,EAAcF,EAAQjY,SAAS,GACV9hB,IACXi6B,EAAY5S,OAGtBuS,EAAS1X,WAAYyX,CAAU,GAAK,EAC1BzX,WAAY4X,CAAW,GAAK,GASnB,OAHnB5kC,EAHIlF,EAAYkF,CAAQ,EAGdA,EAAQtE,KAAMuD,EAAMlC,EAAGa,EAAOmC,OAAQ,GAAI4kC,CAAU,CAAE,EAG5D3kC,GAAQ8K,MACZyb,EAAMzb,IAAQ9K,EAAQ8K,IAAM65B,EAAU75B,IAAQ45B,GAE1B,MAAhB1kC,EAAQmyB,OACZ5L,EAAM4L,KAASnyB,EAAQmyB,KAAOwS,EAAUxS,KAAS2S,GAG7C,UAAW9kC,EACfA,EAAQglC,MAAMtpC,KAAMuD,EAAMsnB,CAAM,EAGhCse,EAAQhmB,IAAK0H,CAAM,CAErB,CACD,EAEA3oB,EAAOG,GAAGgC,OAAQ,CAGjBwkC,OAAQ,SAAUvkC,GAGjB,IAQIilC,EACHhmC,EATD,OAAKC,UAAUhB,OACKwC,KAAAA,IAAZV,EACNpF,KACAA,KAAKkE,KAAM,SAAU/B,GACpBa,EAAO2mC,OAAOC,UAAW5pC,KAAMoF,EAASjD,CAAE,CAC3C,CAAE,GAIHkC,EAAOrE,KAAM,IAURqE,EAAKqxB,eAAe,EAAEpyB,QAK5B+mC,EAAOhmC,EAAKgzB,sBAAsB,EAClCiT,EAAMjmC,EAAKoJ,cAAcwC,YAClB,CACNC,IAAKm6B,EAAKn6B,IAAMo6B,EAAIC,YACpBhT,KAAM8S,EAAK9S,KAAO+S,EAAIE,WACvB,GATQ,CAAEt6B,IAAK,EAAGqnB,KAAM,CAAE,EAT1B,KAAA,CAmBD,EAIAvF,SAAU,WACT,GAAMhyB,KAAM,GAAZ,CAIA,IAAIyqC,EAAcd,EAAQznC,EACzBmC,EAAOrE,KAAM,GACb0qC,EAAe,CAAEx6B,IAAK,EAAGqnB,KAAM,CAAE,EAGlC,GAAwC,UAAnCv0B,EAAOihB,IAAK5f,EAAM,UAAW,EAGjCslC,EAAStlC,EAAKgzB,sBAAsB,MAE9B,CAON,IANAsS,EAAS3pC,KAAK2pC,OAAO,EAIrBznC,EAAMmC,EAAKoJ,cACXg9B,EAAepmC,EAAKomC,cAAgBvoC,EAAI6N,gBAChC06B,IACLA,IAAiBvoC,EAAIqjB,MAAQklB,IAAiBvoC,EAAI6N,kBACT,WAA3C/M,EAAOihB,IAAKwmB,EAAc,UAAW,GAErCA,EAAeA,EAAa7nC,WAExB6nC,GAAgBA,IAAiBpmC,GAAkC,IAA1BomC,EAAarqC,YAG1DsqC,EAAe1nC,EAAQynC,CAAa,EAAEd,OAAO,GAChCz5B,KAAOlN,EAAOihB,IAAKwmB,EAAc,iBAAkB,CAAA,CAAK,EACrEC,EAAanT,MAAQv0B,EAAOihB,IAAKwmB,EAAc,kBAAmB,CAAA,CAAK,EAEzE,CAGA,MAAO,CACNv6B,IAAKy5B,EAAOz5B,IAAMw6B,EAAax6B,IAAMlN,EAAOihB,IAAK5f,EAAM,YAAa,CAAA,CAAK,EACzEkzB,KAAMoS,EAAOpS,KAAOmT,EAAanT,KAAOv0B,EAAOihB,IAAK5f,EAAM,aAAc,CAAA,CAAK,CAC9E,CAtCA,CAuCD,EAYAomC,aAAc,WACb,OAAOzqC,KAAKoE,IAAK,WAGhB,IAFA,IAAIqmC,EAAezqC,KAAKyqC,aAEhBA,GAA2D,WAA3CznC,EAAOihB,IAAKwmB,EAAc,UAAW,GAC5DA,EAAeA,EAAaA,aAG7B,OAAOA,GAAgB16B,CACxB,CAAE,CACH,CACD,CAAE,EAGF/M,EAAOkB,KAAM,CAAEu0B,WAAY,cAAeD,UAAW,aAAc,EAAG,SAAU/b,EAAQ+F,GACvF,IAAItS,EAAM,gBAAkBsS,EAE5Bxf,EAAOG,GAAIsZ,GAAW,SAAUra,GAC/B,OAAO8e,EAAQlhB,KAAM,SAAUqE,EAAMoY,EAAQra,GAG5C,IAAIkoC,EAOJ,GANKhqC,EAAU+D,CAAK,EACnBimC,EAAMjmC,EACuB,IAAlBA,EAAKjE,WAChBkqC,EAAMjmC,EAAK4L,aAGCnK,KAAAA,IAAR1D,EACJ,OAAOkoC,EAAMA,EAAK9nB,GAASne,EAAMoY,GAG7B6tB,EACJA,EAAIK,SACFz6B,EAAYo6B,EAAIE,YAAVpoC,EACP8N,EAAM9N,EAAMkoC,EAAIC,WACjB,EAGAlmC,EAAMoY,GAAWra,CAEnB,EAAGqa,EAAQra,EAAKkC,UAAUhB,MAAO,CAClC,CACD,CAAE,EAQFN,EAAOkB,KAAM,CAAE,MAAO,QAAU,SAAUsD,EAAIgb,GAC7Cxf,EAAO6yB,SAAUrT,GAASmQ,GAAclxB,EAAQwxB,cAC/C,SAAU5uB,EAAMiuB,GACf,GAAKA,EAIJ,OAHAA,EAAWD,GAAQhuB,EAAMme,CAAK,EAGvB+O,GAAUvjB,KAAMskB,CAAS,EAC/BtvB,EAAQqB,CAAK,EAAE2tB,SAAS,EAAGxP,GAAS,KACpC8P,CAEH,CACD,CACD,CAAE,EAIFtvB,EAAOkB,KAAM,CAAE0mC,OAAQ,SAAUC,MAAO,OAAQ,EAAG,SAAUxlC,EAAM1D,GAClEqB,EAAOkB,KAAM,CACZuzB,QAAS,QAAUpyB,EACnByW,QAASna,EACTmpC,GAAI,QAAUzlC,CACf,EAAG,SAAU0lC,EAAcC,GAG1BhoC,EAAOG,GAAI6nC,GAAa,SAAUxT,EAAQrwB,GACzC,IAAIga,EAAY7c,UAAUhB,SAAYynC,GAAkC,WAAlB,OAAOvT,GAC5DpC,EAAQ2V,IAA6B,CAAA,IAAXvT,GAA6B,CAAA,IAAVrwB,EAAiB,SAAW,UAE1E,OAAO+Z,EAAQlhB,KAAM,SAAUqE,EAAM1C,EAAMwF,GAC1C,IAAIjF,EAEJ,OAAK5B,EAAU+D,CAAK,EAGoB,IAAhC2mC,EAAS9pC,QAAS,OAAQ,EAChCmD,EAAM,QAAUgB,GAChBhB,EAAKzE,SAASmQ,gBAAiB,SAAW1K,GAIrB,IAAlBhB,EAAKjE,UACT8B,EAAMmC,EAAK0L,gBAIJ/J,KAAK6uB,IACXxwB,EAAKkhB,KAAM,SAAWlgB,GAAQnD,EAAK,SAAWmD,GAC9ChB,EAAKkhB,KAAM,SAAWlgB,GAAQnD,EAAK,SAAWmD,GAC9CnD,EAAK,SAAWmD,EACjB,GAGgBS,KAAAA,IAAVqB,EAGNnE,EAAOihB,IAAK5f,EAAM1C,EAAMyzB,CAAM,EAG9BpyB,EAAO8gB,MAAOzf,EAAM1C,EAAMwF,EAAOiuB,CAAM,CACzC,EAAGzzB,EAAMwf,EAAYqW,EAAS1xB,KAAAA,EAAWqb,CAAU,CACpD,CACD,CAAE,CACH,CAAE,EAGFne,EAAOkB,KAAM,CACZ,YACA,WACA,eACA,YACA,cACA,YACE,SAAUsD,EAAI7F,GAChBqB,EAAOG,GAAIxB,GAAS,SAAUwB,GAC7B,OAAOnD,KAAKioB,GAAItmB,EAAMwB,CAAG,CAC1B,CACD,CAAE,EAKFH,EAAOG,GAAGgC,OAAQ,CAEjBw1B,KAAM,SAAUzS,EAAO3F,EAAMpf,GAC5B,OAAOnD,KAAKioB,GAAIC,EAAO,KAAM3F,EAAMpf,CAAG,CACvC,EACA8nC,OAAQ,SAAU/iB,EAAO/kB,GACxB,OAAOnD,KAAKsoB,IAAKJ,EAAO,KAAM/kB,CAAG,CAClC,EAEA+nC,SAAU,SAAUjoC,EAAUilB,EAAO3F,EAAMpf,GAC1C,OAAOnD,KAAKioB,GAAIC,EAAOjlB,EAAUsf,EAAMpf,CAAG,CAC3C,EACAgoC,WAAY,SAAUloC,EAAUilB,EAAO/kB,GAGtC,OAA4B,IAArBmB,UAAUhB,OAChBtD,KAAKsoB,IAAKrlB,EAAU,IAAK,EACzBjD,KAAKsoB,IAAKJ,EAAOjlB,GAAY,KAAME,CAAG,CACxC,EAEAioC,MAAO,SAAUC,EAAQC,GACxB,OAAOtrC,KAAK+tB,WAAYsd,CAAO,EAAErd,WAAYsd,GAASD,CAAO,CAC9D,CACD,CAAE,EAEFroC,EAAOkB,KACN,wLAE4DqD,MAAO,GAAI,EACvE,SAAUC,EAAInC,GAGbrC,EAAOG,GAAIkC,GAAS,SAAUkd,EAAMpf,GACnC,OAA0B,EAAnBmB,UAAUhB,OAChBtD,KAAKioB,GAAI5iB,EAAM,KAAMkd,EAAMpf,CAAG,EAC9BnD,KAAK+oB,QAAS1jB,CAAK,CACrB,CACD,CACD,EAOY,sCAiGXkmC,IA3FDvoC,EAAOwoC,MAAQ,SAAUroC,EAAID,GAC5B,IAAS0R,EAAM42B,EAUf,GARwB,UAAnB,OAAOtoC,IACX4N,EAAM3N,EAAID,GACVA,EAAUC,EACVA,EAAK2N,GAKA5Q,EAAYiD,CAAG,EAarB,OARAyR,EAAOjU,EAAMG,KAAMwD,UAAW,CAAE,GAChCknC,EAAQ,WACP,OAAOroC,EAAGnC,MAAOkC,GAAWlD,KAAM4U,EAAK7T,OAAQJ,EAAMG,KAAMwD,SAAU,CAAE,CAAE,CAC1E,GAGM8C,KAAOjE,EAAGiE,KAAOjE,EAAGiE,MAAQpE,EAAOoE,IAAI,GAEtCokC,CACR,EAEAxoC,EAAOyoC,UAAY,SAAUC,GACvBA,EACJ1oC,EAAO8d,SAAS,GAEhB9d,EAAO0X,MAAO,CAAA,CAAK,CAErB,EACA1X,EAAO6C,QAAUD,MAAMC,QACvB7C,EAAO2oC,UAAY5oB,KAAKC,MACxBhgB,EAAO6J,SAAWA,EAClB7J,EAAO9C,WAAaA,EACpB8C,EAAO1C,SAAWA,EAClB0C,EAAO8e,UAAYA,EACnB9e,EAAOrB,KAAOmB,EAEdE,EAAOgpB,IAAMniB,KAAKmiB,IAElBhpB,EAAO4oC,UAAY,SAAUzrC,GAK5B,IAAIwB,EAAOqB,EAAOrB,KAAMxB,CAAI,EAC5B,OAAkB,WAATwB,GAA8B,WAATA,IAK7B,CAACkqC,MAAO1rC,EAAMiyB,WAAYjyB,CAAI,CAAE,CAClC,EAEA6C,EAAO8oC,KAAO,SAAUvpC,GACvB,OAAe,MAARA,EACN,IACEA,EAAO,IAAK2D,QAASiF,GAAO,EAAG,CACnC,EAiBuB,YAAlB,OAAO4gC,QAAyBA,OAAOC,KAC3CD,OAAQ,SAAU,GAAI,WACrB,OAAO/oC,CACR,CAAE,EASQjD,EAAOiD,QAGjBipC,GAAKlsC,EAAOmsC,EAwBb,OAtBAlpC,EAAOmpC,WAAa,SAAUzmC,GAS7B,OARK3F,EAAOmsC,IAAMlpC,IACjBjD,EAAOmsC,EAAID,IAGPvmC,GAAQ3F,EAAOiD,SAAWA,IAC9BjD,EAAOiD,OAASuoC,IAGVvoC,CACR,EAKyB,KAAA,IAAb/C,IACXF,EAAOiD,OAASjD,EAAOmsC,EAAIlpC,GAMrBA,CACP,CAAE,ECxnVF,SAAWuS,EAAM9V,GACO,YAAlB,OAAOssC,QAAyBA,OAAOC,IAC3CD,OAAO,GAAI,WACV,OAAOtsC,EAAQ8V,CAAI,CACnB,CAAC,EAC4B,UAAnB,OAAO5V,QAClBD,OAAOC,QAAUF,EAAQ8V,CAAI,EAE7BA,EAAK62B,QAAU3sC,EAAQ8V,CAAI,CAE5B,EAAoB,aAAlB,OAAO/V,OAAyBA,OAA2B,aAAlB,OAAOO,OAAyBA,OAASC,KAAM,SAAWD,GAErG,aAyFmB,SAAfssC,EAAyBvxB,GACzBA,GACFA,EAAS7V,KAAK,SAAWqnC,EAAOC,GAG/B,OAFcC,EAAaF,EAAMxwB,OAAO,EAC1B0wB,EAAaD,EAAMzwB,OAAO,EACV,CAAC,EACxB,CACP,CAAC,CAEJ,CAoDiB,SAAb2wB,IACH,OAAI1sC,EAAO2sC,YAAc3sC,EAAOwqC,aA5BzBvkC,KAAK6uB,IACXj1B,SAAS2lB,KAAKonB,aAAc/sC,SAASmQ,gBAAgB48B,aACrD/sC,SAAS2lB,KAAKqO,aAAch0B,SAASmQ,gBAAgB6jB,aACrDh0B,SAAS2lB,KAAKqnB,aAAchtC,SAASmQ,gBAAgB68B,YACtD,CA0BD,CAsDiB,SAAbC,EAAuBC,EAAOnJ,GAGjC,IAGIoJ,EAHCD,IAGDC,EAAKD,EAAME,IAAI7xB,QAAQ,IAAI,KAI/B4xB,EAAGE,UAAUvvB,OAAOimB,EAASuJ,QAAQ,EACrCJ,EAAMhxB,QAAQmxB,UAAUvvB,OAAOimB,EAASwJ,YAAY,EAGpDC,EAAiBL,EAAIpJ,CAAQ,EAG7B0J,EAAU,oBAAqBN,EAAI,CAClCO,KAAMR,EAAME,IACZlxB,QAASgxB,EAAMhxB,QACf6nB,SAAUA,CACX,CAAC,EAEF,CAhOA,IAAI4J,EAAW,CAGdL,SAAU,SACVC,aAAc,SAGdK,OAAQ,CAAA,EACRC,YAAa,SAGb9D,OAAQ,EACR+D,OAAQ,CAAA,EAGRvkB,OAAQ,CAAA,CAET,EA6BIkkB,EAAY,SAAU1rC,EAAM0C,EAAMkoB,GAGhCA,EAAOoX,SAASxa,SAGjBd,EAAQ,IAAIslB,YAAYhsC,EAAM,CACjCwqB,QAAS,CAAA,EACTC,WAAY,CAAA,EACZG,OAAQA,CACT,CAAC,EAGDloB,EAAKupC,cAAcvlB,CAAK,EAEzB,EAOImkB,EAAe,SAAUnoC,GAC5B,IAAIiR,EAAW,EACf,GAAIjR,EAAKomC,aACR,KAAOpmC,GACNiR,GAAYjR,EAAKwpC,UACjBxpC,EAAOA,EAAKomC,aAGd,OAAmB,GAAZn1B,EAAgBA,EAAW,CACnC,EAsDIw4B,EAAW,SAAUzpC,EAAMs/B,EAAUoK,GACpCC,EAAS3pC,EAAKgzB,sBAAsB,EACpCsS,EA/B2B,YAA3B,OAHqBhG,EAkCFA,GA/BHgG,OACZvX,WAAWuR,EAASgG,OAAO,CAAC,EAI7BvX,WAAWuR,EAASgG,MAAM,EA2BjC,OAAIoE,EACIta,SAASua,EAAOD,OAAQ,EAAE,GAAKhuC,EAAO2sC,aAAe9sC,SAASmQ,gBAAgB68B,cAE/EnZ,SAASua,EAAO99B,IAAK,EAAE,GAAKy5B,CACpC,EAiBIsE,EAAc,SAAU5tC,EAAMsjC,GACjC,MAAI8I,EAAAA,CAAAA,EAAW,GAAKqB,CAAAA,EAASztC,EAAKyb,QAAS6nB,EAAU,CAAA,CAAI,EAE1D,EAqBIyJ,EAAmB,SAAUJ,EAAKrJ,GAGhCA,EAAS6J,SAGVT,EAAKC,EAAIpqC,WAAWuY,QAAQ,IAAI,KAIpC4xB,EAAGE,UAAUvvB,OAAOimB,EAAS8J,WAAW,EAGxCL,EAAiBL,EAAIpJ,CAAQ,EAE9B,EAsCIuK,EAAiB,SAAUlB,EAAKrJ,GAG9BA,EAAS6J,SAGVT,EAAKC,EAAIpqC,WAAWuY,QAAQ,IAAI,KAIpC4xB,EAAGE,UAAU3xB,IAAIqoB,EAAS8J,WAAW,EAGrCS,EAAenB,EAAIpJ,CAAQ,EAE5B,EAgNA,OA3KkB,SAAU1gC,EAAUmC,GA8EjB,SAAhB+oC,EAA0B9lB,GAGzB2U,GACHj9B,EAAOquC,qBAAqBpR,CAAO,EAIpCA,EAAUj9B,EAAOu5B,sBAAsB+U,EAAWC,MAAM,CAEzD,CAMoB,SAAhBC,EAA0BlmB,GAGzB2U,GACHj9B,EAAOquC,qBAAqBpR,CAAO,EAIpCA,EAAUj9B,EAAOu5B,sBAAsB,WACtC+S,EAAavxB,CAAQ,EACrBuzB,EAAWC,OAAO,CAClB,CAAC,CAEH,CArGA,IACIE,EAAU1zB,EAAUyrB,EAASvJ,EAAS2G,EADtC0K,EAAa,CAWjBrkB,MAAmB,WAGlBwkB,EAAW5uC,SAASyO,iBAAiBpL,CAAQ,EAG7C6X,EAAW,GAGXlV,MAAMrC,UAAUkrC,QAAQ3tC,KAAK0tC,EAAU,SAAWnuC,GAGjD,IAAIyb,EAAUlc,SAAS+N,eAAe+gC,mBAAmBruC,EAAKgV,KAAKs5B,OAAO,CAAC,CAAC,CAAC,EACxE7yB,GAGLhB,EAAS7Z,KAAK,CACb+rC,IAAK3sC,EACLyb,QAASA,CACV,CAAC,CAED,CAAC,EAGFuwB,EAAavxB,CAAQ,CAEtB,CArCkB,EA0ClBuzB,EAAWC,OAAS,WAGnB,IAjFuBxB,EAAOnJ,EAM3BoJ,EA2ECtK,EAzKU,SAAU3nB,EAAU6oB,GACnC,IAAIl/B,EAAOqW,EAASA,EAASxX,OAAO,GACpC,GAAI2qC,EAAYxpC,EAAMk/B,CAAQ,EAAG,OAAOl/B,EACxC,IAAK,IAAItC,EAAI2Y,EAASxX,OAAS,EAAQ,GAALnB,EAAQA,CAAC,GAC1C,GAAI2rC,EAAShzB,EAAS3Y,GAAG2Z,QAAS6nB,CAAQ,EAAG,OAAO7oB,EAAS3Y,EAE/D,EAmKyB2Y,EAAU6oB,CAAQ,EAGpClB,EASD8D,GAAW9D,EAAO3mB,UAAYyqB,EAAQzqB,UAG1C+wB,EAAWtG,EAAS5C,CAAQ,EAhGEA,EAiGbA,GAjGMmJ,EAiGdrK,KA3FNsK,EAAKD,EAAME,IAAI7xB,QAAQ,IAAI,KAI/B4xB,EAAGE,UAAU3xB,IAAIqoB,EAASuJ,QAAQ,EAClCJ,EAAMhxB,QAAQmxB,UAAU3xB,IAAIqoB,EAASwJ,YAAY,EAGjDe,EAAenB,EAAIpJ,CAAQ,EAG3B0J,EAAU,kBAAmBN,EAAI,CAChCO,KAAMR,EAAME,IACZlxB,QAASgxB,EAAMhxB,QACf6nB,SAAUA,CACX,CAAC,GA+EA4C,EAAU9D,GAfL8D,IACHsG,EAAWtG,EAAS5C,CAAQ,EAC5B4C,EAAU,KAeb,EAwCA8H,EAAWO,QAAU,WAGhBrI,GACHsG,EAAWtG,EAAS5C,CAAQ,EAI7B5jC,EAAO8gB,oBAAoB,SAAUstB,EAAe,CAAA,CAAK,EACrDxK,EAAS+J,QACZ3tC,EAAO8gB,oBAAoB,SAAU0tB,EAAe,CAAA,CAAK,EAQ1D5K,EADA3G,EADAuJ,EADAiI,EADA1zB,EAAW,IAMZ,EA8BA,OAtBC6oB,EA3YW,WACZ,IAAIkL,EAAS,GAOb,OANAjpC,MAAMrC,UAAUkrC,QAAQ3tC,KAAKwD,UAAW,SAAWnE,GAClD,IAAK,IAAIuO,KAAOvO,EAAK,CACpB,GAAI,CAACA,EAAImB,eAAeoN,CAAG,EAAG,OAC9BmgC,EAAOngC,GAAOvO,EAAIuO,EACnB,CACA,CAAC,EACKmgC,CACR,EAkYoBtB,EAAUnoC,GAAW,EAAE,EAGzCipC,EAAWrkB,MAAM,EAGjBqkB,EAAWC,OAAO,EAGlBvuC,EAAOoQ,iBAAiB,SAAUg+B,EAAe,CAAA,CAAK,EAClDxK,EAAS+J,QACZ3tC,EAAOoQ,iBAAiB,SAAUo+B,EAAe,CAAA,CAAK,EAWjDF,CAER,CASA,CAAC,ECraF,SAAUtuC,EAAO+F,GAMf,IAGEgpC,EAHE5C,EAAInsC,EAAOiD,QAAUjD,EAAOgvC,SAAYhvC,EAAOgvC,OAAS,IAqD5D7C,EAAE8C,SAAWF,EAAc,SAAUhS,EAAOmS,EAAa9qC,EAAU+qC,GAIjE,IAAIC,EAGFC,EAAY,EAYd,SAASC,IACP,IAAIlwB,EAAOnf,KACTsvC,EAAU,CAAC,IAAIzlC,KAASulC,EACxBx6B,EAAOtQ,UAGT,SAASoJ,IACP0hC,EAAY,CAAC,IAAIvlC,KACjB1F,EAASnD,MAAOme,EAAMvK,CAAK,CAC7B,CAQKs6B,GAAiB,CAACC,GAGrBzhC,EAAK,EAIPyhC,GAAclS,aAAckS,CAAW,EAElCD,IAAkBppC,GAAuBg3B,EAAVwS,EAGlC5hC,EAAK,EAEqB,CAAA,IAAhBuhC,IAUVE,EAAavvB,WAAYsvB,EA5B3B,WACEC,EAAarpC,CACf,EA0BmD4H,EAAMwhC,IAAkBppC,EAAYg3B,EAAQwS,EAAUxS,CAAM,EAEjH,CAUA,MA9D4B,WAAvB,OAAOmS,IACVC,EAAgB/qC,EAChBA,EAAW8qC,EACXA,EAAcnpC,GAsDXomC,EAAE9kC,OACLioC,EAAQjoC,KAAOjD,EAASiD,KAAOjD,EAASiD,MAAQ8kC,EAAE9kC,IAAI,IAIjDioC,CACT,EAmDAnD,EAAEqD,SAAW,SAAUzS,EAAO0S,EAAUrrC,GACtC,OAAOA,IAAa2B,EAChBgpC,EAAahS,EAAO0S,EAAU,CAAA,CAAM,EACpCV,EAAahS,EAAO34B,EAAuB,CAAA,IAAbqrC,CAAmB,CACvD,CAED,EAAExvC,IAAI,ECjPN,SAAWksC,GAEV,aAEAA,EAAE/oC,GAAGssC,QAAU,SAAUrqC,GACvB,IAOM1C,EAEAojB,EATF6d,EAAW,CACb+L,eAAgB,KAChBC,OAAQ,IACV,EAeA,OAbI/vC,SAAS+N,eAAe,gBAAgB,IAEtCjL,EAAO9C,SAAS8C,MAAQ9C,SAASiO,qBAAqB,MAAM,EAAE,IAE9DiY,EAAMlmB,SAAS0C,cAAc,KAAK,GAClC0O,UAAY,8QAChBtO,EAAKC,YAAYmjB,EAAI/Y,WAAW,EAAE,GAG/B3H,GACH8mC,EAAE/mC,OAAQw+B,EAAUv+B,CAAQ,EAGvBpF,KAAKkE,KAAK,WACf,IAAI2O,EAAY,CACd,kCACA,6BACA,sCACA,oDACA,SACA,SAOE+8B,GAJAjM,EAAS+L,gBACX78B,EAAU5R,KAAK0iC,EAAS+L,cAAc,EAGvB,kBAMbG,GAJDlM,EAASgM,SACVC,EAAaA,EAAa,KAAOjM,EAASgM,QAG3BzD,EAAElsC,IAAI,EAAE2Q,KAAKkC,EAAUzE,KAAK,GAAG,CAAC,IAEjDyhC,GAAaA,EADAA,EAAW96B,IAAI,eAAe,GACnBA,IAAI66B,CAAU,GAE3B1rC,KAAK,SAASyf,GACvB,IAYImsB,EAZAC,EAAQ7D,EAAElsC,IAAI,EACoB,EAAnC+vC,EAAMv0B,QAAQo0B,CAAU,EAAEtsC,QAGM,UAA/BtD,KAAKgwC,QAAQvoC,YAAY,GAAiBsoC,EAAMx7B,OAAO,QAAQ,EAAEjR,QAAUysC,EAAMx7B,OAAO,4BAA4B,EAAEjR,SACpHysC,EAAM9rB,IAAI,QAAQ,GAAM8rB,EAAM9rB,IAAI,OAAO,GAAO4nB,CAAAA,MAAMkE,EAAM59B,KAAK,QAAQ,CAAC,GAAK05B,CAAAA,MAAMkE,EAAM59B,KAAK,OAAO,CAAC,IAE5G49B,EAAM59B,KAAK,SAAU,CAAC,EACtB49B,EAAM59B,KAAK,QAAS,EAAE,GAIpB29B,GAF0C,WAA/B9vC,KAAKgwC,QAAQvoC,YAAY,GAAmBsoC,EAAM59B,KAAK,QAAQ,GAAK,CAAC05B,MAAMpY,SAASsc,EAAM59B,KAAK,QAAQ,EAAG,EAAE,CAAC,EAAOshB,SAASsc,EAAM59B,KAAK,QAAQ,EAAG,EAAE,EAAI49B,EAAMvc,OAAO,IACxKqY,MAAMpY,SAASsc,EAAM59B,KAAK,OAAO,EAAG,EAAE,CAAC,EAAwC49B,EAAMhe,MAAM,EAAhD0B,SAASsc,EAAM59B,KAAK,OAAO,EAAG,EAAE,GAEpF49B,EAAM59B,KAAK,IAAI,GAEjB49B,EAAM59B,KAAK,KADG,SAAWwR,CACD,EAE1BosB,EAAMzoB,KAAK,+CAA+C,EAAE/S,OAAO,4BAA4B,EAAE0P,IAAI,cAA8B,IAAd6rB,EAAmB,GAAG,EAC3IC,EAAMxS,WAAW,QAAQ,EAAEA,WAAW,OAAO,EAC/C,CAAC,CACH,CAAC,CACH,CAED,EAAGx9B,OAAOiD,QAAUjD,OAAOkwC,KAAM,EC3ElC/D,EAAE,WAEA,IASIgE,EAAYC,EAAYC,EAAaC,EATrCC,EAAOpE,EAAE,oCAAoC,EAC7CqE,EAAUrE,EAAE,+BAA+B,EAC3CsE,EAAUtE,EAAE,8BAA8B,EAC1CuE,EAAOvE,EAAE,gBAAgB,EACzBwE,EAAQxE,EAAE,2BAA2B,EACrCyE,EAAWzE,EAAE,+BAA+B,EAC5C0E,EAAS1E,EAAE,4BAA4B,EACvC2E,EAAU3E,EAAE,sCAAsC,EAOtD,SAAS4E,IAOP,SAASC,EAAS5uC,EAAGtC,GACnBswC,GAActwC,EACdqwC,GAAc,EACdG,EAAYpvC,KAAKkvC,CAAU,CAC7B,CATAA,EADAD,EAAa,EAEbE,EAAc,IACdC,EAAc,GAkBdE,EAAQ11B,SAAS,EAAEm2B,WAAWD,CAAQ,EACtCP,EAAQ31B,SAAS,EAAE3W,KAAK,WATxB,IAAqB/D,GACfqF,GADerF,EAS0B+rC,EAAElsC,IAAI,GARnCwF,MAAM,GAChBye,IAAI,aAAa,QAAQ,EAC/BssB,EAAQzgB,OAAOtqB,CAAK,EACpBurC,EAAS,EAAGvrC,EAAMwrC,WAAW,CAAC,EAC9BxrC,EAAMkY,OAAO,CAIwC,CAAC,CAC1D,CAEAozB,EAAa,EAEb,IAIIG,EAAgBC,EAAmBC,EAAetW,EAJlDuW,EAAWlF,EAAGnsC,MAAO,EAAEgyB,MAAM,EAE7Bsf,EAAiBD,EAAW,IAAM,EAAIA,EAAW,KAAO,EAAIA,EAAW,KAAO,EAAI,EAItF,SAAS19B,IAIP,IAAI49B,GAFJF,EAAWlF,EAAGnsC,MAAO,EAAEgyB,MAAM,GAEE,IAAM,EAAIqf,EAAW,KAAO,EAAIA,EAAW,KAAO,EAAI,EAElFE,IAAkBD,GAAgBP,EAAa,EAElDO,EAAiBC,EAGjBJ,EAAoBX,EAAQ11B,SAAS,EAAEvX,OAEvC2tC,EAA2BR,EAAKc,WAAW,GACG,IAAjBb,EAAMptC,OAAeotC,EAAMM,WAAW,CAAA,CAAI,EAAI,GAC9CJ,EAAOI,WAAW,CAAA,CAAI,GACD,IAAnBH,EAAQvtC,OAAeutC,EAAQG,WAAW,CAAA,CAAI,EAAI,IAClDE,IAAsBb,EAAY/sC,OAASgtC,EAAKU,WAAW,CAAA,CAAI,EAAI,GAClGG,EAAgBd,EAAYa,EAAoB,GAG5BD,EAAhBE,GACFZ,EAAQ11B,SAAS,EAAEpW,KAAK,EAAE6rB,UAAUkgB,CAAO,EAC3CU,EAAAA,EACAx9B,EAAM,GAEGu9B,GAAkBC,IAAsBb,EAAY/sC,OAAS,EAAEgtC,EAAKU,WAAW,CAAA,CAAI,EAAE,GAAKX,EAAYa,KAC/GV,EAAQ31B,SAAS,EAAEtW,MAAM,EAAE8rB,SAASkgB,CAAO,EAC3CW,GAAqB,EACrBx9B,EAAM,GAGR48B,EAAKn+B,KAAK,QAAS+9B,EAAagB,CAAiB,EAC7CA,IAAsBhB,EACxBI,EAAKhS,SAAS,QAAQ,EACjBgS,EAAK3R,YAAY,QAAQ,CAClC,CAGAuN,EAAEnsC,MAAM,EAAEyxC,OAAO,WACf99B,EAAM,CACR,CAAC,EAED48B,EAAKroB,GAAG,QAAS,WACfuoB,EAAQ5R,YAAY,QAAQ,EAC5BsN,EAAElsC,IAAI,EAAE4+B,YAAY,OAAO,EAC3B3B,aAAapC,CAAK,CACpB,CAAC,EAED2V,EAAQvoB,GAAG,aAAc,WAEvB4S,EAAQjb,WAAW,WACjB4wB,EAAQlS,SAAS,QAAQ,EACzB4N,EAAE,qBAAqB,EAAEvN,YAAY,OAAO,CAC9C,EAAGyR,CAAW,CAChB,CAAC,EAAEnoB,GAAG,aAAc,WAElBgV,aAAapC,CAAK,CACpB,CAAC,EAGsB,IAApB8V,EAASrtC,QAELqtC,EAAS,GAAG/V,UAAyC,IAA7B+V,EAAS,GAAGc,aAMpC/9B,EAAM,EAJTi9B,EAASxoB,IAAI,aAAczU,CAAK,CAMtC,CAAC,EC5HC,SAAUjU,GACY,YAAlB,OAAOssC,QAAyBA,OAAOC,IAE1CD,OAAO,CAAC,UAAWtsC,CAAO,EACI,UAAnB,OAAOE,QAElBF,EAAQiyC,QAAQ,QAAQ,CAAC,EAGzBjyC,EAAQM,OAAOiD,QAAUjD,OAAOkwC,KAAK,CAErC,EAAE,SAAS/D,GAgCM,SAAhByF,KAaW,SAATC,EAAkBvsC,EAAMwsC,GACxBC,EAAIC,GAAG9pB,GA1BJ,MA0BY5iB,EAAO2sC,EAAUH,CAAC,CACnC,CACS,SAATI,EAAkB5hC,EAAWggB,EAAUjB,EAAM/N,GAC3C,IAAItS,EAAKnP,SAAS0C,cAAc,KAAK,EAarC,OAZAyM,EAAGsB,UAAY,OAAOA,EACnB+e,IACDrgB,EAAGiC,UAAYoe,GAEb/N,EAKMgP,GACRA,EAAS1tB,YAAYoM,CAAE,GALvBA,EAAKm9B,EAAEn9B,CAAE,EACNshB,GACDthB,EAAGshB,SAASA,CAAQ,GAKjBthB,CACT,CACc,SAAdmjC,EAAuBllC,EAAGuV,GACxBuvB,EAAIC,GAAGjS,eA7CJ,MA6CwB9yB,EAAGuV,CAAI,EAE/BuvB,EAAIK,GAAGC,YAERplC,EAAIA,EAAEqlC,OAAO,CAAC,EAAE5qC,YAAY,EAAIuF,EAAErM,MAAM,CAAC,EACtCmxC,EAAIK,GAAGC,UAAUplC,KAClB8kC,EAAIK,GAAGC,UAAUplC,GAAGhM,MAAM8wC,EAAK5F,EAAErmC,QAAQ0c,CAAI,EAAIA,EAAO,CAACA,EAAK,CAGpE,CACe,SAAf+vB,EAAwB3wC,GAKtB,OAJGA,IAAS4wC,GAAmBT,EAAIU,aAAaC,WAC9CX,EAAIU,aAAaC,SAAWvG,EAAG4F,EAAIK,GAAGO,YAAYxsC,QAAQ,UAAW4rC,EAAIK,GAAGQ,MAAO,CAAE,EACrFJ,EAAiB5wC,GAEZmwC,EAAIU,aAAaC,QAC1B,CAEiB,SAAjBG,IACM1G,EAAE2G,cAAcC,YAElBhB,EAAM,IAAIH,GACNvuC,KAAK,EACT8oC,EAAE2G,cAAcC,SAAWhB,EAE/B,CA61ByB,SAAzBiB,IACKC,IACDC,EAAmB/iB,MAAO8iB,EAAmB1U,SAAS4U,CAAY,CAAE,EAAErjB,OAAO,EAC7EmjB,EAAqB,KAEzB,CA8DoB,SAApBG,IACKC,GACDlH,EAAEtsC,SAAS2lB,IAAI,EAAEoZ,YAAYyU,CAAQ,CAEzC,CACsB,SAAtBC,IACEF,EAAkB,EACfrB,EAAIwB,KACLxB,EAAIwB,IAAIpO,MAAM,CAElB,CAv/BF,IAkBI4M,EAGFyB,EAEAC,EACAC,EACAC,EACAnB,EA64BAW,EACAD,EACAD,EAmEAI,EA5+BEO,EAAc,QAChBC,EAAqB,cAGrBC,EAAqB,cACrBC,EAAa,OAGb9B,EAAW,OACX+B,EAAc,YACdC,EAAiB,eACjBC,EAAsB,oBAStBC,EAAQ,CAAC,CAAEn0C,OAAa,OAExBo0C,EAAUjI,EAAEnsC,MAAM,EAg5BhBq0C,GA1IJlI,EAAE2G,cAAgB,CAChBC,SAAU,KACVvsC,MAzrBForC,EAAcpuC,UAAY,CAExBE,YAAakuC,EAMbvuC,KAAM,WACJ,IAAIixC,EAAaC,UAAUD,WAC3BvC,EAAIyC,QAAUzC,EAAI0C,MAAQ50C,SAAS60C,KAAO,CAAC70C,SAASuQ,iBACpD2hC,EAAI4C,UAAY,YAAc1mC,KAAKqmC,CAAU,EAC7CvC,EAAI6C,MAAQ,qBAAuB3mC,KAAKqmC,CAAU,EAClDvC,EAAI8C,mBAnCgB,WACpB,IAAIhU,EAAIhhC,SAAS0C,cAAc,GAAG,EAAEwhB,MAClC5H,EAAI,CAAC,KAAK,IAAI,MAAM,UAEtB,GAAwBpW,KAAAA,IAApB86B,EAAc,WAChB,MAAO,CAAA,EAGT,KAAO1kB,EAAE5Y,QACP,GAAI4Y,EAAEzR,IAAI,EAAI,eAAgBm2B,EAC5B,MAAO,CAAA,EAIX,MAAO,CAAA,CACT,EAoB+C,EAI7CkR,EAAI+C,eAAkB/C,EAAI4C,WAAa5C,EAAI6C,OAAS,8EAA8E3mC,KAAKsmC,UAAUQ,SAAS,EAC1JtB,EAAYtH,EAAEtsC,QAAQ,EAEtBkyC,EAAIiD,YAAc,EACpB,EAMAjN,KAAM,SAASvlB,GAIb,GAAkB,CAAA,IAAfA,EAAKyyB,MAAiB,CAEvBlD,EAAIhF,MAAQvqB,EAAKuqB,MAAMppC,QAAQ,EAE/BouC,EAAI12B,MAAQ,EAGZ,IAFA,IACE/a,EADEysC,EAAQvqB,EAAKuqB,MAEb3qC,EAAI,EAAGA,EAAI2qC,EAAMxpC,OAAQnB,CAAC,GAK5B,IAFE9B,GAFFA,EAAOysC,EAAM3qC,IACLqnC,OACCnpC,EAAK0O,GAAG,GAEd1O,KAASkiB,EAAKxT,GAAG,GAAI,CACtB+iC,EAAI12B,MAAQjZ,EACZ,KACF,CAEJ,MACE2vC,EAAIhF,MAAQZ,EAAErmC,QAAQ0c,EAAKuqB,KAAK,EAAIvqB,EAAKuqB,MAAQ,CAACvqB,EAAKuqB,OACvDgF,EAAI12B,MAAQmH,EAAKnH,OAAS,EAI5B,GAAG02B,CAAAA,EAAImD,OAAP,CAKAnD,EAAI5pB,MAAQ,GACZwrB,EAAe,GACZnxB,EAAK2yB,QAAU3yB,EAAK2yB,OAAO5xC,OAC5BwuC,EAAIC,GAAKxvB,EAAK2yB,OAAO1wC,GAAG,CAAC,EAEzBstC,EAAIC,GAAKyB,EAGRjxB,EAAK7T,KACFojC,EAAIiD,YAAYxyB,EAAK7T,OACvBojC,EAAIiD,YAAYxyB,EAAK7T,KAAO,IAE9BojC,EAAIU,aAAeV,EAAIiD,YAAYxyB,EAAK7T,MAExCojC,EAAIU,aAAe,GAKrBV,EAAIK,GAAKjG,EAAE/mC,OAAO,CAAA,EAAM,GAAI+mC,EAAE2G,cAActF,SAAUhrB,CAAK,EAC3DuvB,EAAIqD,gBAA6C,SAA3BrD,EAAIK,GAAGgD,gBAA6B,CAACrD,EAAI+C,eAAiB/C,EAAIK,GAAGgD,gBAEpFrD,EAAIK,GAAGiD,QACRtD,EAAIK,GAAGkD,oBAAsB,CAAA,EAC7BvD,EAAIK,GAAGmD,eAAiB,CAAA,EACxBxD,EAAIK,GAAGoD,aAAe,CAAA,EACtBzD,EAAIK,GAAGqD,gBAAkB,CAAA,GAMvB1D,EAAI2D,YAGN3D,EAAI2D,UAAYxD,EAAO,IAAI,EAAEhqB,GAAG,QAAQ+pB,EAAU,WAChDF,EAAI4D,MAAM,CACZ,CAAC,EAED5D,EAAIxqB,KAAO2qB,EAAO,MAAM,EAAE9/B,KAAK,WAAY,CAAC,CAAC,EAAE8V,GAAG,QAAQ+pB,EAAU,SAAShlC,GACxE8kC,EAAI6D,cAAc3oC,EAAEvH,MAAM,GAC3BqsC,EAAI4D,MAAM,CAEd,CAAC,EAED5D,EAAIxgB,UAAY2gB,EAAO,YAAaH,EAAIxqB,IAAI,GAG9CwqB,EAAI8D,iBAAmB3D,EAAO,SAAS,EACpCH,EAAIK,GAAG0D,YACR/D,EAAI+D,UAAY5D,EAAO,YAAaH,EAAIxgB,UAAWwgB,EAAIK,GAAG2D,QAAQ,GAKpE,IAAIC,EAAU7J,EAAE2G,cAAckD,QAC9B,IAAI5zC,EAAI,EAAGA,EAAI4zC,EAAQzyC,OAAQnB,CAAC,GAAI,CAClC,IACA6F,GAAIA,EADI+tC,EAAQ5zC,IACVkwC,OAAO,CAAC,EAAExwB,YAAY,EAAI7Z,EAAErH,MAAM,CAAC,EACzCmxC,EAAI,OAAO9pC,GAAGlH,KAAKgxC,CAAG,CACxB,CACAI,EAAY,YAAY,EAGrBJ,EAAIK,GAAGoD,eAEJzD,EAAIK,GAAG6D,gBAGTpE,EAAOiC,EAAoB,SAAS7mC,EAAGipC,EAAU3wB,EAAQjlB,GACvDilB,EAAO4wB,kBAAoB5D,EAAajyC,EAAKsB,IAAI,CACnD,CAAC,EACD+xC,GAAgB,qBALhB5B,EAAIxqB,KAAKwI,OAAQwiB,EAAa,CAAE,GASjCR,EAAIK,GAAGgE,WACRzC,GAAgB,kBAKf5B,EAAIqD,gBACLrD,EAAIxqB,KAAKrD,IAAI,CACXsX,SAAUuW,EAAIK,GAAG1W,UACjBD,UAAW,SACXC,UAAWqW,EAAIK,GAAG1W,SACpB,CAAC,EAEDqW,EAAIxqB,KAAKrD,IAAI,CACX/T,IAAKikC,EAAQ3b,UAAU,EACvBxG,SAAU,UACZ,CAAC,EAEuB,CAAA,IAAtB8f,EAAIK,GAAGiE,aAA+C,SAAtBtE,EAAIK,GAAGiE,YAA0BtE,EAAIqD,kBACvErD,EAAI2D,UAAUxxB,IAAI,CAChBuP,OAAQggB,EAAUhgB,OAAO,EACzBxB,SAAU,UACZ,CAAC,EAKA8f,EAAIK,GAAGqD,iBAERhC,EAAUvrB,GAAG,QAAU+pB,EAAU,SAAShlC,GACvB,KAAdA,EAAEggB,SACH8kB,EAAI4D,MAAM,CAEd,CAAC,EAGHvB,EAAQlsB,GAAG,SAAW+pB,EAAU,WAC9BF,EAAIuE,WAAW,CACjB,CAAC,EAGGvE,EAAIK,GAAGkD,sBACT3B,GAAgB,oBAGfA,GACD5B,EAAIxqB,KAAKgX,SAASoV,CAAY,EAIhC,IAAI4C,EAAexE,EAAIyE,GAAKpC,EAAQ3gB,OAAO,EAGvCgjB,EAAe,GAsBfC,GApBA3E,EAAIqD,iBACGrD,EAAI4E,cAAcJ,CAAY,IACzB1V,EAAIkR,EAAI6E,kBAAkB,KAE1BH,EAAaI,YAAchW,GAKxCkR,EAAIqD,kBACDrD,EAAI+E,MAIN3K,EAAE,YAAY,EAAEjoB,IAAI,WAAY,QAAQ,EAHxCuyB,EAAajb,SAAW,UASTuW,EAAIK,GAAG2E,WA0C1B,OAzCGhF,EAAI+E,QACLJ,GAAgB,YAEfA,GACD3E,EAAIiF,eAAgBN,CAAa,EAInC3E,EAAIkF,eAAe,EAEnB9E,EAAY,eAAe,EAG3BhG,EAAE,MAAM,EAAEjoB,IAAIuyB,CAAY,EAG1B1E,EAAI2D,UAAUn6B,IAAIw2B,EAAIxqB,IAAI,EAAEgJ,UAAWwhB,EAAIK,GAAG7hB,WAAa4b,EAAEtsC,SAAS2lB,IAAI,CAAE,EAG5EusB,EAAImF,eAAiBr3C,SAAS6V,cAG9BmK,WAAW,WAENkyB,EAAIh2B,SACLg2B,EAAIiF,eAAehD,CAAW,EAC9BjC,EAAIoF,UAAU,GAGdpF,EAAI2D,UAAUnX,SAASyV,CAAW,EAIpCP,EAAUvrB,GAAG,UAAY+pB,EAAUF,EAAIqF,UAAU,CAEnD,EAAG,EAAE,EAELrF,EAAImD,OAAS,CAAA,EACbnD,EAAIuE,WAAWC,CAAY,EAC3BpE,EAAY4B,CAAU,EAEfvxB,CAnMP,CAFEuvB,EAAIkF,eAAe,CAsMvB,EAKAtB,MAAO,WACD5D,EAAImD,SACR/C,EAAY0B,CAAkB,EAE9B9B,EAAImD,OAAS,CAAA,EAEVnD,EAAIK,GAAGiF,cAAgB,CAACtF,EAAIyC,SAAWzC,EAAI8C,oBAC5C9C,EAAIiF,eAAe/C,CAAc,EACjCp0B,WAAW,WACTkyB,EAAIuF,OAAO,CACb,EAAGvF,EAAIK,GAAGiF,YAAY,GAEtBtF,EAAIuF,OAAO,EAEf,EAKAA,OAAQ,WACNnF,EAAYyB,CAAW,EAEvB,IAAI2D,EAAkBtD,EAAiB,IAAMD,EAAc,IAE3DjC,EAAI2D,UAAU5lB,OAAO,EACrBiiB,EAAIxqB,KAAKuI,OAAO,EAChBiiB,EAAIxgB,UAAUrb,MAAM,EAEjB67B,EAAIK,GAAG2E,YACRQ,GAAmBxF,EAAIK,GAAG2E,UAAY,KAGxChF,EAAIyF,oBAAoBD,CAAe,EAEpCxF,EAAIqD,kBACDqB,EAAe,CAACI,YAAa,EAAE,EAChC9E,EAAI+E,MACL3K,EAAE,YAAY,EAAEjoB,IAAI,WAAY,EAAE,EAElCuyB,EAAajb,SAAW,GAE1B2Q,EAAE,MAAM,EAAEjoB,IAAIuyB,CAAY,GAG5BhD,EAAUlrB,IAAI,oBAAkC0pB,CAAQ,EACxDF,EAAIC,GAAGzpB,IAAI0pB,CAAQ,EAGnBF,EAAIxqB,KAAKnV,KAAK,QAAS,UAAU,EAAEorB,WAAW,OAAO,EACrDuU,EAAI2D,UAAUtjC,KAAK,QAAS,QAAQ,EACpC2/B,EAAIxgB,UAAUnf,KAAK,QAAS,eAAe,EAGxC2/B,CAAAA,EAAIK,GAAGoD,cACRzD,EAAIK,GAAG6D,gBAA0D,CAAA,IAAxClE,EAAIU,aAAaV,EAAI0F,SAAS71C,OACpDmwC,EAAIU,aAAaC,UAClBX,EAAIU,aAAaC,SAAS5iB,OAAO,EAIlCiiB,EAAIK,GAAGsF,eAAiB3F,EAAImF,gBAC7B/K,EAAE4F,EAAImF,cAAc,EAAEzhC,MAAM,EAE9Bs8B,EAAI0F,SAAW,KACf1F,EAAIh2B,QAAU,KACdg2B,EAAIU,aAAe,KACnBV,EAAI4F,WAAa,EAEjBxF,EAzakB,YAyaW,CAC/B,EAEAmE,WAAY,SAASsB,GAEnB,IAGMnkB,EAHHse,EAAI6C,OAEDiD,EAAYh4C,SAASmQ,gBAAgB8nC,YAAc93C,OAAOwxC,WAC1D/d,EAASzzB,OAAO2sC,YAAckL,EAClC9F,EAAIxqB,KAAKrD,IAAI,SAAUuP,CAAM,EAC7Bse,EAAIyE,GAAK/iB,GAETse,EAAIyE,GAAKoB,GAAaxD,EAAQ3gB,OAAO,EAGnCse,EAAIqD,iBACNrD,EAAIxqB,KAAKrD,IAAI,SAAU6tB,EAAIyE,EAAE,EAG/BrE,EAAY,QAAQ,CAEtB,EAKA8E,eAAgB,WACd,IAAI32C,EAAOyxC,EAAIhF,MAAMgF,EAAI12B,OAYrBzZ,GATJmwC,EAAI8D,iBAAiB/lB,OAAO,EAEzBiiB,EAAIh2B,SACLg2B,EAAIh2B,QAAQ+T,OAAO,GAGnBxvB,EADEA,EAAKmpC,OAIEnpC,EAHFyxC,EAAIgG,QAAShG,EAAI12B,KAAM,GAGhBzZ,MA0BZo2C,GAxBJ7F,EAAY,eAAgB,CAACJ,EAAI0F,SAAW1F,EAAI0F,SAAS71C,KAAO,GAAIA,EAAK,EAIzEmwC,EAAI0F,SAAWn3C,EAEXyxC,EAAIU,aAAa7wC,KACfq2C,EAASlG,CAAAA,CAAAA,EAAIK,GAAGxwC,IAAQmwC,EAAIK,GAAGxwC,GAAMq2C,OAGzC9F,EAAY,mBAAoB8F,CAAM,EAGpClG,EAAIU,aAAa7wC,GADhBq2C,CAAAA,GACwB9L,EAAE8L,CAAM,GAOlCvE,GAAoBA,IAAqBpzC,EAAKsB,MAC/CmwC,EAAIxgB,UAAUqN,YAAY,OAAO8U,EAAiB,SAAS,EAG5C3B,EAAI,MAAQnwC,EAAK0wC,OAAO,CAAC,EAAExwB,YAAY,EAAIlgB,EAAKhB,MAAM,CAAC,GAAGN,EAAMyxC,EAAIU,aAAa7wC,EAAK,GACvGmwC,EAAImG,cAAcF,EAAYp2C,CAAI,EAElCtB,EAAK63C,UAAY,CAAA,EAEjBhG,EA3ea,SA2ea7xC,CAAI,EAC9BozC,EAAmBpzC,EAAKsB,KAGxBmwC,EAAIxgB,UAAUvB,QAAQ+hB,EAAI8D,gBAAgB,EAE1C1D,EAAY,aAAa,CAC3B,EAMA+F,cAAe,SAASF,EAAYp2C,IAClCmwC,EAAIh2B,QAAUi8B,GAGTjG,EAAIK,GAAGoD,cAAgBzD,EAAIK,GAAG6D,gBACJ,CAAA,IAA3BlE,EAAIU,aAAa7wC,GAEbmwC,EAAIh2B,QAAQnL,KAAK,YAAY,EAAErN,QACjCwuC,EAAIh2B,QAAQgU,OAAOwiB,EAAa,CAAC,EAGnCR,EAAIh2B,QAAUi8B,EAGhBjG,EAAIh2B,QAAU,GAGhBo2B,EA5gBoB,cA4gBW,EAC/BJ,EAAIxgB,UAAUgN,SAAS,OAAO38B,EAAK,SAAS,EAE5CmwC,EAAI8D,iBAAiB9lB,OAAOgiB,EAAIh2B,OAAO,CACzC,EAOAg8B,QAAS,SAAS18B,GAChB,IACEzZ,EADEtB,EAAOyxC,EAAIhF,MAAM1xB,GAUrB,IAAG/a,EAPAA,EAAK2vC,QACC,CAAEjhC,GAAIm9B,EAAE7rC,CAAI,CAAE,GAErBsB,EAAOtB,EAAKsB,KACL,CAAE4gB,KAAMliB,EAAMuB,IAAKvB,EAAKuB,GAAI,IAG7BmN,GAAI,CAIV,IAHA,IAAImZ,EAAQ4pB,EAAI5pB,MAGR/lB,EAAI,EAAGA,EAAI+lB,EAAM5kB,OAAQnB,CAAC,GAChC,GAAI9B,EAAK0O,GAAGiwB,SAAS,OAAO9W,EAAM/lB,EAAE,EAAI,CACtCR,EAAOumB,EAAM/lB,GACb,KACF,CAGF9B,EAAKuB,IAAMvB,EAAK0O,GAAGoD,KAAK,cAAc,EAClC9R,EAAKuB,MACPvB,EAAKuB,IAAMvB,EAAK0O,GAAGoD,KAAK,MAAM,EAElC,CAQA,OANA9R,EAAKsB,KAAOA,GAAQmwC,EAAIK,GAAGxwC,MAAQ,SACnCtB,EAAK+a,MAAQA,EACb/a,EAAKmpC,OAAS,CAAA,EACdsI,EAAIhF,MAAM1xB,GAAS/a,EACnB6xC,EAAY,eAAgB7xC,CAAI,EAEzByxC,EAAIhF,MAAM1xB,EACnB,EAMA+8B,SAAU,SAASppC,EAAI3J,GACN,SAAXgzC,EAAoBprC,GACtBA,EAAEqrC,MAAQr4C,KACV8xC,EAAIwG,WAAWtrC,EAAG+B,EAAI3J,CAAO,CAC/B,CAHA,IASImzC,EAAQ,uBAJRnzC,EAAAA,GACQ,IAIJ8vC,OAASnmC,EAEd3J,EAAQ0nC,OACT1nC,EAAQ4vC,MAAQ,CAAA,EAChBjmC,EAAGuZ,IAAIiwB,CAAK,EAAEtwB,GAAGswB,EAAOH,CAAQ,IAEhChzC,EAAQ4vC,MAAQ,CAAA,EACb5vC,EAAQ8lC,SACTn8B,EAAGuZ,IAAIiwB,CAAK,EAAEtwB,GAAGswB,EAAOnzC,EAAQ8lC,SAAWkN,CAAQ,GAEnDhzC,EAAQ0nC,MAAQ/9B,GACbuZ,IAAIiwB,CAAK,EAAEtwB,GAAGswB,EAAOH,CAAQ,EAGtC,EACAE,WAAY,SAAStrC,EAAG+B,EAAI3J,GAC1B,IAAIozC,GAAgC1yC,KAAAA,IAArBV,EAAQozC,SAAyBpzC,EAAmB8mC,EAAE2G,cAActF,UAA3BiL,SAGxD,GAAIA,GAAY,EAAc,IAAZxrC,EAAE6gB,OAAe7gB,EAAEsf,SAAWtf,EAAEyf,SAAWzf,EAAEkf,QAAUlf,EAAE4f,UAA3E,CAII6rB,GAAkC3yC,KAAAA,IAAtBV,EAAQqzC,UAA0BrzC,EAAoB8mC,EAAE2G,cAActF,UAA5BkL,UAE1D,GAAGA,EACD,GAAGvM,EAAEhsC,WAAWu4C,CAAS,GACvB,GAAI,CAACA,EAAU33C,KAAKgxC,CAAG,EACrB,MAAO,CAAA,CACT,MAEA,GAAIqC,EAAQpiB,MAAM,EAAI0mB,EACpB,MAAO,CAAA,EAKVzrC,EAAErL,OACHqL,EAAE8b,eAAe,EAGdgpB,EAAImD,SACLjoC,EAAE4b,gBAAgB,EAItBxjB,EAAQ2J,GAAKm9B,EAAEl/B,EAAEqrC,KAAK,EACnBjzC,EAAQ8lC,WACT9lC,EAAQ0nC,MAAQ/9B,EAAG4B,KAAKvL,EAAQ8lC,QAAQ,GAE1C4G,EAAIhK,KAAK1iC,CAAO,CA7BhB,CA8BF,EAMAszC,aAAc,SAASzT,EAAQ1iC,GAE7B,IASMggB,EATHuvB,EAAI+D,YACFtC,IAAgBtO,GACjB6M,EAAIxgB,UAAUqN,YAAY,SAAS4U,CAAW,EAO5ChxB,EAAO,CACT0iB,OAAQA,EACR1iC,KALAA,EADEA,GAAmB,YAAX0iC,EAMJ1iC,EALCuvC,EAAIK,GAAG2D,QAMhB,EAEA5D,EAAY,eAAgB3vB,CAAI,EAEhC0iB,EAAS1iB,EAAK0iB,OAGd6M,EAAI+D,UAAUzmB,KAFd7sB,EAAOggB,EAAKhgB,IAEW,EAEvBuvC,EAAI+D,UAAUllC,KAAK,GAAG,EAAEsX,GAAG,QAAS,SAASjb,GAC3CA,EAAE6b,yBAAyB,CAC7B,CAAC,EAEDipB,EAAIxgB,UAAUgN,SAAS,SAAS2G,CAAM,EACtCsO,EAActO,EAElB,EAQA0Q,cAAe,SAASlwC,GAEtB,GAAGymC,CAAAA,EAAEzmC,CAAM,EAAEu5B,SAASiV,CAAmB,EAAzC,CAIA,IAAI0E,EAAiB7G,EAAIK,GAAGkD,oBACxBuD,EAAY9G,EAAIK,GAAGmD,eAEvB,GAAGqD,GAAkBC,EACnB,MAAO,CAAA,EAIP,GAAG,CAAC9G,EAAIh2B,SAAWowB,EAAEzmC,CAAM,EAAEu5B,SAAS,WAAW,GAAM8S,EAAI+D,WAAapwC,IAAWqsC,EAAI+D,UAAU,GAC/F,MAAO,CAAA,EAIT,GAAMpwC,IAAWqsC,EAAIh2B,QAAQ,IAAOowB,EAAEtiC,SAASkoC,EAAIh2B,QAAQ,GAAIrW,CAAM,GAO9D,GAAGkzC,EACR,MAAO,CAAA,CACT,MARE,GAAGC,GAEG1M,EAAEtiC,SAAShK,SAAU6F,CAAM,EAC7B,MAAO,CAAA,EAQf,MAAO,CAAA,CA3BP,CA4BF,EACAsxC,eAAgB,SAAS8B,GACvB/G,EAAI2D,UAAUnX,SAASua,CAAK,EAC5B/G,EAAIxqB,KAAKgX,SAASua,CAAK,CACzB,EACAtB,oBAAqB,SAASsB,GAC5B74C,KAAKy1C,UAAU9W,YAAYka,CAAK,EAChC/G,EAAIxqB,KAAKqX,YAAYka,CAAK,CAC5B,EACAnC,cAAe,SAASiB,GACtB,OAAW7F,EAAI+E,MAAQrD,EAAUhgB,OAAO,EAAI5zB,SAAS2lB,KAAKonB,eAAiBgL,GAAaxD,EAAQ3gB,OAAO,EACzG,EACA0jB,UAAW,YACRpF,EAAIK,GAAG38B,MAAQs8B,EAAIh2B,QAAQnL,KAAKmhC,EAAIK,GAAG38B,KAAK,EAAEhR,GAAG,CAAC,EAAIstC,EAAIxqB,MAAM9R,MAAM,CACzE,EACA2hC,WAAY,SAASnqC,GACnB,GAAIA,EAAEvH,SAAWqsC,EAAIxqB,KAAK,IAAM,CAAC4kB,EAAEtiC,SAASkoC,EAAIxqB,KAAK,GAAIta,EAAEvH,MAAM,EAE/D,OADAqsC,EAAIoF,UAAU,EACP,CAAA,CAEX,EACA4B,aAAc,SAAS7C,EAAU3wB,EAAQjlB,GACvC,IAAIE,EACDF,EAAKkiB,OACN+C,EAAS4mB,EAAE/mC,OAAO9E,EAAKkiB,KAAM+C,CAAM,GAErC4sB,EAAY2B,EAAoB,CAACoC,EAAU3wB,EAAQjlB,EAAM,EAEzD6rC,EAAEhoC,KAAKohB,EAAQ,SAAS5W,EAAKvH,GAC3B,GAAarB,KAAAA,IAAVqB,GAAiC,CAAA,IAAVA,EACxB,MAAO,CAAA,EAGT,IACM4H,EAGEoD,EAJQ,GADhB5R,EAAMmO,EAAInH,MAAM,GAAG,GACZjE,OAGU,GAFXyL,EAAKknC,EAAStlC,KAAKqhC,EAAW,IAAIzxC,EAAI,EAAE,GAEtC+C,SAEQ,iBADR6O,EAAO5R,EAAI,IAEVwO,EAAG,KAAO5H,EAAM,IACjB4H,EAAGohB,YAAYhpB,CAAK,EAEL,QAATgL,EACLpD,EAAGjH,GAAG,KAAK,EACZiH,EAAGoD,KAAK,MAAOhL,CAAK,EAEpB4H,EAAGohB,YAAa+b,EAAE,OAAO,EAAE/5B,KAAK,MAAOhL,CAAK,EAAEgL,KAAK,QAASpD,EAAGoD,KAAK,OAAO,CAAC,CAAE,EAGhFpD,EAAGoD,KAAK5R,EAAI,GAAI4G,CAAK,GAKzB8uC,EAAStlC,KAAKqhC,EAAW,IAAItjC,CAAG,EAAE0gB,KAAKjoB,CAAK,CAEhD,CAAC,CACH,EAEAwvC,kBAAmB,WAEjB,IACMoC,EAMN,OAPyBjzC,KAAAA,IAAtBgsC,EAAIkH,iBACDD,EAAYn5C,SAAS0C,cAAc,KAAK,GAClCwhB,MAAM6N,QAAU,iFAC1B/xB,SAAS2lB,KAAK5iB,YAAYo2C,CAAS,EACnCjH,EAAIkH,cAAgBD,EAAU9mB,YAAc8mB,EAAUlB,YACtDj4C,SAAS2lB,KAAK1iB,YAAYk2C,CAAS,GAE9BjH,EAAIkH,aACb,CAEF,EAWEjD,QAAS,GAETjO,KAAM,SAAS1iC,EAASgW,GAWtB,OAVAw3B,EAAe,GAKbxtC,EAHEA,EAGQ8mC,EAAE/mC,OAAO,CAAA,EAAM,GAAIC,CAAO,EAF1B,IAKJ4vC,MAAQ,CAAA,EAChB5vC,EAAQgW,MAAQA,GAAS,EAClBpb,KAAK8yC,SAAShL,KAAK1iC,CAAO,CACnC,EAEAswC,MAAO,WACL,OAAOxJ,EAAE2G,cAAcC,UAAY5G,EAAE2G,cAAcC,SAAS4C,MAAM,CACpE,EAEAuD,eAAgB,SAAS5zC,EAAM3F,GAC1BA,EAAO0F,UACR8mC,EAAE2G,cAActF,SAASloC,GAAQ3F,EAAO0F,SAE1C8mC,EAAE/mC,OAAOnF,KAAKuG,MAAO7G,EAAO6G,KAAK,EACjCvG,KAAK+1C,QAAQ90C,KAAKoE,CAAI,CACxB,EAEAkoC,SAAU,CAKRkL,UAAW,EAEX/pC,IAAK,KAEL8pC,SAAU,CAAA,EAEV1B,UAAW,GAEXjB,UAAW,CAAA,EAEXrgC,MAAO,GAEP6/B,oBAAqB,CAAA,EAErBC,eAAgB,CAAA,EAEhBU,eAAgB,CAAA,EAEhBT,aAAc,CAAA,EAEdC,gBAAiB,CAAA,EAEjBJ,MAAO,CAAA,EAEPe,SAAU,CAAA,EAEViB,aAAc,EAEd9mB,UAAW,KAEX6kB,gBAAiB,OAEjBiB,WAAY,OAEZ3a,UAAW,OAEXiX,YAAa,0EAEbC,OAAQ,cAERmD,SAAU,aAEV2B,cAAe,CAAA,CAEjB,CACF,EAIAvL,EAAE/oC,GAAG0vC,cAAgB,SAASztC,GAC5BwtC,EAAe,EAEf,IAOMsG,EACA99B,EAGA0xB,EAXFqM,EAAOjN,EAAElsC,IAAI,EA2CjB,MAxCuB,UAAnB,OAAOoF,EAEM,SAAZA,GAEC8zC,EAAWhF,EAAQiF,EAAK52B,KAAK,eAAe,EAAI42B,EAAK,GAAGtG,cACxDz3B,EAAQqY,SAASnvB,UAAU,GAAI,EAAE,GAAK,EAGtCwoC,EADCoM,EAASpM,MACFoM,EAASpM,MAAM1xB,IAEvB0xB,EAAQqM,GAENrM,EADCoM,EAAShO,SACF4B,EAAMn8B,KAAKuoC,EAAShO,QAAQ,EAE9B4B,GAAMtoC,GAAI4W,CAAM,GAE1B02B,EAAIwG,WAAW,CAACD,MAAMvL,CAAK,EAAGqM,EAAMD,CAAQ,GAEzCpH,EAAImD,QACLnD,EAAI1sC,GAASpE,MAAM8wC,EAAKlsC,MAAMrC,UAAU5C,MAAMG,KAAKwD,UAAW,CAAC,CAAC,GAKpEc,EAAU8mC,EAAE/mC,OAAO,CAAA,EAAM,GAAIC,CAAO,EAOjC8uC,EACDiF,EAAK52B,KAAK,gBAAiBnd,CAAO,EAElC+zC,EAAK,GAAGtG,cAAgBztC,EAG1B0sC,EAAIqG,SAASgB,EAAM/zC,CAAO,GAGrB+zC,CACT,EAMgB,UAqEZC,GA1DJlN,EAAE2G,cAAcoG,eAAe7E,EAAW,CACxChvC,QAAS,CACPi0C,YAAa,OACbrB,OAAQ,GACRsB,UAAW,mBACb,EACA/yC,MAAO,CAELgzC,WAAY,WACVzH,EAAI5pB,MAAMjnB,KAAKmzC,CAAS,EAExBxC,EAAO+B,EAAY,IAAIS,EAAW,WAChCrB,EAAuB,CACzB,CAAC,CACH,EAEAyG,UAAW,SAASn5C,EAAM41C,GAIxB,IACMwD,EACF1qC,EAKIwF,EAPR,OAFAw+B,EAAuB,EAEpB1yC,EAAKuB,KACF63C,EAAW3H,EAAIK,GAAGuH,QACpB3qC,EAAKm9B,EAAE7rC,EAAKuB,GAAG,GAEX0B,SAGAiR,EAASxF,EAAG,GAAGnM,aACN2R,EAAOy7B,UACdiD,IACFC,EAAeuG,EAASJ,YACxBpG,EAAqBhB,EAAOiB,CAAY,EACxCA,EAAe,OAAOA,GAGxBF,EAAqBjkC,EAAGmhB,MAAM+iB,CAAkB,EAAEpjB,OAAO,EAAE8O,YAAYuU,CAAY,GAGrFpB,EAAI4G,aAAa,OAAO,IAExB5G,EAAI4G,aAAa,QAASe,EAASH,SAAS,EAC5CvqC,EAAKm9B,EAAE,OAAO,GAGhB7rC,EAAKs5C,cAAgB5qC,IAIvB+iC,EAAI4G,aAAa,OAAO,EACxB5G,EAAIgH,aAAa7C,EAAU,GAAI51C,CAAI,EAC5B41C,EACT,CACF,CACF,CAAC,EAKa,QAcd/J,EAAE2G,cAAcoG,eAAeG,EAAS,CAEtCh0C,QAAS,CACPu+B,SAAU,KACViW,OAAQ,eACRC,OAAQ,sDACV,EAEAtzC,MAAO,CACLuzC,SAAU,WACRhI,EAAI5pB,MAAMjnB,KAAKm4C,CAAO,EACtBhG,EAAWtB,EAAIK,GAAGrO,KAAK8V,OAEvBhI,EAAO+B,EAAY,IAAIyF,EAAS/F,CAAmB,EACnDzB,EAAO,gBAAkBwH,EAAS/F,CAAmB,CACvD,EACA0G,QAAS,SAAS15C,GAEb+yC,GACDlH,EAAEtsC,SAAS2lB,IAAI,EAAE+Y,SAAS8U,CAAQ,EAGpCtB,EAAI4G,aAAa,SAAS,EAE1B,IAAIpe,EAAO4R,EAAE/mC,OAAO,CAClBy9B,IAAKviC,EAAKuB,IACVikC,QAAS,SAAStjB,EAAMy3B,EAAYhY,GAC9BjqB,EAAO,CACTwK,KAAKA,EACL8kB,IAAIrF,CACN,EAEAkQ,EAAY,YAAan6B,CAAI,EAE7B+5B,EAAImG,cAAe/L,EAAEn0B,EAAKwK,IAAI,EAAG62B,CAAQ,EAEzC/4C,EAAK45C,SAAW,CAAA,EAEhB9G,EAAkB,EAElBrB,EAAIoF,UAAU,EAEdt3B,WAAW,WACTkyB,EAAIxqB,KAAKgX,SAASyV,CAAW,CAC/B,EAAG,EAAE,EAELjC,EAAI4G,aAAa,OAAO,EAExBxG,EAAY,kBAAkB,CAChC,EACA9rC,MAAO,WACL+sC,EAAkB,EAClB9yC,EAAK45C,SAAW55C,EAAK65C,UAAY,CAAA,EACjCpI,EAAI4G,aAAa,QAAS5G,EAAIK,GAAGrO,KAAK+V,OAAO3zC,QAAQ,QAAS7F,EAAKuB,GAAG,CAAC,CACzE,CACF,EAAGkwC,EAAIK,GAAGrO,KAAKH,QAAQ,EAIvB,OAFAmO,EAAIwB,IAAMpH,EAAEpI,KAAKxJ,CAAI,EAEd,EACT,CACF,CACF,CAAC,EAKD,IAAI6f,EAiBJjO,EAAE2G,cAAcoG,eAAe,QAAS,CAEtC7zC,QAAS,CACP4yC,OAAQ,iOAYR4B,OAAQ,mBACRQ,SAAU,QACVC,YAAa,CAAA,EACbR,OAAQ,oDACV,EAEAtzC,MAAO,CACL+zC,UAAW,WACT,IAAIC,EAAQzI,EAAIK,GAAGx7B,MACjB6jC,EAAK,SAEP1I,EAAI5pB,MAAMjnB,KAAK,OAAO,EAEtB2wC,EAAOkC,EAAW0G,EAAI,WACK,UAAtB1I,EAAI0F,SAAS71C,MAAoB44C,EAAMX,QACxC1N,EAAEtsC,SAAS2lB,IAAI,EAAE+Y,SAASic,EAAMX,MAAM,CAE1C,CAAC,EAEDhI,EAAO+B,EAAY6G,EAAI,WAClBD,EAAMX,QACP1N,EAAEtsC,SAAS2lB,IAAI,EAAEoZ,YAAY4b,EAAMX,MAAM,EAE3CzF,EAAQ7rB,IAAI,SAAW0pB,CAAQ,CACjC,CAAC,EAEDJ,EAAO,SAAS4I,EAAI1I,EAAI2I,WAAW,EAChC3I,EAAIyC,SACL3C,EAAO,cAAeE,EAAI2I,WAAW,CAEzC,EACAA,YAAa,WACX,IAIMC,EAJFr6C,EAAOyxC,EAAI0F,SACXn3C,GAASA,EAAKs6C,KAEf7I,EAAIK,GAAGx7B,MAAM0jC,cACVK,EAAO,EAER5I,EAAIyC,UACLmG,EAAOjnB,SAASpzB,EAAKs6C,IAAI12B,IAAI,aAAa,EAAG,EAAE,EAAIwP,SAASpzB,EAAKs6C,IAAI12B,IAAI,gBAAgB,EAAE,EAAE,GAE/F5jB,EAAKs6C,IAAI12B,IAAI,aAAc6tB,EAAIyE,GAAGmE,CAAI,EAE1C,EACAE,gBAAiB,SAASv6C,GACrBA,EAAKs6C,MAENt6C,EAAKw6C,QAAU,CAAA,EAEZV,GACDW,cAAcX,CAAY,EAG5B95C,EAAK06C,kBAAoB,CAAA,EAEzB7I,EAAY,eAAgB7xC,CAAI,EAE7BA,EAAK26C,aACHlJ,EAAIh2B,SACLg2B,EAAIh2B,QAAQ6iB,YAAY,aAAa,EAEvCt+B,EAAK26C,UAAY,CAAA,EAIvB,EAKAC,cAAe,SAAS56C,GAIH,SAAjB66C,EAA0Bpe,GAErBqd,GACDW,cAAcX,CAAY,EAG5BA,EAAegB,YAAY,WACH,EAAnBR,EAAIlJ,aACLK,EAAI8I,gBAAgBv6C,CAAI,GAIb,IAAV+6C,GACDN,cAAcX,CAAY,EAIb,IADfiB,EAAAA,EAEEF,EAAe,EAAE,EACG,KAAZE,EACRF,EAAe,EAAE,EACG,MAAZE,GACRF,EAAe,GAAG,EAEtB,EAAGpe,CAAK,CACV,CA3BF,IAAIse,EAAU,EACZT,EAAMt6C,EAAKs6C,IAAI,GA4BjBO,EAAe,CAAC,CAClB,EAEAG,SAAU,SAASh7C,EAAM41C,GAKJ,SAAjBqF,IACKj7C,IACGA,EAAKs6C,IAAI,GAAG/f,UACdv6B,EAAKs6C,IAAIryB,IAAI,YAAY,EAEtBjoB,IAASyxC,EAAI0F,WACd1F,EAAI8I,gBAAgBv6C,CAAI,EAExByxC,EAAI4G,aAAa,OAAO,GAG1Br4C,EAAKw6C,QAAU,CAAA,EACfx6C,EAAKk7C,OAAS,CAAA,EAEdrJ,EAAY,mBAAmB,GAK/BsJ,EAAAA,EACW,IACT57B,WAAW07B,EAAe,GAAG,EAE7BG,EAAY,EAIpB,CAGc,SAAdA,IACKp7C,IACDA,EAAKs6C,IAAIryB,IAAI,YAAY,EACtBjoB,IAASyxC,EAAI0F,WACd1F,EAAI8I,gBAAgBv6C,CAAI,EACxByxC,EAAI4G,aAAa,QAAS6B,EAAMV,OAAO3zC,QAAQ,QAAS7F,EAAKuB,GAAG,CAAE,GAGpEvB,EAAKw6C,QAAU,CAAA,EACfx6C,EAAKk7C,OAAS,CAAA,EACdl7C,EAAK65C,UAAY,CAAA,EAErB,CA7CF,IAmDMS,EAnDFa,EAAQ,EA8CVjB,EAAQzI,EAAIK,GAAGx7B,MAGb5H,EAAKknC,EAAStlC,KAAK,UAAU,EAqDjC,OApDG5B,EAAGzL,UACAq3C,EAAM/6C,SAAS0C,cAAc,KAAK,GAClC+N,UAAY,UACbhQ,EAAK0O,IAAM1O,EAAK0O,GAAG4B,KAAK,KAAK,EAAErN,SAChCq3C,EAAIe,IAAMr7C,EAAK0O,GAAG4B,KAAK,KAAK,EAAEwB,KAAK,KAAK,GAE1C9R,EAAKs6C,IAAMzO,EAAEyO,CAAG,EAAE1yB,GAAG,iBAAkBqzB,CAAc,EAAErzB,GAAG,kBAAmBwzB,CAAW,EACxFd,EAAI/4C,IAAMvB,EAAKuB,IAIZmN,EAAGjH,GAAG,KAAK,IACZzH,EAAKs6C,IAAMt6C,EAAKs6C,IAAIn1C,MAAM,GAIN,GADtBm1C,EAAMt6C,EAAKs6C,IAAI,IACRlJ,aACLpxC,EAAKw6C,QAAU,CAAA,EACNF,EAAI5oB,QACb1xB,EAAKw6C,QAAU,CAAA,IAInB/I,EAAIgH,aAAa7C,EAAU,CACzB0F,MAnNM,SAASt7C,GACnB,GAAGA,EAAKkiB,MAA4Bzc,KAAAA,IAApBzF,EAAKkiB,KAAKo5B,MACxB,OAAOt7C,EAAKkiB,KAAKo5B,MAEnB,IAAI/5C,EAAMkwC,EAAIK,GAAGx7B,MAAMyjC,SAEvB,GAAGx4C,EAAK,CACN,GAAGsqC,EAAEhsC,WAAW0B,CAAG,EACjB,OAAOA,EAAId,KAAKgxC,EAAKzxC,CAAI,EACpB,GAAGA,EAAK0O,GACb,OAAO1O,EAAK0O,GAAGoD,KAAKvQ,CAAG,GAAK,EAEhC,CACA,MAAO,EACT,EAqMuBvB,CAAI,EACrBu7C,gBAAiBv7C,EAAKs6C,GACxB,EAAGt6C,CAAI,EAEPyxC,EAAI2I,YAAY,EAEbp6C,EAAKw6C,SACHV,GAAcW,cAAcX,CAAY,EAExC95C,EAAK65C,WACNjE,EAAS3X,SAAS,aAAa,EAC/BwT,EAAI4G,aAAa,QAAS6B,EAAMV,OAAO3zC,QAAQ,QAAS7F,EAAKuB,GAAG,CAAE,IAElEq0C,EAAStX,YAAY,aAAa,EAClCmT,EAAI4G,aAAa,OAAO,KAK5B5G,EAAI4G,aAAa,SAAS,EAC1Br4C,EAAKw7C,QAAU,CAAA,EAEXx7C,EAAKw6C,UACPx6C,EAAK26C,UAAY,CAAA,EACjB/E,EAAS3X,SAAS,aAAa,EAC/BwT,EAAImJ,cAAc56C,CAAI,IAGjB41C,CACT,CACF,CACF,CAAC,EAqMkB,SAAjB6F,EAA0BC,GACxB,IACMhtC,EADH+iC,EAAIU,aAAawJ,KACdjtC,EAAK+iC,EAAIU,aAAawJ,GAAWrrC,KAAK,QAAQ,GAC5CrN,SAEAy4C,IACFhtC,EAAG,GAAGnN,IARD,iBAYJkwC,EAAI0C,QACLzlC,EAAGkV,IAAI,UAAW83B,EAAY,QAAU,MAAM,CAItD,CA2FiB,SAAfE,EAAwB7gC,GACxB,IAAI8gC,EAAYpK,EAAIhF,MAAMxpC,OAC1B,OAAW44C,EAAY,EAApB9gC,EACMA,EAAQ8gC,EACN9gC,EAAQ,EACV8gC,EAAY9gC,EAEdA,CACT,CACoB,SAApB+gC,EAA6B55C,EAAM65C,EAAMC,GACvC,OAAO95C,EAAK2D,QAAQ,WAAYk2C,EAAO,CAAC,EAAEl2C,QAAQ,YAAam2C,CAAK,CACtE,CA7SFnQ,EAAE2G,cAAcoG,eAAe,OAAQ,CAErC7zC,QAAS,CACPyQ,QAAS,CAAA,EACT+f,OAAQ,cACRwC,SAAU,IACVxH,OAAQ,SAAS0rB,GACf,OAAOA,EAAQx0C,GAAG,KAAK,EAAIw0C,EAAUA,EAAQ3rC,KAAK,KAAK,CACzD,CACF,EAEApK,MAAO,CAELg2C,SAAU,WACR,IAEE5lC,EAMEyhB,EACFokB,EAiBAC,EAGAC,EACAC,EA9BEC,EAAS9K,EAAIK,GAAGnb,KAClBwjB,EAAK,QAGHoC,EAAO/mC,SAAYi8B,EAAI8C,qBAIvBxc,EAAWwkB,EAAOxkB,SACpBokB,EAAiB,SAAS7lC,GACxB,IAAIkmC,EAASlmC,EAAMnR,MAAM,EAAE+3B,WAAW,OAAO,EAAEA,WAAW,OAAO,EAAEe,SAAS,oBAAoB,EAC9Fwe,EAAa,OAAQF,EAAOxkB,SAAS,IAAM,KAAOwkB,EAAOhnB,OACzDmnB,EAAS,CACP/qB,SAAU,QACV+E,OAAQ,KACRQ,KAAM,EACNrnB,IAAK,EACL8sC,8BAA+B,QACjC,EACA5zB,EAAI,aAKN,OAHA2zB,EAAO,WAAW3zB,GAAK2zB,EAAO,QAAQ3zB,GAAK2zB,EAAO,MAAM3zB,GAAK2zB,EAAO3zB,GAAK0zB,EAEzED,EAAO54B,IAAI84B,CAAM,EACVF,CACT,EACAJ,EAAkB,WAChB3K,EAAIh2B,QAAQmI,IAAI,aAAc,SAAS,CACzC,EAIF2tB,EAAO,gBAAgB4I,EAAI,WACtB1I,EAAImL,WAAW,IAEhBhgB,aAAayf,CAAW,EACxB5K,EAAIh2B,QAAQmI,IAAI,aAAc,QAAQ,GAItCtN,EAAQm7B,EAAIoL,eAAe,KAO3BP,EAAcH,EAAe7lC,CAAK,GAEtBsN,IAAK6tB,EAAIqL,WAAW,CAAE,EAElCrL,EAAIxqB,KAAKwI,OAAO6sB,CAAW,EAE3BD,EAAc98B,WAAW,WACvB+8B,EAAY14B,IAAK6tB,EAAIqL,WAAY,CAAA,CAAK,CAAE,EACxCT,EAAc98B,WAAW,WAEvB68B,EAAgB,EAEhB78B,WAAW,WACT+8B,EAAYj/B,OAAO,EACnB/G,EAAQgmC,EAAc,KACtBzK,EAAY,oBAAoB,CAClC,EAAG,EAAE,CAEP,EAAG9Z,CAAQ,CAEb,EAAG,EAAE,GAxBHqkB,EAAgB,EA6BtB,CAAC,EACD7K,EAAOgC,EAAmB4G,EAAI,WAC5B,GAAG1I,EAAImL,WAAW,EAAG,CAMnB,GAJAhgB,aAAayf,CAAW,EAExB5K,EAAIK,GAAGiF,aAAehf,EAEnB,CAACzhB,EAAO,CAET,GAAG,EADHA,EAAQm7B,EAAIoL,eAAe,GAEzB,OAEFP,EAAcH,EAAe7lC,CAAK,CACpC,CAEAgmC,EAAY14B,IAAK6tB,EAAIqL,WAAW,CAAA,CAAI,CAAE,EACtCrL,EAAIxqB,KAAKwI,OAAO6sB,CAAW,EAC3B7K,EAAIh2B,QAAQmI,IAAI,aAAc,QAAQ,EAEtCrE,WAAW,WACT+8B,EAAY14B,IAAK6tB,EAAIqL,WAAW,CAAE,CACpC,EAAG,EAAE,CACP,CAEF,CAAC,EAEDvL,EAAO+B,EAAY6G,EAAI,WAClB1I,EAAImL,WAAW,IAChBR,EAAgB,EACbE,GACDA,EAAYj/B,OAAO,EAErB/G,EAAQ,KAEZ,CAAC,EACH,EAEAsmC,WAAY,WACV,MAA6B,UAAtBnL,EAAI0F,SAAS71C,IACtB,EAEAu7C,eAAgB,WACd,MAAGpL,CAAAA,CAAAA,EAAI0F,SAASqD,SACP/I,EAAI0F,SAASmD,GAIxB,EAGAwC,WAAY,SAASC,GACnB,IAEEruC,EADCquC,EACItL,EAAI0F,SAASmD,IAEb7I,EAAIK,GAAGnb,KAAKpG,OAAOkhB,EAAI0F,SAASzoC,IAAM+iC,EAAI0F,QAAQ,EAGrD7N,EAAS56B,EAAG46B,OAAO,EACnB0T,EAAa5pB,SAAS1kB,EAAGkV,IAAI,aAAa,EAAE,EAAE,EAC9Cq5B,EAAgB7pB,SAAS1kB,EAAGkV,IAAI,gBAAgB,EAAE,EAAE,EASpD9jB,GARJwpC,EAAOz5B,KAASg8B,EAAEnsC,MAAM,EAAEy4B,UAAU,EAAI6kB,EAQ9B,CACRtrB,MAAOhjB,EAAGgjB,MAAM,EAEhByB,QAAS0gB,EAAQnlC,EAAG29B,YAAY,EAAI39B,EAAG,GAAG6kB,cAAgB0pB,EAAgBD,CAC5E,GASA,OA9KAE,EADqBz3C,KAAAA,IAApBy3C,EACoEz3C,KAAAA,IAAnDlG,SAAS0C,cAAc,GAAG,EAAEwhB,MAAM05B,aAE/CD,GAuKHp9C,EAAI,kBAAoBA,EAAe,UAAI,aAAewpC,EAAOpS,KAAO,MAAQoS,EAAOz5B,IAAM,OAE7F/P,EAAIo3B,KAAOoS,EAAOpS,KAClBp3B,EAAI+P,IAAMy5B,EAAOz5B,KAEZ/P,CACT,CAEF,CACF,CAAC,EArLD,IAAIo9C,EA6LAvB,EAAY,SAmRZyB,GA/PJvR,EAAE2G,cAAcoG,eAAe+C,EAAW,CAExC52C,QAAS,CACP4yC,OAAQ,6JAKR0F,UAAW,aAGXC,SAAU,CACRC,QAAS,CACPxiC,MAAO,cACPxN,GAAI,KACJhM,IAAK,yCACP,EACAi8C,MAAO,CACLziC,MAAO,aACPxN,GAAI,IACJhM,IAAK,0CACP,EACAk8C,MAAO,CACL1iC,MAAO,iBACPxZ,IAAK,mBACP,CACF,CACF,EAEA2E,MAAO,CACLw3C,WAAY,WACVjM,EAAI5pB,MAAMjnB,KAAK+6C,CAAS,EAExBpK,EAAO,eAAgB,SAAS5kC,EAAGgxC,EAAUC,GACxCD,IAAaC,IACXD,IAAahC,EACdF,EAAe,EACPmC,IAAYjC,GACpBF,EAAe,CAAA,CAAI,EAKzB,CAAC,EAEDlK,EAAO+B,EAAc,IAAMqI,EAAW,WACpCF,EAAe,CACjB,CAAC,CACH,EAEAoC,UAAW,SAAS79C,EAAM41C,GACxB,IAAIkI,EAAW99C,EAAKuB,IAChBw8C,EAAWtM,EAAIK,GAAGkM,OAgBlBC,GAdJpS,EAAEhoC,KAAKk6C,EAAST,SAAU,WACxB,GAAoC,CAAC,EAAlCQ,EAASj9C,QAASlB,KAAKob,KAAM,EAS9B,OARGpb,KAAK4N,KAEJuwC,EADoB,UAAnB,OAAOn+C,KAAK4N,GACFuwC,EAASxP,OAAOwP,EAASI,YAAYv+C,KAAK4N,EAAE,EAAE5N,KAAK4N,GAAGtK,OAAQ66C,EAAS76C,MAAM,EAE7EtD,KAAK4N,GAAG9M,KAAMd,KAAMm+C,CAAS,GAG5CA,EAAWn+C,KAAK4B,IAAIsE,QAAQ,OAAQi4C,CAAS,EACtC,CAAA,CAEX,CAAC,EAEa,IAQd,OAPGC,EAASV,YACVY,EAAQF,EAASV,WAAaS,GAEhCrM,EAAIgH,aAAa7C,EAAUqI,EAASj+C,CAAI,EAExCyxC,EAAI4G,aAAa,OAAO,EAEjBzC,CACT,CACF,CACF,CAAC,EAuBD/J,EAAE2G,cAAcoG,eAAe,UAAW,CAExC7zC,QAAS,CACPyQ,QAAS,CAAA,EACT2oC,YAAa,oFACbC,QAAS,CAAC,EAAE,GACZC,mBAAoB,CAAA,EACpBC,OAAQ,CAAA,EAERC,MAAO,4BACPC,MAAO,yBACPC,SAAU,mBACZ,EAEAv4C,MAAO,CACLw4C,YAAa,WAEX,IAAIC,EAAMlN,EAAIK,GAAG8M,QACfzE,EAAK,eAIP,GAFA1I,EAAIoN,UAAY,CAAA,EAEb,CAACF,GAAO,CAACA,EAAInpC,QAAU,MAAO,CAAA,EAEjC69B,GAAgB,eAEhB9B,EAAOkC,EAAW0G,EAAI,WAEjBwE,EAAIN,oBACL5M,EAAIxqB,KAAKW,GAAG,QAAQuyB,EAAI,WAAY,WAClC,GAAsB,EAAnB1I,EAAIhF,MAAMxpC,OAEX,OADAwuC,EAAIhlC,KAAK,EACF,CAAA,CAEX,CAAC,EAGH0mC,EAAUvrB,GAAG,UAAUuyB,EAAI,SAASxtC,GAChB,KAAdA,EAAEggB,QACJ8kB,EAAI/2B,KAAK,EACc,KAAd/N,EAAEggB,SACX8kB,EAAIhlC,KAAK,CAEb,CAAC,CACH,CAAC,EAED8kC,EAAO,eAAe4I,EAAI,SAASxtC,EAAGuV,GACjCA,EAAKhgB,OACNggB,EAAKhgB,KAAO45C,EAAkB55B,EAAKhgB,KAAMuvC,EAAI0F,SAASp8B,MAAO02B,EAAIhF,MAAMxpC,MAAM,EAEjF,CAAC,EAEDsuC,EAAOiC,EAAmB2G,EAAI,SAASxtC,EAAGsvC,EAASh3B,EAAQjlB,GACzD,IAAI6a,EAAI42B,EAAIhF,MAAMxpC,OAClBgiB,EAAO81B,QAAc,EAAJlgC,EAAQihC,EAAkB6C,EAAIF,SAAUz+C,EAAK+a,MAAOF,CAAC,EAAI,EAC5E,CAAC,EAED02B,EAAO,gBAAkB4I,EAAI,WAC3B,IAEI2E,EACAC,EAHkB,EAAnBtN,EAAIhF,MAAMxpC,QAAc07C,EAAIL,QAAU,CAAC7M,EAAIqN,YACxCnH,EAASgH,EAAIR,YACfW,EAAYrN,EAAIqN,UAAYjT,EAAG8L,EAAO9xC,QAAQ,YAAa84C,EAAIJ,KAAK,EAAE14C,QAAQ,UAAW,MAAM,CAAE,EAAEo4B,SAAS2V,CAAmB,EAC/HmL,EAAatN,EAAIsN,WAAalT,EAAG8L,EAAO9xC,QAAQ,YAAa84C,EAAIH,KAAK,EAAE34C,QAAQ,UAAW,OAAO,CAAE,EAAEo4B,SAAS2V,CAAmB,EAEpIkL,EAAU3zB,MAAM,WACdsmB,EAAI/2B,KAAK,CACX,CAAC,EACDqkC,EAAW5zB,MAAM,WACfsmB,EAAIhlC,KAAK,CACX,CAAC,EAEDglC,EAAIxgB,UAAUxB,OAAOqvB,EAAU7jC,IAAI8jC,CAAU,CAAC,EAElD,CAAC,EAEDxN,EA/qDW,SA+qDS4I,EAAI,WACnB1I,EAAIuN,iBAAiBpiB,aAAa6U,EAAIuN,eAAe,EAExDvN,EAAIuN,gBAAkBz/B,WAAW,WAC/BkyB,EAAIwN,oBAAoB,EACxBxN,EAAIuN,gBAAkB,IACxB,EAAG,EAAE,CACP,CAAC,EAGDzN,EAAO+B,EAAY6G,EAAI,WACrBhH,EAAUlrB,IAAIkyB,CAAE,EAChB1I,EAAIxqB,KAAKgB,IAAI,QAAQkyB,CAAE,EACvB1I,EAAIsN,WAAatN,EAAIqN,UAAY,IACnC,CAAC,CAEH,EACAryC,KAAM,WACJglC,EAAIoN,UAAY,CAAA,EAChBpN,EAAI12B,MAAQ6gC,EAAanK,EAAI12B,MAAQ,CAAC,EACtC02B,EAAIkF,eAAe,CACrB,EACAj8B,KAAM,WACJ+2B,EAAIoN,UAAY,CAAA,EAChBpN,EAAI12B,MAAQ6gC,EAAanK,EAAI12B,MAAQ,CAAC,EACtC02B,EAAIkF,eAAe,CACrB,EACAuI,KAAM,SAASC,GACb1N,EAAIoN,UAAaM,GAAY1N,EAAI12B,MACjC02B,EAAI12B,MAAQokC,EACZ1N,EAAIkF,eAAe,CACrB,EACAsI,oBAAqB,WAMnB,IALA,IAAI3mB,EAAImZ,EAAIK,GAAG8M,QAAQR,QACrBgB,EAAgBz5C,KAAK05C,IAAI/mB,EAAE,GAAImZ,EAAIhF,MAAMxpC,MAAM,EAC/Cq8C,EAAe35C,KAAK05C,IAAI/mB,EAAE,GAAImZ,EAAIhF,MAAMxpC,MAAM,EAG5CnB,EAAI,EAAGA,IAAM2vC,EAAIoN,UAAYS,EAAeF,GAAgBt9C,CAAC,GAC/D2vC,EAAI8N,aAAa9N,EAAI12B,MAAMjZ,CAAC,EAE9B,IAAIA,EAAI,EAAGA,IAAM2vC,EAAIoN,UAAYO,EAAgBE,GAAex9C,CAAC,GAC/D2vC,EAAI8N,aAAa9N,EAAI12B,MAAMjZ,CAAC,CAEhC,EACAy9C,aAAc,SAASxkC,GAGrB,IAII/a,EANJ+a,EAAQ6gC,EAAa7gC,CAAK,EAEvB02B,EAAIhF,MAAM1xB,GAAO88B,aAIhB73C,EAAOyxC,EAAIhF,MAAM1xB,IACZouB,SACPnpC,EAAOyxC,EAAIgG,QAAS18B,CAAM,GAG5B82B,EAAY,WAAY7xC,CAAI,EAEX,UAAdA,EAAKsB,OACNtB,EAAKs6C,IAAMzO,EAAE,yBAAyB,EAAEjkB,GAAG,iBAAkB,WAC3D5nB,EAAKw6C,QAAU,CAAA,CACjB,CAAC,EAAE5yB,GAAG,kBAAmB,WACvB5nB,EAAKw6C,QAAU,CAAA,EACfx6C,EAAK65C,UAAY,CAAA,EACjBhI,EAAY,gBAAiB7xC,CAAI,CACnC,CAAC,EAAE8R,KAAK,MAAO9R,EAAKuB,GAAG,GAIzBvB,EAAK63C,UAAY,CAAA,EACnB,CACF,CACF,CAAC,EAMe,UAEhBhM,EAAE2G,cAAcoG,eAAewE,EAAW,CACxCr4C,QAAS,CACPy6C,WAAY,SAASx/C,GACnB,OAAOA,EAAKuB,IAAIsE,QAAQ,SAAU,SAASiH,GAAK,MAAO,MAAQA,CAAG,CAAC,CACrE,EACA2yC,MAAO,CACT,EACAv5C,MAAO,CACLw5C,WAAY,WACV,IAEM5N,EAGJ2N,EAL2B,EAA1B//C,OAAOigD,mBAEJ7N,EAAKL,EAAIK,GAAG8N,OACdH,EAAQ3N,EAAG2N,MAIF,GAARA,EAFMjU,MAAMiU,CAAK,EAAYA,EAAM,EAAdA,MAGtBlO,EAAO,gBAAuB6L,EAAW,SAASzwC,EAAG3M,GACnDA,EAAKs6C,IAAI12B,IAAI,CACXi8B,YAAa7/C,EAAKs6C,IAAI,GAAGlJ,aAAeqO,EACxC/tB,MAAS,MACX,CAAC,CACH,CAAC,EACD6f,EAAO,gBAAuB6L,EAAW,SAASzwC,EAAG3M,GACnDA,EAAKuB,IAAMuwC,EAAG0N,WAAWx/C,EAAMy/C,CAAK,CACtC,CAAC,EAIP,CACF,CACF,CAAC,EAGAlN,EAAe,CAAG,CAAE,EC3zDvB,SAAWr9B,EAAM9V,GACM,YAAlB,OAAOssC,QAAyBA,OAAOC,IAC1CD,OAAO,GAAI,WACV,OAAOtsC,EAAQ8V,CAAI,CACnB,CAAC,EAC2B,UAAnB,OAAO5V,QACjBD,OAAOC,QAAUF,EAAQ8V,CAAI,EAE7BA,EAAK4qC,aAAe1gD,EAAQ8V,CAAI,CAEjC,EAAoB,aAAlB,OAAO/V,OAAyBA,OAA2B,aAAlB,OAAOO,OAAyBA,OAASC,KAAM,SAAWD,GAErG,aAyDa,SAAToF,IACH,IAAI0pC,EAAS,GAOb,OANAjpC,MAAMrC,UAAUkrC,QAAQ3tC,KAAKwD,UAAW,SAAWnE,GAClD,IAAK,IAAIuO,KAAOvO,EAAK,CACpB,GAAI,CAACA,EAAImB,eAAeoN,CAAG,EAAG,OAC9BmgC,EAAOngC,GAAOvO,EAAIuO,EACnB,CACA,CAAC,EACKmgC,CACR,CA4BuB,SAAnBuR,EAA6BxyC,GAGX,MAAjBA,EAAGykC,OAAO,CAAC,IACdzkC,EAAKA,EAAG+gC,OAAO,CAAC,GASjB,IANA,IAGI0R,EAHAt+B,EAASxZ,OAAOqF,CAAE,EAClBtK,EAASye,EAAOze,OAChB8X,EAAQ,CAAC,EAETzH,EAAS,GACT2sC,EAAgBv+B,EAAOnZ,WAAW,CAAC,EAChC,EAAEwS,EAAQ9X,GAAQ,CAOxB,GAAiB,KANjB+8C,EAAWt+B,EAAOnZ,WAAWwS,CAAK,GAOjC,MAAM,IAAImlC,sBACT,+CACD,EAMa,GAAZF,GAAsBA,GAAY,IAAuB,KAAZA,GAGnC,IAAVjlC,GAA2B,IAAZilC,GAAsBA,GAAY,IAIvC,IAAVjlC,GACY,IAAZilC,GAAsBA,GAAY,IAChB,KAAlBC,EAID3sC,GAAU,KAAO0sC,EAASj/C,SAAS,EAAE,EAAI,IAiBzCuS,GARY,KAAZ0sC,GACa,KAAbA,GACa,KAAbA,GACY,IAAZA,GAAsBA,GAAY,IACtB,IAAZA,GAAsBA,GAAY,IACtB,IAAZA,GAAsBA,GAAY,IAGxBt+B,EAAOswB,OAAOj3B,CAAK,EAMpB,KAAO2G,EAAOswB,OAAOj3B,CAAK,CAErC,CAGA,MAAO,IAAMzH,CAEd,CA2KgB,SAAZ05B,EAAsB1rC,EAAMyD,EAASo7C,EAAQ/6B,GAC3CrgB,EAAQq7C,YAA4C,YAA9B,OAAO1gD,EAAO4tC,cACrCtlB,EAAQ,IAAIslB,YAAYhsC,EAAM,CACjCwqB,QAAS,CAAA,EACTI,OAAQ,CACPi0B,OAAQA,EACR/6B,OAAQA,CACT,CACD,CAAC,EACD7lB,SAASguC,cAAcvlB,CAAK,EAC7B,CArVA,IAAIklB,EAAW,CAGdoC,OAAQ,uBACRz5B,OAAQ,KACRwqC,eAAgB,CAAA,EAGhB/kB,MAAO,IACPglB,gBAAiB,CAAA,EACjBC,YAAa,KACbC,YAAa,KACbC,KAAM,CAAA,EACNnX,OAAQ,EAGR/T,OAAQ,iBACRmrB,aAAc,KAGdC,UAAW,CAAA,EACXC,SAAU,CAAA,EAGVR,WAAY,CAAA,CAEb,EAoDIS,EAAY,SAAU78C,GACzB,OAAOovB,SAAS1zB,EAAO8wB,iBAAiBxsB,CAAI,EAAEmvB,OAAQ,EAAE,CACzD,EAoHI2tB,EAAoB,WACvB,OAAOn7C,KAAK6uB,IACXj1B,SAAS2lB,KAAKonB,aAAc/sC,SAASmQ,gBAAgB48B,aACrD/sC,SAAS2lB,KAAKqO,aAAch0B,SAASmQ,gBAAgB6jB,aACrDh0B,SAAS2lB,KAAKqnB,aAAchtC,SAASmQ,gBAAgB68B,YACtD,CACD,EAmaA,OAjRmB,SAAU3pC,EAAUmC,GAoInB,SAAfg8C,EAAyB/4B,GAI5B,GAAIA,CAAAA,EAAMwD,kBAGNxD,EAAiB,IAAjBA,EAAMlS,QAAgBkS,EAAMoE,SAAWpE,EAAMiE,SAAWjE,EAAMuE,WAI5D,YAAavE,EAAM5iB,SAGzBggB,EAAS4C,EAAM5iB,OAAO0V,QAAQlY,CAAQ,IACU,MAAjCwiB,EAAOuqB,QAAQvoC,YAAY,GAAa4gB,CAAAA,EAAM5iB,OAAO0V,QAAQwoB,EAASgM,MAAM,GAGvFlqB,EAAO47B,WAAathD,EAAOuV,SAAS+rC,UAAY57B,EAAO67B,WAAavhD,EAAOuV,SAASgsC,UAAa,IAAItzC,KAAKyX,EAAO9P,IAAI,EAAzH,CAGA,IAQI6qC,EAnQqBp7C,EA4PzB,IACCiQ,EAAO+qC,EAAiB1R,mBAAmBjpB,EAAOpQ,IAAI,CAAC,CAGxD,CAFE,MAAMrI,GACPqI,EAAO+qC,EAAiB36B,EAAOpQ,IAAI,CACpC,CAIA,GAAa,MAATA,EAAc,CACjB,GAAI,CAACsuB,EAAS+c,eAAgB,OAC9BF,EAAS5gD,SAASmQ,eACnB,MACCywC,EAAS5gD,SAAS2hD,cAAclsC,CAAI,GAErCmrC,EAAUA,GAAmB,SAATnrC,EAA6CmrC,EAA3B5gD,SAASmQ,mBAI/CsY,EAAMS,eAAe,EA9QI1jB,EA+Qdu+B,EA5QP6d,QAAQC,cAAiBr8C,EAAQ47C,WAAaQ,CAAAA,QAAQvjC,QAI3D5I,GAAOA,EADItV,EAAOuV,SAASD,OACN,GAGrBmsC,QAAQC,aACP,CACCC,aAAc3+B,KAAK4+B,UAAUv8C,CAAO,EACpCo7C,OAAQnrC,GAActV,EAAOwqC,WAC9B,EACA3qC,SAAS+7C,MACTtmC,GAActV,EAAOuV,SAASK,IAC/B,GA+PC+rC,EAAaE,cAAcpB,EAAQ/6B,CAAM,EAxByF,CA0BnI,CAKsB,SAAlBo8B,EAA4Bx5B,GAI/B,IAUIm4B,EAVkB,OAAlBgB,QAAQvjC,OAGPujC,CAAAA,QAAQvjC,MAAMyjC,cAAgBF,QAAQvjC,MAAMyjC,eAAiB3+B,KAAK4+B,UAAUhe,CAAQ,GAQnE,UAAlB,OADA6c,EAASgB,QAAQvjC,MAAMuiC,SACOA,GAE7B,EADJA,EAAS5gD,SAAS2hD,cAAcnB,EAAiBoB,QAAQvjC,MAAMuiC,MAAM,CAAC,IAKvEkB,EAAaE,cAAcpB,EAAQ,KAAM,CAACQ,UAAW,CAAA,CAAK,CAAC,CAE5D,CAtMA,IACIrd,EAAkBle,EAAQq8B,EAA2BC,EADrDL,EAAe,CAWnBM,aAA4B,SAAUC,GACrC7T,qBAAqB2T,CAAiB,EACtCA,EAAoB,KAChBE,GACJ5U,EAAU,eAAgB1J,CAAQ,CACnC,CAhBoB,EAwBpB+d,EAAaE,cAAgB,SAAUpB,EAAQ/6B,EAAQrgB,GAGtDs8C,EAAaM,aAAa,EAG1B,IAMIE,EAMAC,EACAC,EACAC,EACAC,EACA3mB,EACArnB,EAAmB0d,EAQnBuwB,EA6BAC,EAjKmCp9C,EA2GnCq9C,EAAYt9C,EAAOw+B,GAAY4J,EAAUnoC,GAAW,EAAE,EAGtDs9C,EAAmD,oBAA3CjiD,OAAO8C,UAAUnC,SAASN,KAAK0/C,CAAM,EAC7CmC,EAAaD,GAAS,CAAClC,EAAOxQ,QAAU,KAAOwQ,GAC9CkC,GAAUC,KACXT,EAAgBniD,EAAOwqC,YACvBkY,EAAUvsC,QAAU,CAAC4rC,IAExBA,EAAcliD,SAAS2hD,cAAckB,EAAUvsC,MAAM,GAElD0sC,GAlK0B1sC,EAkKK4rC,GAjKdZ,EAAUhrC,CAAM,EAAIA,EAAO23B,UAAhC,EAkKZsU,EAAcO,EAAQlC,EAvLP,SAAUA,EAAQoC,EAAcjZ,EAAQmX,GAC5D,IAAIxrC,EAAW,EACf,GAAIkrC,EAAO/V,aACV,KACCn1B,GAAYkrC,EAAO3S,UACnB2S,EAASA,EAAO/V,eAOjB,OAJDn1B,EAAWtP,KAAK6uB,IAAIvf,EAAWstC,EAAejZ,EAAQ,CAAC,EAEtDr0B,EADGwrC,EACQ96C,KAAK05C,IAAIpqC,EAAU6rC,EAAkB,EAAIphD,EAAO2sC,WAAW,EAE/Dp3B,CACT,EA0KoDqtC,EAAYC,EAAcnvB,SAAsC,YAA5B,OAAOgvB,EAAU9Y,OAAwB8Y,EAAU9Y,OAAO6W,EAAQ/6B,CAAM,EAAIg9B,EAAU9Y,OAAS,EAAE,EAAG8Y,EAAU3B,IAAI,EACpMsB,EAAWD,EAAcD,EACzBG,EAAiBlB,EAAkB,EACnCmB,EAAa,EACb3mB,EA7JS,SAAUymB,EAAUze,GAC9BhI,EAAQgI,EAASgd,gBAAkBhd,EAAShI,MAAQ31B,KAAK68C,IAAIT,EAAW,IAAOze,EAAShI,KAAK,EACjG,OAAIgI,EAASid,aAAejlB,EAAQgI,EAASid,YAAoBjd,EAASid,YACtEjd,EAASkd,aAAellB,EAAQgI,EAASkd,YAAoBld,EAASkd,YACnEptB,SAASkI,EAAO,EAAE,CAC1B,EAwJuBymB,EAAUK,CAAS,EASpCF,EAAoB,SAAUvwB,EAAUmwB,GAG3C,IAAIW,EAAkB/iD,EAAOwqC,YAG7B,GAAIvY,GAAYmwB,GAAeW,GAAmBX,IAAiBD,EAAgBC,GAAepiD,EAAO2sC,YAAcoW,IAAoBT,EAe1I,OAZAX,EAAaM,aAAa,CAAA,CAAI,EAnHEG,EAsHZA,EAtHyBO,EAsHZA,EAnHrB,KAHYlC,EAsHZA,IAlHd5gD,SAAS2lB,KAAK/P,MAAM,EAIjBktC,IAGJlC,EAAOhrC,MAAM,EACT5V,SAAS6V,gBAAkB+qC,IAC9BA,EAAO/9C,aAAa,WAAY,IAAI,EACpC+9C,EAAOhrC,MAAM,EACbgrC,EAAO18B,MAAMi/B,QAAU,QAExBhjD,EAAO4qC,SAAS,EAAIwX,CAAW,GAwG5B9U,EAAU,aAAcoV,EAAWjC,EAAQ/6B,CAAM,EAM1C,EAFPs8B,EADAztC,EAAQ,KAMV,EAKIkuC,EAAoB,SAAUQ,GA7QhB,IAAUrf,EAAU5G,EACnCvpB,EA8QF8uC,GAAcU,GADT1uC,EAAAA,GAAiB0uC,GAItBhxB,EAAWkwB,EAAiBE,GAlRSrlB,EAiRV,GAD3BkmB,EAAuB,IAAVtnB,EAAc,EAAK2mB,EAAa3mB,GACb,EAAIsnB,EA7Qd,gBAJKtf,EAkR0B8e,GA9Q1C7sB,SAAyBpiB,EAAUupB,EAAOA,GAC/B,gBAApB4G,EAAS/N,SAA0BpiB,EAAUupB,GAAQ,EAAIA,IACrC,kBAApB4G,EAAS/N,SAA4BpiB,EAAUupB,EAAO,GAAM,EAAIA,EAAOA,GAAa,EAAI,EAAIA,GAAQA,EAArB,GAC3D,gBAApB4G,EAAS/N,SAA0BpiB,EAAUupB,EAAOA,EAAOA,GACvC,iBAApB4G,EAAS/N,SAA2BpiB,EAAU,EAAGupB,EAAQA,EAAOA,EAAO,GACnD,mBAApB4G,EAAS/N,SAA6BpiB,EAAUupB,EAAO,GAAM,EAAIA,EAAOA,EAAOA,GAAQA,EAAO,IAAM,EAAIA,EAAO,IAAM,EAAIA,EAAO,GAAK,GACjH,gBAApB4G,EAAS/N,SAA0BpiB,EAAUupB,EAAOA,EAAOA,EAAOA,GAC9C,iBAApB4G,EAAS/N,SAA2BpiB,EAAU,GAAI,EAAGupB,EAAQA,EAAOA,EAAOA,GACvD,mBAApB4G,EAAS/N,SAA6BpiB,EAAUupB,EAAO,GAAM,EAAIA,EAAOA,EAAOA,EAAOA,EAAO,EAAI,EAAI,EAAGA,EAAQA,EAAOA,EAAOA,GAC1G,gBAApB4G,EAAS/N,SAA0BpiB,EAAUupB,EAAOA,EAAOA,EAAOA,EAAOA,GACrD,iBAApB4G,EAAS/N,SAA2BpiB,EAAU,EAAI,EAAGupB,EAAQA,EAAOA,EAAOA,EAAOA,GAC9D,mBAApB4G,EAAS/N,SAA6BpiB,EAAUupB,EAAO,GAAM,GAAKA,EAAOA,EAAOA,EAAOA,EAAOA,EAAO,EAAI,GAAK,EAAGA,EAAQA,EAAOA,EAAOA,EAAOA,IAGrHvpB,EAAvBmwB,EAASod,aAAwBpd,EAASod,aAAahkB,CAAI,EAE1DvpB,IAAWupB,GA+PhBh9B,EAAO4qC,SAAS,EAAG3kC,KAAKk9C,MAAMlxB,CAAQ,CAAC,EAClCuwB,EAAkBvwB,EAAUmwB,CAAW,IAC3CJ,EAAoBhiD,EAAOu5B,sBAAsBkpB,CAAiB,EAClEluC,EAAQ0uC,EAEV,EAM2B,IAAvBjjD,EAAOwqC,aACVxqC,EAAO4qC,SAAS,EAAG,CAAC,EAnLG6V,EAuLdA,EAvL6Bp7C,EAuLdq9C,EAAPC,GAjLdlB,QAAQ2B,WAAc/9C,EAAQ47C,WAGnCQ,QAAQ2B,UACP,CACCzB,aAAc3+B,KAAK4+B,UAAUv8C,CAAO,EACpCo7C,OAAQA,EAAO5yC,EAChB,EACAhO,SAAS+7C,MACT6E,IAAW5gD,SAASmQ,gBAAkB,OAAS,IAAMywC,EAAO5yC,EAC7D,EAlOI,eAAgB7N,GAAUA,EAAOqjD,WAAW,0BAA0B,EAAEp8C,QA6Y1EjH,EAAO4qC,SAAS,EAAG3kC,KAAKk9C,MAAMf,CAAW,CAAC,GAK3C9U,EAAU,cAAeoV,EAAWjC,EAAQ/6B,CAAM,EAGlDi8B,EAAaM,aAAa,CAAA,CAAI,EAC9BjiD,EAAOu5B,sBAAsBkpB,CAAiB,GAE/C,EAkFAd,EAAa9S,QAAU,WAGjBjL,IAGL/jC,SAASihB,oBAAoB,QAASugC,EAAc,CAAA,CAAK,EACzDrhD,EAAO8gB,oBAAoB,WAAYghC,EAAiB,CAAA,CAAK,EAG7DH,EAAaM,aAAa,EAQ1BD,EAFAD,EADAr8B,EAFAke,EAAW,KAOZ,EASC,GAniBA,kBAAmB/jC,UACnB,qBAAsBG,GACtB,0BAA2BA,GAC3B,YAAaA,EAAOsjD,QAAQ9/C,UA+jB7B,OA5BCm+C,EAAa9S,QAAQ,EAGrBjL,EAAWx+B,EAAOooC,EAAUnoC,GAAW,EAAE,EACzC08C,EAAcne,EAASztB,OAAStW,SAAS2hD,cAAc5d,EAASztB,MAAM,EAAI,KAG1EtW,SAASuQ,iBAAiB,QAASixC,EAAc,CAAA,CAAK,EAGlDzd,EAASqd,WAAard,EAASsd,UAClClhD,EAAOoQ,iBAAiB,WAAY0xC,EAAiB,CAAA,CAAK,EAiBrDH,EA/BW,KAAM,gGAiCzB,CAIA,CAAC,ECroBFxV,EAAEtsC,QAAQ,EAAE8a,MAAM,WAEhBwxB,EAAE,OAAO,EAAEuD,QAAQ,EAGnBvD,EAAE,8BAA8B,EAAEjkB,GAAG,QAAS,WAC5CikB,EAAE,eAAe,EAAEtN,YAAY,aAAa,EAC5CsN,EAAE,uBAAuB,EAAEv7B,KAAK,QAAQ,EAAEiuB,YAAY,MAAM,CAC9D,CAAC,EAGDsN,EAAEtsC,QAAQ,EAAE0jD,MAAM,SAAUt2C,GACR,KAAdA,EAAEggB,SACAkf,EAAE,kBAAkB,EAAElN,SAAS,YAAY,IAC7CkN,EAAE,iBAAiB,EAAEtN,YAAY,aAAa,EAC9CsN,EAAE,kBAAkB,EAAEtN,YAAY,YAAY,EAGpD,CAAC,EAGDsN,EAAE,iBAAiB,EAAEjkB,GAAG,QAAS,WAC/BikB,EAAE,iBAAiB,EAAEtN,YAAY,aAAa,EAC9CsN,EAAE,kBAAkB,EAAEtN,YAAY,YAAY,EAE9Chf,WAAW,WACTssB,EAAE,uBAAuB,EAAE12B,MAAM,CACnC,EAAG,GAAG,CACR,CAAC,EA+I6B,SAA1B+tC,EAAoCl7B,GAKtC,IAJA,IAAIm7B,EAAan7B,EAAM5iB,OAGnBg+C,EAAYD,EAAWE,mBACpBD,GAAiD,SAApCA,EAAUzT,QAAQvoC,YAAY,GAChDg8C,EAAYA,EAAUC,mBAExB,GAAKD,EAyBL,OAdI9vC,EApDS,SAAUpR,GACvB,GAAI3C,SAAS+jD,oBAAoB,MAAM,GAAKrP,UAAUsP,UAKpD,OAJAtP,UAAUsP,UAAUC,UAAUthD,CAAI,EAAEqa,KAClC,IAAM,CAAA,EACN,IAAM4D,QAAQpa,MAAM,qCAAuC7D,CAAI,CACjE,EACO,CAAA,EAEP,IAAIuhD,EAAyD,QAAjDlkD,SAASmQ,gBAAgBvN,aAAa,KAAK,EAEnDuhD,EAAWnkD,SAAS0C,cAAc,UAAU,EAI5C0hD,GAHJD,EAAS1zC,UAAY,mBACrB0zC,EAASjgC,MAAMggC,EAAQ,QAAU,QAAU,UAE3B/jD,OAAOwqC,aAAe3qC,SAASmQ,gBAAgByoB,WAO3DqN,GANJke,EAASjgC,MAAM5T,IAAM8zC,EAAY,KAEjCD,EAASthD,aAAa,WAAY,EAAE,EACpCshD,EAAS58C,MAAQ5E,EACjB3C,SAAS2lB,KAAK5iB,YAAYohD,CAAQ,EAEpB,CAAA,GACd,IACEA,EAAS36C,OAAO,EAChBy8B,EAAUjmC,SAASqkD,YAAY,MAAM,CAGvC,CAFE,MAAOj3C,GACP64B,EAAU,CAAA,CACZ,CAEA,OADAke,EAASnhD,WAAWC,YAAYkhD,CAAQ,EACjCle,CAEX,GAmBI4d,GAFES,EAAgBT,EAAUlC,cAAc,wBAAwB,GAEtD2C,EAEQT,GAAUU,SAAS,EAEzCX,EAAWhuC,MAAM,EACb7B,IAC0B,OAAxB6vC,EAAWjqB,UACbuhB,cAAc0I,EAAWjqB,QAAQ,EAEnCiqB,EAAWvW,UAAU3xB,IAAI,QAAQ,EACjCkoC,EAAWjqB,SAAW3Z,WAAW,WAC/B4jC,EAAWvW,UAAUvvB,OAAO,QAAQ,EACpCo9B,cAAc0I,EAAWjqB,QAAQ,EACjCiqB,EAAWjqB,SAAW,IACxB,EAAG,IAAI,GAEF5lB,EAtBL,MADA6M,QAAQC,KAAK+iC,CAAU,EACjB,IAAI1jD,MAAM,sCAAsC,CAuB1D,CA9Ka,IAAIqgD,aAAa,eAAgB,CAC5CxW,OAAQ,GACRhO,MAAO,IACPglB,gBAAiB,CAAA,EACjBC,YAAa,GACf,CAAC,EAGyB,EAAtB1U,EAAE,SAAS,EAAE5oC,QACL,IAAI8oC,QAAQ,YAAa,CAEjCc,SAAU,SACVC,aAAc,SAGdK,OAAQ,CAAA,EACRC,YAAa,SAGb9D,OAAQ,GACR+D,OAAQ,CAAA,EAGRvkB,OAAQ,CAAA,CACV,CAAC,EAqBGppB,OAAOqkD,QACXxkD,SAASuQ,iBAAiB,kBAlBD,SAAUkY,GACnC,IAAI5iB,EAAS4iB,EAAM5iB,OACf4+C,EAAgB,CAAEC,SAAU,OAAQC,MAAO,UAAW7K,OAAQ,OAAQ,EAEtE8K,EAAa5kD,SAAS2hD,cAAc,6BAA6B,EAChEiD,GACgD,WAAjDzkD,OAAO8wB,iBAAiB2zB,CAAU,EAAExyB,WAEpCvsB,EAAOg/C,cAAcxX,UAAUrjC,SAAS,WAAW,GAAKnE,GAAUA,EAAOg/C,cAAczd,kBAEzFpnC,SAAS2hD,cAAc,gBAAgB,EAEvC97C,GAFyCi/C,eAAeL,CAAa,CAIzE,CAIiE,EAIjEnY,EACE,mGACF,EAAEh3B,IAAI,OAAO,EAAEopB,SAAS,aAAa,EAGrC4N,EAAE,cAAc,EAAE2G,cAAc,CAO9BlxC,KAAM,QACNm0C,SAAU,2BACVmJ,QAAS,CACPppC,QAAS,CAAA,EACT6oC,mBAAoB,CAAA,EACpBD,QAAS,CAAC,EAAG,EACf,EACA9nC,MAAO,CACLkjC,OAAQ,wDACV,EACAzC,aAAc,IAGdN,UAAW,cACX1E,UAAW,CACTuS,WAAY,WAEV3kD,KAAKmyC,GAAGx7B,MAAMqhC,OAASh4C,KAAKmyC,GAAGx7B,MAAMqhC,OAAO9xC,QAC1C,aACA,0BACF,CACF,CACF,EACAmvC,oBAAqB,CAAA,EACrBmD,SAAU,CAAA,CACZ,CAAC,EAGD54C,SACG2hD,cAAc,gBAAgB,EAC9BlzC,iBAAiB,wBAAwB,EACzCogC,QAAQ,SAAU6N,GACjB,IAEMkE,EAFF5yC,EAAK0uC,EAAQ95C,aAAa,IAAI,EAC9BoL,KACE4yC,EAAS5gD,SAAS0C,cAAc,GAAG,GAChC+N,UAAY,cACnBmwC,EAAO7qC,KAAO,IAAM/H,EACpB4yC,EAAOxvC,UACL,oEACFwvC,EAAO7E,MAAQ,YACfW,EAAQ35C,YAAY69C,CAAM,EAE9B,CAAC,EAwECzgD,OAAO6kD,yBACThlD,SACGyO,iBAAiB,qCAAqC,EACtDogC,QAAQ,SAAU6N,EAASlhC,EAAOypC,GAEjC,IAKIC,EALAxzB,EAAYgrB,EAAQmI,cAEkC,SAAtDnzB,EAAU0V,kBAAkBgJ,QAAQvoC,YAAY,KAGhDq9C,EAAallD,SAAS0C,cAAc,QAAQ,GACrCq5C,MAAQ,oBACnBmJ,EAAWz0C,UAAY,wBACvBy0C,EAAW9zC,UAAY,mHACvB8zC,EAAW30C,iBAAiB,QAASozC,CAAuB,EAC5DjyB,EAAUvB,QAAQ+0B,CAAU,EAC9B,CAAC,CAEP,CAAC"} \ No newline at end of file diff --git a/en/assets/js/plugins/gumshoe.js b/en/assets/js/plugins/gumshoe.js new file mode 100644 index 0000000..713b6eb --- /dev/null +++ b/en/assets/js/plugins/gumshoe.js @@ -0,0 +1,484 @@ +/*! + * gumshoejs v5.1.1 + * A simple, framework-agnostic scrollspy script. + * (c) 2019 Chris Ferdinandi + * MIT License + * http://github.com/cferdinandi/gumshoe + */ + +(function (root, factory) { + if ( typeof define === 'function' && define.amd ) { + define([], (function () { + return factory(root); + })); + } else if ( typeof exports === 'object' ) { + module.exports = factory(root); + } else { + root.Gumshoe = factory(root); + } +})(typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : this, (function (window) { + + 'use strict'; + + // + // Defaults + // + + var defaults = { + + // Active classes + navClass: 'active', + contentClass: 'active', + + // Nested navigation + nested: false, + nestedClass: 'active', + + // Offset & reflow + offset: 0, + reflow: false, + + // Event support + events: true + + }; + + + // + // Methods + // + + /** + * Merge two or more objects together. + * @param {Object} objects The objects to merge together + * @returns {Object} Merged values of defaults and options + */ + var extend = function () { + var merged = {}; + Array.prototype.forEach.call(arguments, (function (obj) { + for (var key in obj) { + if (!obj.hasOwnProperty(key)) return; + merged[key] = obj[key]; + } + })); + return merged; + }; + + /** + * Emit a custom event + * @param {String} type The event type + * @param {Node} elem The element to attach the event to + * @param {Object} detail Any details to pass along with the event + */ + var emitEvent = function (type, elem, detail) { + + // Make sure events are enabled + if (!detail.settings.events) return; + + // Create a new event + var event = new CustomEvent(type, { + bubbles: true, + cancelable: true, + detail: detail + }); + + // Dispatch the event + elem.dispatchEvent(event); + + }; + + /** + * Get an element's distance from the top of the Document. + * @param {Node} elem The element + * @return {Number} Distance from the top in pixels + */ + var getOffsetTop = function (elem) { + var location = 0; + if (elem.offsetParent) { + while (elem) { + location += elem.offsetTop; + elem = elem.offsetParent; + } + } + return location >= 0 ? location : 0; + }; + + /** + * Sort content from first to last in the DOM + * @param {Array} contents The content areas + */ + var sortContents = function (contents) { + if(contents) { + contents.sort((function (item1, item2) { + var offset1 = getOffsetTop(item1.content); + var offset2 = getOffsetTop(item2.content); + if (offset1 < offset2) return -1; + return 1; + })); + } + }; + + /** + * Get the offset to use for calculating position + * @param {Object} settings The settings for this instantiation + * @return {Float} The number of pixels to offset the calculations + */ + var getOffset = function (settings) { + + // if the offset is a function run it + if (typeof settings.offset === 'function') { + return parseFloat(settings.offset()); + } + + // Otherwise, return it as-is + return parseFloat(settings.offset); + + }; + + /** + * Get the document element's height + * @private + * @returns {Number} + */ + var getDocumentHeight = function () { + return Math.max( + document.body.scrollHeight, document.documentElement.scrollHeight, + document.body.offsetHeight, document.documentElement.offsetHeight, + document.body.clientHeight, document.documentElement.clientHeight + ); + }; + + /** + * Determine if an element is in view + * @param {Node} elem The element + * @param {Object} settings The settings for this instantiation + * @param {Boolean} bottom If true, check if element is above bottom of viewport instead + * @return {Boolean} Returns true if element is in the viewport + */ + var isInView = function (elem, settings, bottom) { + var bounds = elem.getBoundingClientRect(); + var offset = getOffset(settings); + if (bottom) { + return parseInt(bounds.bottom, 10) < (window.innerHeight || document.documentElement.clientHeight); + } + return parseInt(bounds.top, 10) <= offset; + }; + + /** + * Check if at the bottom of the viewport + * @return {Boolean} If true, page is at the bottom of the viewport + */ + var isAtBottom = function () { + if (window.innerHeight + window.pageYOffset >= getDocumentHeight()) return true; + return false; + }; + + /** + * Check if the last item should be used (even if not at the top of the page) + * @param {Object} item The last item + * @param {Object} settings The settings for this instantiation + * @return {Boolean} If true, use the last item + */ + var useLastItem = function (item, settings) { + if (isAtBottom() && isInView(item.content, settings, true)) return true; + return false; + }; + + /** + * Get the active content + * @param {Array} contents The content areas + * @param {Object} settings The settings for this instantiation + * @return {Object} The content area and matching navigation link + */ + var getActive = function (contents, settings) { + var last = contents[contents.length-1]; + if (useLastItem(last, settings)) return last; + for (var i = contents.length - 1; i >= 0; i--) { + if (isInView(contents[i].content, settings)) return contents[i]; + } + }; + + /** + * Deactivate parent navs in a nested navigation + * @param {Node} nav The starting navigation element + * @param {Object} settings The settings for this instantiation + */ + var deactivateNested = function (nav, settings) { + + // If nesting isn't activated, bail + if (!settings.nested) return; + + // Get the parent navigation + var li = nav.parentNode.closest('li'); + if (!li) return; + + // Remove the active class + li.classList.remove(settings.nestedClass); + + // Apply recursively to any parent navigation elements + deactivateNested(li, settings); + + }; + + /** + * Deactivate a nav and content area + * @param {Object} items The nav item and content to deactivate + * @param {Object} settings The settings for this instantiation + */ + var deactivate = function (items, settings) { + + // Make sure their are items to deactivate + if (!items) return; + + // Get the parent list item + var li = items.nav.closest('li'); + if (!li) return; + + // Remove the active class from the nav and content + li.classList.remove(settings.navClass); + items.content.classList.remove(settings.contentClass); + + // Deactivate any parent navs in a nested navigation + deactivateNested(li, settings); + + // Emit a custom event + emitEvent('gumshoeDeactivate', li, { + link: items.nav, + content: items.content, + settings: settings + }); + + }; + + + /** + * Activate parent navs in a nested navigation + * @param {Node} nav The starting navigation element + * @param {Object} settings The settings for this instantiation + */ + var activateNested = function (nav, settings) { + + // If nesting isn't activated, bail + if (!settings.nested) return; + + // Get the parent navigation + var li = nav.parentNode.closest('li'); + if (!li) return; + + // Add the active class + li.classList.add(settings.nestedClass); + + // Apply recursively to any parent navigation elements + activateNested(li, settings); + + }; + + /** + * Activate a nav and content area + * @param {Object} items The nav item and content to activate + * @param {Object} settings The settings for this instantiation + */ + var activate = function (items, settings) { + + // Make sure their are items to activate + if (!items) return; + + // Get the parent list item + var li = items.nav.closest('li'); + if (!li) return; + + // Add the active class to the nav and content + li.classList.add(settings.navClass); + items.content.classList.add(settings.contentClass); + + // Activate any parent navs in a nested navigation + activateNested(li, settings); + + // Emit a custom event + emitEvent('gumshoeActivate', li, { + link: items.nav, + content: items.content, + settings: settings + }); + + }; + + /** + * Create the Constructor object + * @param {String} selector The selector to use for navigation items + * @param {Object} options User options and settings + */ + var Constructor = function (selector, options) { + + // + // Variables + // + + var publicAPIs = {}; + var navItems, contents, current, timeout, settings; + + + // + // Methods + // + + /** + * Set variables from DOM elements + */ + publicAPIs.setup = function () { + + // Get all nav items + navItems = document.querySelectorAll(selector); + + // Create contents array + contents = []; + + // Loop through each item, get it's matching content, and push to the array + Array.prototype.forEach.call(navItems, (function (item) { + + // Get the content for the nav item + var content = document.getElementById(decodeURIComponent(item.hash.substr(1))); + if (!content) return; + + // Push to the contents array + contents.push({ + nav: item, + content: content + }); + + })); + + // Sort contents by the order they appear in the DOM + sortContents(contents); + + }; + + /** + * Detect which content is currently active + */ + publicAPIs.detect = function () { + + // Get the active content + var active = getActive(contents, settings); + + // if there's no active content, deactivate and bail + if (!active) { + if (current) { + deactivate(current, settings); + current = null; + } + return; + } + + // If the active content is the one currently active, do nothing + if (current && active.content === current.content) return; + + // Deactivate the current content and activate the new content + deactivate(current, settings); + activate(active, settings); + + // Update the currently active content + current = active; + + }; + + /** + * Detect the active content on scroll + * Debounced for performance + */ + var scrollHandler = function (event) { + + // If there's a timer, cancel it + if (timeout) { + window.cancelAnimationFrame(timeout); + } + + // Setup debounce callback + timeout = window.requestAnimationFrame(publicAPIs.detect); + + }; + + /** + * Update content sorting on resize + * Debounced for performance + */ + var resizeHandler = function (event) { + + // If there's a timer, cancel it + if (timeout) { + window.cancelAnimationFrame(timeout); + } + + // Setup debounce callback + timeout = window.requestAnimationFrame((function () { + sortContents(contents); + publicAPIs.detect(); + })); + + }; + + /** + * Destroy the current instantiation + */ + publicAPIs.destroy = function () { + + // Undo DOM changes + if (current) { + deactivate(current, settings); + } + + // Remove event listeners + window.removeEventListener('scroll', scrollHandler, false); + if (settings.reflow) { + window.removeEventListener('resize', resizeHandler, false); + } + + // Reset variables + contents = null; + navItems = null; + current = null; + timeout = null; + settings = null; + + }; + + /** + * Initialize the current instantiation + */ + var init = function () { + + // Merge user options into defaults + settings = extend(defaults, options || {}); + + // Setup variables based on the current DOM + publicAPIs.setup(); + + // Find the currently active content + publicAPIs.detect(); + + // Setup event listeners + window.addEventListener('scroll', scrollHandler, false); + if (settings.reflow) { + window.addEventListener('resize', resizeHandler, false); + } + + }; + + + // + // Initialize and return the public APIs + // + + init(); + return publicAPIs; + + }; + + + // + // Return the Constructor + // + + return Constructor; + +})); \ No newline at end of file diff --git a/en/assets/js/plugins/jquery.ba-throttle-debounce.js b/en/assets/js/plugins/jquery.ba-throttle-debounce.js new file mode 100644 index 0000000..fa30bdf --- /dev/null +++ b/en/assets/js/plugins/jquery.ba-throttle-debounce.js @@ -0,0 +1,252 @@ +/*! + * jQuery throttle / debounce - v1.1 - 3/7/2010 + * http://benalman.com/projects/jquery-throttle-debounce-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ + +// Script: jQuery throttle / debounce: Sometimes, less is more! +// +// *Version: 1.1, Last updated: 3/7/2010* +// +// Project Home - http://benalman.com/projects/jquery-throttle-debounce-plugin/ +// GitHub - http://github.com/cowboy/jquery-throttle-debounce/ +// Source - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.js +// (Minified) - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.min.js (0.7kb) +// +// About: License +// +// Copyright (c) 2010 "Cowboy" Ben Alman, +// Dual licensed under the MIT and GPL licenses. +// http://benalman.com/about/license/ +// +// About: Examples +// +// These working examples, complete with fully commented code, illustrate a few +// ways in which this plugin can be used. +// +// Throttle - http://benalman.com/code/projects/jquery-throttle-debounce/examples/throttle/ +// Debounce - http://benalman.com/code/projects/jquery-throttle-debounce/examples/debounce/ +// +// About: Support and Testing +// +// Information about what version or versions of jQuery this plugin has been +// tested with, what browsers it has been tested in, and where the unit tests +// reside (so you can test it yourself). +// +// jQuery Versions - none, 1.3.2, 1.4.2 +// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.6, Safari 3-4, Chrome 4-5, Opera 9.6-10.1. +// Unit Tests - http://benalman.com/code/projects/jquery-throttle-debounce/unit/ +// +// About: Release History +// +// 1.1 - (3/7/2010) Fixed a bug in where trailing callbacks +// executed later than they should. Reworked a fair amount of internal +// logic as well. +// 1.0 - (3/6/2010) Initial release as a stand-alone project. Migrated over +// from jquery-misc repo v0.4 to jquery-throttle repo v1.0, added the +// no_trailing throttle parameter and debounce functionality. +// +// Topic: Note for non-jQuery users +// +// jQuery isn't actually required for this plugin, because nothing internal +// uses any jQuery methods or properties. jQuery is just used as a namespace +// under which these methods can exist. +// +// Since jQuery isn't actually required for this plugin, if jQuery doesn't exist +// when this plugin is loaded, the method described below will be created in +// the `Cowboy` namespace. Usage will be exactly the same, but instead of +// $.method() or jQuery.method(), you'll need to use Cowboy.method(). + +(function(window,undefined){ + '$:nomunge'; // Used by YUI compressor. + + // Since jQuery really isn't required for this plugin, use `jQuery` as the + // namespace only if it already exists, otherwise use the `Cowboy` namespace, + // creating it if necessary. + var $ = window.jQuery || window.Cowboy || ( window.Cowboy = {} ), + + // Internal method reference. + jq_throttle; + + // Method: jQuery.throttle + // + // Throttle execution of a function. Especially useful for rate limiting + // execution of handlers on events like resize and scroll. If you want to + // rate-limit execution of a function to a single time, see the + // method. + // + // In this visualization, | is a throttled-function call and X is the actual + // callback execution: + // + // > Throttled with `no_trailing` specified as false or unspecified: + // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| + // > X X X X X X X X X X X X + // > + // > Throttled with `no_trailing` specified as true: + // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| + // > X X X X X X X X X X + // + // Usage: + // + // > var throttled = jQuery.throttle( delay, [ no_trailing, ] callback ); + // > + // > jQuery('selector').bind( 'someevent', throttled ); + // > jQuery('selector').unbind( 'someevent', throttled ); + // + // This also works in jQuery 1.4+: + // + // > jQuery('selector').bind( 'someevent', jQuery.throttle( delay, [ no_trailing, ] callback ) ); + // > jQuery('selector').unbind( 'someevent', callback ); + // + // Arguments: + // + // delay - (Number) A zero-or-greater delay in milliseconds. For event + // callbacks, values around 100 or 250 (or even higher) are most useful. + // no_trailing - (Boolean) Optional, defaults to false. If no_trailing is + // true, callback will only execute every `delay` milliseconds while the + // throttled-function is being called. If no_trailing is false or + // unspecified, callback will be executed one final time after the last + // throttled-function call. (After the throttled-function has not been + // called for `delay` milliseconds, the internal counter is reset) + // callback - (Function) A function to be executed after delay milliseconds. + // The `this` context and all arguments are passed through, as-is, to + // `callback` when the throttled-function is executed. + // + // Returns: + // + // (Function) A new, throttled, function. + + $.throttle = jq_throttle = function( delay, no_trailing, callback, debounce_mode ) { + // After wrapper has stopped being called, this timeout ensures that + // `callback` is executed at the proper times in `throttle` and `end` + // debounce modes. + var timeout_id, + + // Keep track of the last time `callback` was executed. + last_exec = 0; + + // `no_trailing` defaults to falsy. + if ( typeof no_trailing !== 'boolean' ) { + debounce_mode = callback; + callback = no_trailing; + no_trailing = undefined; + } + + // The `wrapper` function encapsulates all of the throttling / debouncing + // functionality and when executed will limit the rate at which `callback` + // is executed. + function wrapper() { + var that = this, + elapsed = +new Date() - last_exec, + args = arguments; + + // Execute `callback` and update the `last_exec` timestamp. + function exec() { + last_exec = +new Date(); + callback.apply( that, args ); + }; + + // If `debounce_mode` is true (at_begin) this is used to clear the flag + // to allow future `callback` executions. + function clear() { + timeout_id = undefined; + }; + + if ( debounce_mode && !timeout_id ) { + // Since `wrapper` is being called for the first time and + // `debounce_mode` is true (at_begin), execute `callback`. + exec(); + } + + // Clear any existing timeout. + timeout_id && clearTimeout( timeout_id ); + + if ( debounce_mode === undefined && elapsed > delay ) { + // In throttle mode, if `delay` time has been exceeded, execute + // `callback`. + exec(); + + } else if ( no_trailing !== true ) { + // In trailing throttle mode, since `delay` time has not been + // exceeded, schedule `callback` to execute `delay` ms after most + // recent execution. + // + // If `debounce_mode` is true (at_begin), schedule `clear` to execute + // after `delay` ms. + // + // If `debounce_mode` is false (at end), schedule `callback` to + // execute after `delay` ms. + timeout_id = setTimeout( debounce_mode ? clear : exec, debounce_mode === undefined ? delay - elapsed : delay ); + } + }; + + // Set the guid of `wrapper` function to the same of original callback, so + // it can be removed in jQuery 1.4+ .unbind or .die by using the original + // callback as a reference. + if ( $.guid ) { + wrapper.guid = callback.guid = callback.guid || $.guid++; + } + + // Return the wrapper function. + return wrapper; + }; + + // Method: jQuery.debounce + // + // Debounce execution of a function. Debouncing, unlike throttling, + // guarantees that a function is only executed a single time, either at the + // very beginning of a series of calls, or at the very end. If you want to + // simply rate-limit execution of a function, see the + // method. + // + // In this visualization, | is a debounced-function call and X is the actual + // callback execution: + // + // > Debounced with `at_begin` specified as false or unspecified: + // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| + // > X X + // > + // > Debounced with `at_begin` specified as true: + // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| + // > X X + // + // Usage: + // + // > var debounced = jQuery.debounce( delay, [ at_begin, ] callback ); + // > + // > jQuery('selector').bind( 'someevent', debounced ); + // > jQuery('selector').unbind( 'someevent', debounced ); + // + // This also works in jQuery 1.4+: + // + // > jQuery('selector').bind( 'someevent', jQuery.debounce( delay, [ at_begin, ] callback ) ); + // > jQuery('selector').unbind( 'someevent', callback ); + // + // Arguments: + // + // delay - (Number) A zero-or-greater delay in milliseconds. For event + // callbacks, values around 100 or 250 (or even higher) are most useful. + // at_begin - (Boolean) Optional, defaults to false. If at_begin is false or + // unspecified, callback will only be executed `delay` milliseconds after + // the last debounced-function call. If at_begin is true, callback will be + // executed only at the first debounced-function call. (After the + // throttled-function has not been called for `delay` milliseconds, the + // internal counter is reset) + // callback - (Function) A function to be executed after delay milliseconds. + // The `this` context and all arguments are passed through, as-is, to + // `callback` when the debounced-function is executed. + // + // Returns: + // + // (Function) A new, debounced, function. + + $.debounce = function( delay, at_begin, callback ) { + return callback === undefined + ? jq_throttle( delay, at_begin, false ) + : jq_throttle( delay, callback, at_begin !== false ); + }; + +})(this); diff --git a/en/assets/js/plugins/jquery.fitvids.js b/en/assets/js/plugins/jquery.fitvids.js new file mode 100644 index 0000000..5c2f85c --- /dev/null +++ b/en/assets/js/plugins/jquery.fitvids.js @@ -0,0 +1,82 @@ +/*jshint browser:true */ +/*! +* FitVids 1.1 +* +* Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com +* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/ +* Released under the WTFPL license - http://sam.zoy.org/wtfpl/ +* +*/ + +;(function( $ ){ + + 'use strict'; + + $.fn.fitVids = function( options ) { + var settings = { + customSelector: null, + ignore: null + }; + + if(!document.getElementById('fit-vids-style')) { + // appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js + var head = document.head || document.getElementsByTagName('head')[0]; + var css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}'; + var div = document.createElement("div"); + div.innerHTML = '

x

'; + head.appendChild(div.childNodes[1]); + } + + if ( options ) { + $.extend( settings, options ); + } + + return this.each(function(){ + var selectors = [ + 'iframe[src*="player.vimeo.com"]', + 'iframe[src*="youtube.com"]', + 'iframe[src*="youtube-nocookie.com"]', + 'iframe[src*="kickstarter.com"][src*="video.html"]', + 'object', + 'embed' + ]; + + if (settings.customSelector) { + selectors.push(settings.customSelector); + } + + var ignoreList = '.fitvidsignore'; + + if(settings.ignore) { + ignoreList = ignoreList + ', ' + settings.ignore; + } + + var $allVideos = $(this).find(selectors.join(',')); + $allVideos = $allVideos.not('object object'); // SwfObj conflict patch + $allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video. + + $allVideos.each(function(count){ + var $this = $(this); + if($this.parents(ignoreList).length > 0) { + return; // Disable FitVids on this video. + } + if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; } + if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width')))) + { + $this.attr('height', 9); + $this.attr('width', 16); + } + var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(), + width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(), + aspectRatio = height / width; + if(!$this.attr('id')){ + var videoID = 'fitvid' + count; + $this.attr('id', videoID); + } + $this.wrap('
').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%'); + $this.removeAttr('height').removeAttr('width'); + }); + }); + }; +// Works with either jQuery or Zepto +})( window.jQuery || window.Zepto ); \ No newline at end of file diff --git a/en/assets/js/plugins/jquery.greedy-navigation.js b/en/assets/js/plugins/jquery.greedy-navigation.js new file mode 100644 index 0000000..ce8a80c --- /dev/null +++ b/en/assets/js/plugins/jquery.greedy-navigation.js @@ -0,0 +1,128 @@ +/* +GreedyNav.js - https://github.com/lukejacksonn/GreedyNav +Licensed under the MIT license - http://opensource.org/licenses/MIT +Copyright (c) 2015 Luke Jackson http://lukejacksonn.com +*/ + +$(function() { + + var $btn = $("nav.greedy-nav .greedy-nav__toggle"); + var $vlinks = $("nav.greedy-nav .visible-links"); + var $hlinks = $("nav.greedy-nav .hidden-links"); + var $nav = $("nav.greedy-nav"); + var $logo = $('nav.greedy-nav .site-logo'); + var $logoImg = $('nav.greedy-nav .site-logo img'); + var $title = $("nav.greedy-nav .site-title"); + var $search = $('nav.greedy-nav button.search__toggle'); + + var numOfItems, totalSpace, closingTime, breakWidths; + + // This function measures both hidden and visible links and sets the navbar breakpoints + // This is called the first time the script runs and everytime the "check()" function detects a change of window width that reached a different CSS width breakpoint, which affects the size of navbar Items + // Please note that "CSS width breakpoints" (which are only 4) !== "navbar breakpoints" (which are as many as the number of items on the navbar) + function measureLinks(){ + numOfItems = 0; + totalSpace = 0; + closingTime = 1000; + breakWidths = []; + + // Adds the width of a navItem in order to create breakpoints for the navbar + function addWidth(i, w) { + totalSpace += w; + numOfItems += 1; + breakWidths.push(totalSpace); + } + + // Measures the width of hidden links by making a temporary clone of them and positioning under visible links + function hiddenWidth(obj){ + var clone = obj.clone(); + clone.css("visibility","hidden"); + $vlinks.append(clone); + addWidth(0, clone.outerWidth()); + clone.remove(); + } + // Measure both visible and hidden links widths + $vlinks.children().outerWidth(addWidth); + $hlinks.children().each(function(){hiddenWidth($(this))}); + } + // Get initial state + measureLinks(); + + var winWidth = $( window ).width(); + // Set the last measured CSS width breakpoint: 0: <768px, 1: <1024px, 2: < 1280px, 3: >= 1280px. + var lastBreakpoint = winWidth < 768 ? 0 : winWidth < 1024 ? 1 : winWidth < 1280 ? 2 : 3; + + var availableSpace, numOfVisibleItems, requiredSpace, timer; + + function check() { + + winWidth = $( window ).width(); + // Set the current CSS width breakpoint: 0: <768px, 1: <1024px, 2: < 1280px, 3: >= 1280px. + var curBreakpoint = winWidth < 768 ? 0 : winWidth < 1024 ? 1 : winWidth < 1280 ? 2 : 3; + // If current breakpoint is different from last measured breakpoint, measureLinks again + if(curBreakpoint !== lastBreakpoint) measureLinks(); + // Set the last measured CSS width breakpoint with the current breakpoint + lastBreakpoint = curBreakpoint; + + // Get instant state + numOfVisibleItems = $vlinks.children().length; + // Decrease the width of visible elements from the nav innerWidth to find out the available space for navItems + availableSpace = /* nav */ $nav.innerWidth() + - /* logo */ ($logo.length !== 0 ? $logo.outerWidth(true) : 0) + - /* title */ $title.outerWidth(true) + - /* search */ ($search.length !== 0 ? $search.outerWidth(true) : 0) + - /* toggle */ (numOfVisibleItems !== breakWidths.length ? $btn.outerWidth(true) : 0); + requiredSpace = breakWidths[numOfVisibleItems - 1]; + + // There is not enought space + if (requiredSpace > availableSpace) { + $vlinks.children().last().prependTo($hlinks); + numOfVisibleItems -= 1; + check(); + // There is more than enough space. If only one element is hidden, add the toggle width to the available space + } else if (availableSpace + (numOfVisibleItems === breakWidths.length - 1?$btn.outerWidth(true):0) > breakWidths[numOfVisibleItems]) { + $hlinks.children().first().appendTo($vlinks); + numOfVisibleItems += 1; + check(); + } + // Update the button accordingly + $btn.attr("count", numOfItems - numOfVisibleItems); + if (numOfVisibleItems === numOfItems) { + $btn.addClass('hidden'); + } else $btn.removeClass('hidden'); + } + + // Window listeners + $(window).resize(function() { + check(); + }); + + $btn.on('click', function() { + $hlinks.toggleClass('hidden'); + $(this).toggleClass('close'); + clearTimeout(timer); + }); + + $hlinks.on('mouseleave', function() { + // Mouse has left, start the timer + timer = setTimeout(function() { + $hlinks.addClass('hidden'); + $('.greedy-nav__toggle').removeClass('close'); + }, closingTime); + }).on('mouseenter', function() { + // Mouse is back, cancel the timer + clearTimeout(timer); + }) + + // check if page has a logo + if($logoImg.length !== 0){ + // check if logo is not loaded + if(!($logoImg[0].complete || $logoImg[0].naturalWidth !== 0)){ + // if logo is not loaded wait for logo to load or fail to check + $logoImg.one("load error", check); + // if logo is already loaded just check + } else check(); + // if page does not have a logo just check + } else check(); + +}); diff --git a/en/assets/js/plugins/jquery.magnific-popup.js b/en/assets/js/plugins/jquery.magnific-popup.js new file mode 100644 index 0000000..7d1d197 --- /dev/null +++ b/en/assets/js/plugins/jquery.magnific-popup.js @@ -0,0 +1,1860 @@ +/*! Magnific Popup - v1.1.0 - 2016-02-20 +* http://dimsemenov.com/plugins/magnific-popup/ +* Copyright (c) 2016 Dmitry Semenov; */ +;(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS + factory(require('jquery')); + } else { + // Browser globals + factory(window.jQuery || window.Zepto); + } + }(function($) { + + /*>>core*/ + /** + * + * Magnific Popup Core JS file + * + */ + + + /** + * Private static constants + */ + var CLOSE_EVENT = 'Close', + BEFORE_CLOSE_EVENT = 'BeforeClose', + AFTER_CLOSE_EVENT = 'AfterClose', + BEFORE_APPEND_EVENT = 'BeforeAppend', + MARKUP_PARSE_EVENT = 'MarkupParse', + OPEN_EVENT = 'Open', + CHANGE_EVENT = 'Change', + NS = 'mfp', + EVENT_NS = '.' + NS, + READY_CLASS = 'mfp-ready', + REMOVING_CLASS = 'mfp-removing', + PREVENT_CLOSE_CLASS = 'mfp-prevent-close'; + + + /** + * Private vars + */ + /*jshint -W079 */ + var mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this' + MagnificPopup = function(){}, + _isJQ = !!(window.jQuery), + _prevStatus, + _window = $(window), + _document, + _prevContentType, + _wrapClasses, + _currPopupType; + + + /** + * Private functions + */ + var _mfpOn = function(name, f) { + mfp.ev.on(NS + name + EVENT_NS, f); + }, + _getEl = function(className, appendTo, html, raw) { + var el = document.createElement('div'); + el.className = 'mfp-'+className; + if(html) { + el.innerHTML = html; + } + if(!raw) { + el = $(el); + if(appendTo) { + el.appendTo(appendTo); + } + } else if(appendTo) { + appendTo.appendChild(el); + } + return el; + }, + _mfpTrigger = function(e, data) { + mfp.ev.triggerHandler(NS + e, data); + + if(mfp.st.callbacks) { + // converts "mfpEventName" to "eventName" callback and triggers it if it's present + e = e.charAt(0).toLowerCase() + e.slice(1); + if(mfp.st.callbacks[e]) { + mfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]); + } + } + }, + _getCloseBtn = function(type) { + if(type !== _currPopupType || !mfp.currTemplate.closeBtn) { + mfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) ); + _currPopupType = type; + } + return mfp.currTemplate.closeBtn; + }, + // Initialize Magnific Popup only when called at least once + _checkInstance = function() { + if(!$.magnificPopup.instance) { + /*jshint -W020 */ + mfp = new MagnificPopup(); + mfp.init(); + $.magnificPopup.instance = mfp; + } + }, + // CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr + supportsTransitions = function() { + var s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist + v = ['ms','O','Moz','Webkit']; // 'v' for vendor + + if( s['transition'] !== undefined ) { + return true; + } + + while( v.length ) { + if( v.pop() + 'Transition' in s ) { + return true; + } + } + + return false; + }; + + + + /** + * Public functions + */ + MagnificPopup.prototype = { + + constructor: MagnificPopup, + + /** + * Initializes Magnific Popup plugin. + * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed + */ + init: function() { + var appVersion = navigator.appVersion; + mfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener; + mfp.isAndroid = (/android/gi).test(appVersion); + mfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion); + mfp.supportsTransition = supportsTransitions(); + + // We disable fixed positioned lightbox on devices that don't handle it nicely. + // If you know a better way of detecting this - let me know. + mfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) ); + _document = $(document); + + mfp.popupsCache = {}; + }, + + /** + * Opens popup + * @param data [description] + */ + open: function(data) { + + var i; + + if(data.isObj === false) { + // convert jQuery collection to array to avoid conflicts later + mfp.items = data.items.toArray(); + + mfp.index = 0; + var items = data.items, + item; + for(i = 0; i < items.length; i++) { + item = items[i]; + if(item.parsed) { + item = item.el[0]; + } + if(item === data.el[0]) { + mfp.index = i; + break; + } + } + } else { + mfp.items = $.isArray(data.items) ? data.items : [data.items]; + mfp.index = data.index || 0; + } + + // if popup is already opened - we just update the content + if(mfp.isOpen) { + mfp.updateItemHTML(); + return; + } + + mfp.types = []; + _wrapClasses = ''; + if(data.mainEl && data.mainEl.length) { + mfp.ev = data.mainEl.eq(0); + } else { + mfp.ev = _document; + } + + if(data.key) { + if(!mfp.popupsCache[data.key]) { + mfp.popupsCache[data.key] = {}; + } + mfp.currTemplate = mfp.popupsCache[data.key]; + } else { + mfp.currTemplate = {}; + } + + + + mfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); + mfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos; + + if(mfp.st.modal) { + mfp.st.closeOnContentClick = false; + mfp.st.closeOnBgClick = false; + mfp.st.showCloseBtn = false; + mfp.st.enableEscapeKey = false; + } + + + // Building markup + // main containers are created only once + if(!mfp.bgOverlay) { + + // Dark overlay + mfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() { + mfp.close(); + }); + + mfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) { + if(mfp._checkIfClose(e.target)) { + mfp.close(); + } + }); + + mfp.container = _getEl('container', mfp.wrap); + } + + mfp.contentContainer = _getEl('content'); + if(mfp.st.preloader) { + mfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading); + } + + + // Initializing modules + var modules = $.magnificPopup.modules; + for(i = 0; i < modules.length; i++) { + var n = modules[i]; + n = n.charAt(0).toUpperCase() + n.slice(1); + mfp['init'+n].call(mfp); + } + _mfpTrigger('BeforeOpen'); + + + if(mfp.st.showCloseBtn) { + // Close button + if(!mfp.st.closeBtnInside) { + mfp.wrap.append( _getCloseBtn() ); + } else { + _mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) { + values.close_replaceWith = _getCloseBtn(item.type); + }); + _wrapClasses += ' mfp-close-btn-in'; + } + } + + if(mfp.st.alignTop) { + _wrapClasses += ' mfp-align-top'; + } + + + + if(mfp.fixedContentPos) { + mfp.wrap.css({ + overflow: mfp.st.overflowY, + overflowX: 'hidden', + overflowY: mfp.st.overflowY + }); + } else { + mfp.wrap.css({ + top: _window.scrollTop(), + position: 'absolute' + }); + } + if( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) { + mfp.bgOverlay.css({ + height: _document.height(), + position: 'absolute' + }); + } + + + + if(mfp.st.enableEscapeKey) { + // Close on ESC key + _document.on('keyup' + EVENT_NS, function(e) { + if(e.keyCode === 27) { + mfp.close(); + } + }); + } + + _window.on('resize' + EVENT_NS, function() { + mfp.updateSize(); + }); + + + if(!mfp.st.closeOnContentClick) { + _wrapClasses += ' mfp-auto-cursor'; + } + + if(_wrapClasses) + mfp.wrap.addClass(_wrapClasses); + + + // this triggers recalculation of layout, so we get it once to not to trigger twice + var windowHeight = mfp.wH = _window.height(); + + + var windowStyles = {}; + + if( mfp.fixedContentPos ) { + if(mfp._hasScrollBar(windowHeight)){ + var s = mfp._getScrollbarSize(); + if(s) { + windowStyles.marginRight = s; + } + } + } + + if(mfp.fixedContentPos) { + if(!mfp.isIE7) { + windowStyles.overflow = 'hidden'; + } else { + // ie7 double-scroll bug + $('body, html').css('overflow', 'hidden'); + } + } + + + + var classesToadd = mfp.st.mainClass; + if(mfp.isIE7) { + classesToadd += ' mfp-ie7'; + } + if(classesToadd) { + mfp._addClassToMFP( classesToadd ); + } + + // add content + mfp.updateItemHTML(); + + _mfpTrigger('BuildControls'); + + // remove scrollbar, add margin e.t.c + $('html').css(windowStyles); + + // add everything to DOM + mfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) ); + + // Save last focused element + mfp._lastFocusedEl = document.activeElement; + + // Wait for next cycle to allow CSS transition + setTimeout(function() { + + if(mfp.content) { + mfp._addClassToMFP(READY_CLASS); + mfp._setFocus(); + } else { + // if content is not defined (not loaded e.t.c) we add class only for BG + mfp.bgOverlay.addClass(READY_CLASS); + } + + // Trap the focus in popup + _document.on('focusin' + EVENT_NS, mfp._onFocusIn); + + }, 16); + + mfp.isOpen = true; + mfp.updateSize(windowHeight); + _mfpTrigger(OPEN_EVENT); + + return data; + }, + + /** + * Closes the popup + */ + close: function() { + if(!mfp.isOpen) return; + _mfpTrigger(BEFORE_CLOSE_EVENT); + + mfp.isOpen = false; + // for CSS3 animation + if(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition ) { + mfp._addClassToMFP(REMOVING_CLASS); + setTimeout(function() { + mfp._close(); + }, mfp.st.removalDelay); + } else { + mfp._close(); + } + }, + + /** + * Helper for close() function + */ + _close: function() { + _mfpTrigger(CLOSE_EVENT); + + var classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' '; + + mfp.bgOverlay.detach(); + mfp.wrap.detach(); + mfp.container.empty(); + + if(mfp.st.mainClass) { + classesToRemove += mfp.st.mainClass + ' '; + } + + mfp._removeClassFromMFP(classesToRemove); + + if(mfp.fixedContentPos) { + var windowStyles = {marginRight: ''}; + if(mfp.isIE7) { + $('body, html').css('overflow', ''); + } else { + windowStyles.overflow = ''; + } + $('html').css(windowStyles); + } + + _document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS); + mfp.ev.off(EVENT_NS); + + // clean up DOM elements that aren't removed + mfp.wrap.attr('class', 'mfp-wrap').removeAttr('style'); + mfp.bgOverlay.attr('class', 'mfp-bg'); + mfp.container.attr('class', 'mfp-container'); + + // remove close button from target element + if(mfp.st.showCloseBtn && + (!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) { + if(mfp.currTemplate.closeBtn) + mfp.currTemplate.closeBtn.detach(); + } + + + if(mfp.st.autoFocusLast && mfp._lastFocusedEl) { + $(mfp._lastFocusedEl).focus(); // put tab focus back + } + mfp.currItem = null; + mfp.content = null; + mfp.currTemplate = null; + mfp.prevHeight = 0; + + _mfpTrigger(AFTER_CLOSE_EVENT); + }, + + updateSize: function(winHeight) { + + if(mfp.isIOS) { + // fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2 + var zoomLevel = document.documentElement.clientWidth / window.innerWidth; + var height = window.innerHeight * zoomLevel; + mfp.wrap.css('height', height); + mfp.wH = height; + } else { + mfp.wH = winHeight || _window.height(); + } + // Fixes #84: popup incorrectly positioned with position:relative on body + if(!mfp.fixedContentPos) { + mfp.wrap.css('height', mfp.wH); + } + + _mfpTrigger('Resize'); + + }, + + /** + * Set content of popup based on current index + */ + updateItemHTML: function() { + var item = mfp.items[mfp.index]; + + // Detach and perform modifications + mfp.contentContainer.detach(); + + if(mfp.content) + mfp.content.detach(); + + if(!item.parsed) { + item = mfp.parseEl( mfp.index ); + } + + var type = item.type; + + _mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]); + // BeforeChange event works like so: + // _mfpOn('BeforeChange', function(e, prevType, newType) { }); + + mfp.currItem = item; + + if(!mfp.currTemplate[type]) { + var markup = mfp.st[type] ? mfp.st[type].markup : false; + + // allows to modify markup + _mfpTrigger('FirstMarkupParse', markup); + + if(markup) { + mfp.currTemplate[type] = $(markup); + } else { + // if there is no markup found we just define that template is parsed + mfp.currTemplate[type] = true; + } + } + + if(_prevContentType && _prevContentType !== item.type) { + mfp.container.removeClass('mfp-'+_prevContentType+'-holder'); + } + + var newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]); + mfp.appendContent(newContent, type); + + item.preloaded = true; + + _mfpTrigger(CHANGE_EVENT, item); + _prevContentType = item.type; + + // Append container back after its content changed + mfp.container.prepend(mfp.contentContainer); + + _mfpTrigger('AfterChange'); + }, + + + /** + * Set HTML content of popup + */ + appendContent: function(newContent, type) { + mfp.content = newContent; + + if(newContent) { + if(mfp.st.showCloseBtn && mfp.st.closeBtnInside && + mfp.currTemplate[type] === true) { + // if there is no markup, we just append close button element inside + if(!mfp.content.find('.mfp-close').length) { + mfp.content.append(_getCloseBtn()); + } + } else { + mfp.content = newContent; + } + } else { + mfp.content = ''; + } + + _mfpTrigger(BEFORE_APPEND_EVENT); + mfp.container.addClass('mfp-'+type+'-holder'); + + mfp.contentContainer.append(mfp.content); + }, + + + /** + * Creates Magnific Popup data object based on given data + * @param {int} index Index of item to parse + */ + parseEl: function(index) { + var item = mfp.items[index], + type; + + if(item.tagName) { + item = { el: $(item) }; + } else { + type = item.type; + item = { data: item, src: item.src }; + } + + if(item.el) { + var types = mfp.types; + + // check for 'mfp-TYPE' class + for(var i = 0; i < types.length; i++) { + if( item.el.hasClass('mfp-'+types[i]) ) { + type = types[i]; + break; + } + } + + item.src = item.el.attr('data-mfp-src'); + if(!item.src) { + item.src = item.el.attr('href'); + } + } + + item.type = type || mfp.st.type || 'inline'; + item.index = index; + item.parsed = true; + mfp.items[index] = item; + _mfpTrigger('ElementParse', item); + + return mfp.items[index]; + }, + + + /** + * Initializes single popup or a group of popups + */ + addGroup: function(el, options) { + var eHandler = function(e) { + e.mfpEl = this; + mfp._openClick(e, el, options); + }; + + if(!options) { + options = {}; + } + + var eName = 'click.magnificPopup'; + options.mainEl = el; + + if(options.items) { + options.isObj = true; + el.off(eName).on(eName, eHandler); + } else { + options.isObj = false; + if(options.delegate) { + el.off(eName).on(eName, options.delegate , eHandler); + } else { + options.items = el; + el.off(eName).on(eName, eHandler); + } + } + }, + _openClick: function(e, el, options) { + var midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick; + + + if(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) { + return; + } + + var disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn; + + if(disableOn) { + if($.isFunction(disableOn)) { + if( !disableOn.call(mfp) ) { + return true; + } + } else { // else it's number + if( _window.width() < disableOn ) { + return true; + } + } + } + + if(e.type) { + e.preventDefault(); + + // This will prevent popup from closing if element is inside and popup is already opened + if(mfp.isOpen) { + e.stopPropagation(); + } + } + + options.el = $(e.mfpEl); + if(options.delegate) { + options.items = el.find(options.delegate); + } + mfp.open(options); + }, + + + /** + * Updates text on preloader + */ + updateStatus: function(status, text) { + + if(mfp.preloader) { + if(_prevStatus !== status) { + mfp.container.removeClass('mfp-s-'+_prevStatus); + } + + if(!text && status === 'loading') { + text = mfp.st.tLoading; + } + + var data = { + status: status, + text: text + }; + // allows to modify status + _mfpTrigger('UpdateStatus', data); + + status = data.status; + text = data.text; + + mfp.preloader.html(text); + + mfp.preloader.find('a').on('click', function(e) { + e.stopImmediatePropagation(); + }); + + mfp.container.addClass('mfp-s-'+status); + _prevStatus = status; + } + }, + + + /* + "Private" helpers that aren't private at all + */ + // Check to close popup or not + // "target" is an element that was clicked + _checkIfClose: function(target) { + + if($(target).hasClass(PREVENT_CLOSE_CLASS)) { + return; + } + + var closeOnContent = mfp.st.closeOnContentClick; + var closeOnBg = mfp.st.closeOnBgClick; + + if(closeOnContent && closeOnBg) { + return true; + } else { + + // We close the popup if click is on close button or on preloader. Or if there is no content. + if(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) { + return true; + } + + // if click is outside the content + if( (target !== mfp.content[0] && !$.contains(mfp.content[0], target)) ) { + if(closeOnBg) { + // last check, if the clicked element is in DOM, (in case it's removed onclick) + if( $.contains(document, target) ) { + return true; + } + } + } else if(closeOnContent) { + return true; + } + + } + return false; + }, + _addClassToMFP: function(cName) { + mfp.bgOverlay.addClass(cName); + mfp.wrap.addClass(cName); + }, + _removeClassFromMFP: function(cName) { + this.bgOverlay.removeClass(cName); + mfp.wrap.removeClass(cName); + }, + _hasScrollBar: function(winHeight) { + return ( (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) ); + }, + _setFocus: function() { + (mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus(); + }, + _onFocusIn: function(e) { + if( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) { + mfp._setFocus(); + return false; + } + }, + _parseMarkup: function(template, values, item) { + var arr; + if(item.data) { + values = $.extend(item.data, values); + } + _mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] ); + + $.each(values, function(key, value) { + if(value === undefined || value === false) { + return true; + } + arr = key.split('_'); + if(arr.length > 1) { + var el = template.find(EVENT_NS + '-'+arr[0]); + + if(el.length > 0) { + var attr = arr[1]; + if(attr === 'replaceWith') { + if(el[0] !== value[0]) { + el.replaceWith(value); + } + } else if(attr === 'img') { + if(el.is('img')) { + el.attr('src', value); + } else { + el.replaceWith( $('').attr('src', value).attr('class', el.attr('class')) ); + } + } else { + el.attr(arr[1], value); + } + } + + } else { + template.find(EVENT_NS + '-'+key).html(value); + } + }); + }, + + _getScrollbarSize: function() { + // thx David + if(mfp.scrollbarSize === undefined) { + var scrollDiv = document.createElement("div"); + scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;'; + document.body.appendChild(scrollDiv); + mfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + } + return mfp.scrollbarSize; + } + + }; /* MagnificPopup core prototype end */ + + + + + /** + * Public static functions + */ + $.magnificPopup = { + instance: null, + proto: MagnificPopup.prototype, + modules: [], + + open: function(options, index) { + _checkInstance(); + + if(!options) { + options = {}; + } else { + options = $.extend(true, {}, options); + } + + options.isObj = true; + options.index = index || 0; + return this.instance.open(options); + }, + + close: function() { + return $.magnificPopup.instance && $.magnificPopup.instance.close(); + }, + + registerModule: function(name, module) { + if(module.options) { + $.magnificPopup.defaults[name] = module.options; + } + $.extend(this.proto, module.proto); + this.modules.push(name); + }, + + defaults: { + + // Info about options is in docs: + // http://dimsemenov.com/plugins/magnific-popup/documentation.html#options + + disableOn: 0, + + key: null, + + midClick: false, + + mainClass: '', + + preloader: true, + + focus: '', // CSS selector of input to focus after popup is opened + + closeOnContentClick: false, + + closeOnBgClick: true, + + closeBtnInside: true, + + showCloseBtn: true, + + enableEscapeKey: true, + + modal: false, + + alignTop: false, + + removalDelay: 0, + + prependTo: null, + + fixedContentPos: 'auto', + + fixedBgPos: 'auto', + + overflowY: 'auto', + + closeMarkup: '', + + tClose: 'Close (Esc)', + + tLoading: 'Loading...', + + autoFocusLast: true + + } + }; + + + + $.fn.magnificPopup = function(options) { + _checkInstance(); + + var jqEl = $(this); + + // We call some API method of first param is a string + if (typeof options === "string" ) { + + if(options === 'open') { + var items, + itemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup, + index = parseInt(arguments[1], 10) || 0; + + if(itemOpts.items) { + items = itemOpts.items[index]; + } else { + items = jqEl; + if(itemOpts.delegate) { + items = items.find(itemOpts.delegate); + } + items = items.eq( index ); + } + mfp._openClick({mfpEl:items}, jqEl, itemOpts); + } else { + if(mfp.isOpen) + mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1)); + } + + } else { + // clone options obj + options = $.extend(true, {}, options); + + /* + * As Zepto doesn't support .data() method for objects + * and it works only in normal browsers + * we assign "options" object directly to the DOM element. FTW! + */ + if(_isJQ) { + jqEl.data('magnificPopup', options); + } else { + jqEl[0].magnificPopup = options; + } + + mfp.addGroup(jqEl, options); + + } + return jqEl; + }; + + /*>>core*/ + + /*>>inline*/ + + var INLINE_NS = 'inline', + _hiddenClass, + _inlinePlaceholder, + _lastInlineElement, + _putInlineElementsBack = function() { + if(_lastInlineElement) { + _inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach(); + _lastInlineElement = null; + } + }; + + $.magnificPopup.registerModule(INLINE_NS, { + options: { + hiddenClass: 'hide', // will be appended with `mfp-` prefix + markup: '', + tNotFound: 'Content not found' + }, + proto: { + + initInline: function() { + mfp.types.push(INLINE_NS); + + _mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() { + _putInlineElementsBack(); + }); + }, + + getInline: function(item, template) { + + _putInlineElementsBack(); + + if(item.src) { + var inlineSt = mfp.st.inline, + el = $(item.src); + + if(el.length) { + + // If target element has parent - we replace it with placeholder and put it back after popup is closed + var parent = el[0].parentNode; + if(parent && parent.tagName) { + if(!_inlinePlaceholder) { + _hiddenClass = inlineSt.hiddenClass; + _inlinePlaceholder = _getEl(_hiddenClass); + _hiddenClass = 'mfp-'+_hiddenClass; + } + // replace target inline element with placeholder + _lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass); + } + + mfp.updateStatus('ready'); + } else { + mfp.updateStatus('error', inlineSt.tNotFound); + el = $('
'); + } + + item.inlineElement = el; + return el; + } + + mfp.updateStatus('ready'); + mfp._parseMarkup(template, {}, item); + return template; + } + } + }); + + /*>>inline*/ + + /*>>ajax*/ + var AJAX_NS = 'ajax', + _ajaxCur, + _removeAjaxCursor = function() { + if(_ajaxCur) { + $(document.body).removeClass(_ajaxCur); + } + }, + _destroyAjaxRequest = function() { + _removeAjaxCursor(); + if(mfp.req) { + mfp.req.abort(); + } + }; + + $.magnificPopup.registerModule(AJAX_NS, { + + options: { + settings: null, + cursor: 'mfp-ajax-cur', + tError: 'The content could not be loaded.' + }, + + proto: { + initAjax: function() { + mfp.types.push(AJAX_NS); + _ajaxCur = mfp.st.ajax.cursor; + + _mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest); + _mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest); + }, + getAjax: function(item) { + + if(_ajaxCur) { + $(document.body).addClass(_ajaxCur); + } + + mfp.updateStatus('loading'); + + var opts = $.extend({ + url: item.src, + success: function(data, textStatus, jqXHR) { + var temp = { + data:data, + xhr:jqXHR + }; + + _mfpTrigger('ParseAjax', temp); + + mfp.appendContent( $(temp.data), AJAX_NS ); + + item.finished = true; + + _removeAjaxCursor(); + + mfp._setFocus(); + + setTimeout(function() { + mfp.wrap.addClass(READY_CLASS); + }, 16); + + mfp.updateStatus('ready'); + + _mfpTrigger('AjaxContentAdded'); + }, + error: function() { + _removeAjaxCursor(); + item.finished = item.loadError = true; + mfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src)); + } + }, mfp.st.ajax.settings); + + mfp.req = $.ajax(opts); + + return ''; + } + } + }); + + /*>>ajax*/ + + /*>>image*/ + var _imgInterval, + _getTitle = function(item) { + if(item.data && item.data.title !== undefined) + return item.data.title; + + var src = mfp.st.image.titleSrc; + + if(src) { + if($.isFunction(src)) { + return src.call(mfp, item); + } else if(item.el) { + return item.el.attr(src) || ''; + } + } + return ''; + }; + + $.magnificPopup.registerModule('image', { + + options: { + markup: '
'+ + '
'+ + '
'+ + '
'+ + '
'+ + '
'+ + '
'+ + '
'+ + '
'+ + '
'+ + '
'+ + '
', + cursor: 'mfp-zoom-out-cur', + titleSrc: 'title', + verticalFit: true, + tError: 'The image could not be loaded.' + }, + + proto: { + initImage: function() { + var imgSt = mfp.st.image, + ns = '.image'; + + mfp.types.push('image'); + + _mfpOn(OPEN_EVENT+ns, function() { + if(mfp.currItem.type === 'image' && imgSt.cursor) { + $(document.body).addClass(imgSt.cursor); + } + }); + + _mfpOn(CLOSE_EVENT+ns, function() { + if(imgSt.cursor) { + $(document.body).removeClass(imgSt.cursor); + } + _window.off('resize' + EVENT_NS); + }); + + _mfpOn('Resize'+ns, mfp.resizeImage); + if(mfp.isLowIE) { + _mfpOn('AfterChange', mfp.resizeImage); + } + }, + resizeImage: function() { + var item = mfp.currItem; + if(!item || !item.img) return; + + if(mfp.st.image.verticalFit) { + var decr = 0; + // fix box-sizing in ie7/8 + if(mfp.isLowIE) { + decr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10); + } + item.img.css('max-height', mfp.wH-decr); + } + }, + _onImageHasSize: function(item) { + if(item.img) { + + item.hasSize = true; + + if(_imgInterval) { + clearInterval(_imgInterval); + } + + item.isCheckingImgSize = false; + + _mfpTrigger('ImageHasSize', item); + + if(item.imgHidden) { + if(mfp.content) + mfp.content.removeClass('mfp-loading'); + + item.imgHidden = false; + } + + } + }, + + /** + * Function that loops until the image has size to display elements that rely on it asap + */ + findImageSize: function(item) { + + var counter = 0, + img = item.img[0], + mfpSetInterval = function(delay) { + + if(_imgInterval) { + clearInterval(_imgInterval); + } + // decelerating interval that checks for size of an image + _imgInterval = setInterval(function() { + if(img.naturalWidth > 0) { + mfp._onImageHasSize(item); + return; + } + + if(counter > 200) { + clearInterval(_imgInterval); + } + + counter++; + if(counter === 3) { + mfpSetInterval(10); + } else if(counter === 40) { + mfpSetInterval(50); + } else if(counter === 100) { + mfpSetInterval(500); + } + }, delay); + }; + + mfpSetInterval(1); + }, + + getImage: function(item, template) { + + var guard = 0, + + // image load complete handler + onLoadComplete = function() { + if(item) { + if (item.img[0].complete) { + item.img.off('.mfploader'); + + if(item === mfp.currItem){ + mfp._onImageHasSize(item); + + mfp.updateStatus('ready'); + } + + item.hasSize = true; + item.loaded = true; + + _mfpTrigger('ImageLoadComplete'); + + } + else { + // if image complete check fails 200 times (20 sec), we assume that there was an error. + guard++; + if(guard < 200) { + setTimeout(onLoadComplete,100); + } else { + onLoadError(); + } + } + } + }, + + // image error handler + onLoadError = function() { + if(item) { + item.img.off('.mfploader'); + if(item === mfp.currItem){ + mfp._onImageHasSize(item); + mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) ); + } + + item.hasSize = true; + item.loaded = true; + item.loadError = true; + } + }, + imgSt = mfp.st.image; + + + var el = template.find('.mfp-img'); + if(el.length) { + var img = document.createElement('img'); + img.className = 'mfp-img'; + if(item.el && item.el.find('img').length) { + img.alt = item.el.find('img').attr('alt'); + } + item.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError); + img.src = item.src; + + // without clone() "error" event is not firing when IMG is replaced by new IMG + // TODO: find a way to avoid such cloning + if(el.is('img')) { + item.img = item.img.clone(); + } + + img = item.img[0]; + if(img.naturalWidth > 0) { + item.hasSize = true; + } else if(!img.width) { + item.hasSize = false; + } + } + + mfp._parseMarkup(template, { + title: _getTitle(item), + img_replaceWith: item.img + }, item); + + mfp.resizeImage(); + + if(item.hasSize) { + if(_imgInterval) clearInterval(_imgInterval); + + if(item.loadError) { + template.addClass('mfp-loading'); + mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) ); + } else { + template.removeClass('mfp-loading'); + mfp.updateStatus('ready'); + } + return template; + } + + mfp.updateStatus('loading'); + item.loading = true; + + if(!item.hasSize) { + item.imgHidden = true; + template.addClass('mfp-loading'); + mfp.findImageSize(item); + } + + return template; + } + } + }); + + /*>>image*/ + + /*>>zoom*/ + var hasMozTransform, + getHasMozTransform = function() { + if(hasMozTransform === undefined) { + hasMozTransform = document.createElement('p').style.MozTransform !== undefined; + } + return hasMozTransform; + }; + + $.magnificPopup.registerModule('zoom', { + + options: { + enabled: false, + easing: 'ease-in-out', + duration: 300, + opener: function(element) { + return element.is('img') ? element : element.find('img'); + } + }, + + proto: { + + initZoom: function() { + var zoomSt = mfp.st.zoom, + ns = '.zoom', + image; + + if(!zoomSt.enabled || !mfp.supportsTransition) { + return; + } + + var duration = zoomSt.duration, + getElToAnimate = function(image) { + var newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'), + transition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing, + cssObj = { + position: 'fixed', + zIndex: 9999, + left: 0, + top: 0, + '-webkit-backface-visibility': 'hidden' + }, + t = 'transition'; + + cssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition; + + newImg.css(cssObj); + return newImg; + }, + showMainContent = function() { + mfp.content.css('visibility', 'visible'); + }, + openTimeout, + animatedImg; + + _mfpOn('BuildControls'+ns, function() { + if(mfp._allowZoom()) { + + clearTimeout(openTimeout); + mfp.content.css('visibility', 'hidden'); + + // Basically, all code below does is clones existing image, puts in on top of the current one and animated it + + image = mfp._getItemToZoom(); + + if(!image) { + showMainContent(); + return; + } + + animatedImg = getElToAnimate(image); + + animatedImg.css( mfp._getOffset() ); + + mfp.wrap.append(animatedImg); + + openTimeout = setTimeout(function() { + animatedImg.css( mfp._getOffset( true ) ); + openTimeout = setTimeout(function() { + + showMainContent(); + + setTimeout(function() { + animatedImg.remove(); + image = animatedImg = null; + _mfpTrigger('ZoomAnimationEnded'); + }, 16); // avoid blink when switching images + + }, duration); // this timeout equals animation duration + + }, 16); // by adding this timeout we avoid short glitch at the beginning of animation + + + // Lots of timeouts... + } + }); + _mfpOn(BEFORE_CLOSE_EVENT+ns, function() { + if(mfp._allowZoom()) { + + clearTimeout(openTimeout); + + mfp.st.removalDelay = duration; + + if(!image) { + image = mfp._getItemToZoom(); + if(!image) { + return; + } + animatedImg = getElToAnimate(image); + } + + animatedImg.css( mfp._getOffset(true) ); + mfp.wrap.append(animatedImg); + mfp.content.css('visibility', 'hidden'); + + setTimeout(function() { + animatedImg.css( mfp._getOffset() ); + }, 16); + } + + }); + + _mfpOn(CLOSE_EVENT+ns, function() { + if(mfp._allowZoom()) { + showMainContent(); + if(animatedImg) { + animatedImg.remove(); + } + image = null; + } + }); + }, + + _allowZoom: function() { + return mfp.currItem.type === 'image'; + }, + + _getItemToZoom: function() { + if(mfp.currItem.hasSize) { + return mfp.currItem.img; + } else { + return false; + } + }, + + // Get element postion relative to viewport + _getOffset: function(isLarge) { + var el; + if(isLarge) { + el = mfp.currItem.img; + } else { + el = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem); + } + + var offset = el.offset(); + var paddingTop = parseInt(el.css('padding-top'),10); + var paddingBottom = parseInt(el.css('padding-bottom'),10); + offset.top -= ( $(window).scrollTop() - paddingTop ); + + + /* + + Animating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa. + + */ + var obj = { + width: el.width(), + // fix Zepto height+padding issue + height: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop + }; + + // I hate to do this, but there is no another option + if( getHasMozTransform() ) { + obj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)'; + } else { + obj.left = offset.left; + obj.top = offset.top; + } + return obj; + } + + } + }); + + + + /*>>zoom*/ + + /*>>iframe*/ + + var IFRAME_NS = 'iframe', + _emptyPage = '//about:blank', + + _fixIframeBugs = function(isShowing) { + if(mfp.currTemplate[IFRAME_NS]) { + var el = mfp.currTemplate[IFRAME_NS].find('iframe'); + if(el.length) { + // reset src after the popup is closed to avoid "video keeps playing after popup is closed" bug + if(!isShowing) { + el[0].src = _emptyPage; + } + + // IE8 black screen bug fix + if(mfp.isIE8) { + el.css('display', isShowing ? 'block' : 'none'); + } + } + } + }; + + $.magnificPopup.registerModule(IFRAME_NS, { + + options: { + markup: '
'+ + '
'+ + ''+ + '
', + + srcAction: 'iframe_src', + + // we don't care and support only one default type of URL by default + patterns: { + youtube: { + index: 'youtube.com', + id: 'v=', + src: '//www.youtube.com/embed/%id%?autoplay=1' + }, + vimeo: { + index: 'vimeo.com/', + id: '/', + src: '//player.vimeo.com/video/%id%?autoplay=1' + }, + gmaps: { + index: '//maps.google.', + src: '%id%&output=embed' + } + } + }, + + proto: { + initIframe: function() { + mfp.types.push(IFRAME_NS); + + _mfpOn('BeforeChange', function(e, prevType, newType) { + if(prevType !== newType) { + if(prevType === IFRAME_NS) { + _fixIframeBugs(); // iframe if removed + } else if(newType === IFRAME_NS) { + _fixIframeBugs(true); // iframe is showing + } + }// else { + // iframe source is switched, don't do anything + //} + }); + + _mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() { + _fixIframeBugs(); + }); + }, + + getIframe: function(item, template) { + var embedSrc = item.src; + var iframeSt = mfp.st.iframe; + + $.each(iframeSt.patterns, function() { + if(embedSrc.indexOf( this.index ) > -1) { + if(this.id) { + if(typeof this.id === 'string') { + embedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length); + } else { + embedSrc = this.id.call( this, embedSrc ); + } + } + embedSrc = this.src.replace('%id%', embedSrc ); + return false; // break; + } + }); + + var dataObj = {}; + if(iframeSt.srcAction) { + dataObj[iframeSt.srcAction] = embedSrc; + } + mfp._parseMarkup(template, dataObj, item); + + mfp.updateStatus('ready'); + + return template; + } + } + }); + + + + /*>>iframe*/ + + /*>>gallery*/ + /** + * Get looped index depending on number of slides + */ + var _getLoopedId = function(index) { + var numSlides = mfp.items.length; + if(index > numSlides - 1) { + return index - numSlides; + } else if(index < 0) { + return numSlides + index; + } + return index; + }, + _replaceCurrTotal = function(text, curr, total) { + return text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total); + }; + + $.magnificPopup.registerModule('gallery', { + + options: { + enabled: false, + arrowMarkup: '', + preload: [0,2], + navigateByImgClick: true, + arrows: true, + + tPrev: 'Previous (Left arrow key)', + tNext: 'Next (Right arrow key)', + tCounter: '%curr% of %total%' + }, + + proto: { + initGallery: function() { + + var gSt = mfp.st.gallery, + ns = '.mfp-gallery'; + + mfp.direction = true; // true - next, false - prev + + if(!gSt || !gSt.enabled ) return false; + + _wrapClasses += ' mfp-gallery'; + + _mfpOn(OPEN_EVENT+ns, function() { + + if(gSt.navigateByImgClick) { + mfp.wrap.on('click'+ns, '.mfp-img', function() { + if(mfp.items.length > 1) { + mfp.next(); + return false; + } + }); + } + + _document.on('keydown'+ns, function(e) { + if (e.keyCode === 37) { + mfp.prev(); + } else if (e.keyCode === 39) { + mfp.next(); + } + }); + }); + + _mfpOn('UpdateStatus'+ns, function(e, data) { + if(data.text) { + data.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length); + } + }); + + _mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) { + var l = mfp.items.length; + values.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : ''; + }); + + _mfpOn('BuildControls' + ns, function() { + if(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) { + var markup = gSt.arrowMarkup, + arrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS), + arrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS); + + arrowLeft.click(function() { + mfp.prev(); + }); + arrowRight.click(function() { + mfp.next(); + }); + + mfp.container.append(arrowLeft.add(arrowRight)); + } + }); + + _mfpOn(CHANGE_EVENT+ns, function() { + if(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout); + + mfp._preloadTimeout = setTimeout(function() { + mfp.preloadNearbyImages(); + mfp._preloadTimeout = null; + }, 16); + }); + + + _mfpOn(CLOSE_EVENT+ns, function() { + _document.off(ns); + mfp.wrap.off('click'+ns); + mfp.arrowRight = mfp.arrowLeft = null; + }); + + }, + next: function() { + mfp.direction = true; + mfp.index = _getLoopedId(mfp.index + 1); + mfp.updateItemHTML(); + }, + prev: function() { + mfp.direction = false; + mfp.index = _getLoopedId(mfp.index - 1); + mfp.updateItemHTML(); + }, + goTo: function(newIndex) { + mfp.direction = (newIndex >= mfp.index); + mfp.index = newIndex; + mfp.updateItemHTML(); + }, + preloadNearbyImages: function() { + var p = mfp.st.gallery.preload, + preloadBefore = Math.min(p[0], mfp.items.length), + preloadAfter = Math.min(p[1], mfp.items.length), + i; + + for(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) { + mfp._preloadItem(mfp.index+i); + } + for(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) { + mfp._preloadItem(mfp.index-i); + } + }, + _preloadItem: function(index) { + index = _getLoopedId(index); + + if(mfp.items[index].preloaded) { + return; + } + + var item = mfp.items[index]; + if(!item.parsed) { + item = mfp.parseEl( index ); + } + + _mfpTrigger('LazyLoad', item); + + if(item.type === 'image') { + item.img = $('').on('load.mfploader', function() { + item.hasSize = true; + }).on('error.mfploader', function() { + item.hasSize = true; + item.loadError = true; + _mfpTrigger('LazyLoadError', item); + }).attr('src', item.src); + } + + + item.preloaded = true; + } + } + }); + + /*>>gallery*/ + + /*>>retina*/ + + var RETINA_NS = 'retina'; + + $.magnificPopup.registerModule(RETINA_NS, { + options: { + replaceSrc: function(item) { + return item.src.replace(/\.\w+$/, function(m) { return '@2x' + m; }); + }, + ratio: 1 // Function or number. Set to 1 to disable. + }, + proto: { + initRetina: function() { + if(window.devicePixelRatio > 1) { + + var st = mfp.st.retina, + ratio = st.ratio; + + ratio = !isNaN(ratio) ? ratio : ratio(); + + if(ratio > 1) { + _mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) { + item.img.css({ + 'max-width': item.img[0].naturalWidth / ratio, + 'width': '100%' + }); + }); + _mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) { + item.src = st.replaceSrc(item, ratio); + }); + } + } + + } + } + }); + + /*>>retina*/ + _checkInstance(); })); \ No newline at end of file diff --git a/en/assets/js/plugins/smooth-scroll.js b/en/assets/js/plugins/smooth-scroll.js new file mode 100644 index 0000000..c4179a7 --- /dev/null +++ b/en/assets/js/plugins/smooth-scroll.js @@ -0,0 +1,650 @@ +/*! + * smooth-scroll v16.1.2 + * Animate scrolling to anchor links + * (c) 2020 Chris Ferdinandi + * MIT License + * http://github.com/cferdinandi/smooth-scroll + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + define([], (function () { + return factory(root); + })); + } else if (typeof exports === 'object') { + module.exports = factory(root); + } else { + root.SmoothScroll = factory(root); + } +})(typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : this, (function (window) { + + 'use strict'; + + // + // Default settings + // + + var defaults = { + + // Selectors + ignore: '[data-scroll-ignore]', + header: null, + topOnEmptyHash: true, + + // Speed & Duration + speed: 500, + speedAsDuration: false, + durationMax: null, + durationMin: null, + clip: true, + offset: 0, + + // Easing + easing: 'easeInOutCubic', + customEasing: null, + + // History + updateURL: true, + popstate: true, + + // Custom Events + emitEvents: true + + }; + + + // + // Utility Methods + // + + /** + * Check if browser supports required methods + * @return {Boolean} Returns true if all required methods are supported + */ + var supports = function () { + return ( + 'querySelector' in document && + 'addEventListener' in window && + 'requestAnimationFrame' in window && + 'closest' in window.Element.prototype + ); + }; + + /** + * Merge two or more objects together. + * @param {Object} objects The objects to merge together + * @returns {Object} Merged values of defaults and options + */ + var extend = function () { + var merged = {}; + Array.prototype.forEach.call(arguments, (function (obj) { + for (var key in obj) { + if (!obj.hasOwnProperty(key)) return; + merged[key] = obj[key]; + } + })); + return merged; + }; + + /** + * Check to see if user prefers reduced motion + * @param {Object} settings Script settings + */ + var reduceMotion = function () { + if ('matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches) { + return true; + } + return false; + }; + + /** + * Get the height of an element. + * @param {Node} elem The element to get the height of + * @return {Number} The element's height in pixels + */ + var getHeight = function (elem) { + return parseInt(window.getComputedStyle(elem).height, 10); + }; + + /** + * Escape special characters for use with querySelector + * @author Mathias Bynens + * @link https://github.com/mathiasbynens/CSS.escape + * @param {String} id The anchor ID to escape + */ + var escapeCharacters = function (id) { + + // Remove leading hash + if (id.charAt(0) === '#') { + id = id.substr(1); + } + + var string = String(id); + var length = string.length; + var index = -1; + var codeUnit; + var result = ''; + var firstCodeUnit = string.charCodeAt(0); + while (++index < length) { + codeUnit = string.charCodeAt(index); + // Note: there’s no need to special-case astral symbols, surrogate + // pairs, or lone surrogates. + + // If the character is NULL (U+0000), then throw an + // `InvalidCharacterError` exception and terminate these steps. + if (codeUnit === 0x0000) { + throw new InvalidCharacterError( + 'Invalid character: the input contains U+0000.' + ); + } + + if ( + // If the character is in the range [\1-\1F] (U+0001 to U+001F) or is + // U+007F, […] + (codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F || + // If the character is the first character and is in the range [0-9] + // (U+0030 to U+0039), […] + (index === 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) || + // If the character is the second character and is in the range [0-9] + // (U+0030 to U+0039) and the first character is a `-` (U+002D), […] + ( + index === 1 && + codeUnit >= 0x0030 && codeUnit <= 0x0039 && + firstCodeUnit === 0x002D + ) + ) { + // http://dev.w3.org/csswg/cssom/#escape-a-character-as-code-point + result += '\\' + codeUnit.toString(16) + ' '; + continue; + } + + // If the character is not handled by one of the above rules and is + // greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or + // is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to + // U+005A), or [a-z] (U+0061 to U+007A), […] + if ( + codeUnit >= 0x0080 || + codeUnit === 0x002D || + codeUnit === 0x005F || + codeUnit >= 0x0030 && codeUnit <= 0x0039 || + codeUnit >= 0x0041 && codeUnit <= 0x005A || + codeUnit >= 0x0061 && codeUnit <= 0x007A + ) { + // the character itself + result += string.charAt(index); + continue; + } + + // Otherwise, the escaped character. + // http://dev.w3.org/csswg/cssom/#escape-a-character + result += '\\' + string.charAt(index); + + } + + // Return sanitized hash + return '#' + result; + + }; + + /** + * Calculate the easing pattern + * @link https://gist.github.com/gre/1650294 + * @param {String} type Easing pattern + * @param {Number} time Time animation should take to complete + * @returns {Number} + */ + var easingPattern = function (settings, time) { + var pattern; + + // Default Easing Patterns + if (settings.easing === 'easeInQuad') pattern = time * time; // accelerating from zero velocity + if (settings.easing === 'easeOutQuad') pattern = time * (2 - time); // decelerating to zero velocity + if (settings.easing === 'easeInOutQuad') pattern = time < 0.5 ? 2 * time * time : -1 + (4 - 2 * time) * time; // acceleration until halfway, then deceleration + if (settings.easing === 'easeInCubic') pattern = time * time * time; // accelerating from zero velocity + if (settings.easing === 'easeOutCubic') pattern = (--time) * time * time + 1; // decelerating to zero velocity + if (settings.easing === 'easeInOutCubic') pattern = time < 0.5 ? 4 * time * time * time : (time - 1) * (2 * time - 2) * (2 * time - 2) + 1; // acceleration until halfway, then deceleration + if (settings.easing === 'easeInQuart') pattern = time * time * time * time; // accelerating from zero velocity + if (settings.easing === 'easeOutQuart') pattern = 1 - (--time) * time * time * time; // decelerating to zero velocity + if (settings.easing === 'easeInOutQuart') pattern = time < 0.5 ? 8 * time * time * time * time : 1 - 8 * (--time) * time * time * time; // acceleration until halfway, then deceleration + if (settings.easing === 'easeInQuint') pattern = time * time * time * time * time; // accelerating from zero velocity + if (settings.easing === 'easeOutQuint') pattern = 1 + (--time) * time * time * time * time; // decelerating to zero velocity + if (settings.easing === 'easeInOutQuint') pattern = time < 0.5 ? 16 * time * time * time * time * time : 1 + 16 * (--time) * time * time * time * time; // acceleration until halfway, then deceleration + + // Custom Easing Patterns + if (!!settings.customEasing) pattern = settings.customEasing(time); + + return pattern || time; // no easing, no acceleration + }; + + /** + * Determine the document's height + * @returns {Number} + */ + var getDocumentHeight = function () { + return Math.max( + document.body.scrollHeight, document.documentElement.scrollHeight, + document.body.offsetHeight, document.documentElement.offsetHeight, + document.body.clientHeight, document.documentElement.clientHeight + ); + }; + + /** + * Calculate how far to scroll + * Clip support added by robjtede - https://github.com/cferdinandi/smooth-scroll/issues/405 + * @param {Element} anchor The anchor element to scroll to + * @param {Number} headerHeight Height of a fixed header, if any + * @param {Number} offset Number of pixels by which to offset scroll + * @param {Boolean} clip If true, adjust scroll distance to prevent abrupt stops near the bottom of the page + * @returns {Number} + */ + var getEndLocation = function (anchor, headerHeight, offset, clip) { + var location = 0; + if (anchor.offsetParent) { + do { + location += anchor.offsetTop; + anchor = anchor.offsetParent; + } while (anchor); + } + location = Math.max(location - headerHeight - offset, 0); + if (clip) { + location = Math.min(location, getDocumentHeight() - window.innerHeight); + } + return location; + }; + + /** + * Get the height of the fixed header + * @param {Node} header The header + * @return {Number} The height of the header + */ + var getHeaderHeight = function (header) { + return !header ? 0 : (getHeight(header) + header.offsetTop); + }; + + /** + * Calculate the speed to use for the animation + * @param {Number} distance The distance to travel + * @param {Object} settings The plugin settings + * @return {Number} How fast to animate + */ + var getSpeed = function (distance, settings) { + var speed = settings.speedAsDuration ? settings.speed : Math.abs(distance / 1000 * settings.speed); + if (settings.durationMax && speed > settings.durationMax) return settings.durationMax; + if (settings.durationMin && speed < settings.durationMin) return settings.durationMin; + return parseInt(speed, 10); + }; + + var setHistory = function (options) { + + // Make sure this should run + if (!history.replaceState || !options.updateURL || history.state) return; + + // Get the hash to use + var hash = window.location.hash; + hash = hash ? hash : ''; + + // Set a default history + history.replaceState( + { + smoothScroll: JSON.stringify(options), + anchor: hash ? hash : window.pageYOffset + }, + document.title, + hash ? hash : window.location.href + ); + + }; + + /** + * Update the URL + * @param {Node} anchor The anchor that was scrolled to + * @param {Boolean} isNum If true, anchor is a number + * @param {Object} options Settings for Smooth Scroll + */ + var updateURL = function (anchor, isNum, options) { + + // Bail if the anchor is a number + if (isNum) return; + + // Verify that pushState is supported and the updateURL option is enabled + if (!history.pushState || !options.updateURL) return; + + // Update URL + history.pushState( + { + smoothScroll: JSON.stringify(options), + anchor: anchor.id + }, + document.title, + anchor === document.documentElement ? '#top' : '#' + anchor.id + ); + + }; + + /** + * Bring the anchored element into focus + * @param {Node} anchor The anchor element + * @param {Number} endLocation The end location to scroll to + * @param {Boolean} isNum If true, scroll is to a position rather than an element + */ + var adjustFocus = function (anchor, endLocation, isNum) { + + // Is scrolling to top of page, blur + if (anchor === 0) { + document.body.focus(); + } + + // Don't run if scrolling to a number on the page + if (isNum) return; + + // Otherwise, bring anchor element into focus + anchor.focus(); + if (document.activeElement !== anchor) { + anchor.setAttribute('tabindex', '-1'); + anchor.focus(); + anchor.style.outline = 'none'; + } + window.scrollTo(0 , endLocation); + + }; + + /** + * Emit a custom event + * @param {String} type The event type + * @param {Object} options The settings object + * @param {Node} anchor The anchor element + * @param {Node} toggle The toggle element + */ + var emitEvent = function (type, options, anchor, toggle) { + if (!options.emitEvents || typeof window.CustomEvent !== 'function') return; + var event = new CustomEvent(type, { + bubbles: true, + detail: { + anchor: anchor, + toggle: toggle + } + }); + document.dispatchEvent(event); + }; + + + // + // SmoothScroll Constructor + // + + var SmoothScroll = function (selector, options) { + + // + // Variables + // + + var smoothScroll = {}; // Object for public APIs + var settings, anchor, toggle, fixedHeader, eventTimeout, animationInterval; + + + // + // Methods + // + + /** + * Cancel a scroll-in-progress + */ + smoothScroll.cancelScroll = function (noEvent) { + cancelAnimationFrame(animationInterval); + animationInterval = null; + if (noEvent) return; + emitEvent('scrollCancel', settings); + }; + + /** + * Start/stop the scrolling animation + * @param {Node|Number} anchor The element or position to scroll to + * @param {Element} toggle The element that toggled the scroll event + * @param {Object} options + */ + smoothScroll.animateScroll = function (anchor, toggle, options) { + + // Cancel any in progress scrolls + smoothScroll.cancelScroll(); + + // Local settings + var _settings = extend(settings || defaults, options || {}); // Merge user options with defaults + + // Selectors and variables + var isNum = Object.prototype.toString.call(anchor) === '[object Number]' ? true : false; + var anchorElem = isNum || !anchor.tagName ? null : anchor; + if (!isNum && !anchorElem) return; + var startLocation = window.pageYOffset; // Current location on the page + if (_settings.header && !fixedHeader) { + // Get the fixed header if not already set + fixedHeader = document.querySelector(_settings.header); + } + var headerHeight = getHeaderHeight(fixedHeader); + var endLocation = isNum ? anchor : getEndLocation(anchorElem, headerHeight, parseInt((typeof _settings.offset === 'function' ? _settings.offset(anchor, toggle) : _settings.offset), 10), _settings.clip); // Location to scroll to + var distance = endLocation - startLocation; // distance to travel + var documentHeight = getDocumentHeight(); + var timeLapsed = 0; + var speed = getSpeed(distance, _settings); + var start, percentage, position; + + /** + * Stop the scroll animation when it reaches its target (or the bottom/top of page) + * @param {Number} position Current position on the page + * @param {Number} endLocation Scroll to location + * @param {Number} animationInterval How much to scroll on this loop + */ + var stopAnimateScroll = function (position, endLocation) { + + // Get the current location + var currentLocation = window.pageYOffset; + + // Check if the end location has been reached yet (or we've hit the end of the document) + if (position == endLocation || currentLocation == endLocation || ((startLocation < endLocation && window.innerHeight + currentLocation) >= documentHeight)) { + + // Clear the animation timer + smoothScroll.cancelScroll(true); + + // Bring the anchored element into focus + adjustFocus(anchor, endLocation, isNum); + + // Emit a custom event + emitEvent('scrollStop', _settings, anchor, toggle); + + // Reset start + start = null; + animationInterval = null; + + return true; + + } + }; + + /** + * Loop scrolling animation + */ + var loopAnimateScroll = function (timestamp) { + if (!start) { start = timestamp; } + timeLapsed += timestamp - start; + percentage = speed === 0 ? 0 : (timeLapsed / speed); + percentage = (percentage > 1) ? 1 : percentage; + position = startLocation + (distance * easingPattern(_settings, percentage)); + window.scrollTo(0, Math.floor(position)); + if (!stopAnimateScroll(position, endLocation)) { + animationInterval = window.requestAnimationFrame(loopAnimateScroll); + start = timestamp; + } + }; + + /** + * Reset position to fix weird iOS bug + * @link https://github.com/cferdinandi/smooth-scroll/issues/45 + */ + if (window.pageYOffset === 0) { + window.scrollTo(0, 0); + } + + // Update the URL + updateURL(anchor, isNum, _settings); + + // If the user prefers reduced motion, jump to location + if (reduceMotion()) { + window.scrollTo(0, Math.floor(endLocation)); + return; + } + + // Emit a custom event + emitEvent('scrollStart', _settings, anchor, toggle); + + // Start scrolling animation + smoothScroll.cancelScroll(true); + window.requestAnimationFrame(loopAnimateScroll); + + }; + + /** + * If smooth scroll element clicked, animate scroll + */ + var clickHandler = function (event) { + + // Don't run if event was canceled but still bubbled up + // By @mgreter - https://github.com/cferdinandi/smooth-scroll/pull/462/ + if (event.defaultPrevented) return; + + // Don't run if right-click or command/control + click or shift + click + if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey) return; + + // Check if event.target has closest() method + // By @totegi - https://github.com/cferdinandi/smooth-scroll/pull/401/ + if (!('closest' in event.target)) return; + + // Check if a smooth scroll link was clicked + toggle = event.target.closest(selector); + if (!toggle || toggle.tagName.toLowerCase() !== 'a' || event.target.closest(settings.ignore)) return; + + // Only run if link is an anchor and points to the current page + if (toggle.hostname !== window.location.hostname || toggle.pathname !== window.location.pathname || !/#/.test(toggle.href)) return; + + // Get an escaped version of the hash + var hash; + try { + hash = escapeCharacters(decodeURIComponent(toggle.hash)); + } catch(e) { + hash = escapeCharacters(toggle.hash); + } + + // Get the anchored element + var anchor; + if (hash === '#') { + if (!settings.topOnEmptyHash) return; + anchor = document.documentElement; + } else { + anchor = document.querySelector(hash); + } + anchor = !anchor && hash === '#top' ? document.documentElement : anchor; + + // If anchored element exists, scroll to it + if (!anchor) return; + event.preventDefault(); + setHistory(settings); + smoothScroll.animateScroll(anchor, toggle); + + }; + + /** + * Animate scroll on popstate events + */ + var popstateHandler = function (event) { + + // Stop if history.state doesn't exist (ex. if clicking on a broken anchor link). + // fixes `Cannot read property 'smoothScroll' of null` error getting thrown. + if (history.state === null) return; + + // Only run if state is a popstate record for this instantiation + if (!history.state.smoothScroll || history.state.smoothScroll !== JSON.stringify(settings)) return; + + // Only run if state includes an anchor + + // if (!history.state.anchor && history.state.anchor !== 0) return; + + // Get the anchor + var anchor = history.state.anchor; + if (typeof anchor === 'string' && anchor) { + anchor = document.querySelector(escapeCharacters(history.state.anchor)); + if (!anchor) return; + } + + // Animate scroll to anchor link + smoothScroll.animateScroll(anchor, null, {updateURL: false}); + + }; + + /** + * Destroy the current initialization. + */ + smoothScroll.destroy = function () { + + // If plugin isn't already initialized, stop + if (!settings) return; + + // Remove event listeners + document.removeEventListener('click', clickHandler, false); + window.removeEventListener('popstate', popstateHandler, false); + + // Cancel any scrolls-in-progress + smoothScroll.cancelScroll(); + + // Reset variables + settings = null; + anchor = null; + toggle = null; + fixedHeader = null; + eventTimeout = null; + animationInterval = null; + + }; + + /** + * Initialize Smooth Scroll + * @param {Object} options User settings + */ + var init = function () { + + // feature test + if (!supports()) throw 'Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.'; + + // Destroy any existing initializations + smoothScroll.destroy(); + + // Selectors and variables + settings = extend(defaults, options || {}); // Merge user options with defaults + fixedHeader = settings.header ? document.querySelector(settings.header) : null; // Get the fixed header + + // When a toggle is clicked, run the click handler + document.addEventListener('click', clickHandler, false); + + // If updateURL and popState are enabled, listen for pop events + if (settings.updateURL && settings.popstate) { + window.addEventListener('popstate', popstateHandler, false); + } + + }; + + + // + // Initialize plugin + // + + init(); + + + // + // Public APIs + // + + return smoothScroll; + + }; + + return SmoothScroll; + +})); diff --git a/en/assets/js/vendor/jquery/jquery-3.6.0.js b/en/assets/js/vendor/jquery/jquery-3.6.0.js new file mode 100644 index 0000000..fc6c299 --- /dev/null +++ b/en/assets/js/vendor/jquery/jquery-3.6.0.js @@ -0,0 +1,10881 @@ +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Chair of Mechatronics + + +

+ +

Here you can find current topics for projects and theses at our chair. +

+ + + + + +

+ + View Chair + +

+ +
+ + + Photo credit: Peter Krönes + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + +

We are very happy to work with students and would like to briefly introduce you to the subject areas in which we would particularly appreciate your support. Feel free to drop by with your ideas and concepts and together we will look for ways in which you can complete your final theses, seminar papers, research and project modules with us. We are always available to answer your questions.

+ +
+

Filter:

+

+ + Seminar Bachelor + + + Seminar Master + +

+

+ + Research Module + + + Project Module + +

+

+ + Bachelor Thesis + + + Master Thesis + +

+

+ + Research Assistant Jobs + +

+

+ Reset Filter +

+
+ + + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/en/feed.xml b/en/feed.xml new file mode 100644 index 0000000..7f69813 --- /dev/null +++ b/en/feed.xml @@ -0,0 +1 @@ +Jekyll2024-09-11T12:08:38-05:00https://una-auxme.github.io/feed.xmlAuxMeDer Lehrstuhl für Mechatronik zeichnet sich durch eine wegweisende Verknüpfung von physikalischem Verständnis, mechatronischem Engineering und Scientific Machine Learning aus. Unsere Expertise liegt darin, komplexe Interaktionen zwischen mechanischen, elektronischen und weiteren Subsystemen zu verstehen, zu modellieren und zu optimieren. \ No newline at end of file diff --git a/en/fm.html b/en/fm.html new file mode 100644 index 0000000..1632a9f --- /dev/null +++ b/en/fm.html @@ -0,0 +1,302 @@ + + + + + + + +Chair of Mechatronics - AuxMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Chair of Mechatronics + + +

+ +

Here you can find current topics for projects and theses at our chair. +

+ + + + + +

+ + View Chair + +

+ +
+ + + Photo credit: Peter Krönes + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + +

We are very happy to work with students and would like to briefly introduce you to the subject areas in which we would particularly appreciate your support. Feel free to drop by with your ideas and concepts and together we will look for ways in which you can complete your final theses, seminar papers, research and project modules with us. We are always available to answer your questions.

+ +
+

Filter:

+

+ + Seminar Bachelor + + + Seminar Master + +

+

+ + Research Module + + + Project Module + +

+

+ + Bachelor Thesis + + + Master Thesis + +

+

+ + Research Assistant Jobs + +

+

+ Reset Filter +

+
+ + + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/en/hiwi.html b/en/hiwi.html new file mode 100644 index 0000000..02b05bf --- /dev/null +++ b/en/hiwi.html @@ -0,0 +1,302 @@ + + + + + + + +Chair of Mechatronics - AuxMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Chair of Mechatronics + + +

+ +

Here you can find current topics for projects and theses at our chair. +

+ + + + + +

+ + View Chair + +

+ +
+ + + Photo credit: Peter Krönes + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + +

We are very happy to work with students and would like to briefly introduce you to the subject areas in which we would particularly appreciate your support. Feel free to drop by with your ideas and concepts and together we will look for ways in which you can complete your final theses, seminar papers, research and project modules with us. We are always available to answer your questions.

+ +
+

Filter:

+

+ + Seminar Bachelor + + + Seminar Master + +

+

+ + Research Module + + + Project Module + +

+

+ + Bachelor Thesis + + + Master Thesis + +

+

+ + Research Assistant Jobs + +

+

+ Reset Filter +

+
+ + + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/en/index.html b/en/index.html new file mode 100644 index 0000000..c80ef16 --- /dev/null +++ b/en/index.html @@ -0,0 +1,312 @@ + + + + + + + +Chair of Mechatronics - AuxMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Chair of Mechatronics + + +

+ +

Here you can find current topics for projects and theses at our chair. +

+ + + + + +

+ + View Chair + +

+ +
+ + + Photo credit: Peter Krönes + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + +

We are very happy to work with students and would like to briefly introduce you to the subject areas in which we would particularly appreciate your support. Feel free to drop by with your ideas and concepts and together we will look for ways in which you can complete your final theses, seminar papers, research and project modules with us. We are always available to answer your questions.

+ +
+

Filter:

+

+ + Seminar Bachelor + + + Seminar Master + +

+

+ + Research Module + + + Project Module + +

+

+ + Bachelor Thesis + + + Master Thesis + +

+

+ + Research Assistant Jobs + +

+

+ Reset Filter +

+
+ + + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/en/ma.html b/en/ma.html new file mode 100644 index 0000000..8e1edda --- /dev/null +++ b/en/ma.html @@ -0,0 +1,302 @@ + + + + + + + +Chair of Mechatronics - AuxMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Chair of Mechatronics + + +

+ +

Here you can find current topics for projects and theses at our chair. +

+ + + + + +

+ + View Chair + +

+ +
+ + + Photo credit: Peter Krönes + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + +

We are very happy to work with students and would like to briefly introduce you to the subject areas in which we would particularly appreciate your support. Feel free to drop by with your ideas and concepts and together we will look for ways in which you can complete your final theses, seminar papers, research and project modules with us. We are always available to answer your questions.

+ +
+

Filter:

+

+ + Seminar Bachelor + + + Seminar Master + +

+

+ + Research Module + + + Project Module + +

+

+ + Bachelor Thesis + + + Master Thesis + +

+

+ + Research Assistant Jobs + +

+

+ Reset Filter +

+
+ + + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/en/pm.html b/en/pm.html new file mode 100644 index 0000000..6fdf6a7 --- /dev/null +++ b/en/pm.html @@ -0,0 +1,302 @@ + + + + + + + +Chair of Mechatronics - AuxMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Chair of Mechatronics + + +

+ +

Here you can find current topics for projects and theses at our chair. +

+ + + + + +

+ + View Chair + +

+ +
+ + + Photo credit: Peter Krönes + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + +

We are very happy to work with students and would like to briefly introduce you to the subject areas in which we would particularly appreciate your support. Feel free to drop by with your ideas and concepts and together we will look for ways in which you can complete your final theses, seminar papers, research and project modules with us. We are always available to answer your questions.

+ +
+

Filter:

+

+ + Seminar Bachelor + + + Seminar Master + +

+

+ + Research Module + + + Project Module + +

+

+ + Bachelor Thesis + + + Master Thesis + +

+

+ + Research Assistant Jobs + +

+

+ Reset Filter +

+
+ + + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/en/sb.html b/en/sb.html new file mode 100644 index 0000000..ab0c910 --- /dev/null +++ b/en/sb.html @@ -0,0 +1,302 @@ + + + + + + + +Chair of Mechatronics - AuxMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Chair of Mechatronics + + +

+ +

Here you can find current topics for projects and theses at our chair. +

+ + + + + +

+ + View Chair + +

+ +
+ + + Photo credit: Peter Krönes + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + +

We are very happy to work with students and would like to briefly introduce you to the subject areas in which we would particularly appreciate your support. Feel free to drop by with your ideas and concepts and together we will look for ways in which you can complete your final theses, seminar papers, research and project modules with us. We are always available to answer your questions.

+ +
+

Filter:

+

+ + Seminar Bachelor + + + Seminar Master + +

+

+ + Research Module + + + Project Module + +

+

+ + Bachelor Thesis + + + Master Thesis + +

+

+ + Research Assistant Jobs + +

+

+ Reset Filter +

+
+ + + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/en/sm.html b/en/sm.html new file mode 100644 index 0000000..859a05a --- /dev/null +++ b/en/sm.html @@ -0,0 +1,302 @@ + + + + + + + +Chair of Mechatronics - AuxMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Chair of Mechatronics + + +

+ +

Here you can find current topics for projects and theses at our chair. +

+ + + + + +

+ + View Chair + +

+ +
+ + + Photo credit: Peter Krönes + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + +

We are very happy to work with students and would like to briefly introduce you to the subject areas in which we would particularly appreciate your support. Feel free to drop by with your ideas and concepts and together we will look for ways in which you can complete your final theses, seminar papers, research and project modules with us. We are always available to answer your questions.

+ +
+

Filter:

+

+ + Seminar Bachelor + + + Seminar Master + +

+

+ + Research Module + + + Project Module + +

+

+ + Bachelor Thesis + + + Master Thesis + +

+

+ + Research Assistant Jobs + +

+

+ Reset Filter +

+
+ + + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/feed.xml b/feed.xml new file mode 100644 index 0000000..22af0b6 --- /dev/null +++ b/feed.xml @@ -0,0 +1 @@ +Jekyll2024-09-11T12:08:34-05:00https://una-auxme.github.io/feed.xmlAuxMeDer Lehrstuhl für Mechatronik zeichnet sich durch eine wegweisende Verknüpfung von physikalischem Verständnis, mechatronischem Engineering und Scientific Machine Learning aus. Unsere Expertise liegt darin, komplexe Interaktionen zwischen mechanischen, elektronischen und weiteren Subsystemen zu verstehen, zu modellieren und zu optimieren. \ No newline at end of file diff --git a/fm.html b/fm.html new file mode 100644 index 0000000..7ed01da --- /dev/null +++ b/fm.html @@ -0,0 +1,302 @@ + + + + + + + +Lehrstuhl für Mechatronik - AuxMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Lehrstuhl für Mechatronik + + +

+ +

Hier findet ihr aktuelle Themen für studentische Arbeiten an unserem Lehrstuhl. +

+ + + + + +

+ + Zum Lehrstuhl + +

+ +
+ + + Photo credit: Peter Krönes + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + +

Wir freuen uns sehr über die Zusammenarbeit mit den Studenten und wir möchten euch kurz vorstellen, in welchen Themengebieten wir uns besonders über eure Unterstützung freuen würden. Kommt gerne mit euren Ideen und Vorstellungen vorbei und wir suchen gemeinsam nach Möglichkeiten, wie ihr eure Abschlussarbeiten, Seminararbeiten, Forschungs- und Projektmodule bei uns erledigen könnt. Für Fragen stehen wir euch jederzeit zur Verfügung.

+ +
+

Filter:

+

+ + Seminararbeit Bachelor + + + Seminararbeit Master + +

+

+ + Forschungsmodul + + + Projektmodul + +

+

+ + Bachelorarbeit + + + Masterarbeit + +

+

+ + Hiwi-Stelle + +

+

+ Filter zurücksetzen +

+
+ + + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/hiwi.html b/hiwi.html new file mode 100644 index 0000000..6b79c88 --- /dev/null +++ b/hiwi.html @@ -0,0 +1,350 @@ + + + + + + + +Lehrstuhl für Mechatronik - AuxMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Lehrstuhl für Mechatronik + + +

+ +

Hier findet ihr aktuelle Themen für studentische Arbeiten an unserem Lehrstuhl. +

+ + + + + +

+ + Zum Lehrstuhl + +

+ +
+ + + Photo credit: Peter Krönes + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + +

Wir freuen uns sehr über die Zusammenarbeit mit den Studenten und wir möchten euch kurz vorstellen, in welchen Themengebieten wir uns besonders über eure Unterstützung freuen würden. Kommt gerne mit euren Ideen und Vorstellungen vorbei und wir suchen gemeinsam nach Möglichkeiten, wie ihr eure Abschlussarbeiten, Seminararbeiten, Forschungs- und Projektmodule bei uns erledigen könnt. Für Fragen stehen wir euch jederzeit zur Verfügung.

+ +
+

Filter:

+

+ + Seminararbeit Bachelor + + + Seminararbeit Master + +

+

+ + Forschungsmodul + + + Projektmodul + +

+

+ + Bachelorarbeit + + + Masterarbeit + +

+

+ + Hiwi-Stelle + +

+

+ Filter zurücksetzen +

+
+ +

Praktikum Autonomes Fahren Refactoring

+ +
+
+
+
+ +
+ + © Universität Augsburg +
+ + +

Tags:

+
    + + + + + +
  • Projektmodul
  • + + + + + + + + + + + + +
  • Hiwi-Stelle
  • + + +
+ + Kontakt + +
+
+

Das Praktikum Autonomes Fahren findet in jedem Wintersemester statt. Wenn du bereits an dem Projekt gearbeitet hast, kannst du auch im Sommersemester weiter daran arbeiten. PAF

+
+
+
+
+ + + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..3bb2f5c --- /dev/null +++ b/index.html @@ -0,0 +1,543 @@ + + + + + + + +Lehrstuhl für Mechatronik - AuxMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Lehrstuhl für Mechatronik + + +

+ +

Hier findet ihr aktuelle Themen für studentische Arbeiten an unserem Lehrstuhl. +

+ + + + + +

+ + Zum Lehrstuhl + +

+ +
+ + + Photo credit: Peter Krönes + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + +

Wir freuen uns sehr über die Zusammenarbeit mit den Studenten und wir möchten euch kurz vorstellen, in welchen Themengebieten wir uns besonders über eure Unterstützung freuen würden. Kommt gerne mit euren Ideen und Vorstellungen vorbei und wir suchen gemeinsam nach Möglichkeiten, wie ihr eure Abschlussarbeiten, Seminararbeiten, Forschungs- und Projektmodule bei uns erledigen könnt. Für Fragen stehen wir euch jederzeit zur Verfügung.

+ +
+

Filter:

+

+ + Seminararbeit Bachelor + + + Seminararbeit Master + +

+

+ + Forschungsmodul + + + Projektmodul + +

+

+ + Bachelorarbeit + + + Masterarbeit + +

+

+ + Hiwi-Stelle + +

+

+ Filter zurücksetzen +

+
+ +

Praktikum Autonomes Fahren Refactoring

+ +
+
+
+
+ +
+ + © Universität Augsburg +
+ + +

Tags:

+
    + + + + + +
  • Projektmodul
  • + + + + + + + + + + + + +
  • Hiwi-Stelle
  • + + +
+ + Kontakt + +
+
+

Das Praktikum Autonomes Fahren findet in jedem Wintersemester statt. Wenn du bereits an dem Projekt gearbeitet hast, kannst du auch im Sommersemester weiter daran arbeiten. PAF

+
+
+
+
+ +

Anpassung vonDiffusion Modelle

+ +
+
+
+
+ +
+ + © Universität Augsburg +
+ + +

Tags:

+
    + + + + + +
  • Projektmodul
  • + + + + + + + + + + + +
  • Masterarbeit
  • + + + +
+ + Kontakt + +
+
+

Du findest generative Modelle wie Stable Diffusion oder DALL-E, die anhand von Text detailreiche Bilder erzeugen können, spannend und hast Interesse, dich in aktuelle Machine-Learning-Themen einzuarbeiten?

+ +

In dieser Arbeit hast du die Möglichkeit, Methoden wie Stable Diffusion und SV3D genauer kennenzulernen. Stable Diffusion ermöglicht es, Bilder anhand von Text oder anderen Vorgaben zu erzeugen. Bei der Methode SV3D wird ein Bild als Vorgabe verwendet, um mehrere Bilder zu generieren, die das Objekt aus verschiedenen Perspektiven zeigen. Mithilfe dieser Perspektiven können anschließend 3D-Objekte erzeugt werden. In der Arbeit sollen Möglichkeiten untersucht werden, wie Diffsuion Modelle auf andere Eingaben, wie zum Beispiel Zeichnungen, konditioniert werden können und wie sich diese Eingaben auf die Generierung auswirken. Abhängig von der Art der Arbeit können verschiedene Ansätze untersucht werden.

+
+
+
+
+ +

Fine-tuning von Large Reconstruction Models für die 3D Objektgenerierung

+ +
+
+
+
+ +
+ + TencentARC +
+ + +

Tags:

+
    + + + + + +
  • Projektmodul
  • + + + + + + + + + + + +
  • Masterarbeit
  • + + + +
+ + Kontakt + +
+
+

Kann man per Knopfdruck 3D-Objekte erzeugen? Generative Modelle wie Stable Diffusion oder DALL-E können bereits beeindruckende Bilder anhand einer Beschreibung auf Knopfdruck erzeugen. Das wäre auch für 3D-Objekte interessant, und tatsächlich lassen sich Methoden der Bildgenerierung auch zur Erzeugung von 3D-Objekten nutzen. Allerdings sind die Ergebnisse oft noch nicht so überzeugend wie im Bildbereich und haben häufig eine lange Rechenzeit.

+ +

Large Reconstruction Models (zum Beispiel InstantMesh) sollen vor allem das Problem der langen Rechenzeit lösen, indem ein großes Transformermodell darauf trainiert wird, in einem Durchgang direkt ein 3D-Modell zu erzeugen.

+ +

Aus dem Bildbereich kennt man verschiedene Methoden, um große generative Modelle durch Fine-Tuning anzupassen, um einen bestimmten Stil oder eine bestimmte Art von Bildern zu erzeugen. Ähnlich soll in dieser Arbeit untersucht werden, wie ein Large Reconstruction Model mithilfe von Fine-Tuning angepasst werden könnte, um Objekte aus einer bestimmten Domäne, wie beispielsweise Fahrzeuge, besser generieren zu können.

+
+
+
+
+ +

Integration von Robot-SF in SLURM-Umgebung

+ +
+
+
+
+ +
+ + © Universität Augsburg +
+ + +

Tags:

+
    + + + + + +
  • Projektmodul
  • + + + + + +
+ + Kontakt + +
+
+

Im Rahmen dieses Projektmoduls soll die Trainingsumgebung Robot-SF für eine effiziente Nutzung auf unserem Servercluster optimiert werden. Robot-SF ist eine Simulationsumgebung, in der ein Roboter mittels Reinforcement Learning (RL) trainiert wird, sich sicher in einer 2D-Umgebung mit Fußgängern zu bewegen.

+ +

Da RL-Methoden sehr ressourcenintensiv sind, ist es das Ziel dieses Projekts, das Training auf unseren Servern zu optimieren. Dazu soll die gesamte Trainingsumgebung für die Ausführung als SLURM-Job angepasst werden. Dies ermöglicht eine effiziente Nutzung der verfügbaren Rechenressourcen und eine bessere Skalierbarkeit des Trainings.

+ +

Zusätzlich soll das Tool Weights & Biases integriert werden, um eine umfassende Überwachung und Analyse des Trainingsprozesses zu ermöglichen. Dies wird die Optimierung und Fehlerbehebung des Trainingsablaufs erleichtern.

+ +

Durch die Umsetzung dieses Projekts wird Robot-SF für einen breiteren Einsatz auf unserem Servercluster vorbereitet, was zukünftige Forschungs- und Entwicklungsarbeiten in diesem Bereich erheblich unterstützen wird.

+
+
+
+
+ +

Seminararbeit zur Falsifizierung und virtuellen Validierung autonomer Fahrzeuge

+ +
+
+
+
+ + +

Tags:

+
    + + + +
  • Seminararbeit Master
  • + + + + + + + +
+ + Kontakt + +
+
+

Im Rahmen dieser Seminararbeit sollen Sie einen umfassenden Überblick über moderne Methoden zur Falsifizierung und virtuellen Validierung von autonomen Fahrzeugen erarbeiten. Der besondere Fokus liegt dabei auf der Anwendung von Deep Reinforcement Learning (DRL) in diesem Kontext.

+ +

Beginnen Sie Ihre Arbeit mit einer Einführung in die Herausforderungen, die bei der Validierung autonomer Fahrzeuge auftreten. Geben Sie anschließend einen Überblick über gängige Methoden der Falsifizierung und virtuellen Validierung, bevor Sie die Grundlagen des Deep Reinforcement Learning im Zusammenhang mit autonomen Fahrzeugen erläutern. Ein zentraler Aspekt Ihrer Arbeit sollte die Anwendung von DRL zur Generierung kritischer Testszenarien sein. Analysieren Sie dabei die Vor- und Nachteile von DRL-basierten Validierungsmethoden und gehen Sie auf die Herausforderungen bei der Erstellung realistischer Simulationsumgebungen ein.

+ +

Vergleichen Sie verschiedene DRL-Ansätze zur Aufdeckung von Schwachstellen in autonomen Fahrsystemen und diskutieren Sie die Übertragbarkeit von virtuellen Testergebnissen auf reale Fahrsituationen. Erörtern Sie, wie DRL zur Verbesserung der Robustheit und Sicherheit autonomer Fahrzeuge beitragen kann. Schließen Sie Ihre Arbeit mit einer Diskussion der Grenzen virtueller Validierungsmethoden und einem Ausblick auf zukünftige Forschungsrichtungen in diesem Bereich ab.

+
+
+
+
+ + + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/ma.html b/ma.html new file mode 100644 index 0000000..5875cd0 --- /dev/null +++ b/ma.html @@ -0,0 +1,404 @@ + + + + + + + +Lehrstuhl für Mechatronik - AuxMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Lehrstuhl für Mechatronik + + +

+ +

Hier findet ihr aktuelle Themen für studentische Arbeiten an unserem Lehrstuhl. +

+ + + + + +

+ + Zum Lehrstuhl + +

+ +
+ + + Photo credit: Peter Krönes + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + +

Wir freuen uns sehr über die Zusammenarbeit mit den Studenten und wir möchten euch kurz vorstellen, in welchen Themengebieten wir uns besonders über eure Unterstützung freuen würden. Kommt gerne mit euren Ideen und Vorstellungen vorbei und wir suchen gemeinsam nach Möglichkeiten, wie ihr eure Abschlussarbeiten, Seminararbeiten, Forschungs- und Projektmodule bei uns erledigen könnt. Für Fragen stehen wir euch jederzeit zur Verfügung.

+ +
+

Filter:

+

+ + Seminararbeit Bachelor + + + Seminararbeit Master + +

+

+ + Forschungsmodul + + + Projektmodul + +

+

+ + Bachelorarbeit + + + Masterarbeit + +

+

+ + Hiwi-Stelle + +

+

+ Filter zurücksetzen +

+
+ +

Fine-tuning von Large Reconstruction Models für die 3D Objektgenerierung

+ +
+
+
+
+ +
+ + TencentARC +
+ + +

Tags:

+
    + + + + + +
  • Projektmodul
  • + + + + + + + + + + + +
  • Masterarbeit
  • + + + +
+ + Kontakt + +
+
+

Kann man per Knopfdruck 3D-Objekte erzeugen? Generative Modelle wie Stable Diffusion oder DALL-E können bereits beeindruckende Bilder anhand einer Beschreibung auf Knopfdruck erzeugen. Das wäre auch für 3D-Objekte interessant, und tatsächlich lassen sich Methoden der Bildgenerierung auch zur Erzeugung von 3D-Objekten nutzen. Allerdings sind die Ergebnisse oft noch nicht so überzeugend wie im Bildbereich und haben häufig eine lange Rechenzeit.

+ +

Large Reconstruction Models (zum Beispiel InstantMesh) sollen vor allem das Problem der langen Rechenzeit lösen, indem ein großes Transformermodell darauf trainiert wird, in einem Durchgang direkt ein 3D-Modell zu erzeugen.

+ +

Aus dem Bildbereich kennt man verschiedene Methoden, um große generative Modelle durch Fine-Tuning anzupassen, um einen bestimmten Stil oder eine bestimmte Art von Bildern zu erzeugen. Ähnlich soll in dieser Arbeit untersucht werden, wie ein Large Reconstruction Model mithilfe von Fine-Tuning angepasst werden könnte, um Objekte aus einer bestimmten Domäne, wie beispielsweise Fahrzeuge, besser generieren zu können.

+
+
+
+
+ +

Anpassung vonDiffusion Modelle

+ +
+
+
+
+ +
+ + © Universität Augsburg +
+ + +

Tags:

+
    + + + + + +
  • Projektmodul
  • + + + + + + + + + + + +
  • Masterarbeit
  • + + + +
+ + Kontakt + +
+
+

Du findest generative Modelle wie Stable Diffusion oder DALL-E, die anhand von Text detailreiche Bilder erzeugen können, spannend und hast Interesse, dich in aktuelle Machine-Learning-Themen einzuarbeiten?

+ +

In dieser Arbeit hast du die Möglichkeit, Methoden wie Stable Diffusion und SV3D genauer kennenzulernen. Stable Diffusion ermöglicht es, Bilder anhand von Text oder anderen Vorgaben zu erzeugen. Bei der Methode SV3D wird ein Bild als Vorgabe verwendet, um mehrere Bilder zu generieren, die das Objekt aus verschiedenen Perspektiven zeigen. Mithilfe dieser Perspektiven können anschließend 3D-Objekte erzeugt werden. In der Arbeit sollen Möglichkeiten untersucht werden, wie Diffsuion Modelle auf andere Eingaben, wie zum Beispiel Zeichnungen, konditioniert werden können und wie sich diese Eingaben auf die Generierung auswirken. Abhängig von der Art der Arbeit können verschiedene Ansätze untersucht werden.

+
+
+
+
+ + + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/pm.html b/pm.html new file mode 100644 index 0000000..2185367 --- /dev/null +++ b/pm.html @@ -0,0 +1,496 @@ + + + + + + + +Lehrstuhl für Mechatronik - AuxMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Lehrstuhl für Mechatronik + + +

+ +

Hier findet ihr aktuelle Themen für studentische Arbeiten an unserem Lehrstuhl. +

+ + + + + +

+ + Zum Lehrstuhl + +

+ +
+ + + Photo credit: Peter Krönes + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + +

Wir freuen uns sehr über die Zusammenarbeit mit den Studenten und wir möchten euch kurz vorstellen, in welchen Themengebieten wir uns besonders über eure Unterstützung freuen würden. Kommt gerne mit euren Ideen und Vorstellungen vorbei und wir suchen gemeinsam nach Möglichkeiten, wie ihr eure Abschlussarbeiten, Seminararbeiten, Forschungs- und Projektmodule bei uns erledigen könnt. Für Fragen stehen wir euch jederzeit zur Verfügung.

+ +
+

Filter:

+

+ + Seminararbeit Bachelor + + + Seminararbeit Master + +

+

+ + Forschungsmodul + + + Projektmodul + +

+

+ + Bachelorarbeit + + + Masterarbeit + +

+

+ + Hiwi-Stelle + +

+

+ Filter zurücksetzen +

+
+ +

Praktikum Autonomes Fahren Refactoring

+ +
+
+
+
+ +
+ + © Universität Augsburg +
+ + +

Tags:

+
    + + + + + +
  • Projektmodul
  • + + + + + + + + + + + + +
  • Hiwi-Stelle
  • + + +
+ + Kontakt + +
+
+

Das Praktikum Autonomes Fahren findet in jedem Wintersemester statt. Wenn du bereits an dem Projekt gearbeitet hast, kannst du auch im Sommersemester weiter daran arbeiten. PAF

+
+
+
+
+ +

Anpassung vonDiffusion Modelle

+ +
+
+
+
+ +
+ + © Universität Augsburg +
+ + +

Tags:

+
    + + + + + +
  • Projektmodul
  • + + + + + + + + + + + +
  • Masterarbeit
  • + + + +
+ + Kontakt + +
+
+

Du findest generative Modelle wie Stable Diffusion oder DALL-E, die anhand von Text detailreiche Bilder erzeugen können, spannend und hast Interesse, dich in aktuelle Machine-Learning-Themen einzuarbeiten?

+ +

In dieser Arbeit hast du die Möglichkeit, Methoden wie Stable Diffusion und SV3D genauer kennenzulernen. Stable Diffusion ermöglicht es, Bilder anhand von Text oder anderen Vorgaben zu erzeugen. Bei der Methode SV3D wird ein Bild als Vorgabe verwendet, um mehrere Bilder zu generieren, die das Objekt aus verschiedenen Perspektiven zeigen. Mithilfe dieser Perspektiven können anschließend 3D-Objekte erzeugt werden. In der Arbeit sollen Möglichkeiten untersucht werden, wie Diffsuion Modelle auf andere Eingaben, wie zum Beispiel Zeichnungen, konditioniert werden können und wie sich diese Eingaben auf die Generierung auswirken. Abhängig von der Art der Arbeit können verschiedene Ansätze untersucht werden.

+
+
+
+
+ +

Fine-tuning von Large Reconstruction Models für die 3D Objektgenerierung

+ +
+
+
+
+ +
+ + TencentARC +
+ + +

Tags:

+
    + + + + + +
  • Projektmodul
  • + + + + + + + + + + + +
  • Masterarbeit
  • + + + +
+ + Kontakt + +
+
+

Kann man per Knopfdruck 3D-Objekte erzeugen? Generative Modelle wie Stable Diffusion oder DALL-E können bereits beeindruckende Bilder anhand einer Beschreibung auf Knopfdruck erzeugen. Das wäre auch für 3D-Objekte interessant, und tatsächlich lassen sich Methoden der Bildgenerierung auch zur Erzeugung von 3D-Objekten nutzen. Allerdings sind die Ergebnisse oft noch nicht so überzeugend wie im Bildbereich und haben häufig eine lange Rechenzeit.

+ +

Large Reconstruction Models (zum Beispiel InstantMesh) sollen vor allem das Problem der langen Rechenzeit lösen, indem ein großes Transformermodell darauf trainiert wird, in einem Durchgang direkt ein 3D-Modell zu erzeugen.

+ +

Aus dem Bildbereich kennt man verschiedene Methoden, um große generative Modelle durch Fine-Tuning anzupassen, um einen bestimmten Stil oder eine bestimmte Art von Bildern zu erzeugen. Ähnlich soll in dieser Arbeit untersucht werden, wie ein Large Reconstruction Model mithilfe von Fine-Tuning angepasst werden könnte, um Objekte aus einer bestimmten Domäne, wie beispielsweise Fahrzeuge, besser generieren zu können.

+
+
+
+
+ +

Integration von Robot-SF in SLURM-Umgebung

+ +
+
+
+
+ +
+ + © Universität Augsburg +
+ + +

Tags:

+
    + + + + + +
  • Projektmodul
  • + + + + + +
+ + Kontakt + +
+
+

Im Rahmen dieses Projektmoduls soll die Trainingsumgebung Robot-SF für eine effiziente Nutzung auf unserem Servercluster optimiert werden. Robot-SF ist eine Simulationsumgebung, in der ein Roboter mittels Reinforcement Learning (RL) trainiert wird, sich sicher in einer 2D-Umgebung mit Fußgängern zu bewegen.

+ +

Da RL-Methoden sehr ressourcenintensiv sind, ist es das Ziel dieses Projekts, das Training auf unseren Servern zu optimieren. Dazu soll die gesamte Trainingsumgebung für die Ausführung als SLURM-Job angepasst werden. Dies ermöglicht eine effiziente Nutzung der verfügbaren Rechenressourcen und eine bessere Skalierbarkeit des Trainings.

+ +

Zusätzlich soll das Tool Weights & Biases integriert werden, um eine umfassende Überwachung und Analyse des Trainingsprozesses zu ermöglichen. Dies wird die Optimierung und Fehlerbehebung des Trainingsablaufs erleichtern.

+ +

Durch die Umsetzung dieses Projekts wird Robot-SF für einen breiteren Einsatz auf unserem Servercluster vorbereitet, was zukünftige Forschungs- und Entwicklungsarbeiten in diesem Bereich erheblich unterstützen wird.

+
+
+
+
+ + + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/sb.html b/sb.html new file mode 100644 index 0000000..890a06b --- /dev/null +++ b/sb.html @@ -0,0 +1,302 @@ + + + + + + + +Lehrstuhl für Mechatronik - AuxMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Lehrstuhl für Mechatronik + + +

+ +

Hier findet ihr aktuelle Themen für studentische Arbeiten an unserem Lehrstuhl. +

+ + + + + +

+ + Zum Lehrstuhl + +

+ +
+ + + Photo credit: Peter Krönes + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + +

Wir freuen uns sehr über die Zusammenarbeit mit den Studenten und wir möchten euch kurz vorstellen, in welchen Themengebieten wir uns besonders über eure Unterstützung freuen würden. Kommt gerne mit euren Ideen und Vorstellungen vorbei und wir suchen gemeinsam nach Möglichkeiten, wie ihr eure Abschlussarbeiten, Seminararbeiten, Forschungs- und Projektmodule bei uns erledigen könnt. Für Fragen stehen wir euch jederzeit zur Verfügung.

+ +
+

Filter:

+

+ + Seminararbeit Bachelor + + + Seminararbeit Master + +

+

+ + Forschungsmodul + + + Projektmodul + +

+

+ + Bachelorarbeit + + + Masterarbeit + +

+

+ + Hiwi-Stelle + +

+

+ Filter zurücksetzen +

+
+ + + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + diff --git a/sm.html b/sm.html new file mode 100644 index 0000000..0adff7b --- /dev/null +++ b/sm.html @@ -0,0 +1,339 @@ + + + + + + + +Lehrstuhl für Mechatronik - AuxMe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Lehrstuhl für Mechatronik + + +

+ +

Hier findet ihr aktuelle Themen für studentische Arbeiten an unserem Lehrstuhl. +

+ + + + + +

+ + Zum Lehrstuhl + +

+ +
+ + + Photo credit: Peter Krönes + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + +
+ + + +

Wir freuen uns sehr über die Zusammenarbeit mit den Studenten und wir möchten euch kurz vorstellen, in welchen Themengebieten wir uns besonders über eure Unterstützung freuen würden. Kommt gerne mit euren Ideen und Vorstellungen vorbei und wir suchen gemeinsam nach Möglichkeiten, wie ihr eure Abschlussarbeiten, Seminararbeiten, Forschungs- und Projektmodule bei uns erledigen könnt. Für Fragen stehen wir euch jederzeit zur Verfügung.

+ +
+

Filter:

+

+ + Seminararbeit Bachelor + + + Seminararbeit Master + +

+

+ + Forschungsmodul + + + Projektmodul + +

+

+ + Bachelorarbeit + + + Masterarbeit + +

+

+ + Hiwi-Stelle + +

+

+ Filter zurücksetzen +

+
+ +

Seminararbeit zur Falsifizierung und virtuellen Validierung autonomer Fahrzeuge

+ +
+
+
+
+ + +

Tags:

+
    + + + +
  • Seminararbeit Master
  • + + + + + + + +
+ + Kontakt + +
+
+

Im Rahmen dieser Seminararbeit sollen Sie einen umfassenden Überblick über moderne Methoden zur Falsifizierung und virtuellen Validierung von autonomen Fahrzeugen erarbeiten. Der besondere Fokus liegt dabei auf der Anwendung von Deep Reinforcement Learning (DRL) in diesem Kontext.

+ +

Beginnen Sie Ihre Arbeit mit einer Einführung in die Herausforderungen, die bei der Validierung autonomer Fahrzeuge auftreten. Geben Sie anschließend einen Überblick über gängige Methoden der Falsifizierung und virtuellen Validierung, bevor Sie die Grundlagen des Deep Reinforcement Learning im Zusammenhang mit autonomen Fahrzeugen erläutern. Ein zentraler Aspekt Ihrer Arbeit sollte die Anwendung von DRL zur Generierung kritischer Testszenarien sein. Analysieren Sie dabei die Vor- und Nachteile von DRL-basierten Validierungsmethoden und gehen Sie auf die Herausforderungen bei der Erstellung realistischer Simulationsumgebungen ein.

+ +

Vergleichen Sie verschiedene DRL-Ansätze zur Aufdeckung von Schwachstellen in autonomen Fahrsystemen und diskutieren Sie die Übertragbarkeit von virtuellen Testergebnissen auf reale Fahrsituationen. Erörtern Sie, wie DRL zur Verbesserung der Robustheit und Sicherheit autonomer Fahrzeuge beitragen kann. Schließen Sie Ihre Arbeit mit einer Diskussion der Grenzen virtueller Validierungsmethoden und einem Ausblick auf zukünftige Forschungsrichtungen in diesem Bereich ab.

+
+
+
+
+ + + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + +