From 8f64d4bca22b6408e5b712c67f711623dd7d643f Mon Sep 17 00:00:00 2001 From: Leonardo Date: Wed, 11 Mar 2020 21:16:37 -0300 Subject: [PATCH] Changed documentation backup folder and added generated documentation to docs/ This change is a preparation to migrate the documentation from the gh-pages branch to the docs/ folder in the master branch (once dev is merged) --- docs/fonts/slate.eot | Bin 0 -> 1876 bytes docs/fonts/slate.svg | 14 + docs/fonts/slate.ttf | Bin 0 -> 1720 bytes docs/fonts/slate.woff | Bin 0 -> 1796 bytes docs/fonts/slate.woff2 | Bin 0 -> 796 bytes docs/images/logo (1).png | Bin 0 -> 22317 bytes docs/images/logo (2).png | Bin 0 -> 10247 bytes docs/images/logo.png | Bin 0 -> 22770 bytes docs/images/logo_0.png | Bin 0 -> 21170 bytes docs/images/navbar.png | Bin 0 -> 96 bytes docs/includes/bidimap | 5 + docs/includes/deque | 114 ++ docs/includes/hashmap | 6 + docs/includes/hashset | 6 + docs/includes/heap | 24 + docs/includes/intervalheap | 10 + docs/includes/linkedlist | 4 + docs/includes/list | 8 + docs/includes/multimap | 14 + docs/includes/multiset | 2 + docs/includes/queue | 10 + docs/includes/sortedlist | 2 + docs/includes/stack | 6 + docs/includes/treemap | 2 + docs/includes/treeset | 2 + docs/index.html | 1111 +++++++++++++++++ docs/javascripts/all.js | 131 ++ docs/javascripts/all_nosearch.js | 31 + docs/stylesheets/print.css | 1 + docs/stylesheets/screen.css | 1 + {docs => documentation}/Documentation.md | 2 + {docs => documentation}/README.md | 2 +- .../source/includes/bidimap.md | 0 .../source/includes/deque.md | 0 .../source/includes/hashmap.md | 0 .../source/includes/hashset.md | 0 .../source/includes/heap.md | 0 .../source/includes/intervalheap.md | 0 .../source/includes/linkedlist.md | 0 .../source/includes/list.md | 0 .../source/includes/multimap.md | 0 .../source/includes/multiset.md | 0 .../source/includes/queue.md | 0 .../source/includes/sortedlist.md | 0 .../source/includes/stack.md | 0 .../source/includes/treemap.md | 0 .../source/includes/treeset.md | 0 {docs => documentation}/source/index.html.md | 0 .../source/stylesheets/custom.css.scss | 0 49 files changed, 1507 insertions(+), 1 deletion(-) create mode 100644 docs/fonts/slate.eot create mode 100644 docs/fonts/slate.svg create mode 100644 docs/fonts/slate.ttf create mode 100644 docs/fonts/slate.woff create mode 100644 docs/fonts/slate.woff2 create mode 100644 docs/images/logo (1).png create mode 100644 docs/images/logo (2).png create mode 100644 docs/images/logo.png create mode 100644 docs/images/logo_0.png create mode 100644 docs/images/navbar.png create mode 100644 docs/includes/bidimap create mode 100644 docs/includes/deque create mode 100644 docs/includes/hashmap create mode 100644 docs/includes/hashset create mode 100644 docs/includes/heap create mode 100644 docs/includes/intervalheap create mode 100644 docs/includes/linkedlist create mode 100644 docs/includes/list create mode 100644 docs/includes/multimap create mode 100644 docs/includes/multiset create mode 100644 docs/includes/queue create mode 100644 docs/includes/sortedlist create mode 100644 docs/includes/stack create mode 100644 docs/includes/treemap create mode 100644 docs/includes/treeset create mode 100644 docs/index.html create mode 100644 docs/javascripts/all.js create mode 100644 docs/javascripts/all_nosearch.js create mode 100644 docs/stylesheets/print.css create mode 100644 docs/stylesheets/screen.css rename {docs => documentation}/Documentation.md (99%) rename {docs => documentation}/README.md (96%) rename {docs => documentation}/source/includes/bidimap.md (100%) rename {docs => documentation}/source/includes/deque.md (100%) rename {docs => documentation}/source/includes/hashmap.md (100%) rename {docs => documentation}/source/includes/hashset.md (100%) rename {docs => documentation}/source/includes/heap.md (100%) rename {docs => documentation}/source/includes/intervalheap.md (100%) rename {docs => documentation}/source/includes/linkedlist.md (100%) rename {docs => documentation}/source/includes/list.md (100%) rename {docs => documentation}/source/includes/multimap.md (100%) rename {docs => documentation}/source/includes/multiset.md (100%) rename {docs => documentation}/source/includes/queue.md (100%) rename {docs => documentation}/source/includes/sortedlist.md (100%) rename {docs => documentation}/source/includes/stack.md (100%) rename {docs => documentation}/source/includes/treemap.md (100%) rename {docs => documentation}/source/includes/treeset.md (100%) rename {docs => documentation}/source/index.html.md (100%) rename {docs => documentation}/source/stylesheets/custom.css.scss (100%) diff --git a/docs/fonts/slate.eot b/docs/fonts/slate.eot new file mode 100644 index 0000000000000000000000000000000000000000..13c4839a1975d4c92d66753d75553f922743c6ef GIT binary patch literal 1876 zcmaJ?&2Jl35TEDWeRg&sP8)xqh$Kr)Yzaiu#`dnNaHtS!Xx9i53LF}#nAmmP`Xfq= z;s{Zte*qCEK;i~h4hYFPaA-x4sD#vVrBXQ{MIaD@1Ke8kn|8tnQ^fdI9N^x@? zd<=RUJW{D`U;b-v<0kYSA}zO8E|&DaCqF0BzlPme0}$TUZbAP8`m<~GR{K~75*dg= zcCEQu4DE@ZpmS=+>&5muJwb0nf0^x#V!izR7X1vpggLV7&CM3_1j&!tPMS_)mkgrN zC!rsJe5kniow8zt{RT+zltXle=pd}!=-!|+8X9a|iyqm&z#GOh#?Z4hMmoI$K1va6 zrUYgm&_U=R+`ZrJ0!LQ9E`42ef0@uHvC8U zo}w4%B?O&MCX$JGEG)w^HIqqa()pb0xK4IFpUb457c*fwDPqaQf|z%md}h1{#>ac0 zD>_@{@&c$_-fEYWRBE3yj7U8q4MTz%hA^cOxdwei%19MlXpM(P_)+e=@Rm}B>tXap zwoqO*DogaoKF+^`!zvX>{f10 zq*F6dk@0&Ok4=k2cHR|EKKaOn+_Q3KG-~~J-9n!;&D+d{W9=SQ|IqlDm9?y2uUl{( zi(0o$Q@Cby<g+B7U zE7gMM6{=S}Ps}C~lhg72%h#4X&vB-0d)je4Z)w>(?>M%-xE~jH;l@L}Lcyy(n4O9z z65lS`w&R>XbW_^$2bKN!lz(S%N3N!tcP>R={D&-^3rjyfS-aWi!AkH>sk+00G5&qW zC1%n(1Gmpd;5$IPUF_Lw@K%&WbbxEX?LgKcF9x!K$J`8LiMQ^#KsG5yOZ=|rBS1K&l2uG4tC&hwF_o-hDp_Le zTrgI}?0+pse + + +Generated by IcoMoon + + + + + + + + + + diff --git a/docs/fonts/slate.ttf b/docs/fonts/slate.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ace9a46a7e1ed6b6ab3de2f30ef3e27c572f88d3 GIT binary patch literal 1720 zcmaJ>-D_KA7=PaL@t*V?ZMro%kz(6pV-rwZyCyk@Q7?wb>UJv9`gO6wj7^qiCTUqB zO%X@;7dX69!8^V6LWJzXiw!F%45qgVdLa}=5xvm6E&iVKo-9$jJ@CHI_viaTf`}a2 zC!H2wcyVDVd0amU$>&(FZ8pn0bm7yth{U7dH)`ef4)6r{E^wmO*t_`0^~*QG?-S|8 zt!lYq{5ky*k?|Sy{uTt*p8hrX-@re<)$DYS^+1t{800m!H_O^}@g4X@@W-3w?hZXf zuY!M;^{sNV`qeJ|2)=?Gg`Mqo2XzAEd#oqjAaRXMBJF+c79{T|EPkbe7-PE;5S;Q~ zaGL1Q(r@%{&}khDI-bPX!~GUGz-0@x9Aaiik?BxrHq?#(PnWnI%nYaReOv*$ZSm>?)ctla|1hAG;T1^YPnfOv{N&_J8ekcvoG^Cm?MLpzb znO-8ASEU{s)D{<<&JKz%JjTWAM|EWWzjHMajT;ECdZ?bsKw&|^tZONrkvOuIkI%De zUYTtG_26}0jYK0>4*B1QgBuPLXU?}t^*TiboK|r`R>P0_HD+(cdi{Ze{FKYDLBs0R~?v6B%Rx~Edo2aasT@IJ-vtfG(iE^ z$Awv_E5l{^C4s84a|;3+->t#z!u^V-9Nj!@+Ph(RslFP9tMyA^DCS*vdNzG<@yc2l z`u?ov&H8>AuC0gXeBbj{4$|U#n6XQ^x*FE+&d;P>_lp(J^Zj%8%oMl&cI_ZN6TKO{ zkvFp2-&{yO{TDd~50<`txN&oc<4*8TskuV~pXj~g5i{t$k=GYVU^@bQTx>a5uvcK? zADE$i`dge4A3((KH9;?{zv*7K*f>Jt^humckR5yQeHf=xv0R7Ti)jP&N=%#Ng5wPM z_VCv|5z{smX^sCCV+<0Gsc02b(JH2*RZK;zn2MJ0U5I^E%r-TsOdYDyD_EDQO?BF) z7OFc*Cuk9TtZz5Uo$8RKb(q)a%}C8|gD__z_YMNoV9|<#sst6tUZ*|mXK52w&tq|_ J6Wq-M;U6NW`v(93 literal 0 HcmV?d00001 diff --git a/docs/fonts/slate.woff b/docs/fonts/slate.woff new file mode 100644 index 0000000000000000000000000000000000000000..1e72e0ee0018119d7c814c2097cc60c0bcd05d84 GIT binary patch literal 1796 zcmaJ>&2Jl35TCanZ=GF;-Nqj%Qj#SmwgjS~vAs(b4i$%lc7v*fuR|jhlemtH?Nqf< z5&;$c3y8RZ#0{p83^QtGf$~^ZU#vdPL3b z4fcBr_DN>rKz!G#?&4f~pM4ZRM6a}~ts1aTadwIM%N_dh>UO7#K7YRFXF@YA68l_? z@xFm7>0K?wZ&VUvut!OxMlIIQ5*<0_&Hha~Yl49Y@PK@!7+CqFG*;eClSR)#j$=Xw zNnrjF9T`VX|4zRT99<||DqHk_nzSa(NzO5voBad{L?lOWoE4r?ZbRP(V_X@TZL>{} z(3A8mk}l-3xojrwNJr*pi-lsLQVxSKC{0w##ljO}){#>poy#tYg)pcTCk9|L<3To?f*omEO$b9ODUa}gVj!a zAvUB1l6OCpmTg;7PgnO)phbF-Xik@UVo+OLa3((}zVs*;Zywi?{r}GOL=0{q1ou!q ztD%;HAbGE?Z5HC#RzAMSTXWiN9ioS*i+Usm@#fI}eK@$`F!8DQHtAj`iEnm!UKH}P zNl{d*%%o>TwzLq6ppv_9BR_a$H<|Q)z2RXkyY6k4BJlQ)o4+xU@=Bif%MA~%sib$? zbw%hV*Y96nzi0MvpHdWZeO#D>x^i4rP!XsqKRYk5@ZB2RF5E9QWp(qg81F^VmBvaG ztu(Ggk(kS7r)DyTm#?ozQ4q}d{!9==(dt@sJ_vk&`7k5ChZ~1PD=Sgs?%Z@HoBe#* z_k-a4JvVKwyWWZ=q2@1#9uk~9EfrHBtA=!8%MC` zIGu@c6SyDi7WCym@ z2-w*rE$c_UfviKEL=Vy>={0bo+(i5#P1q3$6VB``hVMrCzU@B6vbqKcPy}m-BtQn- zkylU>byNe6DE>18g5d9bm%bZqa|qF=7&3(|U!AY)%Yg-vOsqKIq$w0D$r*3}ks4=+ z>U6?w2xMd=B$;zQ9v)F1K7KwfQ9|)<9nl&i?6-rchs{I8LC1eK^@#(|^QwB-{VeQz zoHLn@cwG?Yo(X!F(Q8iBOqSNs${h}C*?qJYLuZAnVXqx{ww|}Ux0`ca^V#hz?c7{r z7ldYbmk!M1m3G+IYC6(!VcCzqp&pJkZ#1@kw2W<^EJMqOM;^&dq6ELC*|pK!(cC0< zbZtF%BzLsuTw5O*+eg;dX0a+hcfI=gj8a~qWYJoMamHAo)!Qq|6&~9S8`{d0T?L&% z@$R=P6H0rTp6V+-Dlb>EB67JEMQ>kk%`y}{hvBC(RNEw)*%|U|4>SL+B=3rE@y*rw zR_bLZr&~XN?C;+yx2IilcDnrb?M)}An;DsTe@^rq$9L-UWNqY_oTyWyYisN3CMIh; z*C)b12exYgK^2c4S}J#2YJ+00rUlj%+LqQ7E%lldEc`K|1Bky)iLkwF{Wltvj!{A+PBEzhE3BX) zFBgqmj@&z?N1*=OK?z54T7is8FiA(N66oe`X+cKl>`n&&000000HC;3 zk^ug-#56-JW5JAtMV6Rgj#+|9A(7;@^`+^dWy@Alt7D86w|;R>QMs>d+47HJVfKhH aD;vc&%m&dlj4($-ipx}q&#}A+00017%3vV? literal 0 HcmV?d00001 diff --git a/docs/images/logo (1).png b/docs/images/logo (1).png new file mode 100644 index 0000000000000000000000000000000000000000..68a478fae3611d878af18c575cf8218b818f41db GIT binary patch literal 22317 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
hg5Z+!{Sa)O9QNxi$tfwtDZos~b$g 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 F`9JqINYVfR literal 0 HcmV?d00001 diff --git a/docs/images/logo (2).png b/docs/images/logo (2).png new file mode 100644 index 0000000000000000000000000000000000000000..5cade52569531377ddec943e602014f5925ad331 GIT binary patch literal 10247 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 literal 0 HcmV?d00001 diff --git a/docs/images/logo.png b/docs/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f9c48d3ef50611e851f4084f2db52331d9a79f67 GIT binary patch literal 22770 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

%=y)n}jKT?y(86 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 aP$Aj)Pco0RzEKpW66~_mFU1$H-~KnkT|0FE literal 0 HcmV?d00001 diff --git a/docs/images/logo_0.png b/docs/images/logo_0.png new file mode 100644 index 0000000000000000000000000000000000000000..11eb11b2a3be694bf828b14809eaa1784e5a7b53 GIT binary patch literal 21170 zcmdpdg;!MX_w~@FfFPi>q>@T^NVjx{NOuk$f(l3s-Q7LXU4nFXgD^1U&|Sal=llK@ zFKe+b_i~@O=c#k{-Y4vnvdnXAQfv?i^juC>QVj$`p$37FSTNCnCxWbV0>A~yRZZq2 zsB)Bi7q~&S6ju@lfvO-l_n*;#dn_keT~`nYx98t4QUWtB8SoI@R6#}(xB@>n5-kD1 z1;b5FNeW{V>p9*_Viz5Q*C3D@jhv*ohNsct3P!SqRDI_OCx46vDp7Pc^-nq!lc=}o z?{kt-lIQ%$mSG5=w7C&Pv#k~?Ej3eeO>QnVQ*0cns#tDMnDF13reQ0Ou}-(<2E^gx zQ#-UHh1kqnV7XLX6P{i!An~scohSdp#`*kw@TSYoVYN$^Lv(r8~g(b2~yep8imN zcR+ZeiF&$Cb;^nMl?g=p7d~e*_YF`F&ol6}_(zNoKly6&qYV~o$96}{ z_BrTXU4LTt_SYbp~fU3-6Z^lG~XGPUC5au+i?gspb30_q_+?uGJ&gar797 zrZeVfYfQ2A=CRqCK}O@b{s``wYFL_{<;*+G=GxI%iN$SMXj{#e$=SuHvpV}1C}^PT z7<6K)v?`13Mbeapc4-k_acNDZ2ddk7%I~_Pd{aXaoFTO%U?!dPxbLcG&tZOK(N{@mH?;SNUh%1{2hqe_ek!p#_P5WMC~x48xJ&@N*}% zcgzoDprM=*M~OAyZ*r}4Q{MdMA&No0=Mw@Ssz5p0Kk9;3`sOSza9?mD-7vPTZ%XDkSW{pw_#vn=K~3xLTJ<#RLD|EC4W10WtwS3dy~>57F|nwH4@|Mb3jgAi>*C=BMegQ5N#J@6XklI zdBAlMaHKUzcqZ|`TFJ&(O2No@!lU6m?luKovYF{VpDJDLaE@t_@wwzsAW!~kTL+%s zTFbPOU(`Ad?5?pI+_M-?QJD2|e^%&xf;SM}xX%770 zlBc=CS^3^E9KlUOG5qn_{dW-R3oYCA6X%4Q3qz&#zXGgvp1M$>rd*Fq80x_{Eqr8r z_ovt2IT~#p9)z#|1lN2#h2t^rAKj24g$kYvA7^6;@g#CSch(>BjluEW=EpH!Sv)rS z;fG4?w4;0QR73al7d?2K{?wjXtg>nuI4V9XA zCaX1V(gxv)PUJa0JvPeUindBP@Sc6WfUS2*pi;k`v!-Pb7eN%jGUGP6GrDz z8Y4k;!B!4^W2=?XFX9F>%v@1}E9G|`G&?2)(}^SxMIhHZEe|=m2SL|gGoNH`r%nfp zgjDz3nq}Tw{Taf-@o0A-0E(&re+5-zN1EYe>1z#iOd{1p-Q977`o%4 z@KaZ1>}E(Dpy0%OKNa(XVvMa49A)uU*5 zHEU#RSB3rjjjq#a#dw4qGd;kcr^XI0>Nw1NQ-+tsU@-_T8CXoy8-7HU8a$LZ`WbRG zm)les(P_i3BxQ>9n9+WW;K6De17FBh@2|UfaP7A{sjeb1q z8rXd5E1T1E|5zq%P^=7yz$qYEZ+CeI3#kY0?;KOnlaww9$l0+(l0P z=Cq|Z_7{n?tfw{kZ?*H^^D1Bu&&3MG%%bUD1n8$X!vy#ewddqg!UmXZ_RJKdGVGW* zdCx4ppGkJ?*-!MQ)(Tf%{+9YPIV5Ch^yz7SxAmUYQAC%QT6r*9c>;_+-MQk{_=Y36@XN_=e#j^e$otGID| z?v}n_*PHm`M4GHS@%x^cpLO>u_5BFmwdAG2iaKTY-)?SapKng%#0>;v_>iMPlZJT0 z-~_hw4gZgD^4&F&J}jQwI*)+txnA9~**O8rR1$~M58`qaERPJ=@Kh|Zjl8%>2=rYE z&`C0(O2tHb+($T*ItqT9h)v20g?06WQ8X>bFNr8}a|eN0@+QY9LX$=%R|{f?@|dv^ zOL3Iu8#0^pPWpaKv1k_L=s+(!BU%45qhG;zZR=F_=z(7Zwgx{?xaRj|KE9q8UfdGe~EJ zRYnn+`(@(U{I0WegW(Di9A3`voB0R>d!V*yEMEI+U~x4ivfM%im0U#}u|&s`gnxSt zt(3T15EjqqVU=s^zzyO&9%@av08i8y!pRCTa{#5@zX+t(MWsf{At|J4dtF{L-Mr!_ zpJc#^4;w5o4DR?XWbYn%CeT{V0$Vy8A2Zfr2|*}<2%uG#Bm*ZFlR?wt@^XDbYD~Kv zjb>_~YHy#6^ee^V=Cu6@!{-8QJ1KA&Ci=oZCv9>gTF5dehDiVZMqt?tIXa6VkQxhU z_jq)W^!0_BQxu1reFi-*g%Nf4)U{4{XLCNXQf4@XXYUItX%49s`_E0}-}*{Sb`pBKzZOlwgMgCM8GTkC!V(O>VD2RMlnZULEpyUaImECjy?M(%7xTluF4AI;gmfvOm9c| z+}vVmkveN}Ilp=Kaa3L)XbVE6F~}&Q@@>{PDjaVh?rK;kZ*D1@s_y69IHKwFG}P2< zr<`W@NW4zAQ>iuBPf_42}{5j2SDtA8Bq6$b>cD zhbhd_o%5jSW^&;yYc3>}5w#p&DbC+20ovg7R}`2VO5Wyeb#bn8vmUXEE;c6Dq=p&}+Zg3K@C~O8 zz=N}@aAHFzYF7MKqn3I5c!>fhyRv*!-74q$=GfoGoOwItzg2DC;XW)Scs;`l0pYg) znOTQs&4xZulC$g7wJ94J z$52wVww+IZ^zew1zW4&?*5o>Vb=aNny0SIBpSM(Ym9nAT_mU4MgvGlH;;DVx^Y6s< z|Js56ZI)p>*$O?_ZO0VB+uY21xJS^mF)lPZ+56ed*byvFDWAvSZ8VN8PsG-1m+I?F zI+qiFGeP#KATamyXMk|iuSZHXDTulCrz_sGWrS|O70MGe=me{So9tkmMj^B1m!$X6 zh<*=iGxuZ5CQiD`&vU%65xERkp^|TT%st^eH(Z=^A(Spn=at%DEg8o1w97oMEsG4# zHfl|&iHKGTM!v2!mnT=Z9Y4275;=zKYF4|H1)zTmUa}Z+B_S$u_s|vHofFY7G*aDA ztej}wzxCo&ZMsu;5jQ>A{%NDDzqfj!kTx=5`IZ|v4iY|yFmYEvE3`DG_bi-@_k&o9 z?4Xn*gI_K&hCFff>fKx`mXGrCwUthN2T-Z(X1o;yOCcg!q3b>y|k` zh@IE|B*AOv_w2ouo|;B3L1Wkw*CP^a+G+x4od(PqV^fjazRUdGqFuGyzR}_9c#E8{ ztfH6lAG)6lNrOzoC=aju&IfOOz}Dj@uqLT$M;vr-(VH_lw9(G&vhSh!NHxmJD}@=k zRQWVoakYCh`BDfGUS6;1JNgytnX+gV8zw8!{G1hC_p7)w+`)u_?r?L_ZO}13QYd{x zyXKn&ksYLhFe}J2R6OVAJ^amc2ZOZO zf-ra*^MN-1?l^}6LL`GBSo{Ro{I+CJ=D{H?m|{YO+-DEt>xvEfPn|Xz*;Xa1MWf6v zQRbf+4K*)l^Z}{gScUDS zkyMQB-4?%i-O}o9uC$i@mE06%_%d#fl~6J%-gS1@;mI95dWg{JVaZaEKQz8uy7Wb$ z=MHr001q?u%=xoQ)NwwF9|e_2OX%os@1GD)&Vhk*gXqXD1OsgUWk_%EK+8ViT?>_c zc(vKN?m=x4%80n{<3~~$O&wsZ(_3J|n(r_r zY(MinNmDU+75fRjC`d?zosOH$0Xaizvn$@SAEO}8QM9Tv&LZbndTE2j>mil^ehrP{ zmhmv#!Wno2I_Y2Y{dIRTC0@=_nCE|3lOZndcsNWQ6IN?8Sz@@dwlHPkaCNh870#-X z3hGhfr5fdC(tWyVl&{xit1XUGXBUASC!)ub`tInsK10Hcl>}{k)lOVkdl;wdd_hT} zj%0VdSALVncGYoQCKq0oL9631k;z8K%;;FVwSrgSeE}z2u*Uf1V{izB;&`R-`z<?wjhnyYJa{z=pi+EW9xJ(ovv0U46&K^q4%^wU*hXWQq6#}+ z25x^~c3;>`gxFdsJv<5jKtf9S+e+C~tsQe$24$|F9%wPPQ0BRv=SLXzRTiF@Ocp{b zV-oZa6T=?Sx-bG?y$Ecy+n{Md>c_))DZ7tc-yOqWd0HH1Sjfd-psxpqRW(VG$eqvQ z#-71^TfRghs`mk;vnL4DBjv5!`n%1!MOP1;#PF$~YwmI+$rrEEj;g%W8T@fFgJGrR zMt{=ty;lLlr4y%Y1ey#K)DsMp+hl>tT8CIsPg!Z7pZR#7t#;h04_zn=zaRb6ioB9m zaAI=mcGW%d$TG59Wm*4h8B$#iGL->s5GaXcwXGVRdVPJ3;~*6Al_F)JZ2hi@enwfd z+>P5`T(-XX)t3ype^bURYGpI9fxJrxg<1ran$2r^D}Q9$sT?V#TtCf@zcTKQxw?7p z{@AW1%bhn8eB*IP8Ho{h`L~o*x2D?&zkEbxjOQ!ef4!w2W2xtTH*wKJHvb^@gKTSJ zB9oCNNyI&TyOCw-V3mz65<|Tke9Hgjd7z}zg-2IScv%HQR@RE}oNfX##{#gX_ypfL zENP`=u1xeb`<7eMHBre;Q8Xs8GGsL{We2?u?7Eo6Nt?mn)$ zv|p}*u0C+Mf(I3tEo$-5TJ#$;oJa%W(Xh{jsisr`hO|qpY(Fxmf{~CgJ#KPV6~R;1 zB$7U_n!fi2mz>pyw`hz^kW(@xBgwu*lKrWqYwalZ2|gZ19O_h;aqOal#1EWvOx1JR0?DRO)v;TM9n<8-3v6n6{rfG04AnElqVi z9Ffm3L~$P3`nzjZ?kLXpBu~9;=E-fVM{xKzOpx(GVYDE*oQeeZYNxz5qVdn=vPep& zOz?kjV09%|VDwMDA>d`xflVam|DLDfld4CXFslB z*F@tl4|zYB7++Z`3b+SQceYS}krly1W$h4jt!Vqh7G;d|FJQx77=Gfb!|B5KB}gmG zG+^8E!64TS{$)=aVc3nk#HfE;|D|8=I`lSV54JxUfDJ7&|`RtA}is9N8)jw{21J}4gq7;soe{Y%B2mvd&n31<`XFQ2*d z6AOZaOH~G5p_ci!Y`HU$o$qAX9Kx*D@bz9rA6>yTEd zgsb<@WDDtWS1DlW+d9iZ5H)vWYJUHH9O9%bh60JgL zy@z4wOxaMGc|~|Za2xhD$M>14LX>brkXkT^PHMS4qeGDOOv<}%%N*6T;09AdXi&z} zD)Grfymu7LekFk-{QNpvfX72j=KwjHY1lx$)8eu319=DX#PxEDO6`Je*(xVdOtfXIX!s?@&gsz=QB+t}K4O-n|?qa-g zc;>^+jDk@{cQg`vp3-ct3N@7unCa^B{-S_{46st1d4DT)Ho3Jypu zgjqh8>#1Ao=dL(q#%GMl1j=rvbCb+gfH7fUIak5YRU+U`?Sm16MVCL9p&otpc|Qx1 zWvyhAOLcTsxX%{$x(PHhbc*I}p~kx|{_q!tEfHh3H`wTq#hg@sYgHGpsEvVUtQqIK zUvMMxF63DEHkpJ}ExVGqcgBlj(phztTExwsE2QF^;@a~pSIQt{>Y2t;I_p2gf=IHJ zUR%xeIqf3R<;oS+u>8?g)H8o8MLvrtABZ?qcFyH~kf^?w^p7b?pa!rECvVjR^*4+z z-h(*4YDZ#;0{DG63sJ?V|4^|j`J+kCap8TINba8$_@I(rO?tU~`9np9SNMU`6aE55 z3AO&?8*Kfwt{>GlH-u)(#MlTcm}>|Ftzv#ev0^bHf*T#@DPg>u*~@enJYWG+44aaGNSw^&f+~K}{iM|qvoUmY%B*E8 z?%1SR`T9zD=`OaFkVJDxi-bh6^6YJjsQQ9HkURbj7095Ig$JuX%D7~-!fQ8BqoowW z8@JQ9?H%xJXoRDai_$Htf>y`yl`W_-kXeDijseYPixO1g{wK#P_NYs=5;YfgmRo&IP)8(wFlD7|VHEo{+t0kw~n*;YxyrN)2!N+<)(FlX+`q zl8RaU9gIcQN5W)Q3v6i}v`%iS*Rp_mc(~lae6OO6p957g+C_3NqM(A70fZmbR_51F zuLTfq#w2}T%||>3ts-wK_qiy~M`z`Mc_n!I9I5eJnF0Y*DSr@Jei^e5oS!Ijxe#zb4Cm3jj)q9J z(+Xnm{!;Xkf_8s^=&-gBB)_Z)G=G5{4Zy{`M47!!(M2DCY1l%QdgVO(l@8Ohpt|sp z3}XHfbo!{xJ-PptV)8Ka$bpcU>%q$aAOg`N-bG%wbY$7=zD31%8a6{Ic1J2x3nZyT z#2smPyQC?sW@nqEmSZk5#T} z4LBU$^+4l#uXhDV@w^9t;Rzx~#;21BH%aHuVKJSPb!=HQ|F}&Jk{d5{5kv`MIxdt# z0&V()_|z;y!*=45^0y7(>NqQ8%j|%a;iW7TSF9#g%$wXqVg?r^Y6>Oz z-v4bFXk&zErh4{Ip}P^9X=o2FW{|vV@A-5u5D4%F=>v1OUrUqV;XTT6rglQss;(|A zb3Gl;U-G!$l9yKAFAtqa@$^31V&n(P(ZuF6@?`QA$%?cW(rtj1@fbK$q9*9XFH2*A zes-$s-3*kW1xgAevoEFJpH!?gE##T`a`gh|(#pS9W^pmiUm*Fg3CyQqe;Q-KmU}yD zJ1kMNy!0@>X=yp-IZoP3_TS79uh+`w3qqUc9L)QolcN{oW6|4=ldB13U-0Mi<7 z&Bl)JcOV7694h79>yRNg(l=t|ZPQZ?7!x#HG8@oON}OIpIe7gK|8}lg0yi$HutbOZ zO$KZUpudTUn*5^ma(D(yNqP{O;J#1s0U)<)Q|Fd!5$eKZ{0OFH2LPzI7E^^&y5d z=luKAO!`0Eh7w%8B}FWi9x_kfa?C~CjlPZD6gc#~@5s`7Jz)i4_Y{no#w;27eUAdW zu9w%XOgHmFmbX6NMJ-cd{!UAF@H){7+XK~_OTLLU^)fu3@xJ^1aR9Rww4Um5-mW(t z@)-ME<>f=(C{v#v@F~+^L9nXIdKci&EaSEx{Mz!g27k{+ldew5Bwzjh7jmE66|H&6 zg2f2p9j$E_wK!-3Gg=qX7AzQaHoqJY3t9YIW&T+A94QqB&l+wAdL$Tk8d|m9_)#vt z>G0`Lv+yl=QMNv=9o*`pR zDPObBtA8>2e9L@>W3Rvke$<}UNdtLA+>(=@$(AgC$df0wi+CmyzdH9+8BjU4@L}6h z_+Z1GPWA8D0%v&X){uQTgInj$=A&O`?*4X#*m$bgj{9ANZ%uBtQ;ho127cb5j}2dy+e0GQ zT^T$CCL+FzY(QqG`2@|Y(2tF-yU2)6gXfsdBC!Na3j(w~44z)}A-30s*M#>=IN37^f!D)Nty4W zSV_V$;+}z+$9?0bvz*Dx&Ec#gL^=5=OP8ohB07|ulXJP|@x!5R@)o%(b`hlJ?}wwk z!~>cNbfXsUQPY#Ely!*jyGLr+nWN2CkmUv*{yBfgU0mr3;?s`LZPJkjpST*AU(`j@ zEL<6~X7O7y3D^KHwet5mkW5ByFt!9xzLS9GlAZqc>ZLTzwz1x*`tkd3VWjY^vhc)- zWfUKVrn>I;cvxK-cp-k9>iWBeJ32ZVsIknQ55&b5H ze{;(hAVj@3P?73qAMWV$g{3*?d#i(gQkS7CEkpLL4>08>Q(hkZM1R|iOeJhROU^c8 z>Ge0aAFh}s;WxTS#M>U_4k!blMg|8$g&xqi&Mp+cpD(k+m-?2c4~5U3p1luXR3(*d zTanDn*p9eA`G%b0>^{)Y(YL&>*DoxAy*1ueL#DKNaeIw(Ch{|6JLwxn+pQyFiADin zZkRiSE5#nKl9A!U^V4UAf^Q%PG@qso!#kA9B0N?0JF+2nC!eLNVZFqs1N|9eS=*1S zoE=M3aFQWijO{}E519YvtUyq~j5BCH$!g$6FD8r~XPf@JVyzHzow0WyF&4j0Ycub@ZK1SoT zCKLSRfGQ?2NjkotRR+e(Uo}1O_+a^Rup;=B7EI|js77UdV^h@OQ1{qcBnI%-a@oa?ppYoG(&HC6Vh z6|4Bs%wI(*5U;4|4W94p`B}Z-E#bdlF0(0HN2IY@^3mTV$905ifp^RcZ||(|tKoSK z&&ALl10=%wFU^V}mWN9cIoz3QrD}J-{PF%NQ|m3KOnr3O@R);52n)b65}55{5`zL7 zD~;P>K5l4!>ovV!e`G4n(qcO_?Y?&rz5hLnT^vafJ)ls!HB}cQsslk?yhB&1f7S>FSEjozAyDbQye?|wkJ z4z4&U9Q-)?*Hz);i#YJg{mnpjQ1TFxZJ2h(w;#}N`;I5S;U~}_MhO(k=f0#nw#6-! zx7Vfx%m~)sY#-K=sU?QcL#6`F^rm01vnt#r#bIyW>h4(vpKcXxTZBJ4OdusHAG;SZ zXx*k$7#lw}bdl)WWMo9^oWDP+Az^2VYC72q%b@D7Lj>1y&dl57wQ#eh4V{$FG!p+mFEABbnQ!*KJxg^E^M%G4dH$IV?}y z2*q%B6)FWgs=Pt_YpzoybLhV_I+lXb^Hg(hBCZiUF^fhc;}QBavQ}gW&VwtZJ=(i} zKB?CfPlWwB#y`uoSn_^|S{)hW0vu7aEKua$nfF zh#T7QC34D)%_c5arKKmAU09wlL$HR632UBp;%mGJuAflYe1|*isbNJimyBVOG@^W! z@-NJo~H9DHQ~Dh1AKO({$@ z!9Bpgv6z-Qg+Q1xq<{EZU0b6d$r9LA$T!uUVp01uBC=>ROl8j%zlSKT=Ug1twdU*d z`EQASPwY+AiHgmioD-y3n-g$e6Wzm9E3Z|wIX}CUny&n&pNsNtWU2LTim9kUsQwDKB|yaEup7d1K97mJ_+4rOD$v(=^b>|WMt{el~3s$ zBC=S}q^u{R+j5`9Sv6cTJEL(NTZt(aYf{E@*E~7w75uxST8Mn}UL<{WN44Qt(*pGH zm+WMw4iciZ5>{ZNTv+uG0n=YZlB{aT;6h!hLb_V3^WGk&C3xM77^$SV~Sdm(e}8f07a;7YK}h%TNuw^2=6rZ>URq-p)j=fp>L_L&p?eH}tw%_~b7mE5 zxxYoD?BG<(-rIef$F(*mS<+7y4P z=AQLj5f<{kFbeRt55mhSp%t#TGB1_+K|FAprcdXW=ByOv=Fql(CGm;mZJPYHvPII$ z*jV@9JF_9Oq?beSLkh4yl+%pDm@4uN{a;mD{^!zOfIJ3>)qc0rgEK{-V_V2pnLG&s zg4rW?Rzf?D^}VUbna_;o=M+D7Tf1koH_+Fw7ZN2ff)xRE5FWtM^P)_ zbF}n0cG@3mFS{mUuka>P4o<_x(wKIMBW9o2j$gcXnt0C8*xD@l=x&pfzR1m+i)7x& zzi*qtaj@Gts>!M}ua~eW2134`d`?N9SF||eH~(b>K8&K$5D99PXd}veTT9ovfY>zhj=VTzDO1W$oP4%rX zZkaL1u-%EpRQP&2Wz%UVpe%$p6T5_9N$0i{>=zo9D-k_J0fG8#l!+=D&N2N+9v_W~ z*Gs)UjX2uB#@@gl#-PR zqI18z?Kif=Jw9PF56WtX(ZzF?3I+Ys#d9BsT}NCg9x``rjN-Br7)9n#X#@CjvQ=MT zKezC6X?_pre&xnF!+CZ>2m(dXDq^Rl0K7qXg!QLGDV&HMau2qTqn9}#=DAggb<$H-c>vGMv=AJt=Cn!Fkf2Q^S(C%p?S%KJ}6J8Q^a{7qkKsGD~V(5h$co z!lWJ9ObCN~K+yUEU?RagRfW_7%f6JkEzPz@8UkGGbRfB)5qsxD3{YnP5Nx@-Fa?QG zZM`MML;raGZI;$c{-_#%kL37YWdK});^H38a0tmYA$aBT`hq@JTi|E}ce{rurFHiYbG zdt#6tv@cb?87A9NELU6^xOOk^RTF2kQgO3dMxcef{;v3G!51G;89cTPhWgXo_Cxu&j0N-*#pX=x0cr6mBI$&RamqLIP?cY}nRY|- z{UHN#G~N6%vGGgyuW0L3-p`mZQF{9Qt>6DN$J7@@g!2@Nc;xVR2)AcXux^eBZaCZdvXQ`G;{E-FFQ zWFC))pBnvx^ii~o;<4IH&ycg!kuUt}S&`v1)VF>4oy>B&?!Jxrb&dHcwwdVeV+kL5sLYG&^^f>G>J>$x_p0lCWUZ6@N8Clkv(MW;fr%aWfO&pTRx@^{Z!h zSw8;&0mRj8Da*dp6b|R*OqN&WUq#r(g_VhcF_NpV|3l(%>i-FZFW3Rs+CjAjMPi_Q zp;F)vaiH8_hPFzx9vWv&djyp<9(i{SU%7P_f!S=T2ex<_;x}hS(`EjRIxcwfn zUiOXc0qx}Eb%Hr@))|tvV$S<%M9Q5n9~!yC?!S(GbcssQxbm_JsbQ|N=lu}==wFl; z=EJ45E^>0B#>h8C&AMDYA{fy7j=`#BJ%uBssUDm}@dR1xIQhW7GICRpa%^idFUGj= zPm=JcG}0{>&$BPsq_Al_C4W}KD?CgSHy zRZ$XC!w}Ek6_1|SGKiD<`7smy`xp2(8h`fZ=pkSg$ah*`)TOkuj|V@3#X!a_qlzL2 z1{9{Qw173}1zyZB3o7*U2+O%lh26pX160^;G=6YtE#4np^^x?C5U;`QN4`+`X{qK> zOInM4u$HTfc;6MToZF33`et(|Jx|MZBwyg3Zvt_@-H819m+_`t3py`px^*=1BPTj! z>4vj**u@p;RlH1H*g1pzxgqq1?n?+Ue?i8B zbQZ<)LatvzU8teLh^03&LIzASQSaQ5r%;Any-r}K(&9PjFj2u$YSt*@cfiLj2qcx2 zk$~QHitbr+pQyHMZ!3;8r;e!Az+bnuQV_GESZ(qR+n zc~q=uyD1lT^{=Xth&iwme|p+!r+Usc|2n|ICGK(s@THLffm=Wytp_e!yr2qmJlHvY zY^LveC=bW%x0lqY>k)>xhG_F=Grs5B=Q?SWNmHG*CC5qu>?=gmokE5H_9kbmu!PUy zs6(c|2{MJx#kOi+$i>muKAW7$V_Q|KYTB$6r1r=%dP`-XNh3-beN^7FZ^q&)QbbW( zr~Q)$Im5*(EP|8JIjv1ScNg`1_09Lwaa}vGdEkBw20_u7TVh8qWT8P>?E!tSwDJQ#Cd zz>8~}o}3>#jv_v$aF>2J*sodU86ojsM9mR>9e*VB=$R@0&_Wt28t^&n%pgCmTp;h! zhi<)%-4?b-GPHl>rO;xwD6oWW^>HO0wbYw#V)Q39vZQ8j?w zlWRd^%*W?{*$$(R-!7vuz&a&Q(3wdDZ=7KMkIcIO2RYf*hiW}Qh#AL9v_=s;iDjuk zh+>uGs>Cy!Z#Ob0|INrF(~vyYLu;1L@J~YsQS4;4l26`FM}RVfSLg+ zqxcy()ap}qS1x+!ZKKS%u~pLfMS!_(-PD9ZmISLUx&O4XaT=I@+v^~9pM}`VP^^m? zIPNAL;#ZDV04!5~F6Hf0eO{VT1!!3sM3D9`knD5RnqI3p8eH`{UD^!tS?Py?B;%lY z%wk^R3d!vrQgRQ%Alb}-%eN@<4YPK2S8zCD|@ZvyC4<8H%r<4A&W&o*49@L9a?k!sEZb#eR5MG2o)1~ zq;1?A!DB^m&mVuFjHBc}b2;e4;)x{t0%)-+fxOr}aP2lo90?OypQu>+ruGfZh9xK7 zH`)%6+IN7U^o}9N%zoVm9*l9YZ*4o+LmWhgINviFo>w=aY^bhLfp#IlTL+0UbReXl zk7S|VyEFm>MG3T5H4XCx{M6wcIj1!Lv9SFwh|7k`=hYZ(!O`THs9m8Fr}=duk^R;} z$wsv|_E*9O&sScGAVp&X+^b9AYy3;w&(N+p1%(APq@azTtE;GJMS%K&mBO(k`K!0J zb@8JhNR}MnHYqwf+L$;AiQm5ki92f^30cxF+0VuLW+p2C;+q}T(`FuOaC(L#=JJow z-Y$*D#jKg*1YXTHcMfSXAfB@pvie{QLQI&V^9b(OtfT!?1Ha?S*RNzOOKstBeiMw0 z|8nla_3G8^1t1o&m2s~nF%YQ<1drJc5sua9|M4Iwfp3;-0XL=LM93jS0*1#5Cww?_ak|BQKu zm;wYvU{Q|mBWTb)J>kotD8c`U8uCZM9^%qtrKL}}fos-stFbS8pUpL=FXKM(b(wBS zaf5mOpZuZo@LUHh)<$oc3`LqFd@BL?eHGzdVz8>at3;nJ3TSC*apl(Xq=+nVd2J0($IRz= z7AD*2+EAiD6AqcJqC5IfDp498kV7x>n2p~il^8FS$TVgiD9od#v!Ri-mI0ao(Af2WeqSI#4BV8L{GC}N8(oi1B7W4v>d z$@pRhm|_NIcf+?}!T_P;*M8z4>I_5w;*~1t2Onwk2M^G=5HdcA;dZe2UxW&CNhlh~ z`k($~*Op(-|FKuk1!z9vpNP#EQe@3 zuAj|k+3oVHdOLbhr(n|gV4QEuzF~Dvx$@)v8*$9QZ9qkIz(S?*R<*;kC>NONVgjU# zD-Jgv+}>c>M90rvIGqSUO=i-#g-vfWQKR0E$uCk+TPsTgw$^!bC9+f9(9;iS&=ZHAS) z68@|m3m}J{=Y4&gN1NCSZ%`*V0*c-2~x_kBIDydIEj6|HX)RBQ@=0N9?T$e zLxm8(9JfDC(C1$TWmm=dRpaDRrV_b;S6?V!KZ&uLw#~53v$%gh} z%}EQCc%({?f=?+N@C%ec!wEF@j_b$$Em$yWMAQdM<+pKH9W5a5S%oR@G|Hc&X>Acgid*ItgXh2Fwt zG*7p&Eo%LXyaWN^=ill1wG5UH$p%pQ*%VvocJO@!Q$+jKL@Fu2hpBaqpw=^PKy4F> z=D&!hy5>{yyJ@F0iwo&E^A&T_jPoFpn6T(!P;n8!-yapl#v`<$tk6W}Om+`&d208k zU^75ro83YUzdRmelP%VQrIHLSI9#O6EbW^C4mkk`iS7VH<~HwzLvWSrM;8*A06!U& zZs6>Uwkbq9#srk9fU73<^K9?vI&hoFK%i-u{|@VJRY#Sz2*O@aMID$Agx}ie2Wjd7 zV^oOiV)@K;mDkdu*Dgz=X0FelA+ZC^0~>*Y|K}il(FL`4E(7@-MSZ9TO@|rsO@9-x z-+d7RMI--{l4IW!1@}L->%U|79Ys_sv9p&YzS&gZe*iIKim^1`j|=TCjT*Ce-Bt@U z0dDw>FDD5dbl25?Fs^{(^P3oqz-d5fI<(+^l}6RB`i79?#kYAUz|a2|0cmJ{<3^=U ze6V$jf!!Qv>gek+!bJ@ksLE+RtT02yaQMyfwCz4$VTtV-PW1)g7U234%x_43wvG*?}4nAM+XE9@5Ph3y&so6 zvn~r00yV0Tw6+I)dm?U)-=^I;F^)nl$kb93+KW;1TCc&^tXwBUr4~7Xc72cCoEjAY zl&PWUG_sLNubzQ)T*9%$nvedD8R`4s#2cCnJ@cVxhb9+gh|rnelwckq@i$ogyM&7?$)CgB%|{V5 z{FPH4ef+#YlH0#DS!N*RbL3J0-kkgN_^^HSeDBxYm#k*&hvD34-{$(>8xPVbcUan! zJv5gE$TE|uJjj4AoT#$W3OEKgv_Rv2kla;e3~IQCpB_Eu>^zPTDSlv&Oq#PbZLQ>}JW1-nctP7KEC3Sr#L|W?^mOM?aF!Xi zgX=P|ez_Fz&y7^02Xk z%zr0#hSw4bqPs{;z1nP2Ns>$9Wt56bbTs;jgEtyShBuakyX}|su2x{a&7yolDx7JE zF&j%Py8OH?w-8A1R?<$1O zor7i;&!>(7{@JDCh8LfO(S7v9-MrjzLa600z;|134yF&PtRk=qOEu&F>GDZFzB)VE>N7 zmHD+n=#x?JZxza~e3gnbX<`(sD5&aalz zk9w5q9`AEK49?#sZF?H{TVY_i^9%Pv5`c`_sA3Z|8bn=bY=cJRgte z2jedC)Wdh=C=J8e@9T4;#Rqd_V(gJ?Hm5%W0FY$rrhYAXb)Y&hFhowv*Mc;Y)_%GB z{Eq6Nnw|JcZl#m<)-hXNs78N78u$Khv7)YzL|qHlmxm+0b?+x3$@@$au(Gl3VlOcV zJk0!H%-#13qGl=+0Ug9(L+@YvWFtM>DfZ*Ov|s&6yKju$EufR2E3c|B><-N9L^@tW z!yUct-g0wQ+Y%D0i*!~3vcUQVpN|F@ATnK42{&%_4f-?h|K6+mXHEe1+{ERc)@8JZ ziPyKUp%Fl~KTgU?-v6DJa3@f$tgW#AOL?>7_wQx71Fl}pbzo9AjX9oWQlr@_VybWKDD4bXZ(+cFh8D==X6r^=j0LcIQ)2ZJvh*kPTOhA``As_SRba~;k6J?cBuG? zd6`+Om|{m%;wtZ*b?~)N#;8F__A&QV#H(t~GVo6H+NIOn788uC!Le(;kYWo15bv-!uk;gUe#M5bs*w==0U9ek`L9p$Mak?;k*)k%fv`G z72w>ujgzv+#6|wG-R2C(YL4GDh@>(lVdbrJ<+qNCRu#_=D7M4;+3CW)vW1=ft~!!U z7q01ixf|Ehc!v{ljPPk0p(%Gx`nNFf6b_d@7X?9w^bdIyK6UJMwmhxdlMiq>j$Stk zTSJV=d@MV**-C-)BA?h)^Z`t1oCv}UAi`qSHjy@3iZ0f?^QdYWPU!GExts9iM+v`H zj+dzSw}xI4=7>AK{kunBX5Vd9SzrO&;R@a8Nca_iwg4F1hbatctYSOb5;1l@!it~~ zbF0z7K*V6dlYGeT{-?b(lUs@)B%#jLlpsa?Rr`dP3jqK}8Xq)Q4-*`UWoz_X?iBZyF>1!V_y$hOI(_>iM@(+-}t&CaaWtt=5 z>*q?}C4C2RfG*1ngDAXnWkE@cXAgB_SC(8`-C~mz>Du0JICOW12;p5EZm$++r8QN_ zKPVY(`+38Dd#8hZq#|h5kCHsWxNa*vMZ06(Vn+<-D`cG-u~z*AflV*U1sk{~eRFQ@ zBX#jU=BCCE^^9YuDUGtVV=IHRArC?$0cpYO{n|xik**uMgJ_>pCbiGzxsL9CuC5*# zb5-f|$%)1aTBIcB?!l)Uq)v{n`hpoJJdQT!)+o$rvp%5H4?}kSPjgr|*B-{kfcMT% z^*wxq!{%nia~gvh)MK8YS^r5}N!ZxpN4;O7$|-dGcc zO7(xqT(daU5I7y-&2@Ju2Vl3zaqY{%Q%x|ARj0j zG)L3_sMJ(15)vw~!Ky3slV`T?iPmQQH!e=;u&aFD>z#Z)v++-bo4L9uIhH&ybEp1g zvp|(XwKdh8UgXRIcH3Az_9e;X`ncprp$O40quL5RoTtE6TgKyof=#aegn0r|>dZLZ zkczsR^r;L1aGs=H5oOVSpB^)*3TwkP+cLAaj1q5Ax+Wj-kMci8b&Q;w7s8Z0x2#O{ z_B0cp{lY}@d>U&gZc{E;eqK{=|G`OsUrJ!3!OGD^_J8Pie#8OntefXlTzaL{dWPZc z_pyXKZjtPu!loe}GWR%jqGF^!-V+3#PKYyHNYA%MiXzgEqq-{%z$|EnS-bmy@?fU=C zz%oExoqlY zmihidihMSCWqRlXx&AJc#;k0?p2kVc4R<0$HwI7T&!0q0SS^pH?>^6~-YCO3_33RD zupt2JO&kpPmoi(!!|7ks^K1O8P^1y_DKbkZG(e0#(%QvI=&kC_L`f9EW!lVsS#3|x z(wPe`0lN`fYTR|;nd>y#acL~(Jy7l!12U9vfGQ>)yfaiJy`9v1E9<6sfYtf7J zZKKEZg2VoxpgZNs9(#g@z^lotamgwY8VA!w!=WKOb;h?6l3R9mPq%ru+h_i7n|HDj z;;dqvTreL>O5Io-8xDQ1q*9dFYTTI65bGg#1qZX;1;BE*HtxU4kj8;*Ia8u|+^K$G zeAfezLP4K`UrJP=?(hybWiVBOXeMQowZT|`N67E`{(s#$3#7_(1f}ZNj z6dz08DaEP-W|6R-V*52L;p~}gFk0@?T!!OU2=T4c+qoDnV<)_c8n{n#1$WIj#`4DP zV-I-lJKJ6i+a?uhzByd?umzQ^PW3p#VH_35J*eYe<6&+KvS);jutGTx3DT zS}3-Y1sZ+9(zO)zeS2cVI0;YFEIgdrz98%!PQ6mUl@K^#F#rZkdNI_J7v~&#HACL)?H`((3bw zDompv2QjKC@=AZFAn+ly321X1z9(-8iwd8v5b&-ig|z0P>orSB?!v&vk>4# zr|;92{Yep#gblmokr4y z8&!5{+n7(gox5NGS?4vkl^BaM(ten`Rhd+cOVC{n|EW$sOHn@LKe9mULM;G*)m+JF zs)=LwKD-79r1;ott+Yep6s+e+)s_u16N?_q>-2^LkQ_>J%+#hAAqv>Bk337i9KzYochwGYJdMf0F(>QX8R!O!BzIxOp!kD$6KI z=Zl{w#_v?UaV%YGV)5oIk1HkT5fHYE=ifDWkp$1b3zvhXW|_oXsqJrPK&2EM&*!!R ztt`TQ43P=rt$J1qsY-_yg_-i4HC|sIFFrZhhE7A<` zLDSKt8#yCq125e{7exaAr*gMUf}n&<5v+P9H^EPNKNE~rHKIqyOHbGFE%;wI;x}dK zT)S7=yL1E8k`2r*Yi0-TB&!`eTMt*N#!Xb5Q#GiWm0TOPqZZk@y;l0I1aN1-5GBblMn_!MZmC~LFF-c4X=xa8Cka-Tl1<+0kzgW! zjjjTk;I&c2C4bi)X?63H9cVXd)_jcvR@R?vk>l50Hz_2^N**wuKs@db4%q2lN*DXq z=?(75rn3XnouA20kYUlZL0pgY*-R8+9p-;*xQ3ra4|Kmt%Rw`%z3AYTzS%SMN-Gx?DybTI<{bQ>U={{m94v~z?nN8!n#v_|zKaa% znoSfIU!wk&%Z1fw>iq2~c|dLw@e9b^x##i_rR2Bd>J%T6I%KGa0jnr{riPb-Yy>o6 zY554tSsN@|JPH|+`i0~@>XK`Q73$@NdpWQvi(@pr9#kTozj^007eK~!%wfvTw$R?mS?=q`-(%58B@bO{v07YH#uGy|9ipV<;oN z(rC((@0#SBQX>IR?^O9EXe|-*#Pvt#%di@WNkr;H9!7aIGEGon3HR2bidimap.h +

A bidirectional map is a map that allows you to create a bijection in both directions between two sets of elements (K <-> V). It is possible to retrieve the value using a key or retrieve a key using a value. The naming is simply used to differentiate between one set of elements and the other set of elements. There is no difference between key and value since both can be keys and/or values.

+

BidiMap Implementation

+

This implementation uses two arrays of pointers to an entry containing both the key and the value. Robin Hood hashing is used to minimize worst case scenarios.

+

BidiMap Generation Macro

BidiMap Structures

Members

BidiMap Functions

BidiMap Callback Table

\ No newline at end of file diff --git a/docs/includes/deque b/docs/includes/deque new file mode 100644 index 0000000..36fb4e2 --- /dev/null +++ b/docs/includes/deque @@ -0,0 +1,114 @@ +

deque.h

+

A Deque, also known as a double-ended queue, is a linear data structure that is able to add and remove elements from both ends. It can also be thought of a double-ended stack since you can push and pop elements from two ends. The Deque can also be used as a Queue. The only elements accessible from a Deque ar the two elements at its ends (front element and back element).

+

Deque Implementation

+

This implementation uses a circular buffer (ring buffer or cyclic buffer) in order to operate on O(1) for push and pop on either ends. The only case where it takes longer than O(1) is when the buffer is reallocated. If it was implemented as a regular array, adding or removing elements from the front would take O(N) due to the need to shift all elements in the Deque.

+ +

Two indices are kept track of. The front index and the rear index. These represent the both ends of the Deque. If an index reaches one end of the real buffer, they wrap around to the other end and an element is added there. This abstracts the real buffer as a circular buffer with the cost os constantly checking for boundaries and using the modulo operator.

+

Deque Generation Macro

+

CMC_GENERATE_DEQUE(PFX, SNAME, V)

+ + + + + + + + + + + + + + + + + + + +
PFXFunctions namespace or prefix
SNAMEStructure name
VElement type
+

Deque Structures

+ + + + + + + + + + + + + + +
struct SNAMEA double-ended queue data structure
struct SNAME##_iterA double-ended queue iterator
+

Members

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
struct SNAME
V *bufferDynamic circular array of elements.
size_t capacityCurrent circular array capacity.
size_t countCurrent amount of elements.
size_t frontIndex representing the front of the deque.
size_t rearIndex representing the back of the deque.
it_start [1]Function that returns an iterator to the start of the deque.
it_end [2]Function that returns an iterator to the end of the deque.
+ +
    +
  1. Full definition: struct SNAME##_iter (*it_start)(struct SNAME *);.
  2. +
  3. Full definition: struct SNAME##_iter (*it_end)(struct SNAME *);.
  4. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
struct SNAME##_iter
struct SNAME *targetDeque being iterated over.
size_t cursorCursor's current position (index).
size_t indexRelative index to all elements in the iteration.
bool startIf the iterator reached the start of the iteration.
bool endIf the iterator reached the end of iteration.
+

Deque Functions

Deque Callback Table

\ No newline at end of file diff --git a/docs/includes/hashmap b/docs/includes/hashmap new file mode 100644 index 0000000..86c4900 --- /dev/null +++ b/docs/includes/hashmap @@ -0,0 +1,6 @@ +

hashmap.h

+

A HashMap is an implementation of a Map with unique keys, where every key is mapped to a value (K -> V). The keys are not sorted. To access a value you must specify a key. This key is hashed to a number that uniquely represents it and through this it is possible to find in which position of an array of buckets the value is.

+

HashMap Implementation

+

The HashMap is implemented as a flat HashTable meaning that every entry is allocated when the collection is initialized, but they are all empty.

+ +

The HashTable uses Open Addressing and Linear Probing to resolve collisions along with Robin Hood Hashing to minimize the worst case scenarios.

diff --git a/docs/includes/hashset b/docs/includes/hashset new file mode 100644 index 0000000..49ce181 --- /dev/null +++ b/docs/includes/hashset @@ -0,0 +1,6 @@ +

hashset.h

+

A HashSet is an implementation of a Set with unique keys. The keys are not sorted. It is implemented as a flat hashtable with linear probing and robin hood hashing.

+

HashSet Implementation

+

The HashSet is implemented as a flat HashTable meaning that every entry is allocated when the collection is initialized, but they are all empty.

+ +

The HashTable uses Open Addressing and Linear Probing to resolve collisions along with Robin Hood Hashing to minimize the worst case scenarios.

diff --git a/docs/includes/heap b/docs/includes/heap new file mode 100644 index 0000000..ed2ad74 --- /dev/null +++ b/docs/includes/heap @@ -0,0 +1,24 @@ +

heap.h

+

The Heap is a specialized tree-based data structure which is essentially a complete tree that satisfies the heap property:

+ +

MaxHeap

+ +
    +
  • - The root node is the greatest element of the unique set of keys.
  • +
  • - A node key is always greater than or equal to its children keys.
  • +
+ +

Minheap

+ +
    +
  • - The root node is the smallest element of the unique set of keys.
  • +
  • - A node Key is always greater than or equal to its children keys.
  • +
+ +

The heap is mostly used to implement priority queues. Sometimes it can also be used to sort elements. There are three main functions:

+ +
    +
  • insert : Adds an element to the heap
  • +
  • remove_(min/max): Removes the min/max element from the heap
  • +
  • min/max : Accesses the min/max element from the heap
  • +
diff --git a/docs/includes/intervalheap b/docs/includes/intervalheap new file mode 100644 index 0000000..d9e6a23 --- /dev/null +++ b/docs/includes/intervalheap @@ -0,0 +1,10 @@ +

intervalheap.h

+

An interval heap is a specialized heap with:

+ +
    +
  • O(1) - Find Min
  • +
  • O(1) - Find Max
  • +
  • O(log n) - Insert
  • +
  • O(log n) - Remove Min
  • +
  • O(log n) - Remove Max
  • +
diff --git a/docs/includes/linkedlist b/docs/includes/linkedlist new file mode 100644 index 0000000..4770b2b --- /dev/null +++ b/docs/includes/linkedlist @@ -0,0 +1,4 @@ +

linkedlist.h

+

A LinkedList is a linear collection of elements, whose order is not given by their physical placement in memory. Instead, each element points to the next (singly-linked list) and to a previous one (doubly-linked list). It consists of nodes connected by these next or previous pointers. Unlike an array, the LinkedList can indefinitely grow.

+

LinkedList Implementation

+

The LinkedList is implemented as a doubly-linked list and allows insertions and removals at both ends in O(1) and in a given index in O(N). The list has a head and tail pointer. The head points to the first element in the sequence and tail points to the last.

diff --git a/docs/includes/list b/docs/includes/list new file mode 100644 index 0000000..5505ff6 --- /dev/null +++ b/docs/includes/list @@ -0,0 +1,8 @@ +

list.h

+

A List is a Dynamic Array that store its elements contiguously. It has an internal buffer that is pre-allocated with a greater capacity than necessary in order to foresee new elements being added. The items can be added at both ends of the list and at the middle (with a given index).

+

List Implementation

+

Insertions at the start are more costly as it is necessary to shift all elements one position to the right to give space to a new element being added at index 0. Insertions at the end are instantaneous as long as there is enough space in the buffer. Insertions at the middle will be based on an index. The index represents where the element being added will be located once the operation ends. This operation might also need to shift elements. It is also possible to add arrays of elements in the list. When the buffer is filled, it is reallocated with a greater capacity, usually being doubled.

+ +

Removing elements follows the same principle. Removing the front element will require to shift all other elements one position to the left, thus being slower than removing from the end in which is done in constant time. Removing elements in the middle of the list will also require shifting elements to the left. Is is also possible to remove a range of elements or extract them, creating a new list with the removed items.

+ +

The iterator is a simple structure that is capable of going back and forwards. Any modifications to the target list during iteration is considered undefined behavior. Its sole purpose is to facilitate navigation through a list.

diff --git a/docs/includes/multimap b/docs/includes/multimap new file mode 100644 index 0000000..d428aea --- /dev/null +++ b/docs/includes/multimap @@ -0,0 +1,14 @@ +

multimap.h

+

The MultiMap is a Map that allows for multiple keys. This is a data structure that has a very narrow usage. A Map (either TreeMap or HashMap) can also work like a MultiMap if a certain key is mapped to another collection.

+ +

Map<K = int, V = List<int>> maps an integer to a list of integer.

+ +

MultiMap<K = int, V = int> maps many integer keys to integer values.

+ +

The difference is that in a MultiMap you can store keys that are the same but might be different instances of the same value. This is also relevant if your data type is more complex like a struct where its ID is the same but some other members of this data type are different.

+

MultiMap Implementation

+

The map uses separate chaining and robin hood hashing. Its internal buffer is made of a pair of pointers to entries that represent a linked list. So accessing map->buffer[0] would give the first pair of pointers. Each entry has both a pointer to a previous entry and a next entry. This design choice was made so that every collection in this library has a two-way iterator with a very few exceptions.

+ +

Each entry is composed of a Key and a Value. Entries with the same key should always hash to the same linked list. Also, keys that hash to the same bucket will also be in the same linked list.

+ +

The order of inserting and removing the same keys will behave like a FIFO. So the first key added will be the first to be removed.

diff --git a/docs/includes/multiset b/docs/includes/multiset new file mode 100644 index 0000000..fe1383a --- /dev/null +++ b/docs/includes/multiset @@ -0,0 +1,2 @@ +

multiset.h

+

In mathematics, a multiset is a modification of the concept of a set that, unlike a set, allows for multiple instances for each of its elements. The positive integer number of instances, given for each element is called the multiplicity of this element in the multiset. A MultiSet also has a cardinality which equals the sum of the multiplicities of its elements.

diff --git a/docs/includes/queue b/docs/includes/queue new file mode 100644 index 0000000..c5644ef --- /dev/null +++ b/docs/includes/queue @@ -0,0 +1,10 @@ +

queue.h

+

A Queue is a First-In First-out (or Last-in Last-out) data structure. It is a Dynamic Circular Array where elements are added from one end of the array and removed from the other end. The circular array here (also known as circular buffer or ring buffer) is very important so that both adding and removing elements from the Queue are done instantly. The array is linear but with the modulo operator it is treated as a circular sequence of elements.

+

Queue Implementation

+

If the Queue was implemented as a regular Dynamic Array, when adding or removing an element at the front, it would be necessary to shift all elements currently present in the Queue and this would add up a lot of computing time. Shifting 100000 elements in memory by one position every time an element is added to the Queue is simply not efficient.

+ +

The Queue has two ends. The front and back. In this implementation all elements are added to the back of the Queue and removed from the front, which is more or less how queues work in real life. Unlike a Stack that only has operations at one end of the buffer, the Queue needs to be implemented as a circular array in order to quickly add or remove elements.

+ +

The Queue has three main functions: enqueue which adds an element to the Queue; dequeue which removes an element from the Queue; and peek which return the element at the front of the Queue, that is, the next element to be removed from it.

+ +

The Queue is used in many applications where a resource is shared among multiple consumers and the Queue is responsible for scheduling the access to the resource.

diff --git a/docs/includes/sortedlist b/docs/includes/sortedlist new file mode 100644 index 0000000..290ffbc --- /dev/null +++ b/docs/includes/sortedlist @@ -0,0 +1,2 @@ +

sortedlist.h

+

A SortedList is a dynamic array, meaning that you can store as many elements as you like and when its capacity is full, the buffer is reallocated. The elements are only sorted when a certain action requires that the array is sorted like accessing min() or max(). This prevents the array from being sorted after every insertion or removal. The array is sorted using a variation of quick sort that uses insertion sort for small partitions.

diff --git a/docs/includes/stack b/docs/includes/stack new file mode 100644 index 0000000..359b60b --- /dev/null +++ b/docs/includes/stack @@ -0,0 +1,6 @@ +

stack.h

+

A Stack is a Last-in First-out (or First-in Last-out) data structure used in a variety of algorithms. It is a Dynamic Array that can only add or remove its elements at the end of the buffer, in this case, it represents the top of the stack.

+

Stack Implementation

+

It has three main functions: push which adds an element at the top of the stack; pop which removes the top element from the stack; and top which returns the top element without removing it (it is also sometimes called peek).

+ +

A Stack is used in algorithms like backtracking, depth-first search, expression evaluation, syntax parsing and many more.

diff --git a/docs/includes/treemap b/docs/includes/treemap new file mode 100644 index 0000000..ceee166 --- /dev/null +++ b/docs/includes/treemap @@ -0,0 +1,2 @@ +

treemap.h

+

A TreeMap is an implementation of a Map that keeps its keys sorted. Like a Map, it has only unique keys. This implementation uses a balanced binary tree called AVL Tree that uses the height of nodes to keep its keys balanced.

diff --git a/docs/includes/treeset b/docs/includes/treeset new file mode 100644 index 0000000..865df05 --- /dev/null +++ b/docs/includes/treeset @@ -0,0 +1,2 @@ +

treeset.h

+

A TreeSet is an implementation of a Set that keeps its elements sorted. Like a Set it has only unique keys. This implementation uses a balanced binary tree called AVL Tree that uses the height of nodes to keep its keys balanced.

diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..31ef410 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,1111 @@ + + + + + + + + CMC Documentation + + + + + + + + + + + NAV + Navbar + + + +
+
+
+

Introduction

+

github

+ +

License +Build +codecov

+ +

The C Macro Collections Library is a compilation of macros that can be used to generate common data structures for any desired type. These data structures are type safe.

+ +

The documentation is currently being written in hopes that in the future it can be used to help you get to know better this amazing C library.

+

Why this library

+

C is a low level language and lacks all the data structures that we commonly use. Many high level languages already come with these collections so that we don't have to implement everything ourselves. A lot of third party libraries that implement these missing data structures for the C language usually make use of a void pointers and a lot of macros. This is why the C Macro Collections Library was created. All you need to do is to write down one macro and which data type you wish to work with. The library currently provides many data structures, such as:

+ + + + + + + + + + + + + + + + + + + + + + + +
Linear CollectionsList, LinkedList, Deque, Stack, Queue, SortedList
SetsHashSet, TreeSet, MultiSet
MapsHashMap, TreeMap, MultiMap, BidiMap
HeapsHeap, IntervalHeap
+ +

All with the following features:

+ +
    +
  • Type-safe - No void * pointers are used. A collection of type int will only accept integers;
  • +
  • Customization - Custom struct name and function namespace;
  • +
  • Bidirectional Iterators - Full support for iterators;
  • +
  • Nesting - Collections can be nested (List of Lists, HashSet of Stacks, etc).
  • +
+

Library Structure

+

The src folder is subdivided in 5 other folders and one file:

+ +
+

The dev folder is an exact copy of cmc but it is filled with logging information regarding the code execution and debugging.

+ +

The sac library contains fixed-length collections with an internal C array. They are allocated on the stack so be careful when using these.

+
+ +
    +
  • cmc - The main C Macro Collections Library
  • +
  • dev - The main C Macro Collections Library for development
  • +
  • sac - Statically Allocated Collections
  • +
  • utl - Utility like ForEach macros, logging, etc
  • +
  • macro_collections.h - Master header containing all collections and utilities
  • +
+

How to install

+
+

Include header files like this

+
+
#include <cmc/list.h>
+#include <dev/deque.h>
+#include <utl/assert.h>
+
+
+

Not like this

+
+
#include <list.h>
+#include <deque.h>  // dev or cmc?
+#include <assert.h> // this will import from the standard library
+
+

No installation is required. All you have to do is include the appropriate header files, generate any collections that you desire and then compile your program. It is recommended that you include the headers relative to the src folder and include it with -I path/to/library/src as shown in the following example.

+ +

The library has no external dependencies other than the C standard library.

+

Understanding the Library

+

Every macro within the library is prefixed by CMC or cmc. If you have intellisense you can easily check all the features of the library once you include the necessary headers.

+ +

When you generate code for a certain collection you will need to pass two very important parameters: SNAME and PFX.

+ +

SNAME is a short for struct name. This parameter will define your collection so that its type name becomes:

+ +

struct SNAME

+ +

No typedefs are used within the code that is generated in order to not pollute the global namespace. If you wish to typedef feel free to give your own naming conventions. Every other struct that is generated as part of the implementation will be prefixed by SNAME.

+ +

PFX is a short for prefix. Every function generated will be within this namespace. Just write whichever prefix you gave to your functions and everything will be in there. Functions that are part of the implementation and shouldn't be called directly are prefixed by _impl_ (li32_impl_ for example where PFX = li32). Every iterator function will be prefixed by _iter_ (li32_iter_ for example where PFX = li32).

+

Features

+

The C Macro Collections Library comes with powerful collections. In this section you will better understand many features that are common to all data structures.

+

Two-Way Iterators

+

Every collection comes with an interface of iterators where you can easily access the elements of a collection. These can move at any direction, can start at any 'end' of a collection and can move any amount of steps per iteration. Every collection generated comes with an iterator.

+ +

By design choice these iterators do not support modifications to the collection. If a collection is modified, all iterators that have been initialized will most likely be invalidated and may cause undefined behavior if used afterwards.

+

Custom Allocation

+

All collections have an allocation node. This node can be modified so that every allocation and de-allocation can be done with custom functions. The allocation node has pointers to functions that correspond to:

+ +
    +
  • calloc
  • +
  • free
  • +
  • malloc
  • +
  • realloc
  • +
+

Callbacks

+

Every collection can have an optional callback node. In this node there are five functions:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
on_createIs called when an element is about to be added to the collection
on_readIs called when the collection is about to be queried about an element
on_updateIs called when an element in the collection is about to be updated
on_deleteIs called when an element is about to be removed from the collection
on_resizeIs called when the collection is full and is about to get resized
+ +

Check the documentation for each collection to see which functions call which callbacks.

+

Functions Table

+

Functions table is a struct of function pointers containing 'methods' for a custom data type. Some methods are optional and others are needed in order to a collection to operate. They are:

+

CMP

+

A comparator function is used in sorted collections or when an equality is being checked like when trying to find a certain element in a list. It is responsible for taking two arguments of the same data type and comparing them. The return value is an int with the following definitions:

+ +
    +
  • Return 1 if the first argument is greater than the second;
  • +
  • Return 0 if the first argument equals the second;
  • +
  • Return -1 if the first argument is less than the second.
  • +
+

CPY

+

A copy function is used when a collection is being copied. It can be used to make a deep copy of of your custom data type. It must take a single parameter and return a new copy of that same data type. If this function is absent (NULL) the data type will be copied by assignment (for pointers this is a shallow copy).

+

STR

+

A string function is responsible for taking a FILE pointer and a custom data type and outputting the string representation of that data returning a bool indication success or failure. It is useful for debugging.

+

FREE

+

The free function is called when a collection is cleared (all elements removed) or freed (all elements removed and freed from memory) and it is responsible for completely freeing all resources that are usually acquired by your data type.

+

HASH

+

This function receives a custom data type as parameter and returns a size_t hash of that data. Used in hashtables.

+

PRI

+

A priority function works much like the comparator function except that it compares the priority between two elements. It is used in collections whose structure is based on the priority of elements and not in their general comparison.

+ +
    +
  • Return 1 if the first argument has a greater priority than the second;
  • +
  • Return 0 if the first argument has the same priority as second;
  • +
  • Return -1 if the first argument has a lower priority than the second.
  • +
+ +

The following table shows which functions are required, optional or never used for each Collection:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CollectionCMPCPYSTRFREEHASHPRI
BidiMap#b82b28#9f3b94#497edd#00d3eb#b82b28#2ef625
Deque#9f3b94#9f3b94#497edd#00d3eb#2ef625#2ef625
HashMap#b82b28#9f3b94#497edd#00d3eb#b82b28#2ef625
HashSet#b82b28#9f3b94#497edd#00d3eb#b82b28#2ef625
Heap#9f3b94#9f3b94#497edd#00d3eb#2ef625#b82b28
IntervalHeap#9f3b94#9f3b94#497edd#00d3eb#2ef625#b82b28
List#9f3b94#9f3b94#497edd#00d3eb#2ef625#2ef625
LinkedList#9f3b94#9f3b94#497edd#00d3eb#2ef625#2ef625
MultiMap#b82b28#9f3b94#497edd#00d3eb#b82b28#2ef625
MultiSet#b82b28#9f3b94#497edd#00d3eb#b82b28#2ef625
Queue#9f3b94#9f3b94#497edd#00d3eb#2ef625#2ef625
SortedList#b82b28#9f3b94#497edd#00d3eb#2ef625#2ef625
Stack#9f3b94#9f3b94#497edd#00d3eb#2ef625#2ef625
TreeMap#b82b28#9f3b94#497edd#00d3eb#2ef625#2ef625
TreeSet#b82b28#9f3b94#497edd#00d3eb#2ef625#2ef625
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ColorLabel
#b82b28Required for basic functionality.
#9f3b94Required for specific functions.
#497eddRequired for non-core specific functions.
#00d3ebOptional.
#2ef625Not Used.
+

Minimal Example

+

(TODO this example is currently outdated)

+ +

Lets create a list of type int, add some elements to it and get the sum of all the elements printed on the screen.

+

Include headers

#include <cmc/list.h>
+
+

First you need to include only the necessary headers. It is not recommended that you include everything with macro_collections.h, only in cases where you might be using almost all features from the library.

+

Generating a list

// CMC_GENERATE_LIST(PFX, SNAME, V)
+CMC_GENERATE_LIST(il, int_list, int)
+
+

The List is also known as vector, ArrayList and dynamic array. In fact the latter is the best description for this collection. It is a dynamic array that can grow and shrink as needed. To generate it we can simply call the macro CMC_GENERATE_LIST after our includes. It has three parameters:

+ + + + + + + + + + + + + + + + + + + +
Parameter namePurpose
PFXFunctions prefix (namespace)
SNAMEStruct name
VThe list value type (can be any valid data type)
+ + +

Initializing and adding elements

// Allocate an int_list with an initial capacity of 100
+int_list *list = il_new(100);
+
+// Adding elements to the back of the list
+for (int i = 0; i <= 1000; i++)
+{
+    if (!il_push_back(list, i))
+    {
+        // Something went wrong (check out documentation)
+    }
+}
+
+

To initialize any collection we call a function _new. Since the PFX parameter is set to il all functions related to our list of integer will be prefixed by il, so _new becomes il_new.

+ +

The list name is int_list as defined by SNAME. This type is a typedef like:

+ +

typedef struct SNAME##_s SNAME;

+ +

Which expands to:

+ +

typedef struct int_list_s int_list

+ +

To add elements to the back of a list we can use il_push_back. This function will first check if the list has enough space for a new element. If not, reallocate the internal buffer with doubled size and then add the new element.

+

Iteration

+
+

It is recommended that the iterator is allocated on the stack

+
+
// Resulting sum will be stored here
+int sum = 0;
+
+// Declare our iterator (allocating it on the stack)
+int_list_iter it;
+
+// Loop for each element
+for (il_iter_init(&it, list); !il_iter_end(&it); il_iter_next(&it))
+{
+    // Accessing the value
+    int elem = il_iter_value(&it);
+
+    sum += elem;
+}
+
+printf("%d\n", sum);
+
+

There are 6 (2 optional) steps to iterate over the elements of any collection:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepDescriptionFunction
1Allocate the iterator (optional)il_iter_new
2Initialize the iterator given a target listil_iter_init
3Access the iterator's elements (value, index, etc)il_iter_value
4Go to the next elementil_iter_next
5Check if we haven't reached the end of the listil_iter_end
6Free the iterator if it was allocated on the heapil_iter_free
+ +

Note that all iterator functions are prefixed by the user defined prefix and then by iter (il + iter = il_iter). Also, the steps 1 and 6 are optional so il_iter_new and il_iter_free are not used in the example.

+ +

By the end of the example we have the variable sum with the sum of all integers inside our list. We can then print it and this example is almost done.

+

Freeing resources

// void il_free(int_list *_list_, void(*deallocator)(int))
+il_free(list, NULL);
+
+

The list is currently allocated in memory. To deallocate it we call il_free. This function takes a pointer to the allocated list and a pointer to a deallocator function that will be responsible for deallocating each element in the list. This last parameter is optional and we won't be using it since our data type int is not allocated in the heap. This optional parameter can be set to NULL to be ignored by the il_free function.

+

Compile and run

+
+

source.c

+
+
#include <cmc/list.h>
+
+CMC_GENERATE_LIST(il, int_list, int)
+
+int main(void)
+{
+    int_list *list = il_new(100);
+
+    for (int i = 0; i <= 1000; i++)
+    {
+        if (!il_push_back(list, i))
+        {
+            // Something went wrong (check out documentation)
+        }
+    }
+
+    int sum = 0;
+
+    int_list_iter it;
+
+    for (il_iter_init(&it, list); !il_iter_end(&it); il_iter_next(&it))
+    {
+        int elem = il_iter_value(&it);
+        sum += elem;
+    }
+
+    printf("%d\n", sum);
+
+    il_free(list, NULL);
+}
+
+

If the source file is source.c, all you have to do is to include the src folder to the include path and compile. The following example uses gcc:

+ +

gcc source.c -I path/to/library/src

+

Conclusion

+

The C Macro Collections Library is prepared to accept any data type and is highly customizable. It is also very easy to integrate and no previous compilation is required. The library also comes with many utilities in the utl folder that are designed to work well with all collections.

+

bidimap.h

+

A bidirectional map is a map that allows you to create a bijection in both directions between two sets of elements (K <-> V). It is possible to retrieve the value using a key or retrieve a key using a value. The naming is simply used to differentiate between one set of elements and the other set of elements. There is no difference between key and value since both can be keys and/or values.

+

BidiMap Implementation

+

This implementation uses two arrays of pointers to an entry containing both the key and the value. Robin Hood hashing is used to minimize worst case scenarios.

+

BidiMap Generation Macro

BidiMap Structures

Members

BidiMap Functions

BidiMap Callback Table

deque.h

+

A Deque, also known as a double-ended queue, is a linear data structure that is able to add and remove elements from both ends. It can also be thought of a double-ended stack since you can push and pop elements from two ends. The Deque can also be used as a Queue. The only elements accessible from a Deque ar the two elements at its ends (front element and back element).

+

Deque Implementation

+

This implementation uses a circular buffer (ring buffer or cyclic buffer) in order to operate on O(1) for push and pop on either ends. The only case where it takes longer than O(1) is when the buffer is reallocated. If it was implemented as a regular array, adding or removing elements from the front would take O(N) due to the need to shift all elements in the Deque.

+ +

Two indices are kept track of. The front index and the rear index. These represent the both ends of the Deque. If an index reaches one end of the real buffer, they wrap around to the other end and an element is added there. This abstracts the real buffer as a circular buffer with the cost os constantly checking for boundaries and using the modulo operator.

+

Deque Generation Macro

+

CMC_GENERATE_DEQUE(PFX, SNAME, V)

+ + + + + + + + + + + + + + + + + + + +
PFXFunctions namespace or prefix
SNAMEStructure name
VElement type
+

Deque Structures

+ + + + + + + + + + + + + + +
struct SNAMEA double-ended queue data structure
struct SNAME##_iterA double-ended queue iterator
+

Members

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
struct SNAME
V *bufferDynamic circular array of elements.
size_t capacityCurrent circular array capacity.
size_t countCurrent amount of elements.
size_t frontIndex representing the front of the deque.
size_t rearIndex representing the back of the deque.
it_start [1]Function that returns an iterator to the start of the deque.
it_end [2]Function that returns an iterator to the end of the deque.
+ +
    +
  1. Full definition: struct SNAME##_iter (*it_start)(struct SNAME *);.
  2. +
  3. Full definition: struct SNAME##_iter (*it_end)(struct SNAME *);.
  4. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
struct SNAME##_iter
struct SNAME *targetDeque being iterated over.
size_t cursorCursor's current position (index).
size_t indexRelative index to all elements in the iteration.
bool startIf the iterator reached the start of the iteration.
bool endIf the iterator reached the end of iteration.
+

Deque Functions

Deque Callback Table

hashmap.h

+

A HashMap is an implementation of a Map with unique keys, where every key is mapped to a value (K -> V). The keys are not sorted. To access a value you must specify a key. This key is hashed to a number that uniquely represents it and through this it is possible to find in which position of an array of buckets the value is.

+

HashMap Implementation

+

The HashMap is implemented as a flat HashTable meaning that every entry is allocated when the collection is initialized, but they are all empty.

+ +

The HashTable uses Open Addressing and Linear Probing to resolve collisions along with Robin Hood Hashing to minimize the worst case scenarios.

+

hashset.h

+

A HashSet is an implementation of a Set with unique keys. The keys are not sorted. It is implemented as a flat hashtable with linear probing and robin hood hashing.

+

HashSet Implementation

+

The HashSet is implemented as a flat HashTable meaning that every entry is allocated when the collection is initialized, but they are all empty.

+ +

The HashTable uses Open Addressing and Linear Probing to resolve collisions along with Robin Hood Hashing to minimize the worst case scenarios.

+

heap.h

+

The Heap is a specialized tree-based data structure which is essentially a complete tree that satisfies the heap property:

+ +

MaxHeap

+ +
    +
  • - The root node is the greatest element of the unique set of keys.
  • +
  • - A node key is always greater than or equal to its children keys.
  • +
+ +

Minheap

+ +
    +
  • - The root node is the smallest element of the unique set of keys.
  • +
  • - A node Key is always greater than or equal to its children keys.
  • +
+ +

The heap is mostly used to implement priority queues. Sometimes it can also be used to sort elements. There are three main functions:

+ +
    +
  • insert : Adds an element to the heap
  • +
  • remove_(min/max): Removes the min/max element from the heap
  • +
  • min/max : Accesses the min/max element from the heap
  • +
+

intervalheap.h

+

An interval heap is a specialized heap with:

+ +
    +
  • O(1) - Find Min
  • +
  • O(1) - Find Max
  • +
  • O(log n) - Insert
  • +
  • O(log n) - Remove Min
  • +
  • O(log n) - Remove Max
  • +
+

linkedlist.h

+

A LinkedList is a linear collection of elements, whose order is not given by their physical placement in memory. Instead, each element points to the next (singly-linked list) and to a previous one (doubly-linked list). It consists of nodes connected by these next or previous pointers. Unlike an array, the LinkedList can indefinitely grow.

+

LinkedList Implementation

+

The LinkedList is implemented as a doubly-linked list and allows insertions and removals at both ends in O(1) and in a given index in O(N). The list has a head and tail pointer. The head points to the first element in the sequence and tail points to the last.

+

list.h

+

A List is a Dynamic Array that store its elements contiguously. It has an internal buffer that is pre-allocated with a greater capacity than necessary in order to foresee new elements being added. The items can be added at both ends of the list and at the middle (with a given index).

+

List Implementation

+

Insertions at the start are more costly as it is necessary to shift all elements one position to the right to give space to a new element being added at index 0. Insertions at the end are instantaneous as long as there is enough space in the buffer. Insertions at the middle will be based on an index. The index represents where the element being added will be located once the operation ends. This operation might also need to shift elements. It is also possible to add arrays of elements in the list. When the buffer is filled, it is reallocated with a greater capacity, usually being doubled.

+ +

Removing elements follows the same principle. Removing the front element will require to shift all other elements one position to the left, thus being slower than removing from the end in which is done in constant time. Removing elements in the middle of the list will also require shifting elements to the left. Is is also possible to remove a range of elements or extract them, creating a new list with the removed items.

+ +

The iterator is a simple structure that is capable of going back and forwards. Any modifications to the target list during iteration is considered undefined behavior. Its sole purpose is to facilitate navigation through a list.

+

multimap.h

+

The MultiMap is a Map that allows for multiple keys. This is a data structure that has a very narrow usage. A Map (either TreeMap or HashMap) can also work like a MultiMap if a certain key is mapped to another collection.

+ +

Map<K = int, V = List<int>> maps an integer to a list of integer.

+ +

MultiMap<K = int, V = int> maps many integer keys to integer values.

+ +

The difference is that in a MultiMap you can store keys that are the same but might be different instances of the same value. This is also relevant if your data type is more complex like a struct where its ID is the same but some other members of this data type are different.

+

MultiMap Implementation

+

The map uses separate chaining and robin hood hashing. Its internal buffer is made of a pair of pointers to entries that represent a linked list. So accessing map->buffer[0] would give the first pair of pointers. Each entry has both a pointer to a previous entry and a next entry. This design choice was made so that every collection in this library has a two-way iterator with a very few exceptions.

+ +

Each entry is composed of a Key and a Value. Entries with the same key should always hash to the same linked list. Also, keys that hash to the same bucket will also be in the same linked list.

+ +

The order of inserting and removing the same keys will behave like a FIFO. So the first key added will be the first to be removed.

+

multiset.h

+

In mathematics, a multiset is a modification of the concept of a set that, unlike a set, allows for multiple instances for each of its elements. The positive integer number of instances, given for each element is called the multiplicity of this element in the multiset. A MultiSet also has a cardinality which equals the sum of the multiplicities of its elements.

+

queue.h

+

A Queue is a First-In First-out (or Last-in Last-out) data structure. It is a Dynamic Circular Array where elements are added from one end of the array and removed from the other end. The circular array here (also known as circular buffer or ring buffer) is very important so that both adding and removing elements from the Queue are done instantly. The array is linear but with the modulo operator it is treated as a circular sequence of elements.

+

Queue Implementation

+

If the Queue was implemented as a regular Dynamic Array, when adding or removing an element at the front, it would be necessary to shift all elements currently present in the Queue and this would add up a lot of computing time. Shifting 100000 elements in memory by one position every time an element is added to the Queue is simply not efficient.

+ +

The Queue has two ends. The front and back. In this implementation all elements are added to the back of the Queue and removed from the front, which is more or less how queues work in real life. Unlike a Stack that only has operations at one end of the buffer, the Queue needs to be implemented as a circular array in order to quickly add or remove elements.

+ +

The Queue has three main functions: enqueue which adds an element to the Queue; dequeue which removes an element from the Queue; and peek which return the element at the front of the Queue, that is, the next element to be removed from it.

+ +

The Queue is used in many applications where a resource is shared among multiple consumers and the Queue is responsible for scheduling the access to the resource.

+

sortedlist.h

+

A SortedList is a dynamic array, meaning that you can store as many elements as you like and when its capacity is full, the buffer is reallocated. The elements are only sorted when a certain action requires that the array is sorted like accessing min() or max(). This prevents the array from being sorted after every insertion or removal. The array is sorted using a variation of quick sort that uses insertion sort for small partitions.

+

stack.h

+

A Stack is a Last-in First-out (or First-in Last-out) data structure used in a variety of algorithms. It is a Dynamic Array that can only add or remove its elements at the end of the buffer, in this case, it represents the top of the stack.

+

Stack Implementation

+

It has three main functions: push which adds an element at the top of the stack; pop which removes the top element from the stack; and top which returns the top element without removing it (it is also sometimes called peek).

+ +

A Stack is used in algorithms like backtracking, depth-first search, expression evaluation, syntax parsing and many more.

+

treemap.h

+

A TreeMap is an implementation of a Map that keeps its keys sorted. Like a Map, it has only unique keys. This implementation uses a balanced binary tree called AVL Tree that uses the height of nodes to keep its keys balanced.

+

treeset.h

+

A TreeSet is an implementation of a Set that keeps its elements sorted. Like a Set it has only unique keys. This implementation uses a balanced binary tree called AVL Tree that uses the height of nodes to keep its keys balanced.

+ +
+
+
+ C +
+
+
+ + diff --git a/docs/javascripts/all.js b/docs/javascripts/all.js new file mode 100644 index 0000000..05af78b --- /dev/null +++ b/docs/javascripts/all.js @@ -0,0 +1,131 @@ +!function(){if("ontouchstart"in window){var e,t,n,r,i,o,s={};e=function(e,t){return Math.abs(e[0]-t[0])>5||Math.abs(e[1]-t[1])>5},t=function(e){this.startXY=[e.touches[0].clientX,e.touches[0].clientY],this.threshold=!1},n=function(t){return!this.threshold&&void(this.threshold=e(this.startXY,[t.touches[0].clientX,t.touches[0].clientY]))},r=function(t){if(!this.threshold&&!e(this.startXY,[t.changedTouches[0].clientX,t.changedTouches[0].clientY])){var n=t.changedTouches[0],r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),r.simulated=!0,t.target.dispatchEvent(r)}},i=function(e){var t=Date.now(),n=t-s.time,r=e.clientX,i=e.clientY,a=[Math.abs(s.x-r),Math.abs(s.y-i)],u=o(e.target,"A")||e.target,c=u.nodeName,l="A"===c,f=window.navigator.standalone&&l&&e.target.getAttribute("href");return s.time=t,s.x=r,s.y=i,!((!e.simulated&&(n<500||n<1500&&a[0]<50&&a[1]<50)||f)&&(e.preventDefault(),e.stopPropagation(),!f))&&(f&&(window.location=u.getAttribute("href")),void(u&&u.classList&&(u.classList.add("energize-focus"),window.setTimeout(function(){u.classList.remove("energize-focus")},150))))},o=function(e,t){for(var n=e;n!==document.body;){if(!n||n.nodeName===t)return n;n=n.parentNode}return null},document.addEventListener("touchstart",t,!1),document.addEventListener("touchmove",n,!1),document.addEventListener("touchend",r,!1),document.addEventListener("click",i,!0)}}(),/*! + * jQuery JavaScript Library v3.2.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2017-03-20T18:59Z + */ +function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(e,t){t=t||ne;var n=t.createElement("script");n.text=e,t.head.appendChild(n).parentNode.removeChild(n)}function r(e){var t=!!e&&"length"in e&&e.length,n=ge.type(e);return"function"!==n&&!ge.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function i(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}function o(e,t,n){return ge.isFunction(t)?ge.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?ge.grep(e,function(e){return e===t!==n}):"string"!=typeof t?ge.grep(e,function(e){return ae.call(t,e)>-1!==n}):Ce.test(t)?ge.filter(t,e,n):(t=ge.filter(t,e),ge.grep(e,function(e){return ae.call(t,e)>-1!==n&&1===e.nodeType}))}function s(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function a(e){var t={};return ge.each(e.match(De)||[],function(e,n){t[n]=!0}),t}function u(e){return e}function c(e){throw e}function l(e,t,n,r){var i;try{e&&ge.isFunction(i=e.promise)?i.call(e).done(t).fail(n):e&&ge.isFunction(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}function f(){ne.removeEventListener("DOMContentLoaded",f),e.removeEventListener("load",f),ge.ready()}function d(){this.expando=ge.expando+d.uid++}function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Ie.test(e)?JSON.parse(e):e)}function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Re,"-$&").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n=p(n)}catch(e){}He.set(e,t,n)}else n=void 0;return n}function g(e,t,n,r){var i,o=1,s=20,a=r?function(){return r.cur()}:function(){return ge.css(e,t,"")},u=a(),c=n&&n[3]||(ge.cssNumber[t]?"":"px"),l=(ge.cssNumber[t]||"px"!==c&&+u)&&Me.exec(ge.css(e,t));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+u||1;do o=o||".5",l/=o,ge.style(e,t,l+c);while(o!==(o=a()/u)&&1!==o&&--s)}return n&&(l=+l||+u||0,i=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=i)),i}function v(e){var t,n=e.ownerDocument,r=e.nodeName,i=Ve[r];return i?i:(t=n.body.appendChild(n.createElement(r)),i=ge.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),Ve[r]=i,i)}function m(e,t){for(var n,r,i=[],o=0,s=e.length;o-1)i&&i.push(o);else if(c=ge.contains(o.ownerDocument,o),s=y(f.appendChild(o),"script"),c&&x(s),n)for(l=0;o=s[l++];)Qe.test(o.type||"")&&n.push(o);return f}function w(){return!0}function T(){return!1}function S(){try{return ne.activeElement}catch(e){}}function E(e,t,n,r,i,o){var s,a;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(a in t)E(e,a,n,r,t[a],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=T;else if(!i)return e;return 1===o&&(s=i,i=function(e){return ge().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=ge.guid++)),e.each(function(){ge.event.add(this,t,i,r,n)})}function C(e,t){return i(e,"table")&&i(11!==t.nodeType?t:t.firstChild,"tr")?ge(">tbody",e)[0]||e:e}function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function N(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function j(e,t){var n,r,i,o,s,a,u,c;if(1===t.nodeType){if(Pe.hasData(e)&&(o=Pe.access(e),s=Pe.set(t,o),c=o.events)){delete s.handle,s.events={};for(i in c)for(n=0,r=c[i].length;n1&&"string"==typeof h&&!pe.checkClone&&rt.test(h))return e.each(function(n){var o=e.eq(n);g&&(t[0]=h.call(this,n,o.html())),L(o,t,r,i)});if(d&&(o=b(t,e[0].ownerDocument,!1,e,i),s=o.firstChild,1===o.childNodes.length&&(o=s),s||i)){for(a=ge.map(y(o,"script"),k),u=a.length;f=0&&nS.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[_]=!0,e}function i(e){var t=q.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=n.length;r--;)S.attrHandle[n[r]]=t}function s(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 a(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return function(t){return"form"in t?t.parentNode&&t.disabled===!1?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&Ee(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function l(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function p(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function v(e,n,r){for(var i=0,o=n.length;i-1&&(r[c]=!(s[c]=f))}}else x=m(x===s?x.splice(h,x.length):x),o?o(null,s,x,u):K.apply(s,x)})}function x(e){for(var t,n,r,i=e.length,o=S.relative[e[0].type],s=o||S.relative[" "],a=o?1:0,u=h(function(e){return e===t},s,!0),c=h(function(e){return ee(t,e)>-1},s,!0),l=[function(e,n,r){var i=!o&&(r||n!==A)||((t=n).nodeType?u(e,n,r):c(e,n,r));return t=null,i}];a1&&g(l),a>1&&p(e.slice(0,a-1).concat({value:" "===e[a-2].type?"*":""})).replace(ae,"$1"),n,a0,o=e.length>0,s=function(r,s,a,u,c){var l,f,d,p=0,h="0",g=r&&[],v=[],y=A,x=r||o&&S.find.TAG("*",c),b=W+=null==y?1:Math.random()||.1,w=x.length;for(c&&(A=s===q||s||c);h!==w&&null!=(l=x[h]);h++){if(o&&l){for(f=0,s||l.ownerDocument===q||(O(l),a=!$);d=e[f++];)if(d(l,s||q,a)){u.push(l);break}c&&(W=b)}i&&((l=!d&&l)&&p--,r&&g.push(l))}if(p+=h,i&&h!==p){for(f=0;d=n[f++];)d(g,v,s,a);if(r){if(p>0)for(;h--;)g[h]||v[h]||(v[h]=J.call(u));v=m(v)}K.apply(u,v),c&&!r&&v.length>0&&p+n.length>1&&t.uniqueSort(u)}return c&&(W=b,A=y),g};return i?r(s):s}var w,T,S,E,C,k,N,j,A,L,D,O,q,F,$,P,H,I,R,_="sizzle"+1*new Date,M=e.document,W=0,B=0,z=n(),V=n(),X=n(),U=function(e,t){return e===t&&(D=!0),0},Q={}.hasOwnProperty,Y=[],J=Y.pop,G=Y.push,K=Y.push,Z=Y.slice,ee=function(e,t){for(var n=0,r=e.length;n+~]|"+ne+")"+ne+"*"),le=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),fe=new RegExp(oe),de=new RegExp("^"+re+"$"),pe={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,ge=/^h\d$/i,ve=/^[^{]+\{\s*\[native \w/,me=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,xe=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),be=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},we=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Te=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},Se=function(){O()},Ee=h(function(e){return e.disabled===!0&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{K.apply(Y=Z.call(M.childNodes),M.childNodes),Y[M.childNodes.length].nodeType}catch(e){K={apply:Y.length?function(e,t){G.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}T=t.support={},C=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},O=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:M;return r!==q&&9===r.nodeType&&r.documentElement?(q=r,F=q.documentElement,$=!C(q),M!==q&&(n=q.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Se,!1):n.attachEvent&&n.attachEvent("onunload",Se)),T.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),T.getElementsByTagName=i(function(e){return e.appendChild(q.createComment("")),!e.getElementsByTagName("*").length}),T.getElementsByClassName=ve.test(q.getElementsByClassName),T.getById=i(function(e){return F.appendChild(e).id=_,!q.getElementsByName||!q.getElementsByName(_).length}),T.getById?(S.filter.ID=function(e){var t=e.replace(xe,be);return function(e){return e.getAttribute("id")===t}},S.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&$){var n=t.getElementById(e);return n?[n]:[]}}):(S.filter.ID=function(e){var t=e.replace(xe,be);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},S.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&$){var n,r,i,o=t.getElementById(e);if(o){if(n=o.getAttributeNode("id"),n&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if(n=o.getAttributeNode("id"),n&&n.value===e)return[o]}return[]}}),S.find.TAG=T.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):T.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},S.find.CLASS=T.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&$)return t.getElementsByClassName(e)},H=[],P=[],(T.qsa=ve.test(q.querySelectorAll))&&(i(function(e){F.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&P.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||P.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+_+"-]").length||P.push("~="),e.querySelectorAll(":checked").length||P.push(":checked"),e.querySelectorAll("a#"+_+"+*").length||P.push(".#.+[+~]")}),i(function(e){e.innerHTML="";var t=q.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&P.push("name"+ne+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&P.push(":enabled",":disabled"),F.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&P.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),P.push(",.*:")})),(T.matchesSelector=ve.test(I=F.matches||F.webkitMatchesSelector||F.mozMatchesSelector||F.oMatchesSelector||F.msMatchesSelector))&&i(function(e){T.disconnectedMatch=I.call(e,"*"),I.call(e,"[s!='']:x"),H.push("!=",oe)}),P=P.length&&new RegExp(P.join("|")),H=H.length&&new RegExp(H.join("|")),t=ve.test(F.compareDocumentPosition),R=t||ve.test(F.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},U=t?function(e,t){if(e===t)return D=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!T.sortDetached&&t.compareDocumentPosition(e)===n?e===q||e.ownerDocument===M&&R(M,e)?-1:t===q||t.ownerDocument===M&&R(M,t)?1:L?ee(L,e)-ee(L,t):0:4&n?-1:1)}:function(e,t){if(e===t)return D=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],u=[t];if(!i||!o)return e===q?-1:t===q?1:i?-1:o?1:L?ee(L,e)-ee(L,t):0;if(i===o)return s(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?s(a[r],u[r]):a[r]===M?-1:u[r]===M?1:0},q):q},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==q&&O(e),n=n.replace(le,"='$1']"),T.matchesSelector&&$&&!X[n+" "]&&(!H||!H.test(n))&&(!P||!P.test(n)))try{var r=I.call(e,n);if(r||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,q,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==q&&O(e),R(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==q&&O(e);var n=S.attrHandle[t.toLowerCase()],r=n&&Q.call(S.attrHandle,t.toLowerCase())?n(e,t,!$):void 0;return void 0!==r?r:T.attributes||!$?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.escape=function(e){return(e+"").replace(we,Te)},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(D=!T.detectDuplicates,L=!T.sortStable&&e.slice(0),e.sort(U),D){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return L=null,e},E=t.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=E(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=E(t);return n},S=t.selectors={cacheLength:50,createPseudo:r,match:pe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xe,be),e[3]=(e[3]||e[4]||e[5]||"").replace(xe,be),"~="===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]||t.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]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=k(n,!0))&&(t=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(xe,be).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=z[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&z(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o.replace(se," ")+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,d,p,h,g=o!==s?"nextSibling":"previousSibling",v=t.parentNode,m=a&&t.nodeName.toLowerCase(),y=!u&&!a,x=!1;if(v){if(o){for(;g;){for(d=t;d=d[g];)if(a?d.nodeName.toLowerCase()===m:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[s?v.firstChild:v.lastChild],s&&y){for(d=v,f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],p=c[0]===W&&c[1],x=p&&c[2],d=p&&v.childNodes[p];d=++p&&d&&d[g]||(x=p=0)||h.pop();)if(1===d.nodeType&&++x&&d===t){l[e]=[W,p,x];break}}else if(y&&(d=t,f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],p=c[0]===W&&c[1],x=p),x===!1)for(;(d=++p&&d&&d[g]||(x=p=0)||h.pop())&&((a?d.nodeName.toLowerCase()!==m:1!==d.nodeType)||!++x||(y&&(f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),l[e]=[W,x]),d!==t)););return x-=i,x===r||x%r===0&&x/r>=0}}},PSEUDO:function(e,n){var i,o=S.pseudos[e]||S.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[_]?o(n):o.length>1?(i=[e,e,"",n],S.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),s=i.length;s--;)r=ee(e,i[s]),e[r]=!(t[r]=i[s])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=N(e.replace(ae,"$1"));return i[_]?r(function(e,t,n,r){for(var o,s=i(e,null,r,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(xe,be),function(t){return(t.textContent||t.innerText||E(t)).indexOf(e)>-1}}),lang:r(function(e){return de.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(xe,be).toLowerCase(),function(t){var n;do if(n=$?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===F},focus:function(e){return e===q.activeElement&&(!q.hasFocus||q.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:c(!1),disabled:c(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!S.pseudos.empty(e)},header:function(e){return ge.test(e.nodeName)},input:function(e){return he.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:l(function(){return[0]}),last:l(function(e,t){return[t-1]}),eq:l(function(e,t,n){return[n<0?n+t:n]}),even:l(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:l(function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(s=o[0]).type&&9===t.nodeType&&$&&S.relative[o[1].type]){if(t=(S.find.ID(s.matches[0].replace(xe,be),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=pe.needsContext.test(e)?0:o.length;i--&&(s=o[i],!S.relative[a=s.type]);)if((u=S.find[a])&&(r=u(s.matches[0].replace(xe,be),ye.test(o[0].type)&&f(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&p(o),!e)return K.apply(n,r),n;break}}return(c||N(e,l))(r,t,!$,n,!t||ye.test(e)&&f(t.parentNode)||t),n},T.sortStable=_.split("").sort(U).join("")===_,T.detectDuplicates=!!D,O(),T.sortDetached=i(function(e){return 1&e.compareDocumentPosition(q.createElement("fieldset"))}),i(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),T.attributes&&i(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);ge.find=be,ge.expr=be.selectors,ge.expr[":"]=ge.expr.pseudos,ge.uniqueSort=ge.unique=be.uniqueSort,ge.text=be.getText,ge.isXMLDoc=be.isXML,ge.contains=be.contains,ge.escapeSelector=be.escape;var we=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&ge(e).is(n))break;r.push(e)}return r},Te=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},Se=ge.expr.match.needsContext,Ee=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,Ce=/^.[^:#\[\.,]*$/;ge.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ge.find.matchesSelector(r,e)?[r]:[]:ge.find.matches(e,ge.grep(t,function(e){return 1===e.nodeType}))},ge.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ge(e).filter(function(){for(t=0;t1?ge.uniqueSort(n):n},filter:function(e){return this.pushStack(o(this,e||[],!1))},not:function(e){return this.pushStack(o(this,e||[],!0))},is:function(e){return!!o(this,"string"==typeof e&&Se.test(e)?ge(e):e||[],!1).length}});var ke,Ne=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,je=ge.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||ke,"string"==typeof e){if(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:Ne.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ge?t[0]:t,ge.merge(this,ge.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:ne,!0)),Ee.test(r[1])&&ge.isPlainObject(t))for(r in t)ge.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=ne.getElementById(r[2]),i&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):ge.isFunction(e)?void 0!==n.ready?n.ready(e):e(ge):ge.makeArray(e,this)};je.prototype=ge.fn,ke=ge(ne);var Ae=/^(?:parents|prev(?:Until|All))/,Le={children:!0,contents:!0,next:!0,prev:!0};ge.fn.extend({has:function(e){var t=ge(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&ge.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?ge.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?ae.call(ge(e),this[0]):ae.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ge.uniqueSort(ge.merge(this.get(),ge(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ge.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return we(e,"parentNode")},parentsUntil:function(e,t,n){return we(e,"parentNode",n)},next:function(e){return s(e,"nextSibling")},prev:function(e){return s(e,"previousSibling")},nextAll:function(e){return we(e,"nextSibling")},prevAll:function(e){return we(e,"previousSibling")},nextUntil:function(e,t,n){return we(e,"nextSibling",n)},prevUntil:function(e,t,n){return we(e,"previousSibling",n)},siblings:function(e){return Te((e.parentNode||{}).firstChild,e)},children:function(e){return Te(e.firstChild)},contents:function(e){return i(e,"iframe")?e.contentDocument:(i(e,"template")&&(e=e.content||e),ge.merge([],e.childNodes))}},function(e,t){ge.fn[e]=function(n,r){var i=ge.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=ge.filter(r,i)),this.length>1&&(Le[e]||ge.uniqueSort(i),Ae.test(e)&&i.reverse()),this.pushStack(i)}});var De=/[^\x20\t\r\n\f]+/g;ge.Callbacks=function(e){e="string"==typeof e?a(e):ge.extend({},e);var t,n,r,i,o=[],s=[],u=-1,c=function(){for(i=i||e.once,r=t=!0;s.length;u=-1)for(n=s.shift();++u-1;)o.splice(n,1),n<=u&&u--}),this},has:function(e){return e?ge.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=s=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},ge.extend({Deferred:function(t){var n=[["notify","progress",ge.Callbacks("memory"),ge.Callbacks("memory"),2],["resolve","done",ge.Callbacks("once memory"),ge.Callbacks("once memory"),0,"resolved"],["reject","fail",ge.Callbacks("once memory"),ge.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return ge.Deferred(function(t){ge.each(n,function(n,r){var i=ge.isFunction(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&ge.isFunction(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){function o(t,n,r,i){return function(){var a=this,l=arguments,f=function(){var e,f;if(!(t=s&&(r!==c&&(a=void 0,l=[e]),n.rejectWith(a,l))}};t?d():(ge.Deferred.getStackHook&&(d.stackTrace=ge.Deferred.getStackHook()),e.setTimeout(d))}}var s=0;return ge.Deferred(function(e){n[0][3].add(o(0,e,ge.isFunction(i)?i:u,e.notifyWith)),n[1][3].add(o(0,e,ge.isFunction(t)?t:u)),n[2][3].add(o(0,e,ge.isFunction(r)?r:c))}).promise()},promise:function(e){return null!=e?ge.extend(e,i):i}},o={};return ge.each(n,function(e,t){var s=t[2],a=t[5];i[t[1]]=s.add,a&&s.add(function(){r=a},n[3-e][2].disable,n[0][2].lock),s.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=s.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=ie.call(arguments),o=ge.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?ie.call(arguments):n,--t||o.resolveWith(r,i)}};if(t<=1&&(l(e,o.done(s(n)).resolve,o.reject,!t),"pending"===o.state()||ge.isFunction(i[n]&&i[n].then)))return o.then();for(;n--;)l(i[n],s(n),o.reject);return o.promise()}});var Oe=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ge.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&Oe.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},ge.readyException=function(t){e.setTimeout(function(){throw t})};var qe=ge.Deferred();ge.fn.ready=function(e){return qe.then(e)["catch"](function(e){ge.readyException(e)}),this},ge.extend({isReady:!1,readyWait:1,ready:function(e){(e===!0?--ge.readyWait:ge.isReady)||(ge.isReady=!0,e!==!0&&--ge.readyWait>0||qe.resolveWith(ne,[ge]))}}),ge.ready.then=qe.then,"complete"===ne.readyState||"loading"!==ne.readyState&&!ne.documentElement.doScroll?e.setTimeout(ge.ready):(ne.addEventListener("DOMContentLoaded",f),e.addEventListener("load",f));var Fe=function(e,t,n,r,i,o,s){var a=0,u=e.length,c=null==n;if("object"===ge.type(n)){i=!0;for(a in n)Fe(e,t,a,n[a],!0,o,s)}else if(void 0!==r&&(i=!0,ge.isFunction(r)||(s=!0),c&&(s?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(ge(e),n)})),t))for(;a1,null,!0)},removeData:function(e){return this.each(function(){He.remove(this,e)})}}),ge.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Pe.get(e,t),n&&(!r||Array.isArray(n)?r=Pe.access(e,t,ge.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ge.queue(e,t),r=n.length,i=n.shift(),o=ge._queueHooks(e,t),s=function(){ge.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Pe.get(e,n)||Pe.access(e,n,{empty:ge.Callbacks("once memory").add(function(){Pe.remove(e,[t+"queue",n])})})}}),ge.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,Qe=/^$|\/(?:java|ecma)script/i,Ye={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};Ye.optgroup=Ye.option,Ye.tbody=Ye.tfoot=Ye.colgroup=Ye.caption=Ye.thead,Ye.th=Ye.td;var Je=/<|&#?\w+;/;!function(){var e=ne.createDocumentFragment(),t=e.appendChild(ne.createElement("div")),n=ne.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),pe.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Ge=ne.documentElement,Ke=/^key/,Ze=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,et=/^([^.]*)(?:\.(.+)|)/;ge.event={global:{},add:function(e,t,n,r,i){var o,s,a,u,c,l,f,d,p,h,g,v=Pe.get(e);if(v)for(n.handler&&(o=n,n=o.handler,i=o.selector),i&&ge.find.matchesSelector(Ge,i),n.guid||(n.guid=ge.guid++),(u=v.events)||(u=v.events={}), +(s=v.handle)||(s=v.handle=function(t){return"undefined"!=typeof ge&&ge.event.triggered!==t.type?ge.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(De)||[""],c=t.length;c--;)a=et.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p&&(f=ge.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=ge.event.special[p]||{},l=ge.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ge.expr.match.needsContext.test(i),namespace:h.join(".")},o),(d=u[p])||(d=u[p]=[],d.delegateCount=0,f.setup&&f.setup.call(e,r,h,s)!==!1||e.addEventListener&&e.addEventListener(p,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,l):d.push(l),ge.event.global[p]=!0)},remove:function(e,t,n,r,i){var o,s,a,u,c,l,f,d,p,h,g,v=Pe.hasData(e)&&Pe.get(e);if(v&&(u=v.events)){for(t=(t||"").match(De)||[""],c=t.length;c--;)if(a=et.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p){for(f=ge.event.special[p]||{},p=(r?f.delegateType:f.bindType)||p,d=u[p]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=d.length;o--;)l=d[o],!i&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(d.splice(o,1),l.selector&&d.delegateCount--,f.remove&&f.remove.call(e,l));s&&!d.length&&(f.teardown&&f.teardown.call(e,h,v.handle)!==!1||ge.removeEvent(e,p,v.handle),delete u[p])}else for(p in u)ge.event.remove(e,p+t[c],n,r,!0);ge.isEmptyObject(u)&&Pe.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,s,a=ge.event.fix(e),u=new Array(arguments.length),c=(Pe.get(this,"events")||{})[a.type]||[],l=ge.event.special[a.type]||{};for(u[0]=a,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||c.disabled!==!0)){for(o=[],s={},n=0;n-1:ge.find(i,this,null,[c]).length),s[i]&&o.push(r);o.length&&a.push({elem:c,handlers:o})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,nt=/\s*$/g;ge.extend({htmlPrefilter:function(e){return e.replace(tt,"<$1>")},clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=ge.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ge.isXMLDoc(e)))for(s=y(a),o=y(e),r=0,i=o.length;r0&&x(s,!u&&y(e,"script")),a},cleanData:function(e){for(var t,n,r,i=ge.event.special,o=0;void 0!==(n=e[o]);o++)if($e(n)){if(t=n[Pe.expando]){if(t.events)for(r in t.events)i[r]?ge.event.remove(n,r):ge.removeEvent(n,r,t.handle);n[Pe.expando]=void 0}n[He.expando]&&(n[He.expando]=void 0)}}}),ge.fn.extend({detach:function(e){return D(this,e,!0)},remove:function(e){return D(this,e)},text:function(e){return Fe(this,function(e){return void 0===e?ge.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return L(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.appendChild(e)}})},prepend:function(){return L(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return L(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return L(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ge.cleanData(y(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ge.clone(this,e,t)})},html:function(e){return Fe(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!nt.test(e)&&!Ye[(Ue.exec(e)||["",""])[1].toLowerCase()]){e=ge.htmlPrefilter(e);try{for(;n1)}}),ge.Tween=R,R.prototype={constructor:R,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ge.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ge.cssNumber[n]?"":"px")},cur:function(){var e=R.propHooks[this.prop];return e&&e.get?e.get(this):R.propHooks._default.get(this)},run:function(e){var t,n=R.propHooks[this.prop];return this.options.duration?this.pos=t=ge.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ge.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){ge.fx.step[e.prop]?ge.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[ge.cssProps[e.prop]]&&!ge.cssHooks[e.prop]?e.elem[e.prop]=e.now:ge.style(e.elem,e.prop,e.now+e.unit)}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ge.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ge.fx=R.prototype.init,ge.fx.step={};var gt,vt,mt=/^(?:toggle|show|hide)$/,yt=/queueHooks$/;ge.Animation=ge.extend(X,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return g(n.elem,e,Me.exec(t),n),n}]},tweener:function(e,t){ge.isFunction(e)?(t=e,e=["*"]):e=e.match(De);for(var n,r=0,i=e.length;r1)},removeAttr:function(e){return this.each(function(){ge.removeAttr(this,e)})}}),ge.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ge.prop(e,t,n):(1===o&&ge.isXMLDoc(e)||(i=ge.attrHooks[t.toLowerCase()]||(ge.expr.match.bool.test(t)?xt:void 0)),void 0!==n?null===n?void ge.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:(r=ge.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&"radio"===t&&i(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(De);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),xt={set:function(e,t,n){return t===!1?ge.removeAttr(e,n):e.setAttribute(n,n),n}},ge.each(ge.expr.match.bool.source.match(/\w+/g),function(e,t){var n=bt[t]||ge.find.attr;bt[t]=function(e,t,r){var i,o,s=t.toLowerCase();return r||(o=bt[s],bt[s]=i,i=null!=n(e,t,r)?s:null,bt[s]=o),i}});var wt=/^(?:input|select|textarea|button)$/i,Tt=/^(?:a|area)$/i;ge.fn.extend({prop:function(e,t){return Fe(this,ge.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[ge.propFix[e]||e]})}}),ge.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ge.isXMLDoc(e)||(t=ge.propFix[t]||t,i=ge.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ge.find.attr(e,"tabindex");return t?parseInt(t,10):wt.test(e.nodeName)||Tt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),pe.optSelected||(ge.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ge.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ge.propFix[this.toLowerCase()]=this}),ge.fn.extend({addClass:function(e){var t,n,r,i,o,s,a,u=0;if(ge.isFunction(e))return this.each(function(t){ge(this).addClass(e.call(this,t,Q(this)))});if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=Q(n),r=1===n.nodeType&&" "+U(i)+" "){for(s=0;o=t[s++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");a=U(r),i!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,i,o,s,a,u=0;if(ge.isFunction(e))return this.each(function(t){ge(this).removeClass(e.call(this,t,Q(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=Q(n),r=1===n.nodeType&&" "+U(i)+" "){for(s=0;o=t[s++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");a=U(r),i!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):ge.isFunction(e)?this.each(function(n){ge(this).toggleClass(e.call(this,n,Q(this),t),t)}):this.each(function(){var t,r,i,o;if("string"===n)for(r=0,i=ge(this),o=e.match(De)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||(t=Q(this),t&&Pe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Pe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+U(Q(n))+" ").indexOf(t)>-1)return!0;return!1}});var St=/\r/g;ge.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=ge.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,ge(this).val()):e,null==i?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=ge.map(i,function(e){return null==e?"":e+""})),t=ge.valHooks[this.type]||ge.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return t=ge.valHooks[i.type]||ge.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:(n=i.value,"string"==typeof n?n.replace(St,""):null==n?"":n)}}}),ge.extend({valHooks:{option:{get:function(e){var t=ge.find.attr(e,"value");return null!=t?t:U(ge.text(e))}},select:{get:function(e){var t,n,r,o=e.options,s=e.selectedIndex,a="select-one"===e.type,u=a?null:[],c=a?s+1:o.length;for(r=s<0?c:a?s:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ge.each(["radio","checkbox"],function(){ge.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=ge.inArray(ge(e).val(),t)>-1}},pe.checkOn||(ge.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=/^(?:focusinfocus|focusoutblur)$/;ge.extend(ge.event,{trigger:function(t,n,r,i){var o,s,a,u,c,l,f,d=[r||ne],p=le.call(t,"type")?t.type:t,h=le.call(t,"namespace")?t.namespace.split("."):[];if(s=a=r=r||ne,3!==r.nodeType&&8!==r.nodeType&&!Et.test(p+ge.event.triggered)&&(p.indexOf(".")>-1&&(h=p.split("."),p=h.shift(),h.sort()),c=p.indexOf(":")<0&&"on"+p,t=t[ge.expando]?t:new ge.Event(p,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:ge.makeArray(n,[t]),f=ge.event.special[p]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!ge.isWindow(r)){for(u=f.delegateType||p,Et.test(u+p)||(s=s.parentNode);s;s=s.parentNode)d.push(s),a=s;a===(r.ownerDocument||ne)&&d.push(a.defaultView||a.parentWindow||e)}for(o=0;(s=d[o++])&&!t.isPropagationStopped();)t.type=o>1?u:f.bindType||p,l=(Pe.get(s,"events")||{})[t.type]&&Pe.get(s,"handle"),l&&l.apply(s,n),l=c&&s[c],l&&l.apply&&$e(s)&&(t.result=l.apply(s,n),t.result===!1&&t.preventDefault());return t.type=p,i||t.isDefaultPrevented()||f._default&&f._default.apply(d.pop(),n)!==!1||!$e(r)||c&&ge.isFunction(r[p])&&!ge.isWindow(r)&&(a=r[c],a&&(r[c]=null),ge.event.triggered=p,r[p](),ge.event.triggered=void 0,a&&(r[c]=a)),t.result}},simulate:function(e,t,n){var r=ge.extend(new ge.Event,n,{type:e,isSimulated:!0});ge.event.trigger(r,null,t)}}),ge.fn.extend({trigger:function(e,t){return this.each(function(){ge.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ge.event.trigger(e,t,n,!0)}}),ge.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,t){ge.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),ge.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin="onfocusin"in e,pe.focusin||ge.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){ge.event.simulate(t,e.target,ge.event.fix(e))};ge.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=Pe.access(r,t);i||r.addEventListener(e,n,!0),Pe.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=Pe.access(r,t)-1;i?Pe.access(r,t,i):(r.removeEventListener(e,n,!0),Pe.remove(r,t))}}});var Ct=e.location,kt=ge.now(),Nt=/\?/;ge.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||ge.error("Invalid XML: "+t),n};var jt=/\[\]$/,At=/\r?\n/g,Lt=/^(?:submit|button|image|reset|file)$/i,Dt=/^(?:input|select|textarea|keygen)/i;ge.param=function(e,t){var n,r=[],i=function(e,t){var n=ge.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!ge.isPlainObject(e))ge.each(e,function(){i(this.name,this.value)});else for(n in e)Y(n,e[n],t,i);return r.join("&")},ge.fn.extend({serialize:function(){return ge.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ge.prop(this,"elements");return e?ge.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ge(this).is(":disabled")&&Dt.test(this.nodeName)&&!Lt.test(e)&&(this.checked||!Xe.test(e))}).map(function(e,t){var n=ge(this).val();return null==n?null:Array.isArray(n)?ge.map(n,function(e){return{name:t.name,value:e.replace(At,"\r\n")}}):{name:t.name,value:n.replace(At,"\r\n")}}).get()}});var Ot=/%20/g,qt=/#.*$/,Ft=/([?&])_=[^&]*/,$t=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ht=/^(?:GET|HEAD)$/,It=/^\/\//,Rt={},_t={},Mt="*/".concat("*"),Wt=ne.createElement("a");Wt.href=Ct.href,ge.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Mt,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"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ge.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?K(K(e,ge.ajaxSettings),t):K(ge.ajaxSettings,e)},ajaxPrefilter:J(Rt),ajaxTransport:J(_t),ajax:function(t,n){function r(t,n,r,a){var c,d,p,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),i=void 0,s=a||"",S.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=Z(h,S,r)),b=ee(h,b,S,c),c?(h.ifModified&&(w=S.getResponseHeader("Last-Modified"),w&&(ge.lastModified[o]=w),w=S.getResponseHeader("etag"),w&&(ge.etag[o]=w)),204===t||"HEAD"===h.type?T="nocontent":304===t?T="notmodified":(T=b.state,d=b.data,p=b.error,c=!p)):(p=T,!t&&T||(T="error",t<0&&(t=0))),S.status=t,S.statusText=(n||T)+"",c?m.resolveWith(g,[d,T,S]):m.rejectWith(g,[S,T,p]),S.statusCode(x),x=void 0,f&&v.trigger(c?"ajaxSuccess":"ajaxError",[S,h,c?d:p]),y.fireWith(g,[S,T]),f&&(v.trigger("ajaxComplete",[S,h]),--ge.active||ge.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,s,a,u,c,l,f,d,p,h=ge.ajaxSetup({},n),g=h.context||h,v=h.context&&(g.nodeType||g.jquery)?ge(g):ge.event,m=ge.Deferred(),y=ge.Callbacks("once memory"),x=h.statusCode||{},b={},w={},T="canceled",S={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=$t.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?s:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)S.always(e[S.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(m.promise(S),h.url=((t||h.url||Ct.href)+"").replace(It,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(De)||[""],null==h.crossDomain){c=ne.createElement("a");try{c.href=h.url,c.href=c.href,h.crossDomain=Wt.protocol+"//"+Wt.host!=c.protocol+"//"+c.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=ge.param(h.data,h.traditional)),G(Rt,h,n,S),l)return S;f=ge.event&&h.global,f&&0===ge.active++&&ge.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Ht.test(h.type),o=h.url.replace(qt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Ot,"+")):(p=h.url.slice(o.length),h.data&&(o+=(Nt.test(o)?"&":"?")+h.data,delete h.data),h.cache===!1&&(o=o.replace(Ft,"$1"),p=(Nt.test(o)?"&":"?")+"_="+kt++ +p),h.url=o+p),h.ifModified&&(ge.lastModified[o]&&S.setRequestHeader("If-Modified-Since",ge.lastModified[o]),ge.etag[o]&&S.setRequestHeader("If-None-Match",ge.etag[o])),(h.data&&h.hasContent&&h.contentType!==!1||n.contentType)&&S.setRequestHeader("Content-Type",h.contentType),S.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Mt+"; q=0.01":""):h.accepts["*"]);for(d in h.headers)S.setRequestHeader(d,h.headers[d]);if(h.beforeSend&&(h.beforeSend.call(g,S,h)===!1||l))return S.abort();if(T="abort",y.add(h.complete),S.done(h.success),S.fail(h.error),i=G(_t,h,n,S)){if(S.readyState=1,f&&v.trigger("ajaxSend",[S,h]),l)return S;h.async&&h.timeout>0&&(u=e.setTimeout(function(){S.abort("timeout")},h.timeout));try{l=!1,i.send(b,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,"No Transport");return S},getJSON:function(e,t,n){return ge.get(e,t,n,"json")},getScript:function(e,t){return ge.get(e,void 0,t,"script")}}),ge.each(["get","post"],function(e,t){ge[t]=function(e,n,r,i){return ge.isFunction(n)&&(i=i||r,r=n,n=void 0),ge.ajax(ge.extend({url:e,type:t,dataType:i,data:n,success:r},ge.isPlainObject(e)&&e))}}),ge._evalUrl=function(e){return ge.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},ge.fn.extend({wrapAll:function(e){var t;return this[0]&&(ge.isFunction(e)&&(e=e.call(this[0])),t=ge(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return ge.isFunction(e)?this.each(function(t){ge(this).wrapInner(e.call(this,t))}):this.each(function(){var t=ge(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=ge.isFunction(e);return this.each(function(n){ge(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ge(this).replaceWith(this.childNodes)}),this}}),ge.expr.pseudos.hidden=function(e){return!ge.expr.pseudos.visible(e)},ge.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ge.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},zt=ge.ajaxSettings.xhr();pe.cors=!!zt&&"withCredentials"in zt,pe.ajax=zt=!!zt,ge.ajaxTransport(function(t){var n,r;if(pe.cors||zt&&!t.crossDomain)return{send:function(i,o){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(s in i)a.setRequestHeader(s,i[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?o(0,"error"):o(a.status,a.statusText):o(Bt[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=n("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),ge.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ge.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){ +return ge.globalEval(e),e}}}),ge.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ge.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=ge("