Bladeren bron

add api doc.

deason 7 jaren geleden
bovenliggende
commit
8aed4f4428
43 gewijzigde bestanden met toevoegingen van 8612 en 0 verwijderingen
  1. 0 0
      src/main/resources/static/bycdao-ui/ace/ace.min.css
  2. 0 0
      src/main/resources/static/bycdao-ui/ace/ace.min.js
  3. 5 0
      src/main/resources/static/bycdao-ui/ace/bootstrap.min.js
  4. 4 0
      src/main/resources/static/bycdao-ui/bootstrap/css/bootstrap.min.css
  5. 0 0
      src/main/resources/static/bycdao-ui/bootstrap/fonts/glyphicons-halflings-regular.eot
  6. 288 0
      src/main/resources/static/bycdao-ui/bootstrap/fonts/glyphicons-halflings-regular.svg
  7. 0 0
      src/main/resources/static/bycdao-ui/bootstrap/fonts/glyphicons-halflings-regular.ttf
  8. 0 0
      src/main/resources/static/bycdao-ui/bootstrap/fonts/glyphicons-halflings-regular.woff
  9. 0 0
      src/main/resources/static/bycdao-ui/bootstrap/fonts/glyphicons-halflings-regular.woff2
  10. 5 0
      src/main/resources/static/bycdao-ui/bootstrap/js/bootstrap.min.js
  11. 13 0
      src/main/resources/static/bycdao-ui/bootstrap/js/npm.js
  12. 1739 0
      src/main/resources/static/bycdao-ui/cdao/DApiUI.js
  13. 206 0
      src/main/resources/static/bycdao-ui/cdao/swaggerbootstrapui.css
  14. 1757 0
      src/main/resources/static/bycdao-ui/cdao/swaggerbootstrapui.js
  15. 816 0
      src/main/resources/static/bycdao-ui/highlight/highlight.js
  16. 0 0
      src/main/resources/static/bycdao-ui/highlight/highlight.pack.js
  17. 99 0
      src/main/resources/static/bycdao-ui/highlight/styles/default.css
  18. 97 0
      src/main/resources/static/bycdao-ui/highlight/styles/docco.css
  19. 1437 0
      src/main/resources/static/bycdao-ui/highlight/styles/style.css
  20. BIN
      src/main/resources/static/bycdao-ui/images/api.ico
  21. 6 0
      src/main/resources/static/bycdao-ui/jquery/clipboard/clipboard.min.js
  22. 1 0
      src/main/resources/static/bycdao-ui/jquery/jquery-1.9.1.min.js
  23. 1556 0
      src/main/resources/static/bycdao-ui/jquery/marked.js
  24. 1 0
      src/main/resources/static/bycdao-ui/jquery/template-web.js
  25. BIN
      src/main/resources/static/bycdao-ui/jquery/treegrid/img/collapse.png
  26. BIN
      src/main/resources/static/bycdao-ui/jquery/treegrid/img/expand.png
  27. BIN
      src/main/resources/static/bycdao-ui/jquery/treegrid/img/file.png
  28. BIN
      src/main/resources/static/bycdao-ui/jquery/treegrid/img/folder.png
  29. 4 0
      src/main/resources/static/bycdao-ui/jquery/treegrid/jquery.treegrid.bootstrap3.js
  30. 6 0
      src/main/resources/static/bycdao-ui/jquery/treegrid/jquery.treegrid.css
  31. 1 0
      src/main/resources/static/bycdao-ui/jquery/treegrid/jquery.treegrid.min.js
  32. 3 0
      src/main/resources/static/bycdao-ui/jsonview/jquery.jsonview.min.css
  33. 0 0
      src/main/resources/static/bycdao-ui/jsonview/jquery.jsonview.min.js
  34. 1 0
      src/main/resources/static/bycdao-ui/layer3.0.3/layer.js
  35. 1 0
      src/main/resources/static/bycdao-ui/layer3.0.3/mobile/layer.js
  36. 0 0
      src/main/resources/static/bycdao-ui/layer3.0.3/mobile/need/layer.css
  37. BIN
      src/main/resources/static/bycdao-ui/layer3.0.3/skin/default/icon-ext.png
  38. BIN
      src/main/resources/static/bycdao-ui/layer3.0.3/skin/default/icon.png
  39. 0 0
      src/main/resources/static/bycdao-ui/layer3.0.3/skin/default/layer.css
  40. BIN
      src/main/resources/static/bycdao-ui/layer3.0.3/skin/default/loading-0.gif
  41. BIN
      src/main/resources/static/bycdao-ui/layer3.0.3/skin/default/loading-1.gif
  42. BIN
      src/main/resources/static/bycdao-ui/layer3.0.3/skin/default/loading-2.gif
  43. 566 0
      src/main/resources/static/doc.html

File diff suppressed because it is too large
+ 0 - 0
src/main/resources/static/bycdao-ui/ace/ace.min.css


File diff suppressed because it is too large
+ 0 - 0
src/main/resources/static/bycdao-ui/ace/ace.min.js


File diff suppressed because it is too large
+ 5 - 0
src/main/resources/static/bycdao-ui/ace/bootstrap.min.js


File diff suppressed because it is too large
+ 4 - 0
src/main/resources/static/bycdao-ui/bootstrap/css/bootstrap.min.css


+ 0 - 0
src/main/resources/static/bycdao-ui/bootstrap/fonts/glyphicons-halflings-regular.eot


+ 288 - 0
src/main/resources/static/bycdao-ui/bootstrap/fonts/glyphicons-halflings-regular.svg

@@ -0,0 +1,288 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
+<font-face units-per-em="1200" ascent="960" descent="-240" />
+<missing-glyph horiz-adv-x="500" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="400" />
+<glyph unicode=" " />
+<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
+<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xa0;" />
+<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
+<glyph unicode="&#x2000;" horiz-adv-x="650" />
+<glyph unicode="&#x2001;" horiz-adv-x="1300" />
+<glyph unicode="&#x2002;" horiz-adv-x="650" />
+<glyph unicode="&#x2003;" horiz-adv-x="1300" />
+<glyph unicode="&#x2004;" horiz-adv-x="433" />
+<glyph unicode="&#x2005;" horiz-adv-x="325" />
+<glyph unicode="&#x2006;" horiz-adv-x="216" />
+<glyph unicode="&#x2007;" horiz-adv-x="216" />
+<glyph unicode="&#x2008;" horiz-adv-x="162" />
+<glyph unicode="&#x2009;" horiz-adv-x="260" />
+<glyph unicode="&#x200a;" horiz-adv-x="72" />
+<glyph unicode="&#x202f;" horiz-adv-x="260" />
+<glyph unicode="&#x205f;" horiz-adv-x="325" />
+<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
+<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
+<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
+<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
+<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
+<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
+<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
+<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
+<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
+<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
+<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
+<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
+<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
+<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
+<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
+<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
+<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
+<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
+<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
+<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
+<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
+<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
+<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
+<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
+<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
+<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
+<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
+<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
+<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
+<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
+<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
+<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
+<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
+<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
+<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
+<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
+<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
+<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
+<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
+<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
+<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
+<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
+<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
+<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
+<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
+<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
+<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
+<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
+<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
+<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
+<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
+<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
+<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
+<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
+<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
+<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
+<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
+<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
+<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
+<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
+<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
+<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
+<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
+<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
+<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
+<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
+<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
+<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
+<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
+<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
+<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
+<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
+<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
+<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
+<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
+<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
+<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
+<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
+<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
+<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
+<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
+<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
+<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
+<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
+<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
+<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
+<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
+<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
+<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
+<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
+<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
+<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
+<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
+<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
+<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
+<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
+<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
+<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
+<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
+<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
+<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
+<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
+<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
+<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
+<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
+<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
+<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
+<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
+<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
+<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
+<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
+<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
+<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
+<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
+<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
+<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
+<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
+<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
+<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
+<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
+<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
+<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
+<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
+<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
+<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
+<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
+<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
+<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
+<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
+<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
+<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
+<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
+<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
+<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
+<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
+<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
+<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
+<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
+<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
+<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
+<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
+<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
+<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
+<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
+<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
+<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
+<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
+<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
+<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
+<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
+<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
+<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
+<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
+<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
+<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
+<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
+<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
+<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
+<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
+<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
+<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
+<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
+<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
+<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
+<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
+<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
+<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
+<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
+<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
+<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
+<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
+<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
+</font>
+</defs></svg> 

+ 0 - 0
src/main/resources/static/bycdao-ui/bootstrap/fonts/glyphicons-halflings-regular.ttf


+ 0 - 0
src/main/resources/static/bycdao-ui/bootstrap/fonts/glyphicons-halflings-regular.woff


+ 0 - 0
src/main/resources/static/bycdao-ui/bootstrap/fonts/glyphicons-halflings-regular.woff2


File diff suppressed because it is too large
+ 5 - 0
src/main/resources/static/bycdao-ui/bootstrap/js/bootstrap.min.js


+ 13 - 0
src/main/resources/static/bycdao-ui/bootstrap/js/npm.js

@@ -0,0 +1,13 @@
+// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
+require('../../js/transition.js')
+require('../../js/alert.js')
+require('../../js/button.js')
+require('../../js/carousel.js')
+require('../../js/collapse.js')
+require('../../js/dropdown.js')
+require('../../js/modal.js')
+require('../../js/tooltip.js')
+require('../../js/popover.js')
+require('../../js/scrollspy.js')
+require('../../js/tab.js')
+require('../../js/affix.js')

+ 1739 - 0
src/main/resources/static/bycdao-ui/cdao/DApiUI.js

@@ -0,0 +1,1739 @@
+(function ($) {
+    //初始化类
+    var DApiUI = {};
+
+    DApiUI.init = function () {
+        DApiUI.createGroupTab();
+    };
+
+    /**
+     * 创建分组
+     */
+    DApiUI.createGroupTab = function () {
+        $.ajax({
+            url: "swagger-resources",
+            type: "get",
+            async: false,
+            success: function (data) {
+                //获取分组名称
+                var groupData = data;
+                DApiUI.initGroupSele(groupData);
+            }
+        })
+    };
+
+    /***
+     * 创建面板
+     */
+    DApiUI.creatabTab = function () {
+        var divcontent = $('<div id="myTab" class="tabs-container" style="width:99%;margin:0px auto;"></div>');
+        var ul = $('<ul class="nav nav-tabs"></ul>')
+        ul.append($('<li><a data-toggle="tab" href="#tab1" aria-expanded="false"> 接口说明</a></li>'));
+        ul.append($('<li class=""><a data-toggle="tab" href="#tab2" aria-expanded="true"> 在线调试</a></li>'));
+        divcontent.append(ul);
+        var tabcontent = $('<div class="tab-content"></div>');
+
+        tabcontent.append($('<div id="tab1" class="tab-pane"><div class="panel-body"><strong>接口详细说明</strong><p>Bootstrap 使用到的某些 HTML 元素和 CSS 属性需要将页面设置为 HTML5 文档类型。在你项目中的每个页面都要参照下面的格式进行设置。</p></div></div>'));
+        tabcontent.append($('<div id="tab2" class="tab-pane"><div class="panel-body"><strong>正在开发中,敬请期待......</strong></div></div>'));
+        divcontent.append(tabcontent);
+        //内容覆盖
+        DApiUI.getDoc().html("");
+        DApiUI.getDoc().append(divcontent);
+        DApiUI.log("动态激活...")
+        //liapi.addClass("active");
+        DApiUI.log("动态激活12...")
+        DApiUI.getDoc().find("#myTab a:first").tab('show')
+        //$('#myTab a:first').tab('show')
+
+    }
+
+    /***
+     * 检查对象属性,in并赋予默认值
+     * @param obj
+     * @param key
+     * @param defaultValue
+     * @param checkEmpty
+     * @returns {*}
+     */
+    DApiUI.getValue = function (obj, key, defaultValue, checkEmpty) {
+        var val = defaultValue;
+        if (obj != null && obj != undefined) {
+            if (obj.hasOwnProperty(key)) {
+                val = obj[key];
+                if (checkEmpty) {
+                    if (val == null || val == "") {
+                        val = defaultValue;
+                    }
+                }
+            }
+        }
+        return val;
+    }
+
+
+    /***
+     * 创建简介table页面
+     * @param menu
+     */
+    DApiUI.createDescription = function (menu) {
+        var table = $('<table class="table table-hover table-bordered table-text-center"></table>');
+        var title = "", description = "", name = "", version = "", termsOfService = "";
+        var host = DApiUI.getValue(menu, "host", "", true);
+        if (menu.hasOwnProperty("info")) {
+            var info = menu.info;
+            title = DApiUI.getValue(info, "title", "Swagger-Bootstrap-UI-前后端api接口文档", true);
+            description = DApiUI.getValue(info, "description", "", true);
+            if (info.hasOwnProperty("contact")) {
+                var contact = info["contact"];
+                name = DApiUI.getValue(contact, "name", "", true);
+            }
+            version = DApiUI.getValue(info, "version", "", true);
+            termsOfService = DApiUI.getValue(info, "termsOfService", "", true);
+        }
+        //修改title
+        $("title").html("").html(title)
+        table.append($('<thead><tr><th colspan="2" style="text-align:center">' + title + '</th></tr></thead>'));
+        var tbody = $('<tbody></tbody>');
+        tbody.append($('<tr><th class="active">简介</th><td style="text-align: left">' + description + '</td></tr>'));
+        tbody.append($('<tr><th class="active">作者</th><td style="text-align: left">' + name + '</td></tr>'));
+        tbody.append($('<tr><th class="active">版本</th><td style="text-align: left">' + version + '</td></tr>'));
+        tbody.append($('<tr><th class="active">host</th><td style="text-align: left">' + host + '</td></tr>'))
+        tbody.append($('<tr><th class="active">服务url</th><td style="text-align: left">' + termsOfService + '</td></tr>'));
+        table.append(tbody);
+        var div = $('<div  style="width:99%;margin:0px auto;"></div>')
+        div.append(table);
+        //内容覆盖
+        DApiUI.getDoc().html("");
+        DApiUI.getDoc().append(div);
+        DApiUI.getDoc().data("data", menu);
+    }
+
+    /***
+     * 离线文档功能页面
+     * @param menu
+     */
+    DApiUI.createMarkdownTab = function (menu) {
+        var description = "swagger-bootstrap-ui 提供markdwon格式类型的离线文档,开发者可拷贝该内容通过其他markdown转换工具进行转换为html或pdf.";
+        var divdes = $('<div class="alert alert-info" role="alert">' + description + '</div>');
+        var div = $('<div  style="width:99%;margin:0px auto;"></div>');
+        div.append(divdes);
+        //toolbar按钮组
+        var toolbarDiv = $('<div class="input-inline" style="margin-bottom:10px;">');
+        var copyBtn = $('<button class="btn btn-primary" type="button" id="btnCopy"  data-clipboard-action="copy" data-clipboard-target="#txtDoc">拷贝文档</button></div>');
+        toolbarDiv.append(copyBtn);
+        div.append(toolbarDiv);
+        //添加textarea
+        var txtDiv = $("<div class='input-inline'><textarea class='form-control' style='width: 100%;height: 100%;' id='txtDoc'></textarea></div>")
+        div.append(txtDiv);
+        //内容覆盖
+        DApiUI.getDoc().html("");
+        DApiUI.getDoc().append(div);
+        DApiUI.getDoc().data("data", menu);
+        //初始化copy按钮功能
+        var clipboard = new ClipboardJS('#btnCopy');
+        clipboard.on('success', function (e) {
+            layer.msg("复制成功")
+        });
+        clipboard.on('error', function (e) {
+            layer.msg("复制失败,您当前浏览器版本不兼容,请手动复制.")
+        });
+
+    }
+
+    /***
+     * 获取菜单结构
+     */
+    DApiUI.getMenuConstructs = function () {
+        return DApiUI.getDoc().data("data");
+    }
+
+    DApiUI.toString = function (obj, defaultStr) {
+        if (obj != null && typeof (obj) != "undefined") {
+            return obj.toString();
+        }
+        if (obj == undefined) {
+            return defaultStr;
+        }
+        return defaultStr;
+    }
+
+
+    /***
+     * 初始化分组菜单
+     * @param menu
+     */
+    DApiUI.initGroupSele = function (groupData) {
+        //遍历tags
+        var tags = new Array();
+        //创建分组flag
+        var groupli = $('<li  class="active"></li>');
+        var groupSele = $("<select id='groupSel' style='width:100%;'></select>");
+        $.each(groupData, function (i, group) {
+            var groupOption = $("<option data-url='" + group.location + "' data-name='" + group.name + "'>" + group.name + "</option>");
+            groupSele.append(groupOption);
+        })
+        groupli.append(groupSele);
+        groupSele.on("change", function () {
+            var that = $(this);
+            DApiUI.log(that)
+            var apiurl = that.find("option:selected").attr("data-url");
+            DApiUI.log("分组::");
+            DApiUI.log(apiurl);
+            DApiUI.initApiTree(apiurl);
+        })
+        DApiUI.getMenu().html("");
+        DApiUI.getMenu().append(groupli);
+        var url = groupData[0].location;
+        //默认加载第一个url
+        DApiUI.initApiTree(url);
+    }
+
+    DApiUI.initApiTree = function (url) {
+        var idx = url.indexOf("/");
+        if (idx == 0) {
+            url = url.substr(1);
+        }
+        DApiUI.log("截取后的url:" + url);
+        $.ajax({
+            //url:"v2/api-docs",
+            url: url,
+            dataType: "json",
+            type: "get",
+            async: false,
+            success: function (data) {
+                //var menu=JSON.parse(data)
+                var menu = data;
+                DApiUI.definitions(menu);
+                DApiUI.log(menu);
+                DApiUI.createDescription(menu);
+                DApiUI.createDetailMenu(menu);
+            }
+        })
+    }
+
+    /***
+     * 创建分组详情菜单
+     * @param menu
+     */
+    DApiUI.createDetailMenu = function (menu) {
+        DApiUI.getMenu().find(".detailMenu").remove();
+
+        //简介li
+        var dli = $('<li  class="active detailMenu"><a href="javascript:void(0)"><i class="icon-text-width"></i><span class="menu-text"> 简介 </span></a></li>')
+        dli.on("click", function () {
+            DApiUI.log("简介click")
+            DApiUI.createDescription(menu);
+            dli.addClass("active");
+        })
+        DApiUI.getMenu().append(dli);
+        //离线文档功能
+        var mddocli = $("<li  class=\"detailMenu\"><a href=\"javascript:void(0)\"><i class=\"icon-text-width\"></i><span class=\"menu-text\"> 离线文档(MD) </span></a></li>");
+        mddocli.on("click", function () {
+            DApiUI.log("离线文档功能click")
+            DApiUI.createMarkdownTab(menu);
+            DApiUI.getMenu().find("li").removeClass("active");
+            mddocli.addClass("active");
+        })
+        DApiUI.getMenu().append(mddocli);
+        var methodApis = DApiUI.eachPath(menu);
+
+        $.each(menu.tags, function (i, tag) {
+            var tagInfo = new TagInfo(tag.name, tag.description);
+            //查找childrens
+            $.each(methodApis, function (i, methodApi) {
+                //判断tags是否相同
+                $.each(methodApi.tag, function (i, tagName) {
+                    if (tagName == tagInfo.name) {
+                        tagInfo.childrens.push(methodApi);
+                    }
+                })
+            })
+            var len = tagInfo.childrens.length;
+            if (len == 0) {
+                var li = $('<li class="detailMenu"><a href="javascript:void(0)"><i class="icon-text-width"></i><span class="menu-text"> ' + tagInfo.name + ' </span></a></li>');
+                DApiUI.getMenu().append(li);
+            } else {
+                //存在子标签
+                var li = $('<li  class="detailMenu"></li>');
+                var titleA = $('<a href="#" class="dropdown-toggle"><i class="icon-file-alt"></i><span class="menu-text">' + tagInfo.name + '<span class="badge badge-primary ">' + len + '</span></span><b class="arrow icon-angle-down"></b></a>');
+                li.append(titleA);
+                //循环树
+                var ul = $('<ul class="submenu"></ul>')
+                $.each(tagInfo.childrens, function (i, children) {
+                    var childrenLi = $('<li class="menuLi" ><div class="mhed"><div>' + children.methodType.toUpperCase() + '-<code>' + children.url + '</code></div><div>' + children.summary + '</div></div></li>');
+                    //console.log(children)
+                    //var childrenA=$('<a href="javascript:void(0)"><i class="icon-double-angle-right"></i><div  ><h5><span class="method">['+children.methodType+']</span></h5></div>'+children.summary+'('+children.url+')</a>');
+                    //childrenLi.append(childrenA);
+                    childrenLi.data("data", children);
+                    ul.append(childrenLi);
+                })
+                li.append(ul);
+                DApiUI.getMenu().append(li);
+            }
+        })
+        DApiUI.log("菜单初始化完成...")
+        DApiUI.initLiClick();
+    }
+
+
+    DApiUI.eachPath = function (menu) {
+        var paths = menu.paths;
+        DApiUI.log(paths);
+        //paths是object对象,key是api接口地址,
+        var methodApis = [];
+        for (var key in paths) {
+            var obj = paths[key];
+            //遍历obj,获取api接口访问方式
+            //八中方式类型,直接判断
+            if (obj.hasOwnProperty("get")) {
+                //get方式
+                var apiInfo = new ApiInfo(obj["get"]);
+                apiInfo.methodType = "get";
+                apiInfo.url = key;
+                methodApis.push(apiInfo);
+            }
+
+            if (obj.hasOwnProperty("post")) {
+                //post 方式
+                var apiInfo = new ApiInfo(obj["post"]);
+                apiInfo.methodType = "post";
+                apiInfo.url = key;
+                methodApis.push(apiInfo);
+            }
+            if (obj.hasOwnProperty("put")) {
+                //put
+                var apiInfo = new ApiInfo(obj["put"]);
+                apiInfo.methodType = "put";
+                apiInfo.url = key;
+                methodApis.push(apiInfo);
+            }
+            if (obj.hasOwnProperty("delete")) {
+                //delete
+                var apiInfo = new ApiInfo(obj["delete"]);
+                apiInfo.methodType = "delete";
+                apiInfo.url = key;
+                methodApis.push(apiInfo);
+            }
+            //扩展 支持http其余请求方法接口
+            //add by xiaoymin 2018-4-28 07:16:12
+            if (obj.hasOwnProperty("patch")) {
+                //patch
+                var apiInfo = new ApiInfo(obj["patch"]);
+                apiInfo.methodType = "patch";
+                apiInfo.url = key;
+                methodApis.push(apiInfo);
+            }
+            if (obj.hasOwnProperty("options")) {
+                //OPTIONS
+                var apiInfo = new ApiInfo(obj["options"]);
+                apiInfo.methodType = "options";
+                apiInfo.url = key;
+                methodApis.push(apiInfo);
+            }
+            if (obj.hasOwnProperty("trace")) {
+                //TRACE
+                var apiInfo = new ApiInfo(obj["trace"]);
+                apiInfo.methodType = "trace";
+                apiInfo.url = key;
+                methodApis.push(apiInfo);
+            }
+            if (obj.hasOwnProperty("head")) {
+                //HEAD
+                var apiInfo = new ApiInfo(obj["head"]);
+                apiInfo.methodType = "head";
+                apiInfo.url = key;
+                methodApis.push(apiInfo);
+            }
+            if (obj.hasOwnProperty("connect")) {
+                //CONNECT
+                var apiInfo = new ApiInfo(obj["connect"]);
+                apiInfo.methodType = "connect";
+                apiInfo.url = key;
+                methodApis.push(apiInfo);
+            }
+        }
+        //console.log(methodApis);
+        return methodApis;
+
+    }
+
+    /***
+     * li标签click事件
+     */
+    DApiUI.initLiClick = function () {
+        DApiUI.getMenu().find(".menuLi").bind("click", function (e) {
+            e.preventDefault();
+            var that = $(this);
+            var data = that.data("data");
+            DApiUI.log("Li标签click事件");
+            DApiUI.log(data);
+            //获取parent-Li的class属性值
+            var parentLi = that.parent().parent();
+            DApiUI.log(parentLi);
+            var className = parentLi.prop("class");
+            DApiUI.log(className)
+            DApiUI.getMenu().find("li").removeClass("active");
+            //parentLi.addClass("active");
+            that.addClass("active");
+            DApiUI.createApiInfoTable(data);
+            DApiUI.createDebugTab(data);
+        })
+    }
+
+    DApiUI.getStringValue = function (obj) {
+        var str = "";
+        if (typeof (obj) != 'undefined' && obj != null) {
+            str = obj.toString();
+        }
+        return str;
+    }
+
+
+    /***
+     * 格式化json
+     * @param text_value
+     */
+    function formatterJson(text_value) {
+        var res = "";
+        for (var i = 0, j = 0, k = 0, ii, ele; i < text_value.length; i++) {//k:缩进,j:""个数
+            ele = text_value.charAt(i);
+            if (j % 2 == 0 && ele == "}") {
+                k--;
+                for (ii = 0; ii < k; ii++) ele = "    " + ele;
+                ele = "\n" + ele;
+            }
+            else if (j % 2 == 0 && ele == "{") {
+                ele += "\n";
+                k++;
+                //debugger;
+                for (ii = 0; ii < k; ii++) ele += "    ";
+            }
+            else if (j % 2 == 0 && ele == ",") {
+                ele += "\n";
+                for (ii = 0; ii < k; ii++) ele += "    ";
+            }
+            else if (ele == "\"") j++;
+            res += ele;
+        }
+        return res;
+
+    }
+
+    /**
+     * 创建调试面板
+     */
+    DApiUI.createDebugTab = function (apiInfo) {
+        DApiUI.log("创建调试tab")
+        //方法、请求类型、发送按钮
+        var div = $('<div style="width: 100%;margin: 0px auto;margin-top: 20px;"></div>');
+        var headdiv1 = $('<div class="input-group m-bot15"><span class="input-group-btn"><button class="btn btn-default btn-info" type="button">' + DApiUI.getStringValue(apiInfo.methodType) + '</button></span><input type="text" id="txtreqUrl" class="form-control" value="' + DApiUI.getStringValue(apiInfo.url) + '"/><span class="input-group-btn"><button id="btnRequest" class="btn btn-default btn-primary" type="button"> 发 送 </button></span></div>');
+        div.append(headdiv1);
+
+
+        //请求参数
+        var divp = $('<div class="panel panel-primary"><div class="panel-heading">请求参数</div></div>')
+
+        var divpbody = $('<div class="panel-body"></div>');
+        //是否是文件上传
+        var fileform = false;
+        //判断是否有请求参数
+        if (typeof (apiInfo.parameters) != 'undefined' && apiInfo.parameters != null) {
+            var table = $('<table class="table table-hover table-bordered table-text-center"></table>')
+            var thead = $('<thead><tr><th></th><th>参数名称</th><th>参数值</th><th>操作</th></tr></thead>');
+            table.append(thead);
+            var tbody = $('<tbody id="paramBody"></tbody>');
+            $.each(apiInfo.parameters, function (i, param) {
+                var tr = $('<tr></tr>');
+                tr.data("data", param);
+                //判断parame的in类型
+                //query--text
+                //body--textarea
+                var checkbox = $('<td width="5%"><div class="checkbox"><label><input type="checkbox" value="" checked></label></div></td>');
+                var key = $('<td width="20%"><input class="form-control p-key"   value="' + param.name + '"/></td>')
+                //var value=$('<td><input class="form-control p-value" data-apiUrl="'+apiInfo.url+'" data-name="'+param.name+'" placeholder="'+DApiUI.getStringValue(param['description'])+'"/></td>');
+                var value = $('<td></td>');
+
+                var val = null;
+                if (param["in"] == "body") {
+                    tbody.attr("reqtype", "body");
+                    val = $('<textarea class="form-control p-value" style="font-size: 16px;" rows="10" data-apiUrl="' + apiInfo.url + '" name="' + param.name + '" data-name="' + param.name + '" placeholder="' + DApiUI.getStringValue(param['description']) + '"></textarea>')
+                    //判断是否有schma
+                    if (param.hasOwnProperty("schema")) {
+                        var schema = param["schema"];
+                        var ref = schema["$ref"];
+                        var regex = new RegExp("#/definitions/(.*)$", "ig");
+                        if (regex.test(ref)) {
+                            var refType = RegExp.$1;
+                            //这里判断refType是否是MultipartFile类型,如果是该类型,上传组件
+                            if (refType == "MultipartFile") {
+                                fileform = true;
+                                val = $('<input name="' + param.name + '" type="file" class="form-control p-value" data-apiUrl="' + apiInfo.url + '" data-name="' + param.name + '" placeholder="' + DApiUI.getStringValue(param['description']) + '"/>');
+                            } else {
+                                //find in definitionsArray
+                                var definitionsArray = DApiUI.getDoc().data("definitionsArray");
+                                var deftion = null;
+                                for (var i = 0; i < definitionsArray.length; i++) {
+                                    var definition = definitionsArray[i];
+                                    if (definition.key == refType) {
+                                        deftion = definition.value;
+                                        break;
+                                    }
+                                }
+                                //遍历proprietary
+                                /*create by xjy 此处不能要,不然json数据丢了*/
+                                /*create by xjy 此处不能要,不然json数据丢了*/
+                                /* for (var k in deftion) {
+                                     deftion[k] = "";
+                                 }*/
+                                if (deftion != null) {
+                                    //赋值
+                                    /*create by xjy 新的格式化*/
+                                    // val.val(formatterJson(JSON.stringify(deftion)));
+                                    val.val(JSON.stringify(deftion, null, 4));
+                                }
+                            }
+                        }
+                    }
+
+                } else {
+                    val = $('<input class="form-control p-value" name="' + param.name + '" data-apiUrl="' + apiInfo.url + '" data-name="' + param.name + '" placeholder="' + DApiUI.getStringValue(param['description']) + '"/>');
+                    //判断是否有defaultvalue
+                    if (param.hasOwnProperty("default")) {
+                        var defaultValue = param["default"];
+                        val.val(defaultValue);
+                    }
+                    //这里判断param类型,如果是int类型,只能输入数字
+                }
+                value.append(val);
+                var oper = $('<td width="5%"><button class="btn btn-danger btn-circle btn-lg" type="button"><strong>×</strong></button></td>');
+                //删除事件
+                oper.find("button").on("click", function (e) {
+                    e.preventDefault();
+                    var that = $(this);
+                    that.parent().parent().remove();
+                })
+                //判断参数类型,针对path参数
+                if (param["in"] == "path") {
+                    //赋予change事件
+                    value.find("input").on("keyup", function () {
+                        var t = $(this);
+                        var name = t.data("name");
+                        var apiUrl = t.attr("data-apiUrl");
+                        var realValue = apiUrl.replace("{" + name + "}", t.val());
+                        //查找是否还存在其他path参数
+                        $("#paramBody").find("tr").each(function (i, itr) {
+                            var itrthat = $(this);
+                            var itrdata = itrthat.data("data");
+                            var itrname = itrdata["name"];
+                            if (itrdata["in"] == "path" && itrdata["name"] != name) {
+                                //查找value值
+                                var itrtdvalue = itrthat.find(".p-value").val();
+                                if (itrtdvalue != "") {
+                                    realValue = realValue.replace("{" + itrname + "}", itrtdvalue);
+                                }
+                            }
+                        })
+                        DApiUI.log(realValue);
+                        $("#txtreqUrl").val(realValue);
+                        DApiUI.log("keyup。。。。")
+                    })
+
+                }
+                tr.append(checkbox).append(key).append(value).append(oper);
+                tbody.append(tr);
+            })
+            table.append(tbody);
+            //如果有文件上传,追加form表单
+            if (fileform) {
+                //文件上传使用相对路径
+                var uploadurltemp = apiInfo.url;
+                if (uploadurltemp.indexOf("/") == 0) {
+                    uploadurltemp = uploadurltemp.substr(1);
+                }
+                DApiUI.log("upload上传接口截取后:" + uploadurltemp)
+                var form = $('<form id="uploadForm"  target="uploadIframe" action="' + uploadurltemp + '" type="" enctype="multipart/form-data" method="' + apiInfo.methodType + '"></form>');
+                form.append(table);
+                divpbody.append(form);
+            } else {
+                divpbody.append(table);
+            }
+        } else {
+            divpbody.append($('<strong>暂无参数</strong>'))
+        }
+        divp.append(divpbody);
+        //
+        if (fileform) {
+            //追加iframe
+            var resptabframe = $('<div id="resptab" class="tabs-container" ><iframe name="uploadIframe" id="uploadIframe" style="border: none;height: 1%;display: none;"></iframe></div>')
+            divp.append(resptabframe);
+        }
+        div.append(divp);
+        //创建reesponsebody
+        var respcleanDiv = $('<div id="responsebody"></div>');
+
+        div.append(respcleanDiv);
+
+
+        DApiUI.getDoc().find("#tab2").find(".panel-body").html("")
+        DApiUI.getDoc().find("#tab2").find(".panel-body").append(div);
+
+
+        //发送事件
+        headdiv1.find("#btnRequest").bind("click", function (e) {
+            e.preventDefault();
+            respcleanDiv.html("")
+            DApiUI.log("发送请求");
+            //
+            var params = {};
+            var headerparams = {};
+            var bodyparams = "";
+            //modify by xiaoyumin 2017-8-9 11:28:16
+            //增加表单验证
+            var validateflag = false;
+            var validateobj = {};
+
+            //获取参数
+            var paramBody = DApiUI.getDoc().find("#tab2").find("#paramBody")
+            DApiUI.log("paramsbody..")
+            DApiUI.log(paramBody)
+            //组装请求url
+            var url = DApiUI.getStringValue(apiInfo.url);
+            var cacheData = DApiUI.getDoc().data("data");
+            if (typeof (cacheData.basePath) != "undefined" && cacheData.basePath != "") {
+                if (cacheData.basePath != "/") {
+                    DApiUI.log("NOT ROOT PATH:");
+                    url = cacheData.basePath + DApiUI.getStringValue(apiInfo.url);
+                }
+            }
+
+
+            paramBody.find("tr").each(function () {
+                var paramtr = $(this);
+                var cked = paramtr.find("td:first").find(":checked").prop("checked");
+                DApiUI.log(cked)
+                if (cked) {
+                    //如果选中
+                    var trdata = paramtr.data("data");
+                    DApiUI.log("trdata....")
+                    DApiUI.log(trdata);
+                    //获取key
+                    //var key=paramtr.find("td:eq(1)").find("input").val();
+                    var key = trdata["name"];
+                    //获取value
+                    var value = "";
+                    if (trdata["in"] == "body") {
+                        value = paramtr.find("td:eq(2)").find("textarea").val();
+                        //这里需要判断schema
+                        if (trdata.hasOwnProperty("schema")) {
+                            var schema = trdata["schema"];
+                            if (schema.hasOwnProperty("$ref")) {
+                                var ref = schema["$ref"];
+                                var regex = new RegExp("#/definitions/(.*)$", "ig");
+                                if (regex.test(ref)) {
+                                    var refType = RegExp.$1;
+                                    //这里判断refType是否是MultipartFile类型,如果是该类型,上传组件
+                                    if (refType == "MultipartFile") {
+                                        value = paramtr.find("td:eq(2)").find("input").val();
+                                    }
+                                }
+                            }
+                        }
+                    } else {
+                        value = paramtr.find("td:eq(2)").find("input").val();
+                    }
+                    //var value=paramtr.find("td:eq(2)").find("input").val();
+                    //delete方式参数url传递
+                    if (apiInfo.methodType == "delete") {
+                        //判断是否是path参数
+                        if (trdata["in"] == "path") {
+                            url = url.replace("{" + key + "}", value);
+                        } else {
+                            if (url.indexOf("?") > -1) {
+                                url = url + "&" + key + "=" + value;
+                            } else {
+                                url += "?" + key + "=" + value;
+                            }
+                        }
+                    } else {
+                        if (trdata["in"] == "path") {
+                            url = url.replace("{" + key + "}", value);
+                        } else {
+                            if (trdata["in"] == "body") {
+                                bodyparams += value;
+                            } else {
+                                if (trdata["in"] == "header") {
+                                    headerparams[key] = value;
+                                } else {
+                                    params[key] = value;
+                                }
+                            }
+                        }
+                    }
+                    //判断是否required
+                    if (trdata.hasOwnProperty("required")) {
+                        var required = trdata["required"];
+                        if (required) {
+                            //必须,验证value是否为空
+                            if (value == null || value == "") {
+                                validateflag = true;
+                                var des = trdata["name"]
+                                validateobj = {message: des + "不能为空"};
+                                return false;
+                            }
+                        }
+
+                    }
+                    DApiUI.log("key:" + key + ",value:" + value);
+                }
+            })
+            DApiUI.log("获取参数..")
+            DApiUI.log(params);
+            DApiUI.log(apiInfo)
+
+            DApiUI.log("请求url:" + url);
+            var reqdata = null;
+            //console.log(paramBody.attr("reqtype"))
+            var contType = "application/json; charset=UTF-8";
+            if (paramBody.attr("reqtype") != null && paramBody.attr("reqtype") != undefined && paramBody.attr("reqtype") == "body") {
+                reqdata = bodyparams;
+            } else {
+                reqdata = params;
+                contType = "application/x-www-form-urlencoded; charset=UTF-8";
+            }
+            //console.log(reqdata)
+            if (validateflag) {
+                layer.msg(validateobj.message);
+                return;
+            }
+            //判断是否有表单
+            var form = $("#uploadForm");
+            if (form.length > 0) {
+                form[0].submit();
+                //console.log("表单提交")
+                //iframe监听change事件
+                $("#uploadIframe").on("load", function () {
+                    //console.log("uploadIframe changed....")
+                    $(this).unbind('load');
+                    var framebody = $(this).contents().find("body");
+                    var ret = framebody.html();
+                    //是否存在pre标签
+                    if (framebody.find("pre").length > 0) {
+                        ret = framebody.find("pre").html();
+                    }
+                    var res;
+                    try {
+                        res = JSON.parse(ret);
+                        //console.log(res)
+                        var resptab = $('<div id="resptab" class="tabs-container" ></div>')
+                        var ulresp = $('<ul class="nav nav-tabs">' +
+                            '<li class=""><a data-toggle="tab" href="#tabresp" aria-expanded="false"> 响应内容 </a></li></ul>')
+                        resptab.append(ulresp);
+                        var respcontent = $('<div class="tab-content"></div>');
+                        var resp1 = $('<div id="tabresp" class="tab-pane active"><div class="panel-body"></div></div>');
+                        respcontent.append(resp1);
+                        resptab.append(respcontent)
+                        respcleanDiv.append(resptab);
+
+                        var jsondiv = $('<div></div>');
+                        jsondiv.JSONView(res);
+                        resp1.find(".panel-body").append(jsondiv);
+                        resptab.find("a:first").tab("show");
+                    } catch (err) {
+                        //nothing to do,default to show
+                        respcleanDiv.html(ret);
+                    }
+                })
+            } else {
+                $.ajax({
+                    url: url,
+                    headers: headerparams,
+                    type: DApiUI.getStringValue(apiInfo.methodType),
+                    data: reqdata,
+                    contentType: contType,
+                    success: function (data, status, xhr) {
+                        var resptab = $('<div id="resptab" class="tabs-container" ></div>')
+                        var ulresp = $('<ul class="nav nav-tabs">' +
+                            '<li class=""><a data-toggle="tab" href="#tabresp" aria-expanded="false"> 响应内容 </a></li>' +
+                            '<li class=""><a data-toggle="tab" href="#tabcookie" aria-expanded="true"> Cookies</a></li>' +
+                            '<li class=""><a data-toggle="tab" href="#tabheader" aria-expanded="true"> Headers </a></li></ul>')
+
+                        resptab.append(ulresp);
+                        var respcontent = $('<div class="tab-content"></div>');
+
+                        var resp1 = $('<div id="tabresp" class="tab-pane active"><div class="panel-body"><pre></pre></div></div>');
+                        var resp2 = $('<div id="tabcookie" class="tab-pane active"><div class="panel-body">暂无</div>');
+                        var resp3 = $('<div id="tabheader" class="tab-pane active"><div class="panel-body">暂无</div></div>');
+
+                        respcontent.append(resp1).append(resp2).append(resp3);
+
+                        resptab.append(respcontent)
+
+                        respcleanDiv.append(resptab);
+                        DApiUI.log(xhr);
+                        DApiUI.log(xhr.getAllResponseHeaders());
+                        var allheaders = xhr.getAllResponseHeaders();
+                        if (allheaders != null && typeof (allheaders) != 'undefined' && allheaders != "") {
+                            var headers = allheaders.split("\r\n");
+                            var headertable = $('<table class="table table-hover table-bordered table-text-center"><tr><th>请求头</th><th>value</th></tr></table>');
+                            for (var i = 0; i < headers.length; i++) {
+                                var header = headers[i];
+                                if (header != null && header != "") {
+                                    var headerValu = header.split(":");
+                                    var headertr = $('<tr><th class="active">' + headerValu[0] + '</th><td>' + headerValu[1] + '</td></tr>');
+                                    headertable.append(headertr);
+                                }
+                            }
+                            //设置Headers内容
+                            resp3.find(".panel-body").html("")
+                            resp3.find(".panel-body").append(headertable);
+                        }
+                        var contentType = xhr.getResponseHeader("Content-Type");
+                        DApiUI.log("Content-Type:" + contentType);
+                        DApiUI.log(xhr.hasOwnProperty("responseJSON"))
+                        if (xhr.hasOwnProperty("responseJSON")) {
+                            //如果存在该对象,服务端返回为json格式
+                            resp1.find(".panel-body").html("")
+                            DApiUI.log(xhr["responseJSON"])
+                            var pre = $('<pre></pre>')
+                            var jsondiv = $('<div></div>')
+                            jsondiv.JSONView(xhr["responseJSON"]);
+                            pre.html(JSON.stringify(xhr["responseJSON"], null, 2));
+                            resp1.find(".panel-body").append(jsondiv);
+                        } else {
+                            //判断content-type
+                            //如果是image资源
+                            var regex = new RegExp('image/(jpeg|jpg|png|gif)', 'g');
+                            if (regex.test(contentType)) {
+                                var d = DApiUI.getDoc().data("data");
+                                var imgUrl = "http://" + d.host + apiInfo.url;
+                                var img = document.createElement("img");
+                                img.onload = function (e) {
+                                    window.URL.revokeObjectURL(img.src); // 清除释放
+                                };
+                                img.src = imgUrl;
+                                resp1.find(".panel-body").html("")
+                                resp1.find(".panel-body")[0].appendChild(img);
+                            } else {
+                                //判断是否是text
+                                var regex = new RegExp('.*?text.*', 'g');
+                                if (regex.test(contentType)) {
+                                    resp1.find(".panel-body").html("")
+                                    resp1.find(".panel-body").html(xhr.responseText);
+                                }
+                            }
+
+                        }
+
+                        DApiUI.log("tab show...")
+                        resptab.find("a:first").tab("show");
+                    },
+                    error: function (xhr, textStatus, errorThrown) {
+                        DApiUI.log("error.....")
+                        DApiUI.log(xhr);
+                        DApiUI.log(textStatus);
+                        DApiUI.log(errorThrown);
+                        var resptab = $('<div id="resptab" class="tabs-container" ></div>')
+                        var ulresp = $('<ul class="nav nav-tabs">' +
+                            '<li class=""><a data-toggle="tab" href="#tabresp" aria-expanded="false"> 响应内容 </a></li>' +
+                            '<li class=""><a data-toggle="tab" href="#tabcookie" aria-expanded="true"> Cookies</a></li>' +
+                            '<li class=""><a data-toggle="tab" href="#tabheader" aria-expanded="true"> Headers </a></li></ul>')
+
+                        resptab.append(ulresp);
+                        var respcontent = $('<div class="tab-content"></div>');
+
+                        var resp1 = $('<div id="tabresp" class="tab-pane active"><div class="panel-body"><pre></pre></div></div>');
+                        var resp2 = $('<div id="tabcookie" class="tab-pane active"><div class="panel-body">暂无</div>');
+                        var resp3 = $('<div id="tabheader" class="tab-pane active"><div class="panel-body">暂无</div></div>');
+
+                        respcontent.append(resp1).append(resp2).append(resp3);
+
+                        resptab.append(respcontent)
+
+                        respcleanDiv.append(resptab);
+                        DApiUI.log(xhr);
+                        DApiUI.log(xhr.getAllResponseHeaders());
+                        var allheaders = xhr.getAllResponseHeaders();
+                        if (allheaders != null && typeof (allheaders) != 'undefined' && allheaders != "") {
+                            var headers = allheaders.split("\r\n");
+                            var headertable = $('<table class="table table-hover table-bordered table-text-center"><tr><th>请求头</th><th>value</th></tr></table>');
+                            for (var i = 0; i < headers.length; i++) {
+                                var header = headers[i];
+                                if (header != null && header != "") {
+                                    var headerValu = header.split(":");
+                                    var headertr = $('<tr><th class="active">' + headerValu[0] + '</th><td>' + headerValu[1] + '</td></tr>');
+                                    headertable.append(headertr);
+                                }
+                            }
+                            //设置Headers内容
+                            resp3.find(".panel-body").html("")
+                            resp3.find(".panel-body").append(headertable);
+                        }
+                        var contentType = xhr.getResponseHeader("Content-Type");
+                        DApiUI.log("Content-Type:" + contentType);
+                        var jsonRegex = "";
+                        DApiUI.log(xhr.hasOwnProperty("responseJSON"))
+                        if (xhr.hasOwnProperty("responseJSON")) {
+                            //如果存在该对象,服务端返回为json格式
+                            resp1.find(".panel-body").html("")
+                            DApiUI.log(xhr["responseJSON"])
+                            var jsondiv = $('<div></div>')
+                            jsondiv.JSONView(xhr["responseJSON"]);
+                            resp1.find(".panel-body").append(jsondiv);
+                        } else {
+                            //判断是否是text
+                            var regex = new RegExp('.*?text.*', 'g');
+                            if (regex.test(contentType)) {
+                                resp1.find(".panel-body").html("")
+                                resp1.find(".panel-body").html(xhr.responseText);
+                            }
+                        }
+                        DApiUI.log("tab show...")
+                        resptab.find("a:first").tab("show");
+
+                    }
+                })
+            }
+        })
+
+    }
+
+    DApiUI.createDebugResponseTab = function (parent, data) {
+
+    }
+
+
+    DApiUI.writeUTF8 = function (str, isGetBytes) {
+        var back = [],
+            byteSize = 0;
+        for (var i = 0; i < str.length; i++) {
+            var code = str.charCodeAt(i);
+            if (code >= 0 && code <= 127) {
+                byteSize += 1;
+                back.push(code);
+            } else if (code >= 128 && code <= 2047) {
+                byteSize += 2;
+                back.push((192 | (31 & (code >> 6))));
+                back.push((128 | (63 & code)))
+            } else if (code >= 2048 && code <= 65535) {
+                byteSize += 3;
+                back.push((224 | (15 & (code >> 12))));
+                back.push((128 | (63 & (code >> 6))));
+                back.push((128 | (63 & code)))
+            }
+        }
+        for (i = 0; i < back.length; i++) {
+            if (back[i] > 255) {
+                back[i] &= 255
+            }
+        }
+        if (isGetBytes) {
+            return back
+        }
+        if (byteSize <= 255) {
+            return [0, byteSize].concat(back);
+        } else {
+            return [byteSize >> 8, byteSize & 255].concat(back);
+        }
+    }
+
+    DApiUI.createApiInfoTable = function (apiInfo) {
+        var table = $('<table class="table table-hover table-bordered table-text-center"></table>');
+        var thead = $('<thead><tr><th colspan="2" style="text-align:center">API接口文档</th></tr></thead>');
+        table.append(thead);
+        var tbody = $('<tbody></tbody>');
+
+        var url = $('<tr><th class="active" style="text-align: right;">接口url</th><td style="text-align: left"><code>' + DApiUI.getStringValue(apiInfo.url) + '</code></td></tr>');
+        tbody.append(url);
+
+        var summary = $('<tr><th class="active" style="text-align: right;">接口名称</th><td style="text-align: left">' + DApiUI.getStringValue(apiInfo.summary) + '</td></tr>');
+        tbody.append(summary);
+
+
+        var description = $('<tr><th class="active" style="text-align: right;">说明</th><td style="text-align: left">' + DApiUI.getStringValue(apiInfo.description) + '</td></tr>');
+        tbody.append(description);
+
+        var methodType = $('<tr><th class="active" style="text-align: right;">请求方式</th><td style="text-align: left"><code>' + DApiUI.getStringValue(apiInfo.methodType) + '</code></td></tr>');
+        tbody.append(methodType);
+
+        var consumesArr = DApiUI.getValue(apiInfo, "consumes", new Array(), true);
+
+
+        var consumes = $('<tr><th class="active" style="text-align: right;">consumes</th><td style="text-align: left"><code>' + consumesArr + '</code></td></tr>');
+        tbody.append(consumes);
+
+        var producesArr = DApiUI.getValue(apiInfo, "produces", new Array(), true);
+
+        var produces = $('<tr><th class="active" style="text-align: right;">produces</th><td style="text-align: left"><code>' + producesArr + '</code></td></tr>');
+        tbody.append(produces);
+
+        //请求参数
+        var args = $('<tr><th class="active" style="text-align: right;">请求参数</th></tr>');
+        //判断是否有请求参数
+        if (typeof (apiInfo.parameters) != 'undefined' && apiInfo.parameters != null) {
+            var ptd = $("<td></td>");
+            var ptable = $('<table class="table table-bordered" id="requestModelTable"></table>')
+            var phead = $('<thead><th>参数名称</th><th>说明</th><th>类型</th><th>in</th><th>是否必须</th></thead>');
+            ptable.append(phead);
+            var pbody = $('<tbody></tbody>');
+            var requestArrs = new Array();
+            $.each(apiInfo.parameters, function (i, param) {
+                //判断是否是ref,如果是,列出他的属性说明
+                var refflag = false;
+                //判断是否有type属性,如果有,则后端为实体类形参
+                var ptype = "string";
+                var refType = "";
+                if (param.hasOwnProperty("type")) {
+                    ptype = param["type"];
+                } else {
+                    ///判断是有schma
+                    if (param.hasOwnProperty("schema")) {
+                        var schema = param["schema"];
+                        //是否有type
+                        if (schema.hasOwnProperty("type")) {
+                            ptype = schema["type"];
+                            if (ptype == "array") {
+                                var itm = schema["items"];
+                                if (itm.hasOwnProperty("$ref")) {
+                                    //是否是ref
+                                    var regex = new RegExp("#/definitions/(.*)$", "ig");
+                                    if (regex.test(itm["$ref"])) {
+                                        refflag = true;
+                                        refType = RegExp.$1;
+                                    }
+                                }
+                            }
+                        } else if (schema.hasOwnProperty("$ref")) {
+                            //是否是ref
+                            var regex = new RegExp("#/definitions/(.*)$", "ig");
+                            if (regex.test(schema["$ref"])) {
+                                refflag = true;
+                                ptype = RegExp.$1;
+                            }
+                        }
+                    }
+                }
+                var ptr = null;
+                //列出属性
+                var pobject = {
+                    id: generUUID(),
+                    field: param.name,
+                    description: DApiUI.getStringValue(param['description']),
+                    type: ptype,
+                    in: DApiUI.getStringValue(param['in']),
+                    required: param['required'],
+                    pid: ""
+                };
+                requestArrs.push(pobject);
+                /*if (refflag){
+                    ptr=$('<tr><td>'+param.name+'</td><td style="text-align: center;">'+DApiUI.getStringValue(param['description'])+'</td><td>'+ptype+'</td><td>'+DApiUI.getStringValue(param['in'])+'</td><td>'+param['required']+'</td></tr>');
+                    pbody.append(ptr);
+                    var definitionsArray=DApiUI.getDoc().data("definitionsArray");
+                    var mcs=DApiUI.getMenuConstructs();
+                    for(var k in mcs.definitions){
+                        if(ptype==k){
+                            var tp=mcs.definitions[ptype];
+                            var props=tp["properties"];
+                            for(var prop in props){
+                                var pvalue=props[prop];
+                                var tr=$("<tr></tr>")
+                                tr.append($("<td style='text-align: right;'>"+prop+"</td>"))
+                                tr.append($("<td>"+DApiUI.toString(pvalue.description,"")+"</td>"));
+                                var type=DApiUI.toString(pvalue.type,"string");
+                                tr.append($("<td>"+type+"</td>"));
+                                tr.append($("<td>"+DApiUI.getStringValue(param['in'])+"</td>"));
+                                tr.append($("<td>"+param['required']+"</td>"));
+                                pbody.append(tr);
+                            }
+                        }
+                    }
+                }else{
+                    ptr=$('<tr><td>'+param.name+'</td><td style="text-align: center;">'+DApiUI.getStringValue(param['description'])+'</td><td>'+ptype+'</td><td>'+DApiUI.getStringValue(param['in'])+'</td><td>'+param['required']+'</td></tr>');
+                    pbody.append(ptr);
+                }*/
+                if (refflag) {
+                    myFun(pobject, refType, param, requestArrs);
+                    /* var mcs=DApiUI.getMenuConstructs();
+                     for(var k in mcs.definitions){
+                         if(ptype==k){
+                             var tp=mcs.definitions[ptype];
+                             var props=tp["properties"];
+                             for(var prop in props){
+                                 var pvalue=props[prop];
+                                 var type=DApiUI.toString(pvalue.type,"string");
+                                 var cobj={id:generUUID(),field:prop,description:DApiUI.toString(pvalue.description,""),type:type,in:DApiUI.getStringValue(param['in']),required:param['required'],pid:pobject.id};
+                                 requestArrs.push(cobj);
+                             }
+                         }
+                     }*/
+                }
+            })
+            if (requestArrs.length > 0) {
+                for (var i = 0; i < requestArrs.length; i++) {
+                    var arrInfo = requestArrs[i];
+                    var treeClassId = "treegrid-" + arrInfo.id;
+                    var treeClassPId = "";
+                    if (arrInfo.pid != "") {
+                        treeClassPId = "treegrid-parent-" + arrInfo.pid;
+                    }
+                    var tr = $("<tr class='" + treeClassId + " " + treeClassPId + "'></tr>");
+                    tr.append("<td>" + arrInfo.field + "</td><td>" + arrInfo.description + "</td><td>" + arrInfo.type + "</td><td>" + arrInfo.in + "</td><td>" + arrInfo.required + "</td>");
+                    pbody.append(tr);
+                }
+            } else {
+                tbody.append("<tr><td colspan='5'>暂无</td></tr>")
+            }
+            ptable.append(pbody);
+            ptd.append(ptable);
+            args.append(ptd);
+        } else {
+            args.append($('<td  style="text-align: left">暂无</td>'));
+        }
+        tbody.append(args);
+        //响应数据结构
+        var responseConstruct = $('<tr><th class="active" style="text-align: right;">响应Model</th></tr>');
+        var responseConstructtd = $('<td  style="text-align: left"></td>')
+        responseConstructtd.append(DApiUI.createResponseDefinition(apiInfo));
+        responseConstruct.append(responseConstructtd);
+        tbody.append(responseConstruct)
+
+        //响应参数 add by xiaoymin 2017-8-20 16:17:18
+        var respParams = $('<tr><th class="active" style="text-align: right;">响应参数说明</th></tr>');
+        var respPart = $('<td  style="text-align: left"></td>');
+        respPart.append(DApiUI.createResponseDefinitionDetail(apiInfo));
+        respParams.append(respPart);
+
+        tbody.append(respParams);
+
+        //响应状态码
+        var response = $('<tr><th class="active" style="text-align: right;">响应</th></tr>');
+        if (typeof (apiInfo.responses) != 'undefined' && apiInfo.responses != null) {
+            var resp = apiInfo.responses;
+            var ptd = $("<td></td>");
+            var ptable = $('<table class="table table-bordered"></table>')
+            var phead = $('<thead><th>状态码</th><th>说明</th><th>schema</th></thead>');
+            ptable.append(phead);
+            var pbody = $('<tbody></tbody>');
+            for (var status in resp) {
+                var rescrobj = resp[status];
+                var schematd = $("<td></td>");
+                //判断是否存在schma
+                if (rescrobj.hasOwnProperty("schema")) {
+                    var schema = rescrobj["schema"];
+                    var regex = new RegExp("#/definitions/(.*)$", "ig");
+                    if (regex.test(schema["$ref"])) {
+                        var ptype = RegExp.$1;
+                        schematd.append(ptype);
+                    }
+                }
+                var tr = $("<tr></tr>")
+                var statusTd = $("<td>" + status + "</td>");
+                var description = $("<td>" + rescrobj["description"] + "</td>");
+                tr.append(statusTd).append(description).append(schematd);
+                pbody.append(tr);
+
+            }
+            /*if(resp.hasOwnProperty("200")){
+                var ptr=$('<tr><td>200</td><td>http响应成功</td><td></td></tr>');
+                pbody.append(ptr);
+            }
+            //400
+            pbody.append($('<tr><td>400</td><td>Bad Request 请求出现语法错误,一般是请求参数不对</td><td></td></tr>'));
+            //404
+            pbody.append($('<tr><td>404</td><td>Not Found 无法找到指定位置的资源</td><td></td></tr>'));
+            //401
+            pbody.append($('<tr><td>401</td><td>Unauthorized 访问被拒绝</td><td></td></tr>'));
+            //403
+            pbody.append($('<tr><td>403</td><td>Forbidden 资源不可用</td><td></td></tr>'));
+            //500
+            pbody.append($('<tr><td>500</td><td>服务器内部错误,请联系Java后台开发人员!!!</td><td></td></tr>'));*/
+            ptable.append(pbody);
+            ptd.append(ptable);
+            response.append(ptd);
+        } else {
+            response.append($("<td>暂无</td>"));
+        }
+        tbody.append(response);
+        table.append(tbody);
+
+        DApiUI.creatabTab();
+        //内容覆盖
+        //DApiUI.getDoc().html("");
+        //查找接口doc
+        DApiUI.getDoc().find("#tab1").find(".panel-body").html("")
+        DApiUI.getDoc().find("#tab1").find(".panel-body").append(table);
+        //DApiUI.getDoc().append(table);
+
+        setTimeout(function () {
+            DApiUI.log("执行treegrid方法...")
+            //请求参数调用treegruid方法
+            $("#requestModelTable").treegrid({
+                expanderExpandedClass: 'glyphicon glyphicon-minus',
+                expanderCollapsedClass: 'glyphicon glyphicon-plus'
+            });
+        }, 100);
+
+    }
+
+    /***
+     * 响应参数详情
+     * @param apiInfo
+     */
+    DApiUI.createResponseDefinitionDetail = function (apiInfo) {
+        var resp = apiInfo.responses;
+        var div = $("<div class='panel'></div>");
+        if (resp.hasOwnProperty("200")) {
+            var ok = resp["200"];
+            if (ok.hasOwnProperty("schema")) {
+                var schema = ok["schema"];
+                var ref = schema["$ref"];
+                var regex = new RegExp("#/definitions/(.*)$", "ig");
+                if (regex.test(ref)) {
+                    var refType = RegExp.$1;
+                    var definitionsArray = DApiUI.getDoc().data("definitionsArray");
+                    var mcs = DApiUI.getMenuConstructs();
+                    for (var k in mcs.definitions) {
+                        if (refType == k) {
+                            var table = $("<table class=\"table table-bordered\" id='modelPropertisTab'>");
+                            table.append('<thead><tr><th>参数名称</th><th>类型</th><th>说明</th></tr></thead>');
+                            var tp = mcs.definitions[refType];
+                            var props = tp["properties"];
+
+                            var arrInfos = new Array();
+
+                            var tbody = $("<tbody></tbody>")
+                            for (var prop in props) {
+                                deepTree("", prop, props, mcs.definitions, arrInfos);
+                            }
+                            if (arrInfos.length > 0) {
+                                for (var i = 0; i < arrInfos.length; i++) {
+                                    var arrInfo = arrInfos[i];
+                                    var treeClassId = "treegrid-" + arrInfo.id;
+                                    var treeClassPId = "";
+                                    if (arrInfo.pid != "") {
+                                        treeClassPId = "treegrid-parent-" + arrInfo.pid;
+                                    }
+                                    var tr = $("<tr class='" + treeClassId + " " + treeClassPId + "'></tr>");
+                                    tr.append("<td>" + arrInfo.field + "</td><td>" + arrInfo.type + "</td><td>" + arrInfo.description + "</td>");
+                                    tbody.append(tr);
+                                }
+                            } else {
+                                tbody.append("<tr><td colspan='3'>暂无</td></tr>")
+                            }
+
+                            /*for(var prop in props){
+                                deepTree("",prop,props,mcs.definitions,arrInfos);
+                                var pvalue=props[prop];
+                                var tr=$("<tr></tr>")
+                                //只遍历一级属性
+                                //判断是否是ref
+                                if(pvalue.hasOwnProperty("$ref")){
+                                    var param_ref = pvalue["$ref"];
+                                    var regex1 = new RegExp("#/definitions/(.*)$", "ig");
+                                    if(regex1.test((param_ref))){
+                                        var ptype=RegExp.$1;
+                                        tr.append($("<td>"+prop+"</td>"))
+                                        tr.append($("<td>"+ptype+"</td>"))
+                                        tr.append($("<td></td>"))
+                                        tbody.append(tr);
+                                        for(var j in mcs.definitions) {
+                                            if (ptype == j) {
+                                                var tpp=mcs.definitions[ptype];
+                                                var pp_props=tpp["properties"];
+                                                for(var prop1 in pp_props) {
+                                                    var tr1=$("<tr></tr>")
+                                                    var pvalue1 = pp_props[prop1];
+                                                    tr1.append($("<td style='text-align: right;'>" + prop1 + "</td>"));
+                                                    tr1.append($("<td>"+DApiUI.getValue(pvalue1,"type","string",true)+"</td>"));
+                                                    tr1.append($("<td>"+DApiUI.getValue(pvalue1,"description","",true)+"</td>"));
+                                                    tbody.append(tr1);
+                                                }
+                                            }
+                                        }
+                                    }
+                                }else{
+                                    tr.append($("<td>"+prop+"</td>"))
+                                    var type=DApiUI.toString(pvalue.type,"string");
+                                    tr.append($("<td>"+type+"</td>"));
+                                    tr.append($("<td>"+DApiUI.toString(pvalue.description,"")+"</td>"));
+                                    tbody.append(tr);
+                                }
+                            }*/
+                            DApiUI.log("deepTree")
+                            DApiUI.log(arrInfos)
+                            table.append(tbody);
+                            div.append(table)
+                            setTimeout(function () {
+                                DApiUI.log("执行treegrid方法...")
+                                table.treegrid({
+                                    expanderExpandedClass: 'glyphicon glyphicon-minus',
+                                    expanderCollapsedClass: 'glyphicon glyphicon-plus'
+                                });
+                            }, 100);
+                        }
+                    }
+                }
+            }
+        }
+        return div;
+    }
+
+
+    function deepTree(pid, prop, props, definitions, arrs) {
+        var regex1 = new RegExp("#/definitions/(.*)$", "ig");
+        var pvalue = props[prop];
+        if (pvalue.hasOwnProperty("$ref")) {
+            DApiUI.log("deepTree--ref---" + prop)
+            var param_ref = pvalue["$ref"];
+            if (regex1.test((param_ref))) {
+                var ptype = RegExp.$1;
+                var arrObj = {id: generUUID(), field: prop, type: ptype, description: "", pid: pid};
+                arrs.push(arrObj);
+                for (var j in definitions) {
+                    if (ptype == j) {
+                        var tpp = definitions[ptype];
+                        var pp_props = tpp["properties"];
+                        for (var prop1 in pp_props) {
+                            if (prop1 != prop) {
+                                deepTree(arrObj.id, prop1, pp_props, definitions, arrs);
+                            }
+                        }
+                    }
+                }
+            }
+        } else {
+            DApiUI.log("deepTree--single---" + prop)
+            //属性名称prop
+            var id = generUUID();
+            var type = DApiUI.toString(pvalue.type, "string");
+            var description = DApiUI.toString(pvalue.description, "");
+            var obj = {id: id, type: type, field: prop, description: description, pid: pid};
+            arrs.push(obj);
+            //判断是否是数组
+            if (type == "array") {
+                DApiUI.log("array...")
+                var items = pvalue["items"];
+                DApiUI.log(pvalue);
+                DApiUI.log(items);
+                DApiUI.log(pvalue.items);
+                if (items.hasOwnProperty("$ref")) {
+                    var item_ref = items["$ref"];
+                    DApiUI.log(item_ref);
+                    if (regex1.test((item_ref))) {
+                        var ptype = RegExp.$1;
+                        DApiUI.log(ptype);
+                        //获取到对象类名
+                        for (var j in definitions) {
+                            if (ptype == j) {
+                                var tpp = definitions[ptype];
+                                var pp_props = tpp["properties"];
+                                for (var prop1 in pp_props) {
+                                    if (prop1 != prop) {
+                                        deepTree(obj.id, prop1, pp_props, definitions, arrs);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+
+            }
+        }
+    }
+
+
+    function randomNumber() {
+        return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
+    }
+
+    /***
+     *
+     * 生成uuid
+     * @returns {string}
+     */
+    function generUUID() {
+        return (randomNumber() + randomNumber() + "-" + randomNumber() + "-" + randomNumber() + "-" + randomNumber() + "-" + randomNumber() + randomNumber() + randomNumber());
+    }
+
+    /***
+     * 递归
+     */
+    function deepProperties(ref, obj) {
+        var regex = new RegExp("#/definitions/(.*)$", "ig");
+        if (regex.test(ref)) {
+            var refType = RegExp.$1;
+            var definitionsArray = DApiUI.getDoc().data("definitionsArray");
+
+        }
+    }
+
+
+    DApiUI.createResponseDefinition = function (apiInfo) {
+        var resp = apiInfo.responses;
+        var div = $("<div class='panel'>暂无</div>");
+        if (resp.hasOwnProperty("200")) {
+            var ok = resp["200"];
+            if (ok.hasOwnProperty("schema")) {
+                var schema = ok["schema"];
+                var ref = schema["$ref"];
+                var regex = new RegExp("#/definitions/(.*)$", "ig");
+                if (regex.test(ref)) {
+                    var refType = RegExp.$1;
+                    //这里去definitionsArrar查找,如果未找到,直接展示refType
+                    var flag = false;
+                    var htmlValue = refType;
+                    var definitionsArray = DApiUI.getDoc().data("definitionsArray");
+                    for (var i = 0; i < definitionsArray.length; i++) {
+                        var definition = definitionsArray[i];
+                        if (definition.key == refType) {
+                            flag = true;
+                            htmlValue = definition.value;
+                            break;
+
+                        }
+                    }
+                    div.html("")
+                    if (flag) {
+                        div.JSONView(htmlValue);
+                    } else {
+                        div.html(refType);
+                    }
+                } else {
+                    //未发现ref属性
+                    if (schema.hasOwnProperty("type")) {
+                        div.html("")
+                        var type = schema["type"];
+                        if (type == "array") {
+                            var items = schema["items"];
+                            ref = items["$ref"];
+                            var regex = new RegExp("#/definitions/(.*)$", "ig");
+                            if (regex.test(ref)) {
+                                var refType = RegExp.$1;
+                                //这里去definitionsArrar查找,如果未找到,直接展示refType
+                                var flag = false;
+                                var htmlValue = refType;
+                                var definitionsArray = DApiUI.getDoc().data("definitionsArray");
+                                for (var i = 0; i < definitionsArray.length; i++) {
+                                    var definition = definitionsArray[i];
+                                    if (definition.key == refType) {
+                                        flag = true;
+                                        htmlValue = definition.value;
+                                        break;
+
+                                    }
+                                }
+                                div.html("")
+                                if (flag) {
+                                    var obj = new Array();
+                                    obj.push(htmlValue);
+                                    div.JSONView(obj);
+                                } else {
+                                    div.html(refType);
+                                }
+                            }
+
+                        } else {
+                            div.html(type);
+                        }
+                    }
+                }
+            }
+        }
+        return div;
+    }
+
+
+    DApiUI.definitions = function (menu) {
+        var definitionsArray = new Array();
+        DApiUI.log("definitionsArray....")
+        if (menu != null && typeof (menu) != "undefined" && menu.hasOwnProperty("definitions")) {
+            var definitions = menu["definitions"];
+            for (var definition in definitions) {
+                var defiType = new definitionType();
+                defiType.key = definition;
+                //获取value
+                var value = definitions[definition];
+                if (checkUndefined(value)) {
+                    //是否有properties
+                    if (value.hasOwnProperty("properties")) {
+                        var properties = value["properties"];
+                        var defiTypeValue = {};
+                        for (var property in properties) {
+                            var propobj = properties[property];
+                            //默认string类型
+                            var propValue = "";
+                            //判断是否有类型
+                            if (propobj.hasOwnProperty("type")) {
+                                var type = propobj["type"];
+                                //判断是否有example
+                                if (propobj.hasOwnProperty("example")) {
+                                    propValue = propobj["example"];
+                                } else if (checkIsBasicType(type)) {
+                                    propValue = getBasicTypeValue(type);
+                                } else {
+                                    if (type == "array") {
+                                        propValue = new Array();
+                                        var items = propobj["items"];
+                                        var ref = items["$ref"];
+                                        var regex = new RegExp("#/definitions/(.*)$", "ig");
+                                        if (regex.test(ref)) {
+                                            var refType = RegExp.$1;
+                                            //这里需要递归判断是否是本身,如果是,则退出递归查找
+                                            if (refType != definition) {
+                                                propValue.push(findRefDefinition(refType, definitions, false));
+                                            } else {
+                                                propValue.push(findRefDefinition(refType, definitions, true));
+                                            }
+                                        }
+                                    }
+                                }
+
+                            } else {
+                                if (propobj.hasOwnProperty("$ref")) {
+                                    var ref = propobj["$ref"];
+                                    var regex = new RegExp("#/definitions/(.*)$", "ig");
+                                    if (regex.test(ref)) {
+                                        var refType = RegExp.$1;
+                                        //这里需要递归判断是否是本身,如果是,则退出递归查找
+                                        if (refType != definition) {
+                                            propValue = findRefDefinition(refType, definitions, false);
+                                        } else {
+                                            propValue = findRefDefinition(refType, definitions, true);
+                                        }
+
+                                    }
+                                } else {
+                                    propValue = {};
+                                }
+                            }
+                            defiTypeValue[property] = propValue;
+                        }
+                        defiType.value = defiTypeValue;
+                    } else {
+                        defiType.value = {};
+                    }
+                }
+                definitionsArray.push(defiType);
+            }
+        }
+        DApiUI.getDoc().data("definitionsArray", definitionsArray);
+    }
+
+    DApiUI.getDefinitions = function () {
+        return DApiUI.getDoc().data("definitionsArray");
+    }
+
+    function checkIsBasicType(type) {
+        var basicTypes = ["string", "integer", "number", "object", "boolean"];
+        var flag = false;
+        if ($.inArray(type, basicTypes) > -1) {
+            flag = true;
+        }
+        return flag;
+    }
+
+    function getBasicTypeValue(type) {
+        var propValue = "";
+        //是否是基本类型
+        if (type == "integer") {
+            propValue = 0;
+        }
+        if (type == "boolean") {
+            propValue = true;
+        }
+        if (type == "object") {
+            propValue = {};
+        }
+        if (type == "number") {
+            propValue = parseFloat(0);
+        }
+        return propValue;
+    }
+
+    function findRefDefinition(definitionName, definitions, flag) {
+        var defaultValue = "";
+        for (var definition in definitions) {
+            if (definitionName == definition) {
+                var value = definitions[definition];
+                //是否有properties
+                if (value.hasOwnProperty("properties")) {
+                    var properties = value["properties"];
+                    var defiTypeValue = {};
+                    for (var property in properties) {
+                        var propobj = properties[property];
+                        //默认string类型
+                        var propValue = "";
+                        //判断是否有类型
+                        if (propobj.hasOwnProperty("type")) {
+                            var type = propobj["type"];
+                            //判断是否有example
+                            if (propobj.hasOwnProperty("example")) {
+                                propValue = propobj["example"];
+                            } else if (checkIsBasicType(type)) {
+                                propValue = getBasicTypeValue(type);
+                            } else {
+                                if (type == "array") {
+                                    propValue = new Array();
+                                    var items = propobj["items"];
+                                    var ref = items["$ref"];
+                                    var regex = new RegExp("#/definitions/(.*)$", "ig");
+                                    if (regex.test(ref)) {
+                                        var refType = RegExp.$1;
+                                        if (!flag) {
+                                            //非递归查找
+                                            if (refType != definitionName) {
+                                                propValue.push(findRefDefinition(refType, definitions, flag));
+                                            } else {
+                                                propValue.push(findRefDefinition(refType, definitions, true));
+                                            }
+                                        }
+
+                                    }
+                                }
+                            }
+
+                        } else {
+
+                        }
+                        defiTypeValue[property] = propValue;
+                    }
+                    defaultValue = defiTypeValue;
+                } else {
+                    defaultValue = {};
+                }
+            }
+        }
+        return defaultValue;
+    }
+
+    function checkUndefined(obj) {
+        var flag = false;
+        if (obj != null && typeof (obj) != "undefined") {
+            flag = true;
+        }
+        return flag;
+    }
+
+
+    function definitionType() {
+        this.key = "";
+        this.value = {};
+    }
+
+
+    /***
+     * 获取默认请求参数类型
+     * @param obj
+     * @returns {string}
+     */
+    DApiUI.getDefaultRequiredType = function (obj) {
+        var t = "string";
+        if (typeof (obj) != 'undefined' && obj != null) {
+            t = obj.toString();
+        }
+        return t;
+    }
+
+    /***
+     * 查找子类
+     * @param tagInfo
+     * @param menu
+     */
+    DApiUI.initChildrens = function (tagInfo, menu) {
+
+    }
+
+    DApiUI.getDoc = function () {
+        return $("#content");
+    }
+    DApiUI.getMenu = function () {
+        return $("#menu");
+    }
+
+    DApiUI.log = function (msg) {
+        if (window.console) {
+            console.log(msg);
+        }
+    }
+    DApiUI.init();
+
+
+    /***
+     * 标签组信息
+     * @constructor
+     */
+    function TagInfo(name, description) {
+        this.name = name;
+        this.description = description;
+        this.childrens = new Array();
+    }
+
+
+    /***
+     * api实体信息
+     * @param options
+     * @constructor
+     */
+    function ApiInfo(options) {
+        //判断options
+        this.tag = [];
+        this.url = "";
+        this.description = "";
+        this.operationId = "";
+        this.parameters = new Array();
+        this.produces = new Array();
+        this.responses = {};
+        this.methodType = "post";
+        this.consumes = new Array();
+        this.summary = "";
+        if (options != null && typeof (options) != 'undefined') {
+            this.tag = options.tags;
+            this.description = options.description;
+            this.operationId = options.operationId;
+            this.summary = options.summary;
+            this.parameters = options.parameters;
+            this.produces = options.produces;
+            this.responses = options.responses;
+            this.consumes = options.consumes;
+        }
+
+    }
+
+    /*create by xujingyang 2018/06/30  修复参数类属性还是实体类不显示的问题,递归获取*/
+    function myFun(pobject, ptype, param, requestArrs) {
+        var mcs = DApiUI.getMenuConstructs();
+        for (var k in mcs.definitions) {
+            if (ptype == k) {
+                var tp = mcs.definitions[ptype];
+                var props = tp["properties"];
+                for (var prop in props) {
+                    var pvalue = props[prop];
+                    var type = DApiUI.toString(pvalue.type, "string");
+                    var cobj = {
+                        id: generUUID(),
+                        field: prop,
+                        description: DApiUI.toString(pvalue.description, ""),
+                        type: type,
+                        in: DApiUI.getStringValue(param['in']),
+                        required: param['required'],
+                        pid: pobject.id
+                    };
+                    requestArrs.push(cobj);
+                    if (pvalue.hasOwnProperty("items")) {
+                        var myItems = pvalue["items"];
+                        if (myItems.hasOwnProperty("$ref")) {
+                            //是否是ref
+                            var regex = new RegExp("#/definitions/(.*)$", "ig");
+                            if (regex.test(myItems["$ref"])) {
+                                refflag = true;
+                                ptype2 = RegExp.$1;
+                                myFun(cobj, ptype2, param, requestArrs);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+})(jQuery)

+ 206 - 0
src/main/resources/static/bycdao-ui/cdao/swaggerbootstrapui.css

@@ -0,0 +1,206 @@
+.bycdao-left {
+    width: 310px;
+    margin-top: 0px;
+    position: fixed;
+    background: #337ab7;
+    height: 100%;
+    transition: all 0.2s;
+}
+.bycdao-main {
+    margin-left: 310px;
+    padding-top: 5px;
+    /* padding-left: 15px;*/
+    padding-right: 15px;
+    transition: all 0.2s;
+}
+
+.tab-content {
+    /* border: 1px solid #c5d0dc; */
+    /* padding: 16px 12px; */
+    position: relative;
+    z-index: 11;
+}
+.nav-list {
+    margin: 0;
+    padding: 0;
+    list-style: none;
+}
+.nav-list>li {
+    display: block;
+    padding: 0;
+    margin: 0;
+    border: 0;
+    border-top: 1px solid #fcfcfc;
+    border-bottom: 1px solid #e5e5e5;
+    position: relative;
+}
+.nav-list>li.active {
+    background-color: #fff;
+}
+
+.nav-list>li.active>a, .nav-list>li.active>a:hover, .nav-list>li.active>a:focus, .nav-list>li.active>a:active {
+    background-color: #fff;
+    color: #2b7dbc;
+    font-weight: bold;
+    font-size: 13px;
+}
+
+.nav-list>li>a {
+    display: block;
+    height: 38px;
+    line-height: 36px;
+    padding: 0 16px 0 7px;
+    background-color: #f9f9f9;
+    color: #585858;
+    text-shadow: none!important;
+    font-size: 13px;
+    text-decoration: none;
+}
+.nav-list>li>a, .nav-list .nav-header {
+    margin: 0;
+}
+
+.nav-list>li.open>a {
+    background-color: #fafafa;
+    color: #1963aa;
+}
+
+.nav-list>li>a>[class*="icon-"]:first-child {
+    display: inline-block;
+    vertical-align: middle;
+    min-width: 30px;
+    text-align: center;
+    font-size: 18px;
+    font-weight: normal;
+    margin-right: 2px;
+}
+.nav-list>li a>.arrow {
+    display: inline-block;
+    width: 14px!important;
+    height: 14px;
+    line-height: 14px;
+    text-shadow: none;
+    font-size: 18px;
+    position: absolute;
+    right: 11px;
+    top: 11px;
+    padding: 0;
+    color: #666;
+}
+.nav-list a .badge, .nav-list a .label {
+    font-size: 12px;
+    padding-left: 6px;
+    padding-right: 6px;
+    position: absolute;
+    top: 9px;
+    right: 11px;
+    opacity: .88;
+}
+
+.label-primary, .badge-primary {
+    background-color: #428bca!important;
+}
+.badge {
+    text-shadow: none;
+    font-size: 12px;
+    padding-top: 1px;
+    padding-bottom: 3px;
+    font-weight: normal;
+    line-height: 15px;
+
+}
+.badge-primary, .label-primary {
+    background-color: #1ab394;
+}
+.nav-list>li>.submenu:before {
+    content: "";
+    display: block;
+    position: absolute;
+    z-index: 1;
+    left: 18px;
+    top: 0;
+    bottom: 0;
+    border: 1px dotted #9dbdd6;
+    border-width: 0 0 0 1px;
+}
+.nav-list li .submenu {
+    overflow: hidden;
+}
+
+.nav-list>li.active:after {
+    display: inline-block;
+    content: "";
+    position: absolute;
+    right: -2px;
+    top: -1px;
+    bottom: 0;
+    z-index: 1;
+    border: 2px solid #2b7dbc;
+    border-width: 0 2px 0 0;
+}
+.nav-list>li .submenu {
+    display: none;
+    list-style: none;
+    margin: 0;
+    padding: 0;
+    position: relative;
+    background-color: #fff;
+    border-top: 1px solid #e5e5e5;
+}
+
+.nav-list>li .submenu>li {
+    margin-left: 0;
+    position: relative;
+}
+.nav-list>li>.submenu>li:before {
+    content: "";
+    display: inline-block;
+    position: absolute;
+    width: 7px;
+    left: 20px;
+    top: 17px;
+    border-top: 1px dotted #9dbdd6;
+}
+
+li [class^="icon-"], li [class*=" icon-"], .nav-list li [class^="icon-"], .nav-list li [class*=" icon-"] {
+    width: auto;
+}
+.nav-tabs>li>a:hover {
+    /* background-color: #FFF; */
+    /* color: #4c8fbd; */
+    /* border-color: #c5d0dc; */
+}
+.menuLi{
+    border: 1px solid #f3f3f4;
+    padding: 1px 2px;
+    margin-bottom: 2px;
+    margin-top: 3px;
+}
+.menuLi .mhed{
+    cursor: pointer;
+    padding-left: 30px;
+}
+
+code {
+    padding: 2px 4px;
+    font-size: 90%;
+    color: #c7254e;
+    background-color: #fff;
+    border-radius: 4px;
+}
+
+
+.swu-left{
+    float: left;
+}
+
+.swu-menu{
+    display: block;
+    width: 55px;
+}
+.swu-hei{
+    height: 20px;
+}
+.swu-wd-20{
+    width: 20px;
+}

+ 1757 - 0
src/main/resources/static/bycdao-ui/cdao/swaggerbootstrapui.js

@@ -0,0 +1,1757 @@
+/***
+ * create by xiaoymin on 2018-7-4 15:32:07
+ * 重构swagger-bootstrap-ui组件,为以后动态扩展更高效,扩展接口打下基础
+ */
+(function ($) {
+
+    var SwaggerBootstrapUi = function () {
+        //swagger请求api地址
+        this.url = "swagger-resources";
+        //文档id
+        this.docId = "content";
+
+        this.menuId = "menu";
+        //实例分组
+        this.instances = new Array();
+        //当前分组实例
+        this.currentInstance = null;
+    }
+    /***
+     * swagger-bootstrap-ui的main方法,初始化文档所有功能,类似于SpringBoot的main方法
+     */
+    SwaggerBootstrapUi.prototype.main = function () {
+        var that = this;
+        //加载分组接口
+        that.analysisGroup();
+        //创建分组元素
+        that.createGroupElement();
+    }
+    /***
+     * 调用swagger的分组接口,获取swagger分组信息,包括分组名称,接口url地址,版本号等
+     */
+    SwaggerBootstrapUi.prototype.analysisGroup = function () {
+        var that = this;
+        $.ajax({
+            url: that.url,
+            type: "get",
+            async: false,
+            success: function (data) {
+                //获取分组名称
+                var groupData = data;
+                $.each(groupData, function (i, group) {
+                    var g = new SwaggerBootstrapUiInstance(group.name, group.location, group.swaggerVersion);
+                    that.instances.push(g);
+                })
+            }
+        })
+    }
+    /***
+     * 基础实例赋值
+     * @param menu
+     */
+    SwaggerBootstrapUi.prototype.setInstanceBasicPorperties = function (menu) {
+        var that = this;
+        var title = "", description = "", name = "", version = "", termsOfService = "";
+        var host = $.getValue(menu, "host", "", true);
+        if (menu.hasOwnProperty("info")) {
+            var info = menu.info;
+            title = $.getValue(info, "title", "Swagger-Bootstrap-UI-前后端api接口文档", true);
+            description = $.getValue(info, "description", "", true);
+            if (info.hasOwnProperty("contact")) {
+                var contact = info["contact"];
+                name = $.getValue(contact, "name", "", true);
+            }
+            version = $.getValue(info, "version", "", true);
+            termsOfService = $.getValue(info, "termsOfService", "", true);
+        }
+        that.currentInstance.host = host;
+        that.currentInstance.title = title;
+        that.currentInstance.description = description;
+        that.currentInstance.contact = name;
+        that.currentInstance.version = version;
+        that.currentInstance.termsOfService = termsOfService;
+    }
+    /***
+     * 加载swagger的分组详情接口
+     * @param instance 分组接口请求实例
+     */
+    SwaggerBootstrapUi.prototype.analysisApi = function (instance) {
+        var that = this;
+        //赋值
+        that.currentInstance = instance;
+        if (!that.currentInstance.load) {
+            var api = instance.location;
+            //这里判断url请求是否已加载过
+            //防止出现根路径的情况
+            var idx = api.indexOf("/");
+            if (idx == 0) {
+                api = api.substr(1);
+            }
+            that.log("截取后的url:" + api);
+            $.ajax({
+                //url:"v2/api-docs",
+                url: api,
+                dataType: "json",
+                type: "get",
+                async: false,
+                success: function (data) {
+                    //var menu=JSON.parse(data)
+                    var menu = data;
+                    that.setInstanceBasicPorperties(menu);
+                    that.analysisDefinition(menu);
+                    //DApiUI.definitions(menu);
+                    that.log(menu);
+                    that.createDescriptionElement();
+                    //当前实例已加载
+                    that.currentInstance.load = true;
+                    //创建swaggerbootstrapui主菜单
+                    that.createDetailMenu();
+                }
+            })
+        } else {
+            that.createDescriptionElement();
+            that.createDetailMenu();
+        }
+    }
+    /***
+     * 创建左侧菜单按钮
+     * @param menu
+     */
+    SwaggerBootstrapUi.prototype.createDetailMenu = function () {
+        var that = this;
+        that.getMenu().find(".detailMenu").remove();
+        //简介li
+        var dli = $('<li  class="active detailMenu"><a href="javascript:void(0)"><i class="icon-text-width"></i><span class="menu-text"> 简介 </span></a></li>')
+        dli.on("click", function () {
+            that.log("简介click");
+            that.createDescriptionElement();
+            that.getMenu().find("li").removeClass("active");
+            dli.addClass("active");
+        });
+        that.getMenu().append(dli);
+
+        /*//全局参数菜单功能
+        var globalArgsLi=$("<li  class=\"detailMenu\"><a href=\"javascript:void(0)\"><i class=\"icon-text-width\"></i><span class=\"menu-text\"> 全局参数设置 </span></a></li>");
+        globalArgsLi.on("click",function () {
+            that.getMenu().find("li").removeClass("active");
+            globalArgsLi.addClass("active");
+            that.createGlobalParametersElement();
+        });
+        that.getMenu().append(globalArgsLi);
+        //离线文档功能
+        var mddocli=$("<li  class=\"detailMenu\"><a href=\"javascript:void(0)\"><i class=\"icon-text-width\"></i><span class=\"menu-text\"> 离线文档(MD) </span></a></li>");
+        mddocli.on("click",function () {
+            that.log("离线文档功能click");
+            that.createMarkdownTab();
+            that.getMenu().find("li").removeClass("active");
+            mddocli.addClass("active");
+        });
+        that.getMenu().append(mddocli);*/
+
+        $.each(that.currentInstance.tags, function (i, tag) {
+            var len = tag.childrens.length;
+            if (len == 0) {
+                var li = $('<li class="detailMenu"><a href="javascript:void(0)"><i class="icon-text-width"></i><span class="menu-text"> ' + tag.name + ' </span></a></li>');
+                that.getMenu().append(li);
+            } else {
+                //存在子标签
+                var li = $('<li  class="detailMenu"></li>');
+                var titleA = $('<a href="#" class="dropdown-toggle"><i class="icon-file-alt"></i><span class="menu-text">' + tag.name + '<span class="badge badge-primary ">' + len + '</span></span><b class="arrow icon-angle-down"></b></a>');
+                li.append(titleA);
+                //循环树
+                var ul = $('<ul class="submenu"></ul>')
+                $.each(tag.childrens, function (i, children) {
+                    /*var childrenLi=$('<li class="menuLi" ><div class="mhed"><div class="swu-hei"><span class="swu-menu swu-left">'+children.methodType.toUpperCase()+'</span><span class="swu-menu swu-left"><code>'+children.url+'</code></span></div><div>'+children.summary+'</div></div></li>');*/
+                    var childrenLi = $('<li class="menuLi" ><div class="mhed"><div>' + (i + 1) + '、' + children.summary + '</div></div></li>');
+                    childrenLi.data("data", children);
+                    ul.append(childrenLi);
+                });
+                li.append(ul);
+                that.getMenu().append(li);
+            }
+        })
+        that.log("菜单初始化完成...")
+        //DApiUI.initLiClick();
+        that.initializationMenuClickEvents();
+    }
+    /***
+     * 创建全局参数
+     */
+    SwaggerBootstrapUi.prototype.createGlobalParametersElement = function () {
+        var that = this;
+        that.log(that.currentInstance)
+        //内容覆盖
+        that.getDoc().html("");
+        setTimeout(function () {
+            var html = template('GlobalParamScript', that.currentInstance);
+            that.getDoc().html(html);
+
+            that.log("注册btnAddParam-click事件")
+            that.log(that.getDoc().find("#btnAddParam"))
+            //初始化添加按钮click事件
+            that.getDoc().find("#btnAddParam").on("click", function (e) {
+                e.preventDefault();
+                that.log("btnAddParam-click")
+                var tr = $("<tr></tr>");
+                //输入参数名称
+                var nameTd = $("<td><input class=\"form-control p-key\" value=\"\" data-old=''></td>");
+                //参数值
+                var valueTd = $("<td><input class=\"form-control p-key\" value=\"\"></td>");
+                //参数类型
+                var typeTd = $("<td><select class='form-control'><option value='header'>header</option><option value='query'>query</option></select></td>");
+                //操作
+                var operateTd = $("<td>&nbsp;&nbsp;</td>")
+                var btnSave = $("<button class=\"btn btn-circle btn-info btn-small btn-save\" type=\"button\">保存</button>");
+                var btnCancel = $("<button class=\"btn btn-circle  btn-danger btn-small btn-cancel\" type=\"button\">删除</button>");
+                operateTd.append(btnSave).append("&nbsp;&nbsp;").append(btnCancel);
+                tr.append(nameTd).append(valueTd).append(typeTd).append(operateTd);
+                that.getDoc().find("#globalTabBody").append(tr);
+                //保存事件
+                btnSave.on("click", function (e) {
+                    e.preventDefault();
+                    var save = $(this);
+                    var ptr = save.parent().parent();
+                    var name = ptr.find("td:eq(0)").find("input:first").val();
+                    var oldname = ptr.find("td:eq(0)").find("input:first").data("old");
+                    var value = ptr.find("td:eq(1)").find("input:first").val();
+                    var type = ptr.find("td:eq(2)").find("select:first").val();
+                    that.log("name:" + name + ",value:" + value + ",type:" + type + ",oldname:" + oldname);
+                    if (name == null || name == "") {
+                        layer.msg("请输入全局参数名称");
+                        return false;
+                    }
+                    if (value == null || value == "") {
+                        layer.msg("请输入全局参数值");
+                        return false;
+                    }
+                    var globalParameterInstance = new SwaggerBootstrapUiParameter();
+                    globalParameterInstance.name = name;
+                    globalParameterInstance.in = type;
+                    globalParameterInstance.value = value;
+                    globalParameterInstance.type = "string";
+                    globalParameterInstance.require = true;
+                    //判断old
+                    if (oldname != null && oldname != "" && oldname != name) {
+                        //删除旧参数
+                        that.deleteGlobalParamsByName(oldname);
+                    }
+                    if (!that.checkGlobalParamExists(globalParameterInstance)) {
+                        that.currentInstance.globalParameters.push(globalParameterInstance);
+                    } else {
+                        //存在,更新该参数的值
+                        that.updateGlobalParams(globalParameterInstance);
+                    }
+                    that.log("目前全局参数..")
+                    that.log(that.currentInstance.globalParameters);
+                    layer.msg("保存成功")
+                })
+                //取消时间
+                btnCancel.on("click", function (e) {
+                    e.preventDefault();
+                    var cancel = $(this);
+                    that.log(cancel)
+                    var ptr = cancel.parent().parent();
+                    var name = ptr.find("td:eq(0)").find("input:first").val();
+                    var oldname = ptr.find("td:eq(0)").find("input:first").data("old");
+                    if (oldname != name) {
+                        that.deleteGlobalParamsByName(oldname)
+                    }
+                    if (name != undefined && name != null && name != "") {
+                        that.deleteGlobalParamsByName(name);
+                    }
+                    cancel.parent().parent().remove();
+                    layer.msg("删除成功")
+                })
+            })
+
+            //全局保存事件
+            that.getDoc().find(".btn-save").on("click", function (e) {
+                var save = $(this);
+                var ptr = save.parent().parent();
+                var name = ptr.find("td:eq(0)").find("input:first").val();
+                var oldname = ptr.find("td:eq(0)").find("input:first").data("old");
+                var value = ptr.find("td:eq(1)").find("input:first").val();
+                var type = ptr.find("td:eq(2)").find("select:first").val();
+                that.log("name:" + name + ",value:" + value + ",type:" + type + ",oldname:" + oldname);
+                if (name == null || name == "") {
+                    layer.msg("请输入全局参数名称");
+                    return false;
+                }
+                if (value == null || value == "") {
+                    layer.msg("请输入全局参数值");
+                    return false;
+                }
+                var globalParameterInstance = new SwaggerBootstrapUiParameter();
+                globalParameterInstance.name = name;
+                globalParameterInstance.in = type;
+                globalParameterInstance.value = value;
+                that.log(oldname != name)
+                //判断old
+                if (oldname != name) {
+                    //删除旧参数
+                    that.deleteGlobalParamsByName(oldname);
+                }
+                if (!that.checkGlobalParamExists(globalParameterInstance)) {
+                    that.currentInstance.globalParameters.push(globalParameterInstance);
+                } else {
+                    //存在,更新该参数的值
+                    that.updateGlobalParams(globalParameterInstance);
+                }
+                that.log("目前全局参数..")
+                that.log(that.currentInstance.globalParameters);
+                layer.msg("保存成功")
+            })
+            //全局取消事件
+            that.getDoc().find(".btn-cancel").on("click", function (e) {
+                e.preventDefault();
+                var cancel = $(this);
+                that.log(cancel)
+                var ptr = cancel.parent().parent();
+                var name = ptr.find("td:eq(0)").find("input:first").val();
+                var oldname = ptr.find("td:eq(0)").find("input:first").data("old");
+                if (oldname != null && oldname != "") {
+                    that.deleteGlobalParamsByName(oldname)
+                }
+                if (name != undefined && name != null && name != "") {
+                    that.deleteGlobalParamsByName(name);
+                }
+                cancel.parent().parent().remove();
+                layer.msg("删除成功")
+            })
+
+        }, 100)
+
+
+    }
+    /***
+     * 判断全局参数是否存在
+     * @param param
+     */
+    SwaggerBootstrapUi.prototype.checkGlobalParamExists = function (param) {
+        var that = this;
+        var flag = false;
+        $.each(that.currentInstance.globalParameters, function (i, gp) {
+            if (gp.name == param.name) {
+                flag = true;
+            }
+        })
+        return flag;
+    }
+    SwaggerBootstrapUi.prototype.updateGlobalParams = function (param) {
+        var that = this;
+        $.each(that.currentInstance.globalParameters, function (i, gp) {
+            if (gp.name == param.name) {
+                gp.in = param.in;
+                gp.value = param.value;
+            }
+        })
+    }
+    /***
+     * 根据名称删除全局参数数组
+     * @param name
+     */
+    SwaggerBootstrapUi.prototype.deleteGlobalParamsByName = function (name) {
+        var that = this;
+        for (var i = 0; i < that.currentInstance.globalParameters.length; i++) {
+            var gp = that.currentInstance.globalParameters[i];
+            if (gp.name == name) {
+                that.currentInstance.globalParameters.splice(i, 1);
+            }
+        }
+    }
+    /***
+     * 初始化菜单点击事件
+     */
+    SwaggerBootstrapUi.prototype.initializationMenuClickEvents = function () {
+        var that = this;
+        that.getMenu().find(".menuLi").bind("click", function (e) {
+            e.preventDefault();
+            var menu = $(this);
+            var data = menu.data("data");
+            that.log("Li标签click事件");
+            that.log(data);
+            //获取parent-Li的class属性值
+            var parentLi = menu.parent().parent();
+            that.log(parentLi);
+            var className = parentLi.prop("class");
+            that.log(className)
+            that.getMenu().find("li").removeClass("active");
+            //parentLi.addClass("active");
+            menu.addClass("active");
+            that.createApiInfoTable(data);
+            //DApiUI.createDebugTab(data);
+        })
+    }
+
+    SwaggerBootstrapUi.prototype.createApiInfoTable = function (apiInfo) {
+        var that = this;
+        that.createTabElement();
+        //查找接口doc
+        that.getDoc().find("#tab1").find(".panel-body").html("")
+        setTimeout(function () {
+            var html = template('contentScript', apiInfo);
+            that.getDoc().find("#tab1").find(".panel-body").html(html)
+            that.markdownDocInit();
+        }, 100)
+        that.log(that.currentInstance);
+        //实现复制文档功能
+        //初始化copy按钮功能
+        var clipboard = new ClipboardJS('#copyDocHref', {
+            text: function () {
+                return $("#docText").val();
+            }
+        });
+        clipboard.on('success', function (e) {
+            layer.msg("复制成功")
+        });
+        clipboard.on('error', function (e) {
+            layer.msg("复制失败,您当前浏览器版本不兼容,请手动复制.")
+        });
+
+        //创建调试页面
+        //赋值全局参数
+        apiInfo.globalParameters = that.currentInstance.globalParameters;
+        that.getDoc().find("#tab2").find(".panel-body").html("");
+        var html = template('DebugScript', apiInfo);
+        that.getDoc().find("#tab2").find(".panel-body").html(html);
+        that.requestSend(apiInfo);
+
+    }
+
+    /***
+     * 发送请求
+     * @constructor
+     */
+    SwaggerBootstrapUi.prototype.requestSend = function (apiInfo) {
+        var that = this;
+        var btnRequest = that.getDoc().find("#tab2").find(".panel-body").find("#btnRequest");
+        var respcleanDiv = that.getDoc().find("#tab2").find(".panel-body").find("#responsebody");
+        btnRequest.on("click", function (e) {
+            e.preventDefault();
+            respcleanDiv.html("")
+
+            var params = {};
+            var headerparams = {};
+            var bodyparams = "";
+            //modify by xiaoyumin 2017-8-9 11:28:16
+            //增加表单验证
+            var validateflag = false;
+            var validateobj = {};
+
+            //获取参数
+            var paramBody = that.getDoc().find("#tab2").find("#paramBody")
+            that.log("paramsbody..")
+            that.log(paramBody)
+            //获取url
+            var url = $("#txtreqUrl").val();
+            if (url == null || url == "") {
+                layer.msg("请求url地址不能为空");
+                return false;
+            }
+            var bodyRequest = false;
+            paramBody.find("tr").each(function () {
+                var paramtr = $(this);
+                var cked = paramtr.find("td:first").find(":checked").prop("checked");
+                that.log(cked)
+                if (cked) {
+                    //如果选中
+                    var trdata = {
+                        name: paramtr.data("name"),
+                        in: paramtr.data("in"),
+                        required: paramtr.data("required"),
+                        type: paramtr.data("type")
+                    };
+                    that.log("trdata....")
+                    that.log(trdata);
+                    //获取key
+                    //var key=paramtr.find("td:eq(1)").find("input").val();
+                    var key = trdata["name"];
+                    //获取value
+                    var value = "";
+                    if (trdata["in"] == "body") {
+                        value = paramtr.find("td:eq(2)").find("textarea").val();
+                        //这里需要判断schema
+                        //直接判断那类型
+                        if (trdata.type == "MultipartFile") {
+                            value = paramtr.find("td:eq(2)").find("input").val();
+                        }
+                    } else {
+                        value = paramtr.find("td:eq(2)").find("input").val();
+                    }
+
+                    if (apiInfo.methodType == "delete") {
+                        //判断是否是path参数
+                        if (trdata["in"] == "path") {
+                            url = url.replace("{" + key + "}", value);
+                        } else {
+                            if (url.indexOf("?") > -1) {
+                                url = url + "&" + key + "=" + value;
+                            } else {
+                                url += "?" + key + "=" + value;
+                            }
+                        }
+                    } else {
+                        if (trdata["in"] == "path") {
+                            url = url.replace("{" + key + "}", value);
+                        } else {
+                            if (trdata["in"] == "body") {
+                                bodyparams += value;
+                                bodyRequest = true;
+                            } else {
+                                if (trdata["in"] == "header") {
+                                    headerparams[key] = value;
+                                } else {
+                                    params[key] = value;
+                                }
+                            }
+                        }
+                    }
+                    //判断是否required
+                    if (trdata.hasOwnProperty("required")) {
+                        var required = trdata["required"];
+                        if (required) {
+                            //必须,验证value是否为空
+                            if (value == null || value == "") {
+                                validateflag = true;
+                                var des = trdata["name"]
+                                validateobj = {message: des + "不能为空"};
+                                return false;
+                            }
+                        }
+
+                    }
+                    that.log("key:" + key + ",value:" + value);
+                }
+            })
+            that.log("获取参数..")
+            that.log(params);
+            that.log(apiInfo)
+            that.log("请求url:" + url);
+            var reqdata = null;
+            var contType = "application/json; charset=UTF-8";
+            if (bodyRequest) {
+                reqdata = bodyparams;
+            } else {
+                reqdata = params;
+                contType = "application/x-www-form-urlencoded; charset=UTF-8";
+            }
+            //console.log(reqdata)
+            if (validateflag) {
+                layer.msg(validateobj.message);
+                return;
+            }
+
+            //判断是否有表单
+            var form = $("#uploadForm");
+            if (form.length > 0) {
+                form[0].submit();
+                //console.log("表单提交")
+                //iframe监听change事件
+                $("#uploadIframe").on("load", function () {
+                    //console.log("uploadIframe changed....")
+                    $(this).unbind('load');
+                    var framebody = $(this).contents().find("body");
+                    var ret = framebody.html();
+                    //是否存在pre标签
+                    if (framebody.find("pre").length > 0) {
+                        ret = framebody.find("pre").html();
+                    }
+                    var res;
+                    try {
+                        res = JSON.parse(ret);
+                        //console.log(res)
+                        var resptab = $('<div id="resptab" class="tabs-container" ></div>')
+                        var ulresp = $('<ul class="nav nav-tabs">' +
+                            '<li class=""><a data-toggle="tab" href="#tabresp" aria-expanded="false"> 响应内容 </a></li></ul>')
+                        resptab.append(ulresp);
+                        var respcontent = $('<div class="tab-content"></div>');
+                        var resp1 = $('<div id="tabresp" class="tab-pane active"><div class="panel-body"></div></div>');
+                        respcontent.append(resp1);
+                        resptab.append(respcontent)
+                        respcleanDiv.append(resptab);
+
+                        var jsondiv = $('<div></div>');
+                        jsondiv.JSONView(res);
+                        resp1.find(".panel-body").append(jsondiv);
+                        resptab.find("a:first").tab("show");
+                    } catch (err) {
+                        //nothing to do,default to show
+                        respcleanDiv.html(ret);
+                    }
+                })
+            } else {
+                $.ajax({
+                    url: url,
+                    headers: headerparams,
+                    type: $.getStringValue(apiInfo.methodType),
+                    data: reqdata,
+                    contentType: contType,
+                    success: function (data, status, xhr) {
+                        var resptab = $('<div id="resptab" class="tabs-container" ></div>')
+                        var ulresp = $('<ul class="nav nav-tabs">' +
+                            '<li class=""><a data-toggle="tab" href="#tabresp" aria-expanded="false"> 响应内容 </a></li>' +
+                            '<li class=""><a data-toggle="tab" href="#tabcookie" aria-expanded="true"> Cookies</a></li>' +
+                            '<li class=""><a data-toggle="tab" href="#tabheader" aria-expanded="true"> Headers </a></li></ul>')
+
+                        resptab.append(ulresp);
+                        var respcontent = $('<div class="tab-content"></div>');
+
+                        var resp1 = $('<div id="tabresp" class="tab-pane active"><div class="panel-body"><pre></pre></div></div>');
+                        var resp2 = $('<div id="tabcookie" class="tab-pane active"><div class="panel-body">暂无</div>');
+                        var resp3 = $('<div id="tabheader" class="tab-pane active"><div class="panel-body">暂无</div></div>');
+
+                        respcontent.append(resp1).append(resp2).append(resp3);
+
+                        resptab.append(respcontent)
+
+                        respcleanDiv.append(resptab);
+                        that.log(xhr);
+                        that.log(xhr.getAllResponseHeaders());
+                        var allheaders = xhr.getAllResponseHeaders();
+                        if (allheaders != null && typeof (allheaders) != 'undefined' && allheaders != "") {
+                            var headers = allheaders.split("\r\n");
+                            var headertable = $('<table class="table table-hover table-bordered table-text-center"><tr><th>请求头</th><th>value</th></tr></table>');
+                            for (var i = 0; i < headers.length; i++) {
+                                var header = headers[i];
+                                if (header != null && header != "") {
+                                    var headerValu = header.split(":");
+                                    var headertr = $('<tr><th class="active">' + headerValu[0] + '</th><td>' + headerValu[1] + '</td></tr>');
+                                    headertable.append(headertr);
+                                }
+                            }
+                            //设置Headers内容
+                            resp3.find(".panel-body").html("")
+                            resp3.find(".panel-body").append(headertable);
+                        }
+                        var contentType = xhr.getResponseHeader("Content-Type");
+                        that.log("Content-Type:" + contentType);
+                        that.log(xhr.hasOwnProperty("responseJSON"))
+                        if (xhr.hasOwnProperty("responseJSON")) {
+                            //如果存在该对象,服务端返回为json格式
+                            resp1.find(".panel-body").html("")
+                            that.log(xhr["responseJSON"])
+                            var pre = $('<pre></pre>')
+                            var jsondiv = $('<div></div>')
+                            jsondiv.JSONView(xhr["responseJSON"]);
+                            pre.html(JSON.stringify(xhr["responseJSON"], null, 2));
+                            resp1.find(".panel-body").append(jsondiv);
+                        } else {
+                            //判断content-type
+                            //如果是image资源
+                            var regex = new RegExp('image/(jpeg|jpg|png|gif)', 'g');
+                            if (regex.test(contentType)) {
+                                var d = DApiUI.getDoc().data("data");
+                                var imgUrl = "http://" + d.host + apiInfo.url;
+                                var img = document.createElement("img");
+                                img.onload = function (e) {
+                                    window.URL.revokeObjectURL(img.src); // 清除释放
+                                };
+                                img.src = imgUrl;
+                                resp1.find(".panel-body").html("")
+                                resp1.find(".panel-body")[0].appendChild(img);
+                            } else {
+                                //判断是否是text
+                                var regex = new RegExp('.*?text.*', 'g');
+                                if (regex.test(contentType)) {
+                                    resp1.find(".panel-body").html("")
+                                    resp1.find(".panel-body").html(xhr.responseText);
+                                }
+                            }
+
+                        }
+
+                        that.log("tab show...")
+                        resptab.find("a:first").tab("show");
+                    },
+                    error: function (xhr, textStatus, errorThrown) {
+                        that.log("error.....")
+                        that.log(xhr);
+                        that.log(textStatus);
+                        that.log(errorThrown);
+                        var resptab = $('<div id="resptab" class="tabs-container" ></div>')
+                        var ulresp = $('<ul class="nav nav-tabs">' +
+                            '<li class=""><a data-toggle="tab" href="#tabresp" aria-expanded="false"> 响应内容 </a></li>' +
+                            '<li class=""><a data-toggle="tab" href="#tabcookie" aria-expanded="true"> Cookies</a></li>' +
+                            '<li class=""><a data-toggle="tab" href="#tabheader" aria-expanded="true"> Headers </a></li></ul>')
+
+                        resptab.append(ulresp);
+                        var respcontent = $('<div class="tab-content"></div>');
+
+                        var resp1 = $('<div id="tabresp" class="tab-pane active"><div class="panel-body"><pre></pre></div></div>');
+                        var resp2 = $('<div id="tabcookie" class="tab-pane active"><div class="panel-body">暂无</div>');
+                        var resp3 = $('<div id="tabheader" class="tab-pane active"><div class="panel-body">暂无</div></div>');
+
+                        respcontent.append(resp1).append(resp2).append(resp3);
+
+                        resptab.append(respcontent)
+
+                        respcleanDiv.append(resptab);
+                        that.log(xhr);
+                        that.log(xhr.getAllResponseHeaders());
+                        var allheaders = xhr.getAllResponseHeaders();
+                        if (allheaders != null && typeof (allheaders) != 'undefined' && allheaders != "") {
+                            var headers = allheaders.split("\r\n");
+                            var headertable = $('<table class="table table-hover table-bordered table-text-center"><tr><th>请求头</th><th>value</th></tr></table>');
+                            for (var i = 0; i < headers.length; i++) {
+                                var header = headers[i];
+                                if (header != null && header != "") {
+                                    var headerValu = header.split(":");
+                                    var headertr = $('<tr><th class="active">' + headerValu[0] + '</th><td>' + headerValu[1] + '</td></tr>');
+                                    headertable.append(headertr);
+                                }
+                            }
+                            //设置Headers内容
+                            resp3.find(".panel-body").html("")
+                            resp3.find(".panel-body").append(headertable);
+                        }
+                        var contentType = xhr.getResponseHeader("Content-Type");
+                        that.log("Content-Type:" + contentType);
+                        var jsonRegex = "";
+                        that.log(xhr.hasOwnProperty("responseJSON"))
+                        if (xhr.hasOwnProperty("responseJSON")) {
+                            //如果存在该对象,服务端返回为json格式
+                            resp1.find(".panel-body").html("")
+                            that.log(xhr["responseJSON"])
+                            var jsondiv = $('<div></div>')
+                            jsondiv.JSONView(xhr["responseJSON"]);
+                            resp1.find(".panel-body").append(jsondiv);
+                        } else {
+                            //判断是否是text
+                            var regex = new RegExp('.*?text.*', 'g');
+                            if (regex.test(contentType)) {
+                                resp1.find(".panel-body").html("")
+                                resp1.find(".panel-body").html(xhr.responseText);
+                            }
+                        }
+                        that.log("tab show...")
+                        resptab.find("a:first").tab("show");
+
+                    }
+                })
+            }
+
+
+        })
+        //删除按钮功能实现
+        that.getDoc().find("#tab2").find(".btn-param-delete").on("click", function (e) {
+            e.preventDefault();
+            var btndelete = $(this);
+            btndelete.parent().parent().remove();
+        })
+        //path替换url-功能
+        that.getDoc().find("#tab2").find(".p-path").on("keyup", function (e) {
+            var t = $(this);
+            var name = t.data("name");
+            var apiUrl = $("#txtreqUrl").data("originalurl");
+            var realValue = apiUrl.replace("{" + name + "}", t.val());
+            //查找是否还存在其他path参数
+            $("#paramBody").find("tr").each(function (i, itr) {
+                var itrthat = $(this);
+                var itrdata = {
+                    name: itrthat.data("name"),
+                    in: itrthat.data("in"),
+                    required: itrthat.data("required"),
+                    type: itrthat.data("type")
+                };
+                //var itrdata=itrthat.data("data");
+                var itrname = itrdata["name"];
+                if (itrdata["in"] == "path" && itrdata["name"] != name) {
+                    //查找value值
+                    var itrtdvalue = itrthat.find(".p-value").val();
+                    if (itrtdvalue != "") {
+                        realValue = realValue.replace("{" + itrname + "}", itrtdvalue);
+                    }
+                }
+            })
+            that.log(realValue);
+            $("#txtreqUrl").val(realValue);
+            that.log("keyup。。。。")
+
+        })
+
+    }
+
+    SwaggerBootstrapUi.prototype.markdownDocInit = function () {
+        var that = this;
+        //md2Html的配置
+        hljs.configure({useBR: false});
+        hljs.initHighlightingOnLoad();
+        marked.setOptions({
+            renderer: new marked.Renderer(),
+            gfm: true,
+            emoji: true,
+            tables: true,
+            breaks: false,
+            pedantic: false,
+            sanitize: true,
+            smartLists: true,
+            smartypants: false,
+            highlight: function (code, lang) {
+                try {
+                    if (lang)
+                        return hljs.highlight(lang, code).value;
+                } catch (e) {
+                    return hljs.highlightAuto(code).value;
+                }
+                return hljs.highlightAuto(code).value;
+            }
+        });
+        $("#docText").each(function () {
+            var md = $(this).val();
+            if (md) {
+                $("#contentDoc").html(marked(md));
+                $('pre code').each(function (i, block) {
+                    hljs.highlightBlock(block);
+                });
+            }
+        });
+        $("code").css("background-color", "transparent");
+    }
+
+    SwaggerBootstrapUi.prototype.createTabElement = function () {
+        var that = this;
+        var divcontent = $('<div id="myTab" class="tabs-container" style="width:99%;margin:0px auto;"></div>');
+        var ul = $('<ul class="nav nav-tabs"></ul>')
+        ul.append($('<li><a data-toggle="tab" href="#tab1" aria-expanded="false"> 接口说明</a></li>'));
+        ul.append($('<li class=""><a data-toggle="tab" href="#tab2" aria-expanded="true"> 在线调试</a></li>'));
+        divcontent.append(ul);
+        var tabcontent = $('<div class="tab-content"></div>');
+
+        tabcontent.append($('<div id="tab1" class="tab-pane"><div class="panel-body"><strong>接口详细说明</strong><p>Bootstrap 使用到的某些 HTML 元素和 CSS 属性需要将页面设置为 HTML5 文档类型。在你项目中的每个页面都要参照下面的格式进行设置。</p></div></div>'));
+        tabcontent.append($('<div id="tab2" class="tab-pane"><div class="panel-body"><strong>正在开发中,敬请期待......</strong></div></div>'));
+        divcontent.append(tabcontent);
+        //内容覆盖
+        that.getDoc().html("");
+        that.getDoc().append(divcontent);
+        that.log("动态激活...")
+        //liapi.addClass("active");
+        that.log("动态激活12...")
+        that.getDoc().find("#myTab a:first").tab('show')
+
+    }
+    /***
+     * 创建markdown文本框
+     * @param apiInfo
+     */
+    SwaggerBootstrapUi.prototype.createMarkdownTxt = function (apiInfo) {
+
+    }
+
+    SwaggerBootstrapUi.prototype.creatabTab = function () {
+        var that = this;
+        var divcontent = $('<div id="myTab" class="tabs-container" style="width:99%;margin:0px auto;"></div>');
+        var ul = $('<ul class="nav nav-tabs"></ul>')
+        ul.append($('<li><a data-toggle="tab" href="#tab1" aria-expanded="false"> 接口说明</a></li>'));
+        ul.append($('<li class=""><a data-toggle="tab" href="#tab2" aria-expanded="true"> 在线调试</a></li>'));
+        divcontent.append(ul);
+        var tabcontent = $('<div class="tab-content"></div>');
+
+        tabcontent.append($('<div id="tab1" class="tab-pane"><div class="panel-body"><strong>接口详细说明</strong><p>Bootstrap 使用到的某些 HTML 元素和 CSS 属性需要将页面设置为 HTML5 文档类型。在你项目中的每个页面都要参照下面的格式进行设置。</p></div></div>'));
+        tabcontent.append($('<div id="tab2" class="tab-pane"><div class="panel-body"><strong>正在开发中,敬请期待......</strong></div></div>'));
+        divcontent.append(tabcontent);
+        //内容覆盖
+        that.getDoc().html("");
+        that.getDoc().append(divcontent);
+        that.log("动态激活...")
+        //liapi.addClass("active");
+        that.log("动态激活12...")
+        that.getDoc().find("#myTab a:first").tab('show')
+        //$('#myTab a:first').tab('show')
+
+    }
+    /***
+     * 创建简介页面
+     */
+    SwaggerBootstrapUi.prototype.createDescriptionElement = function () {
+        var that = this;
+        /*var table=$('<table class="table table-hover table-bordered table-text-center"></table>');
+        //修改title
+        $("title").html("").html(that.currentInstance.title)
+        table.append($('<thead><tr><th colspan="2" style="text-align:center">'+that.currentInstance.title+'</th></tr></thead>'));
+        var tbody=$('<tbody></tbody>');
+        tbody.append($('<tr><th class="active">简介</th><td style="text-align: left">'+that.currentInstance.description+'</td></tr>'));
+        tbody.append($('<tr><th class="active">作者</th><td style="text-align: left">'+that.currentInstance.contact+'</td></tr>'));
+        tbody.append($('<tr><th class="active">版本</th><td style="text-align: left">'+that.currentInstance.version+'</td></tr>'));
+        tbody.append($('<tr><th class="active">host</th><td style="text-align: left">'+that.currentInstance.host+'</td></tr>'))
+        tbody.append($('<tr><th class="active">服务url</th><td style="text-align: left">'+that.currentInstance.termsOfService+'</td></tr>'));
+        table.append(tbody);
+        var div=$('<div  style="width:99%;margin:0px auto;"></div>')
+        div.append(table);*/
+        //内容覆盖
+        that.getDoc().html("");
+        //that.getDoc().append(div);
+
+        setTimeout(function () {
+            var html = template('SwaggerBootstrapUiIntroScript', that.currentInstance);
+            that.getDoc().html(html)
+            //that.introMarkdownDocInit();
+        }, 100)
+
+
+    }
+
+    SwaggerBootstrapUi.prototype.introMarkdownDocInit = function () {
+        var that = this;
+        //md2Html的配置
+        hljs.configure({useBR: false});
+        hljs.initHighlightingOnLoad();
+        marked.setOptions({
+            renderer: new marked.Renderer(),
+            gfm: true,
+            emoji: true,
+            tables: true,
+            breaks: false,
+            pedantic: false,
+            sanitize: true,
+            smartLists: true,
+            smartypants: false,
+            highlight: function (code, lang) {
+                try {
+                    if (lang)
+                        return hljs.highlight(lang, code).value;
+                } catch (e) {
+                    return hljs.highlightAuto(code).value;
+                }
+                return hljs.highlightAuto(code).value;
+            }
+        });
+        $("#docSbuText").each(function () {
+            var md = $(this).val();
+            if (md) {
+                $("#sbuDescriptionDoc").html(marked(md));
+                $('pre code').each(function (i, block) {
+                    hljs.highlightBlock(block);
+                });
+            }
+        });
+        $("code").css("background-color", "transparent");
+    }
+
+    /***
+     * 创建离线文档页面
+     * 点击离线文档菜单时,创建该页面
+     */
+    SwaggerBootstrapUi.prototype.createMarkdownTab = function () {
+        var that = this;
+        /*var description="swagger-bootstrap-ui 提供markdwon格式类型的离线文档,开发者可拷贝该内容通过其他markdown转换工具进行转换为html或pdf.";
+        var divdes=$('<div class="alert alert-info" role="alert">'+description+'</div>');
+        var div=$('<div  style="width:99%;margin:0px auto;"></div>');
+        div.append(divdes);
+        //toolbar按钮组
+        var toolbarDiv=$('<div class="input-inline" style="margin-bottom:10px;">');
+        var copyBtn=$('<button class="btn btn-primary" type="button" id="btnCopy"  data-clipboard-action="copy" data-clipboard-target="#txtDoc">拷贝文档</button></div>');
+        toolbarDiv.append(copyBtn);
+        div.append(toolbarDiv);
+        //添加textarea
+        var txtDiv=$("<div class='input-inline'><textarea class='form-control' style='width: 100%;height: 100%;' id='txtDoc'></textarea></div>")
+        div.append(txtDiv);*/
+        //内容覆盖
+        that.getDoc().html("");
+        setTimeout(function () {
+            var html = template('offLinecontentScript', that.currentInstance);
+            that.getDoc().html(html);
+        }, 100)
+        var clipboard = new ClipboardJS('#btnCopy', {
+            text: function () {
+                return $("#txtOffLineDoc").val();
+            }
+        });
+        clipboard.on('success', function (e) {
+            layer.msg("复制成功")
+        });
+        clipboard.on('error', function (e) {
+            layer.msg("复制失败,您当前浏览器版本不兼容,请手动复制.")
+        });
+    }
+    /***
+     * 解析实例属性
+     */
+    SwaggerBootstrapUi.prototype.analysisDefinition = function (menu) {
+        var that = this;
+        //解析definition
+        if (menu != null && typeof (menu) != "undefined" && menu.hasOwnProperty("definitions")) {
+            var definitions = menu["definitions"];
+            for (var name in definitions) {
+                var swud = new SwaggerBootstrapUiDefinition();
+                swud.name = name;
+                //获取value
+                var value = definitions[name];
+                if ($.checkUndefined(value)) {
+                    swud.description = $.propValue("description", value, "");
+                    swud.type = $.propValue("type", value, "");
+                    //是否有properties
+                    if (value.hasOwnProperty("properties")) {
+                        var properties = value["properties"];
+                        var defiTypeValue = {};
+                        for (var property in properties) {
+                            var spropObj = new SwaggerBootstrapUiProperty();
+                            spropObj.name = property;
+                            var propobj = properties[property];
+                            spropObj.type = $.propValue("type", propobj, "string");
+                            spropObj.description = $.propValue("description", propobj, "");
+                            spropObj.example = $.propValue("example", propobj, "");
+                            spropObj.format = $.propValue("format", propobj, "");
+
+                            //默认string类型
+                            var propValue = "";
+                            //判断是否有类型
+                            if (propobj.hasOwnProperty("type")) {
+                                var type = propobj["type"];
+                                //判断是否有example
+                                if (propobj.hasOwnProperty("example")) {
+                                    propValue = propobj["example"];
+                                } else if ($.checkIsBasicType(type)) {
+                                    propValue = $.getBasicTypeValue(type);
+                                } else {
+                                    if (type == "array") {
+                                        propValue = new Array();
+                                        var items = propobj["items"];
+                                        var ref = items["$ref"];
+                                        var regex = new RegExp("#/definitions/(.*)$", "ig");
+                                        if (regex.test(ref)) {
+                                            var refType = RegExp.$1;
+                                            spropObj.refType = refType;
+                                            //这里需要递归判断是否是本身,如果是,则退出递归查找
+                                            if (refType != name) {
+                                                propValue.push(that.findRefDefinition(refType, definitions, false));
+                                            } else {
+                                                propValue.push(that.findRefDefinition(refType, definitions, true));
+                                            }
+                                        }
+                                    }
+                                }
+
+                            }
+                            else {
+                                if (propobj.hasOwnProperty("$ref")) {
+                                    var ref = propobj["$ref"];
+                                    var regex = new RegExp("#/definitions/(.*)$", "ig");
+                                    if (regex.test(ref)) {
+                                        var refType = RegExp.$1;
+                                        spropObj.refType = refType;
+                                        //这里需要递归判断是否是本身,如果是,则退出递归查找
+                                        if (refType != name) {
+                                            propValue = that.findRefDefinition(refType, definitions, false);
+                                        } else {
+                                            propValue = that.findRefDefinition(refType, definitions, true);
+                                        }
+
+                                    }
+                                } else {
+                                    propValue = {};
+                                }
+                            }
+                            spropObj.value = propValue;
+                            //addprop
+                            swud.properties.push(spropObj);
+                            defiTypeValue[property] = propValue;
+                        }
+                        swud.value = defiTypeValue;
+                    }
+                }
+                that.currentInstance.difArrs.push(swud);
+            }
+        }
+        //解析tags标签
+        if (menu != null && typeof (menu) != "undefined" && menu.hasOwnProperty("tags")) {
+            var tags = menu["tags"];
+            $.each(tags, function (i, tag) {
+                var swuTag = new SwaggerBootstrapUiTag(tag.name, tag.description);
+                that.currentInstance.tags.push(swuTag);
+            })
+
+        }
+        //解析paths属性
+        if (menu != null && typeof (menu) != "undefined" && menu.hasOwnProperty("paths")) {
+            var paths = menu["paths"];
+            for (var path in paths) {
+                var pathObject = paths[path];
+                var swpinfo = new SwaggerBootstrapUiApiInfo();
+                swpinfo.url = path;
+                var apiInfo = null;
+                if (pathObject.hasOwnProperty("get")) {
+                    //get方式
+                    apiInfo = pathObject["get"]
+                    swpinfo.methodType = "get";
+                }
+                if (pathObject.hasOwnProperty("post")) {
+                    //post 方式
+                    apiInfo = pathObject["post"]
+                    swpinfo.methodType = "post";
+                }
+                if (pathObject.hasOwnProperty("put")) {
+                    //put
+                    apiInfo = pathObject["put"]
+                    swpinfo.methodType = "put";
+                }
+                if (pathObject.hasOwnProperty("delete")) {
+                    //delete
+                    apiInfo = pathObject["delete"]
+                    swpinfo.methodType = "delete";
+                }
+                //扩展 支持http其余请求方法接口
+                //add by xiaoymin 2018-4-28 07:16:12
+                if (pathObject.hasOwnProperty("patch")) {
+                    //patch
+                    apiInfo = pathObject["patch"]
+                    swpinfo.methodType = "patch";
+                }
+                if (pathObject.hasOwnProperty("options")) {
+                    //OPTIONS
+                    apiInfo = pathObject["options"]
+                    swpinfo.methodType = "options";
+                }
+                if (pathObject.hasOwnProperty("trace")) {
+                    //TRACE
+                    apiInfo = pathObject["trace"]
+                    swpinfo.methodType = "trace";
+                }
+                if (pathObject.hasOwnProperty("head")) {
+                    //HEAD
+                    apiInfo = pathObject["head"]
+                    swpinfo.methodType = "head";
+                }
+                if (pathObject.hasOwnProperty("connect")) {
+                    //CONNECT
+                    apiInfo = pathObject["connect"]
+                    swpinfo.methodType = "connect";
+                }
+                if (apiInfo != null) {
+                    swpinfo.consumes = apiInfo.consumes;
+                    swpinfo.description = apiInfo.description;
+                    swpinfo.operationId = apiInfo.operationId;
+                    swpinfo.summary = apiInfo.summary;
+                    swpinfo.tags = apiInfo.tags;
+                    swpinfo.produces = apiInfo.produces;
+                    if (apiInfo.hasOwnProperty("parameters")) {
+                        var pameters = apiInfo["parameters"];
+                        $.each(pameters, function (i, m) {
+                            var minfo = new SwaggerBootstrapUiParameter();
+                            minfo.name = m.name;
+                            minfo.type = m.type;
+                            minfo.in = m.in;
+                            minfo.require = m.required;
+                            minfo.description = m.description;
+                            if (m.hasOwnProperty("schema")) {
+                                //存在schema属性,请求对象是实体类
+                                minfo.schema = true;
+                                var schemaObject = m["schema"];
+                                var schemaType = schemaObject["type"];
+                                if (schemaType == "array") {
+                                    minfo.type = schemaType;
+                                    var schItem = schemaObject["items"];
+                                    var ref = schItem["$ref"];
+                                    var className = $.getClassName(ref);
+                                    minfo.schemaValue = className;
+                                    var def = that.getDefinitionByName(className);
+                                    if (def != null) {
+                                        minfo.def = def;
+                                        minfo.value = def.value;
+                                    }
+                                } else {
+                                    if (schemaObject.hasOwnProperty("$ref")) {
+                                        var ref = m["schema"]["$ref"];
+                                        var className = $.getClassName(ref);
+                                        minfo.type = className;
+                                        var def = that.getDefinitionByName(className);
+                                        if (def != null) {
+                                            minfo.def = def;
+                                            minfo.value = def.value;
+                                        }
+                                    } else {
+                                        if (schemaObject.hasOwnProperty("type")) {
+                                            minfo.type = schemaObject["type"];
+                                        }
+                                        minfo.value = "";
+                                    }
+                                }
+                            }
+                            if (minfo.in == "body") {
+                                //判断属性是否是array
+                                if (minfo.type == "array") {
+                                    var txtArr = new Array();
+                                    txtArr.push(minfo.value);
+                                    //JSON显示
+                                    minfo.txtValue = JSON.stringify(txtArr, null, 4)
+                                } else {
+                                    //引用类型
+                                    if (!$.checkIsBasicType(minfo.type)) {
+                                        minfo.txtValue = JSON.stringify(minfo.value, null, 4);
+                                    }
+                                }
+                            }
+                            swpinfo.parameters.push(minfo);
+                            //判断当前属性是否是schema
+                            if (minfo.schema) {
+                                deepRefParameter(minfo, that, minfo.def, swpinfo);
+                            }
+                        })
+                    }
+
+                    var definitionType = null;
+                    var arr = false;
+                    //解析responsecode
+                    if (typeof (apiInfo.responses) != 'undefined' && apiInfo.responses != null) {
+                        var resp = apiInfo.responses;
+                        for (var status in resp) {
+                            var swaggerResp = new SwaggerBootstrapUiResponseCode();
+                            var rescrobj = resp[status];
+                            swaggerResp.code = status;
+                            swaggerResp.description = rescrobj["description"];
+                            if (rescrobj.hasOwnProperty("schema")) {
+                                var schema = rescrobj["schema"];
+                                //单引用类型
+                                //判断是否是数组类型
+                                var regex = new RegExp("#/definitions/(.*)$", "ig");
+                                if (schema.hasOwnProperty("$ref")) {
+                                    if (regex.test(schema["$ref"])) {
+                                        var ptype = RegExp.$1;
+                                        definitionType = ptype;
+                                        swaggerResp.schema = ptype;
+                                    }
+                                } else if (schema.hasOwnProperty("type")) {
+                                    var t = schema["type"];
+                                    if (t == "array") {
+                                        arr = true;
+                                        if (schema.hasOwnProperty("items")) {
+                                            var items = schema["items"];
+                                            if (regex.test(items["$ref"])) {
+                                                var ptype = RegExp.$1;
+                                                definitionType = ptype;
+                                                swaggerResp.schema = ptype;
+                                            }
+                                        }
+                                    }
+                                }
+
+                            }
+                            swpinfo.responseCodes.push(swaggerResp);
+                        }
+                    }
+
+                    if (definitionType != null) {
+                        //查询
+                        for (var i = 0; i < that.currentInstance.difArrs.length; i++) {
+                            var ref = that.currentInstance.difArrs[i];
+                            if (ref.name == definitionType) {
+                                if (arr) {
+                                    var na = new Array();
+                                    na.push(ref.value);
+                                    swpinfo.responseValue = JSON.stringify(na, null, 4);
+                                } else {
+                                    swpinfo.responseValue = JSON.stringify(ref.value, null, 4);
+                                }
+                            }
+                        }
+                        //响应参数
+                        var def = that.getDefinitionByName(definitionType);
+                        if (def != null) {
+                            if (def.hasOwnProperty("properties")) {
+                                var props = def["properties"];
+                                $.each(props, function (i, p) {
+                                    var resParam = new SwaggerBootstrapUiParameter();
+                                    resParam.name = p.name;
+                                    if (!checkParamArrsExists(swpinfo.responseParameters, resParam)) {
+                                        swpinfo.responseParameters.push(resParam);
+                                        resParam.type = p.type;
+                                        resParam.description = p.description;
+                                        if (!$.checkIsBasicType(p.refType)) {
+                                            resParam.schemaValue = p.refType;
+                                            var deepDef = that.getDefinitionByName(p.refType);
+                                            deepResponseRefParameter(swpinfo, that, deepDef, resParam);
+                                        }
+                                    }
+                                })
+
+                            }
+                        }
+
+                    }
+                    that.currentInstance.paths.push(swpinfo);
+                }
+            }
+
+        }
+        //tag分组
+        $.each(that.currentInstance.tags, function (i, tag) {
+            //查找childrens
+            $.each(that.currentInstance.paths, function (k, methodApi) {
+                //判断tags是否相同
+                $.each(methodApi.tags, function (x, tagName) {
+                    if (tagName == tag.name) {
+                        tag.childrens.push(methodApi);
+                    }
+                })
+            })
+        });
+    }
+
+
+    /***
+     * 是否已经存在
+     * @param arr
+     * @param param
+     * @returns {boolean}
+     */
+    function checkParamArrsExists(arr, param) {
+        var flag = false;
+        if (arr != null && arr.length > 0) {
+            $.each(arr, function (i, a) {
+                if (a.name == param.name) {
+                    flag = true;
+                }
+            })
+        }
+        return flag;
+    }
+
+    function deepResponseRefParameter(swpinfo, that, def, resParam) {
+        if (def != null) {
+            if (def.hasOwnProperty("properties")) {
+                var refParam = new SwaggerBootstrapUiRefParameter();
+                refParam.name = def.name;
+                if (!checkParamArrsExists(swpinfo.responseRefParameters, refParam)) {
+                    swpinfo.responseRefParameters.push(refParam);
+                    if (def.hasOwnProperty("properties")) {
+                        var props = def["properties"];
+                        $.each(props, function (i, p) {
+                            var refp = new SwaggerBootstrapUiParameter();
+                            refp.name = p.name;
+                            refp.type = p.type;
+                            refp.description = p.description;
+                            //add之前需要判断是否已添加,递归情况有可能重复
+                            refParam.params.push(refp);
+                            //判断类型是否基础类型
+                            if (!$.checkIsBasicType(p.refType)) {
+                                refp.schemaValue = p.refType;
+                                if (resParam.name != refp.name) {
+                                    var deepDef = that.getDefinitionByName(p.refType);
+                                    deepResponseRefParameter(swpinfo, that, deepDef, refp);
+                                }
+                            }
+                        })
+                    }
+                }
+            }
+        }
+    }
+
+    /***
+     * 递归查询
+     * @param minfo
+     * @param that
+     * @param def
+     */
+    function deepRefParameter(minfo, that, def, apiInfo) {
+        if (def != null) {
+            var refParam = new SwaggerBootstrapUiRefParameter();
+            refParam.name = def.name;
+            if (!checkParamArrsExists(apiInfo.refparameters, refParam)) {
+                apiInfo.refparameters.push(refParam);
+                if (def.hasOwnProperty("properties")) {
+                    var props = def["properties"];
+                    $.each(props, function (i, p) {
+                        var refp = new SwaggerBootstrapUiParameter();
+                        refp.name = p.name;
+                        refp.type = p.type;
+                        refp.in = minfo.in;
+                        refp.require = minfo.require;
+                        refp.description = p.description;
+                        refParam.params.push(refp);
+                        //判断类型是否基础类型
+                        if (!$.checkIsBasicType(p.refType)) {
+                            refp.schemaValue = p.refType;
+                            if (minfo.name != refp.name) {
+                                var deepDef = that.getDefinitionByName(p.refType);
+                                deepRefParameter(refp, that, deepDef, apiInfo);
+                            }
+                        }
+                    })
+                }
+            }
+        }
+    }
+
+    /***
+     * 根据类名查找definition
+     */
+    SwaggerBootstrapUi.prototype.getDefinitionByName = function (name) {
+        var that = this;
+        var def = null;
+        $.each(that.currentInstance.difArrs, function (i, d) {
+            if (d.name == name) {
+                def = d;
+                return;
+            }
+        })
+        return def;
+    }
+    /***
+     * 递归查询definition
+     * @param refType
+     * @param definitions
+     * @param flag
+     */
+    SwaggerBootstrapUi.prototype.findRefDefinition = function (definitionName, definitions, flag) {
+        var that = this;
+        var defaultValue = "";
+        for (var definition in definitions) {
+            if (definitionName == definition) {
+                var value = definitions[definition];
+                //是否有properties
+                if (value.hasOwnProperty("properties")) {
+                    var properties = value["properties"];
+                    var defiTypeValue = {};
+                    for (var property in properties) {
+                        var propobj = properties[property];
+                        //默认string类型
+                        var propValue = "";
+                        //判断是否有类型
+                        if (propobj.hasOwnProperty("type")) {
+                            var type = propobj["type"];
+                            //判断是否有example
+                            if (propobj.hasOwnProperty("example")) {
+                                propValue = propobj["example"];
+                            } else if ($.checkIsBasicType(type)) {
+                                propValue = $.getBasicTypeValue(type);
+                            } else {
+                                if (type == "array") {
+                                    propValue = new Array();
+                                    var items = propobj["items"];
+                                    var ref = items["$ref"];
+                                    var regex = new RegExp("#/definitions/(.*)$", "ig");
+                                    if (regex.test(ref)) {
+                                        var refType = RegExp.$1;
+                                        if (!flag) {
+                                            //非递归查找
+                                            if (refType != definitionName) {
+                                                propValue.push(that.findRefDefinition(refType, definitions, flag));
+                                            } else {
+                                                propValue.push(that.findRefDefinition(refType, definitions, true));
+                                            }
+                                        }
+
+                                    }
+                                }
+                            }
+
+                        } else {
+
+                        }
+                        defiTypeValue[property] = propValue;
+                    }
+                    defaultValue = defiTypeValue;
+                } else {
+                    defaultValue = {};
+                }
+            }
+        }
+        return defaultValue;
+    }
+    /***
+     * 创建swagger分组页面元素
+     */
+    SwaggerBootstrapUi.prototype.createGroupElement = function () {
+        var that = this;
+        //创建分组flag
+        var groupli = $('<li  class="active"></li>');
+        var groupSele = $("<select id='groupSel' style='width:100%;' class=\"form-control\"></select>");
+        $.each(that.instances, function (i, group) {
+            var groupOption = $("<option data-url='" + group.location + "' data-name='" + group.name + "'>" + group.name + "</option>");
+            groupSele.append(groupOption);
+        })
+        groupli.append(groupSele);
+        groupSele.on("change", function () {
+            var t = $(this);
+            var name = t.find("option:selected").attr("data-name");
+            that.log("分组::");
+            that.log(name);
+            var instance = that.selectInstanceByGroupName(name);
+            that.log(instance);
+            that.analysisApi(instance);
+        })
+        that.getMenu().html("");
+        that.getMenu().append(groupli);
+        //默认加载第一个url
+        that.analysisApi(that.instances[0]);
+    }
+    /***
+     * 获取当前分组实例
+     * @param name
+     * @returns {*}
+     */
+    SwaggerBootstrapUi.prototype.selectInstanceByGroupName = function (name) {
+        var that = this;
+        var instance = null;
+        $.each(that.instances, function (i, group) {
+            if (group.name == name) {
+                instance = group;
+                return;
+            }
+        })
+        return instance;
+    }
+    /***
+     * 添加左侧菜单功能
+     */
+    SwaggerBootstrapUi.prototype.addMenu = function () {
+
+    }
+    /***
+     * 控制台打印
+     * @param msg
+     */
+    SwaggerBootstrapUi.prototype.log = function (msg) {
+        if (window.console) {
+            //正式版不开启console功能
+            //console.log(msg);
+        }
+    }
+    /***
+     * 获取菜单元素
+     */
+    SwaggerBootstrapUi.prototype.getMenu = function () {
+        var menuId = this.menuId;
+        return $("#" + menuId);
+    }
+    /***
+     * 获取当前swagger页面主页面元素
+     * @returns {*|HTMLElement}
+     */
+    SwaggerBootstrapUi.prototype.getDoc = function () {
+        return $("#" + this.docId);
+    }
+    /***
+     * swagger 分组对象
+     * @param name 分组对象名称
+     * @param location url地址
+     * @param version 版本号
+     * @constructor
+     */
+    var SwaggerBootstrapUiInstance = function (name, location, version) {
+        //默认未加载
+        this.load = false;
+        //分组名称
+        this.name = name;
+        //分组url地址
+        this.location = location;
+        this.groupVersion = version;
+        //分组url请求实例
+        this.basePath = "";
+        this.host = "";
+        this.swagger = "";
+        this.description = "";
+        this.title = "";
+        this.version = "";
+        this.termsOfService = "";
+        this.contact = "";
+        //当前definistion数组
+        // SwaggerBootstrapUiDefinition 集合
+        this.difArrs = new Array();
+        //标签分类信息组
+        //SwaggerBootstrapUiTag 集合
+        this.tags = new Array();
+        //接口url信息
+        //存储SwaggerBootstrapUiApiInfo 集合
+        this.paths = new Array();
+        //全局参数,存放SwaggerBootstrapUiParameter集合
+        this.globalParameters = new Array();
+
+    }
+    /***
+     * 返回对象解析属性
+     * @constructor
+     */
+    var SwaggerBootstrapUiDefinition = function () {
+        //类型名称
+        this.name = "";
+        //介绍
+        this.description = "";
+        //类型
+        this.type = "";
+        //属性 --SwaggerBootstrapUiProperty 集合
+        this.properties = new Array();
+
+        this.value = null;
+
+    }
+    /***
+     * definition对象属性
+     * @constructor
+     */
+    var SwaggerBootstrapUiProperty = function () {
+        //默认基本类型,非引用
+        this.basic = true;
+        this.name = "";
+        this.type = "";
+        this.refType = null;
+        this.description = "";
+        this.example = "";
+        this.format = "";
+        //默认值
+        this.value = null;
+        //引用类
+        this.property = null;
+    }
+    /***
+     * swagger的tag标签
+     * @param name
+     * @param description
+     * @constructor
+     */
+    var SwaggerBootstrapUiTag = function (name, description) {
+        this.name = name;
+        this.description = description;
+        this.childrens = new Array();
+    }
+    /***
+     * Swagger接口基础信息
+     * @constructor
+     */
+    var SwaggerBootstrapUiApiInfo = function () {
+        this.url = null;
+        this.methodType = null;
+        this.description = null;
+        this.summary = null;
+        this.consumes = null;
+        this.operationId = null;
+        this.produces = null;
+        this.tags = null;
+        this.parameters = new Array();
+        //针对parameter属性有引用类型的参数,继续以table 的形式展现
+        //存放SwaggerBootstrapUiRefParameter 集合
+        this.refparameters = new Array();
+        this.responseCodes = new Array();
+        this.responseValue = null;
+        //响应字段说明
+        this.responseParameters = new Array();
+        this.responseRefParameters = new Array();
+
+
+    }
+
+    var SwaggerBootstrapUiRefParameter = function () {
+        this.name = null;
+        //存放SwaggerBootstrapUiParameter集合
+        this.params = new Array();
+    }
+
+    /***
+     * Swagger请求参数
+     * @constructor
+     */
+    var SwaggerBootstrapUiParameter = function () {
+        this.name = null;
+        this.require = null;
+        this.type = null;
+        this.in = null;
+        this.schema = false;
+        this.schemaValue = null;
+        this.value = null;
+        //引用类
+        this.def = null;
+        //des
+        this.description = null;
+        //文本框值
+        this.txtValue = null;
+    }
+    /***
+     * 响应码
+     * @constructor
+     */
+    var SwaggerBootstrapUiResponseCode = function () {
+        this.code = null;
+        this.description = null;
+        this.schema = null;
+    }
+
+    /***
+     * 公共方法
+     */
+    $.extend({
+        checkUndefined: function (obj) {
+            var flag = false;
+            if (obj != null && typeof (obj) != "undefined") {
+                flag = true;
+            }
+            return flag;
+        },
+        propValue: function (key, obj, defaultValue) {
+            var t = defaultValue;
+            if (obj.hasOwnProperty(key)) {
+                t = obj[key];
+            }
+            return t;
+        },
+        checkIsBasicType: function (type) {
+            var basicTypes = ["string", "integer", "number", "object", "boolean"];
+            var flag = false;
+            if (type != null) {
+                if ($.inArray(type, basicTypes) > -1) {
+                    flag = true;
+                }
+            }
+            return flag;
+        },
+        getBasicTypeValue: function (type) {
+            var propValue = "";
+            //是否是基本类型
+            if (type == "integer") {
+                propValue = 0;
+            }
+            if (type == "boolean") {
+                propValue = true;
+            }
+            if (type == "object") {
+                propValue = {};
+            }
+            if (type == "number") {
+                propValue = parseFloat(0);
+            }
+            return propValue;
+        },
+        getValue: function (obj, key, defaultValue, checkEmpty) {
+            var val = defaultValue;
+            if (obj != null && obj != undefined) {
+                if (obj.hasOwnProperty(key)) {
+                    val = obj[key];
+                    if (checkEmpty) {
+                        if (val == null || val == "") {
+                            val = defaultValue;
+                        }
+                    }
+                }
+            }
+            return val;
+        },
+        getClassName: function (item) {
+            var regex = new RegExp("#/definitions/(.*)$", "ig");
+            if (regex.test(item)) {
+                var ptype = RegExp.$1;
+                return ptype;
+            }
+            return null;
+        },
+        getStringValue: function (obj) {
+            var str = "";
+            if (typeof (obj) != 'undefined' && obj != null) {
+                str = obj.toString();
+            }
+            return str;
+        },
+        randomNumber: function () {
+            return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
+        },
+        generUUID: function () {
+            return ($.randomNumber() + $.randomNumber() + "-" + $.randomNumber() + "-" + $.randomNumber() + "-" + $.randomNumber() + "-" + $.randomNumber() + $.randomNumber() + $.randomNumber());
+        }
+    })
+
+
+    window.SwaggerBootstrapUi = SwaggerBootstrapUi;
+
+    /**
+     * 运行
+     */
+    new SwaggerBootstrapUi().main();
+})(jQuery)

+ 816 - 0
src/main/resources/static/bycdao-ui/highlight/highlight.js

@@ -0,0 +1,816 @@
+/*
+Syntax highlighting with language autodetection.
+https://highlightjs.org/
+*/
+
+(function(factory) {
+
+  // Find the global object for export to both the browser and web workers.
+  var globalObject = typeof window === 'object' && window ||
+                     typeof self === 'object' && self;
+
+  // Setup highlight.js for different environments. First is Node.js or
+  // CommonJS.
+  if(typeof exports !== 'undefined') {
+    factory(exports);
+  } else if(globalObject) {
+    // Export hljs globally even when using AMD for cases when this script
+    // is loaded with others that may still expect a global hljs.
+    globalObject.hljs = factory({});
+
+    // Finally register the global hljs with AMD.
+    if(typeof define === 'function' && define.amd) {
+      define([], function() {
+        return globalObject.hljs;
+      });
+    }
+  }
+
+}(function(hljs) {
+  // Convenience variables for build-in objects
+  var ArrayProto = [],
+      objectKeys = Object.keys;
+
+  // Global internal variables used within the highlight.js library.
+  var languages = {},
+      aliases   = {};
+
+  // Regular expressions used throughout the highlight.js library.
+  var noHighlightRe    = /^(no-?highlight|plain|text)$/i,
+      languagePrefixRe = /\blang(?:uage)?-([\w-]+)\b/i,
+      fixMarkupRe      = /((^(<[^>]+>|\t|)+|(?:\n)))/gm;
+
+  var spanEndTag = '</span>';
+
+  // Global options used when within external APIs. This is modified when
+  // calling the `hljs.configure` function.
+  var options = {
+    classPrefix: 'hljs-',
+    tabReplace: null,
+    useBR: false,
+    languages: undefined
+  };
+
+
+  /* Utility functions */
+
+  function escape(value) {
+    return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
+  }
+
+  function tag(node) {
+    return node.nodeName.toLowerCase();
+  }
+
+  function testRe(re, lexeme) {
+    var match = re && re.exec(lexeme);
+    return match && match.index === 0;
+  }
+
+  function isNotHighlighted(language) {
+    return noHighlightRe.test(language);
+  }
+
+  function blockLanguage(block) {
+    var i, match, length, _class;
+    var classes = block.className + ' ';
+
+    classes += block.parentNode ? block.parentNode.className : '';
+
+    // language-* takes precedence over non-prefixed class names.
+    match = languagePrefixRe.exec(classes);
+    if (match) {
+      return getLanguage(match[1]) ? match[1] : 'no-highlight';
+    }
+
+    classes = classes.split(/\s+/);
+
+    for (i = 0, length = classes.length; i < length; i++) {
+      _class = classes[i]
+
+      if (isNotHighlighted(_class) || getLanguage(_class)) {
+        return _class;
+      }
+    }
+  }
+
+  function inherit(parent) {  // inherit(parent, override_obj, override_obj, ...)
+    var key;
+    var result = {};
+    var objects = Array.prototype.slice.call(arguments, 1);
+
+    for (key in parent)
+      result[key] = parent[key];
+    objects.forEach(function(obj) {
+      for (key in obj)
+        result[key] = obj[key];
+    });
+    return result;
+  }
+
+  /* Stream merging */
+
+  function nodeStream(node) {
+    var result = [];
+    (function _nodeStream(node, offset) {
+      for (var child = node.firstChild; child; child = child.nextSibling) {
+        if (child.nodeType === 3)
+          offset += child.nodeValue.length;
+        else if (child.nodeType === 1) {
+          result.push({
+            event: 'start',
+            offset: offset,
+            node: child
+          });
+          offset = _nodeStream(child, offset);
+          // Prevent void elements from having an end tag that would actually
+          // double them in the output. There are more void elements in HTML
+          // but we list only those realistically expected in code display.
+          if (!tag(child).match(/br|hr|img|input/)) {
+            result.push({
+              event: 'stop',
+              offset: offset,
+              node: child
+            });
+          }
+        }
+      }
+      return offset;
+    })(node, 0);
+    return result;
+  }
+
+  function mergeStreams(original, highlighted, value) {
+    var processed = 0;
+    var result = '';
+    var nodeStack = [];
+
+    function selectStream() {
+      if (!original.length || !highlighted.length) {
+        return original.length ? original : highlighted;
+      }
+      if (original[0].offset !== highlighted[0].offset) {
+        return (original[0].offset < highlighted[0].offset) ? original : highlighted;
+      }
+
+      /*
+      To avoid starting the stream just before it should stop the order is
+      ensured that original always starts first and closes last:
+
+      if (event1 == 'start' && event2 == 'start')
+        return original;
+      if (event1 == 'start' && event2 == 'stop')
+        return highlighted;
+      if (event1 == 'stop' && event2 == 'start')
+        return original;
+      if (event1 == 'stop' && event2 == 'stop')
+        return highlighted;
+
+      ... which is collapsed to:
+      */
+      return highlighted[0].event === 'start' ? original : highlighted;
+    }
+
+    function open(node) {
+      function attr_str(a) {return ' ' + a.nodeName + '="' + escape(a.value).replace('"', '&quot;') + '"';}
+      result += '<' + tag(node) + ArrayProto.map.call(node.attributes, attr_str).join('') + '>';
+    }
+
+    function close(node) {
+      result += '</' + tag(node) + '>';
+    }
+
+    function render(event) {
+      (event.event === 'start' ? open : close)(event.node);
+    }
+
+    while (original.length || highlighted.length) {
+      var stream = selectStream();
+      result += escape(value.substring(processed, stream[0].offset));
+      processed = stream[0].offset;
+      if (stream === original) {
+        /*
+        On any opening or closing tag of the original markup we first close
+        the entire highlighted node stack, then render the original tag along
+        with all the following original tags at the same offset and then
+        reopen all the tags on the highlighted stack.
+        */
+        nodeStack.reverse().forEach(close);
+        do {
+          render(stream.splice(0, 1)[0]);
+          stream = selectStream();
+        } while (stream === original && stream.length && stream[0].offset === processed);
+        nodeStack.reverse().forEach(open);
+      } else {
+        if (stream[0].event === 'start') {
+          nodeStack.push(stream[0].node);
+        } else {
+          nodeStack.pop();
+        }
+        render(stream.splice(0, 1)[0]);
+      }
+    }
+    return result + escape(value.substr(processed));
+  }
+
+  /* Initialization */
+
+  function expand_mode(mode) {
+    if (mode.variants && !mode.cached_variants) {
+      mode.cached_variants = mode.variants.map(function(variant) {
+        return inherit(mode, {variants: null}, variant);
+      });
+    }
+    return mode.cached_variants || (mode.endsWithParent && [inherit(mode)]) || [mode];
+  }
+
+  function compileLanguage(language) {
+
+    function reStr(re) {
+        return (re && re.source) || re;
+    }
+
+    function langRe(value, global) {
+      return new RegExp(
+        reStr(value),
+        'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '')
+      );
+    }
+
+    function compileMode(mode, parent) {
+      if (mode.compiled)
+        return;
+      mode.compiled = true;
+
+      mode.keywords = mode.keywords || mode.beginKeywords;
+      if (mode.keywords) {
+        var compiled_keywords = {};
+
+        var flatten = function(className, str) {
+          if (language.case_insensitive) {
+            str = str.toLowerCase();
+          }
+          str.split(' ').forEach(function(kw) {
+            var pair = kw.split('|');
+            compiled_keywords[pair[0]] = [className, pair[1] ? Number(pair[1]) : 1];
+          });
+        };
+
+        if (typeof mode.keywords === 'string') { // string
+          flatten('keyword', mode.keywords);
+        } else {
+          objectKeys(mode.keywords).forEach(function (className) {
+            flatten(className, mode.keywords[className]);
+          });
+        }
+        mode.keywords = compiled_keywords;
+      }
+      mode.lexemesRe = langRe(mode.lexemes || /\w+/, true);
+
+      if (parent) {
+        if (mode.beginKeywords) {
+          mode.begin = '\\b(' + mode.beginKeywords.split(' ').join('|') + ')\\b';
+        }
+        if (!mode.begin)
+          mode.begin = /\B|\b/;
+        mode.beginRe = langRe(mode.begin);
+        if (!mode.end && !mode.endsWithParent)
+          mode.end = /\B|\b/;
+        if (mode.end)
+          mode.endRe = langRe(mode.end);
+        mode.terminator_end = reStr(mode.end) || '';
+        if (mode.endsWithParent && parent.terminator_end)
+          mode.terminator_end += (mode.end ? '|' : '') + parent.terminator_end;
+      }
+      if (mode.illegal)
+        mode.illegalRe = langRe(mode.illegal);
+      if (mode.relevance == null)
+        mode.relevance = 1;
+      if (!mode.contains) {
+        mode.contains = [];
+      }
+      mode.contains = Array.prototype.concat.apply([], mode.contains.map(function(c) {
+        return expand_mode(c === 'self' ? mode : c)
+      }));
+      mode.contains.forEach(function(c) {compileMode(c, mode);});
+
+      if (mode.starts) {
+        compileMode(mode.starts, parent);
+      }
+
+      var terminators =
+        mode.contains.map(function(c) {
+          return c.beginKeywords ? '\\.?(' + c.begin + ')\\.?' : c.begin;
+        })
+        .concat([mode.terminator_end, mode.illegal])
+        .map(reStr)
+        .filter(Boolean);
+      mode.terminators = terminators.length ? langRe(terminators.join('|'), true) : {exec: function(/*s*/) {return null;}};
+    }
+
+    compileMode(language);
+  }
+
+  /*
+  Core highlighting function. Accepts a language name, or an alias, and a
+  string with the code to highlight. Returns an object with the following
+  properties:
+
+  - relevance (int)
+  - value (an HTML string with highlighting markup)
+
+  */
+  function highlight(name, value, ignore_illegals, continuation) {
+
+    function subMode(lexeme, mode) {
+      var i, length;
+
+      for (i = 0, length = mode.contains.length; i < length; i++) {
+        if (testRe(mode.contains[i].beginRe, lexeme)) {
+          return mode.contains[i];
+        }
+      }
+    }
+
+    function endOfMode(mode, lexeme) {
+      if (testRe(mode.endRe, lexeme)) {
+        while (mode.endsParent && mode.parent) {
+          mode = mode.parent;
+        }
+        return mode;
+      }
+      if (mode.endsWithParent) {
+        return endOfMode(mode.parent, lexeme);
+      }
+    }
+
+    function isIllegal(lexeme, mode) {
+      return !ignore_illegals && testRe(mode.illegalRe, lexeme);
+    }
+
+    function keywordMatch(mode, match) {
+      var match_str = language.case_insensitive ? match[0].toLowerCase() : match[0];
+      return mode.keywords.hasOwnProperty(match_str) && mode.keywords[match_str];
+    }
+
+    function buildSpan(classname, insideSpan, leaveOpen, noPrefix) {
+      var classPrefix = noPrefix ? '' : options.classPrefix,
+          openSpan    = '<span class="' + classPrefix,
+          closeSpan   = leaveOpen ? '' : spanEndTag
+
+      openSpan += classname + '">';
+
+      return openSpan + insideSpan + closeSpan;
+    }
+
+    function processKeywords() {
+      var keyword_match, last_index, match, result;
+
+      if (!top.keywords)
+        return escape(mode_buffer);
+
+      result = '';
+      last_index = 0;
+      top.lexemesRe.lastIndex = 0;
+      match = top.lexemesRe.exec(mode_buffer);
+
+      while (match) {
+        result += escape(mode_buffer.substring(last_index, match.index));
+        keyword_match = keywordMatch(top, match);
+        if (keyword_match) {
+          relevance += keyword_match[1];
+          result += buildSpan(keyword_match[0], escape(match[0]));
+        } else {
+          result += escape(match[0]);
+        }
+        last_index = top.lexemesRe.lastIndex;
+        match = top.lexemesRe.exec(mode_buffer);
+      }
+      return result + escape(mode_buffer.substr(last_index));
+    }
+
+    function processSubLanguage() {
+      var explicit = typeof top.subLanguage === 'string';
+      if (explicit && !languages[top.subLanguage]) {
+        return escape(mode_buffer);
+      }
+
+      var result = explicit ?
+                   highlight(top.subLanguage, mode_buffer, true, continuations[top.subLanguage]) :
+                   highlightAuto(mode_buffer, top.subLanguage.length ? top.subLanguage : undefined);
+
+      // Counting embedded language score towards the host language may be disabled
+      // with zeroing the containing mode relevance. Usecase in point is Markdown that
+      // allows XML everywhere and makes every XML snippet to have a much larger Markdown
+      // score.
+      if (top.relevance > 0) {
+        relevance += result.relevance;
+      }
+      if (explicit) {
+        continuations[top.subLanguage] = result.top;
+      }
+      return buildSpan(result.language, result.value, false, true);
+    }
+
+    function processBuffer() {
+      result += (top.subLanguage != null ? processSubLanguage() : processKeywords());
+      mode_buffer = '';
+    }
+
+    function startNewMode(mode) {
+      result += mode.className? buildSpan(mode.className, '', true): '';
+      top = Object.create(mode, {parent: {value: top}});
+    }
+
+    function processLexeme(buffer, lexeme) {
+
+      mode_buffer += buffer;
+
+      if (lexeme == null) {
+        processBuffer();
+        return 0;
+      }
+
+      var new_mode = subMode(lexeme, top);
+      if (new_mode) {
+        if (new_mode.skip) {
+          mode_buffer += lexeme;
+        } else {
+          if (new_mode.excludeBegin) {
+            mode_buffer += lexeme;
+          }
+          processBuffer();
+          if (!new_mode.returnBegin && !new_mode.excludeBegin) {
+            mode_buffer = lexeme;
+          }
+        }
+        startNewMode(new_mode, lexeme);
+        return new_mode.returnBegin ? 0 : lexeme.length;
+      }
+
+      var end_mode = endOfMode(top, lexeme);
+      if (end_mode) {
+        var origin = top;
+        if (origin.skip) {
+          mode_buffer += lexeme;
+        } else {
+          if (!(origin.returnEnd || origin.excludeEnd)) {
+            mode_buffer += lexeme;
+          }
+          processBuffer();
+          if (origin.excludeEnd) {
+            mode_buffer = lexeme;
+          }
+        }
+        do {
+          if (top.className) {
+            result += spanEndTag;
+          }
+          if (!top.skip && !top.subLanguage) {
+            relevance += top.relevance;
+          }
+          top = top.parent;
+        } while (top !== end_mode.parent);
+        if (end_mode.starts) {
+          startNewMode(end_mode.starts, '');
+        }
+        return origin.returnEnd ? 0 : lexeme.length;
+      }
+
+      if (isIllegal(lexeme, top))
+        throw new Error('Illegal lexeme "' + lexeme + '" for mode "' + (top.className || '<unnamed>') + '"');
+
+      /*
+      Parser should not reach this point as all types of lexemes should be caught
+      earlier, but if it does due to some bug make sure it advances at least one
+      character forward to prevent infinite looping.
+      */
+      mode_buffer += lexeme;
+      return lexeme.length || 1;
+    }
+
+    var language = getLanguage(name);
+    if (!language) {
+      throw new Error('Unknown language: "' + name + '"');
+    }
+
+    compileLanguage(language);
+    var top = continuation || language;
+    var continuations = {}; // keep continuations for sub-languages
+    var result = '', current;
+    for(current = top; current !== language; current = current.parent) {
+      if (current.className) {
+        result = buildSpan(current.className, '', true) + result;
+      }
+    }
+    var mode_buffer = '';
+    var relevance = 0;
+    try {
+      var match, count, index = 0;
+      while (true) {
+        top.terminators.lastIndex = index;
+        match = top.terminators.exec(value);
+        if (!match)
+          break;
+        count = processLexeme(value.substring(index, match.index), match[0]);
+        index = match.index + count;
+      }
+      processLexeme(value.substr(index));
+      for(current = top; current.parent; current = current.parent) { // close dangling modes
+        if (current.className) {
+          result += spanEndTag;
+        }
+      }
+      return {
+        relevance: relevance,
+        value: result,
+        language: name,
+        top: top
+      };
+    } catch (e) {
+      if (e.message && e.message.indexOf('Illegal') !== -1) {
+        return {
+          relevance: 0,
+          value: escape(value)
+        };
+      } else {
+        throw e;
+      }
+    }
+  }
+
+  /*
+  Highlighting with language detection. Accepts a string with the code to
+  highlight. Returns an object with the following properties:
+
+  - language (detected language)
+  - relevance (int)
+  - value (an HTML string with highlighting markup)
+  - second_best (object with the same structure for second-best heuristically
+    detected language, may be absent)
+
+  */
+  function highlightAuto(text, languageSubset) {
+    languageSubset = languageSubset || options.languages || objectKeys(languages);
+    var result = {
+      relevance: 0,
+      value: escape(text)
+    };
+    var second_best = result;
+    languageSubset.filter(getLanguage).forEach(function(name) {
+      var current = highlight(name, text, false);
+      current.language = name;
+      if (current.relevance > second_best.relevance) {
+        second_best = current;
+      }
+      if (current.relevance > result.relevance) {
+        second_best = result;
+        result = current;
+      }
+    });
+    if (second_best.language) {
+      result.second_best = second_best;
+    }
+    return result;
+  }
+
+  /*
+  Post-processing of the highlighted markup:
+
+  - replace TABs with something more useful
+  - replace real line-breaks with '<br>' for non-pre containers
+
+  */
+  function fixMarkup(value) {
+    return !(options.tabReplace || options.useBR)
+      ? value
+      : value.replace(fixMarkupRe, function(match, p1) {
+          if (options.useBR && match === '\n') {
+            return '<br>';
+          } else if (options.tabReplace) {
+            return p1.replace(/\t/g, options.tabReplace);
+          }
+          return '';
+      });
+  }
+
+  function buildClassName(prevClassName, currentLang, resultLang) {
+    var language = currentLang ? aliases[currentLang] : resultLang,
+        result   = [prevClassName.trim()];
+
+    if (!prevClassName.match(/\bhljs\b/)) {
+      result.push('hljs');
+    }
+
+    if (prevClassName.indexOf(language) === -1) {
+      result.push(language);
+    }
+
+    return result.join(' ').trim();
+  }
+
+  /*
+  Applies highlighting to a DOM node containing code. Accepts a DOM node and
+  two optional parameters for fixMarkup.
+  */
+  function highlightBlock(block) {
+    var node, originalStream, result, resultNode, text;
+    var language = blockLanguage(block);
+
+    if (isNotHighlighted(language))
+        return;
+
+    if (options.useBR) {
+      node = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
+      node.innerHTML = block.innerHTML.replace(/\n/g, '').replace(/<br[ \/]*>/g, '\n');
+    } else {
+      node = block;
+    }
+    text = node.textContent;
+    result = language ? highlight(language, text, true) : highlightAuto(text);
+
+    originalStream = nodeStream(node);
+    if (originalStream.length) {
+      resultNode = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
+      resultNode.innerHTML = result.value;
+      result.value = mergeStreams(originalStream, nodeStream(resultNode), text);
+    }
+    result.value = fixMarkup(result.value);
+
+    block.innerHTML = result.value;
+    block.className = buildClassName(block.className, language, result.language);
+    block.result = {
+      language: result.language,
+      re: result.relevance
+    };
+    if (result.second_best) {
+      block.second_best = {
+        language: result.second_best.language,
+        re: result.second_best.relevance
+      };
+    }
+  }
+
+  /*
+  Updates highlight.js global options with values passed in the form of an object.
+  */
+  function configure(user_options) {
+    options = inherit(options, user_options);
+  }
+
+  /*
+  Applies highlighting to all <pre><code>..</code></pre> blocks on a page.
+  */
+  function initHighlighting() {
+    if (initHighlighting.called)
+      return;
+    initHighlighting.called = true;
+
+    var blocks = document.querySelectorAll('pre code');
+    ArrayProto.forEach.call(blocks, highlightBlock);
+  }
+
+  /*
+  Attaches highlighting to the page load event.
+  */
+  function initHighlightingOnLoad() {
+    addEventListener('DOMContentLoaded', initHighlighting, false);
+    addEventListener('load', initHighlighting, false);
+  }
+
+  function registerLanguage(name, language) {
+    var lang = languages[name] = language(hljs);
+    if (lang.aliases) {
+      lang.aliases.forEach(function(alias) {aliases[alias] = name;});
+    }
+  }
+
+  function listLanguages() {
+    return objectKeys(languages);
+  }
+
+  function getLanguage(name) {
+    name = (name || '').toLowerCase();
+    return languages[name] || languages[aliases[name]];
+  }
+
+  /* Interface definition */
+
+  hljs.highlight = highlight;
+  hljs.highlightAuto = highlightAuto;
+  hljs.fixMarkup = fixMarkup;
+  hljs.highlightBlock = highlightBlock;
+  hljs.configure = configure;
+  hljs.initHighlighting = initHighlighting;
+  hljs.initHighlightingOnLoad = initHighlightingOnLoad;
+  hljs.registerLanguage = registerLanguage;
+  hljs.listLanguages = listLanguages;
+  hljs.getLanguage = getLanguage;
+  hljs.inherit = inherit;
+
+  // Common regexps
+  hljs.IDENT_RE = '[a-zA-Z]\\w*';
+  hljs.UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\w*';
+  hljs.NUMBER_RE = '\\b\\d+(\\.\\d+)?';
+  hljs.C_NUMBER_RE = '(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)'; // 0x..., 0..., decimal, float
+  hljs.BINARY_NUMBER_RE = '\\b(0b[01]+)'; // 0b...
+  hljs.RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~';
+
+  // Common modes
+  hljs.BACKSLASH_ESCAPE = {
+    begin: '\\\\[\\s\\S]', relevance: 0
+  };
+  hljs.APOS_STRING_MODE = {
+    className: 'string',
+    begin: '\'', end: '\'',
+    illegal: '\\n',
+    contains: [hljs.BACKSLASH_ESCAPE]
+  };
+  hljs.QUOTE_STRING_MODE = {
+    className: 'string',
+    begin: '"', end: '"',
+    illegal: '\\n',
+    contains: [hljs.BACKSLASH_ESCAPE]
+  };
+  hljs.PHRASAL_WORDS_MODE = {
+    begin: /\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/
+  };
+  hljs.COMMENT = function (begin, end, inherits) {
+    var mode = hljs.inherit(
+      {
+        className: 'comment',
+        begin: begin, end: end,
+        contains: []
+      },
+      inherits || {}
+    );
+    mode.contains.push(hljs.PHRASAL_WORDS_MODE);
+    mode.contains.push({
+      className: 'doctag',
+      begin: '(?:TODO|FIXME|NOTE|BUG|XXX):',
+      relevance: 0
+    });
+    return mode;
+  };
+  hljs.C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$');
+  hljs.C_BLOCK_COMMENT_MODE = hljs.COMMENT('/\\*', '\\*/');
+  hljs.HASH_COMMENT_MODE = hljs.COMMENT('#', '$');
+  hljs.NUMBER_MODE = {
+    className: 'number',
+    begin: hljs.NUMBER_RE,
+    relevance: 0
+  };
+  hljs.C_NUMBER_MODE = {
+    className: 'number',
+    begin: hljs.C_NUMBER_RE,
+    relevance: 0
+  };
+  hljs.BINARY_NUMBER_MODE = {
+    className: 'number',
+    begin: hljs.BINARY_NUMBER_RE,
+    relevance: 0
+  };
+  hljs.CSS_NUMBER_MODE = {
+    className: 'number',
+    begin: hljs.NUMBER_RE + '(' +
+      '%|em|ex|ch|rem'  +
+      '|vw|vh|vmin|vmax' +
+      '|cm|mm|in|pt|pc|px' +
+      '|deg|grad|rad|turn' +
+      '|s|ms' +
+      '|Hz|kHz' +
+      '|dpi|dpcm|dppx' +
+      ')?',
+    relevance: 0
+  };
+  hljs.REGEXP_MODE = {
+    className: 'regexp',
+    begin: /\//, end: /\/[gimuy]*/,
+    illegal: /\n/,
+    contains: [
+      hljs.BACKSLASH_ESCAPE,
+      {
+        begin: /\[/, end: /\]/,
+        relevance: 0,
+        contains: [hljs.BACKSLASH_ESCAPE]
+      }
+    ]
+  };
+  hljs.TITLE_MODE = {
+    className: 'title',
+    begin: hljs.IDENT_RE,
+    relevance: 0
+  };
+  hljs.UNDERSCORE_TITLE_MODE = {
+    className: 'title',
+    begin: hljs.UNDERSCORE_IDENT_RE,
+    relevance: 0
+  };
+  hljs.METHOD_GUARD = {
+    // excludes method names from keyword processing
+    begin: '\\.\\s*' + hljs.UNDERSCORE_IDENT_RE,
+    relevance: 0
+  };
+
+  return hljs;
+}));

File diff suppressed because it is too large
+ 0 - 0
src/main/resources/static/bycdao-ui/highlight/highlight.pack.js


+ 99 - 0
src/main/resources/static/bycdao-ui/highlight/styles/default.css

@@ -0,0 +1,99 @@
+/*
+
+Original highlight.js style (c) Ivan Sagalaev <maniac@softwaremaniacs.org>
+
+*/
+
+.hljs {
+  display: block;
+  overflow-x: auto;
+  padding: 0.5em;
+  background: #F0F0F0;
+}
+
+
+/* Base color: saturation 0; */
+
+.hljs,
+.hljs-subst {
+  color: #444;
+}
+
+.hljs-comment {
+  color: #888888;
+}
+
+.hljs-keyword,
+.hljs-attribute,
+.hljs-selector-tag,
+.hljs-meta-keyword,
+.hljs-doctag,
+.hljs-name {
+  font-weight: bold;
+}
+
+
+/* User color: hue: 0 */
+
+.hljs-type,
+.hljs-string,
+.hljs-number,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-quote,
+.hljs-template-tag,
+.hljs-deletion {
+  color: #880000;
+}
+
+.hljs-title,
+.hljs-section {
+  color: #880000;
+  font-weight: bold;
+}
+
+.hljs-regexp,
+.hljs-symbol,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-link,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+  color: #BC6060;
+}
+
+
+/* Language color: hue: 90; */
+
+.hljs-literal {
+  color: #78A960;
+}
+
+.hljs-built_in,
+.hljs-bullet,
+.hljs-code,
+.hljs-addition {
+  color: #397300;
+}
+
+
+/* Meta color: hue: 200 */
+
+.hljs-meta {
+  color: #1f7199;
+}
+
+.hljs-meta-string {
+  color: #4d99bf;
+}
+
+
+/* Misc effects */
+
+.hljs-emphasis {
+  font-style: italic;
+}
+
+.hljs-strong {
+  font-weight: bold;
+}

+ 97 - 0
src/main/resources/static/bycdao-ui/highlight/styles/docco.css

@@ -0,0 +1,97 @@
+/*
+Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars)
+*/
+
+.hljs {
+  display: block;
+  overflow-x: auto;
+  padding: 0.5em;
+  color: #000;
+  background: #f8f8ff;
+}
+
+.hljs-comment,
+.hljs-quote {
+  color: #408080;
+  font-style: italic;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-subst {
+  color: #954121;
+}
+
+.hljs-number {
+  color: #40a070;
+}
+
+.hljs-string,
+.hljs-doctag {
+  color: #219161;
+}
+
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-section,
+.hljs-type {
+  color: #19469d;
+}
+
+.hljs-params {
+  color: #00f;
+}
+
+.hljs-title {
+  color: #458;
+  font-weight: bold;
+}
+
+.hljs-tag,
+.hljs-name,
+.hljs-attribute {
+  color: #000080;
+  font-weight: normal;
+}
+
+.hljs-variable,
+.hljs-template-variable {
+  color: #008080;
+}
+
+.hljs-regexp,
+.hljs-link {
+  color: #b68;
+}
+
+.hljs-symbol,
+.hljs-bullet {
+  color: #990073;
+}
+
+.hljs-built_in,
+.hljs-builtin-name {
+  color: #0086b3;
+}
+
+.hljs-meta {
+  color: #999;
+  font-weight: bold;
+}
+
+.hljs-deletion {
+  background: #fdd;
+}
+
+.hljs-addition {
+  background: #dfd;
+}
+
+.hljs-emphasis {
+  font-style: italic;
+}
+
+.hljs-strong {
+  font-weight: bold;
+}

+ 1437 - 0
src/main/resources/static/bycdao-ui/highlight/styles/style.css

@@ -0,0 +1,1437 @@
+html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p,
+	blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn,
+	em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var,
+	dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption,
+	tbody, tfoot, thead, tr, th, td {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	font-weight: inherit;
+	font-style: inherit;
+	font-family: inherit;
+	font-size: 100%;
+	vertical-align: baseline;
+}
+
+input {
+	padding: 0;
+	border: 1px solid #10af88;
+}
+
+body {
+	line-height: 1;
+	color: #000;
+	background: #fff;
+}
+
+ol, ul {
+	list-style: none;
+}
+
+table {
+	border-collapse: separate;
+	border-spacing: 0;
+	vertical-align: middle;
+}
+
+caption, th, td {
+	text-align: left;
+	font-weight: normal;
+	vertical-align: middle;
+	border-right: 1px solid #ddd;
+	border-bottom: 1px solid #ddd;
+}
+
+a img {
+	border: none;
+}
+
+body {
+	width: 100%;
+}
+
+body:before, body:after {
+	content: "";
+	display: table;
+}
+
+body:after {
+	clear: both;
+}
+
+#page-banner, #banner {
+	border-bottom: 1px solid #ccc;
+	background-color: #eee;
+	-webkit-background-size: 500px;
+	-moz-background-size: 500px;
+	background-size: 500px;
+}
+
+@media all and (-webkit-min-device-pixel-ratio:1.5) , (
+		min--moz-device-pixel-ratio :1.5) , ( -o-min-device-pixel-ratio
+		:1.5/1) , ( min-device-pixel-ratio :1.5) , ( min-resolution :138dpi) ,
+		( min-resolution :1.5dppx) {
+	#page-banner, #banner, #page-banner, #banner {
+		-webkit-background-size: auto auto;
+		-moz-background-size: auto auto;
+		background-size: auto auto;
+	}
+}
+
+#main-nav-toggle:before, #github-btn:before, #search-btn:before,
+	#page-edit-link:before, .swbu-main blockquote:before,
+	#page-footer-prev:before, #page-footer-next:after, #news-subscribe-link:before,
+	.api-deprecated-msg:before, #banner-getting-started-btn:before,
+	.intro-feature:before, .footer-link:before {
+	font-family: icomoon;
+	font-style: normal;
+	font-weight: normal;
+	font-variant: normal;
+	text-transform: none;
+	-webkit-font-smoothing: antialiased;
+	-moz-osx-font-smoothing: grayscale;
+}
+
+#page-edit-link, #news-subscribe-link {
+	color: #aaa;
+	text-shadow: 1px 0 #eee;
+	width: 24px;
+	height: 24px;
+	line-height: 24px;
+	text-align: center;
+	text-decoration: none;
+	-webkit-transition: color 0.2s;
+	-moz-transition: color 0.2s;
+	-ms-transition: color 0.2s;
+	transition: color 0.2s;
+	position: absolute;
+	top: 0;
+	bottom: 0;
+	right: 0;
+	margin: auto;
+	font-size: 24px;
+}
+
+#page-edit-link:hover, #news-subscribe-link:hover {
+	color: #888;
+}
+
+/* @media ( max-width : 768px) {
+	#page-edit-link, #news-subscribe-link, #page-edit-link,
+		#news-subscribe-link {
+		display: none;
+	}
+} */
+body {
+	font: 14px "Helvetica Neue", Helvetica, Arial, sans-serif;
+	-webkit-text-size-adjust: 100%;
+}
+
+.outer {
+	margin: 0 auto;
+}
+
+.outer:before, .outer:after {
+	content: "";
+	display: table;
+}
+
+.outer:after {
+	clear: both;
+}
+
+.inner {
+	display: inline;
+	float: left;
+	width: 100%;
+}
+
+#header {
+	background: #fff;
+	border-bottom: 1px solid #ccc;
+	font-family: Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
+	padding-top: 30px;
+	padding-bottom: 30px;
+	position: relative;
+}
+
+#logo-wrap {
+	text-align: center;
+	position: relative;
+}
+
+#logo-wrap {
+	float: left;
+}
+
+#logo {
+	text-indent: 100%;
+	white-space: nowrap;
+	overflow: hidden;
+	width: 127px;
+	height: 30px;
+	background-image: url("images/logo.png");
+	display: block;
+}
+
+@media all and (-webkit-min-device-pixel-ratio:1.5) , (
+		min--moz-device-pixel-ratio :1.5) , ( -o-min-device-pixel-ratio
+		:1.5/1) , ( min-device-pixel-ratio :1.5) , ( min-resolution :138dpi) ,
+		( min-resolution :1.5dppx) {
+	#logo {
+		background-image: url("images/logo@2x.png");
+		-webkit-background-size: 127px 30px;
+		-moz-background-size: 127px 30px;
+		background-size: 127px 30px;
+	}
+}
+
+#main-nav-toggle {
+	float: right;
+	width: 30px;
+	height: 30px;
+	text-align: center;
+	color: #999;
+	cursor: pointer;
+	position: absolute;
+	top: 0;
+	bottom: 0;
+	right: 0;
+	margin: auto;
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+	font-size: 24px;
+}
+
+#main-nav-toggle:before {
+	width: 24px;
+	height: 24px;
+	position: absolute;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	margin: auto;
+	content: "\f0c9";
+}
+
+#main-nav-toggle:hover, #main-nav-toggle:active {
+	color: #555;
+}
+
+#main-nav-toggle {
+	display: none;
+}
+
+#main-nav.on {
+	display: block;
+}
+
+/* @media ( max-width : 768px) {
+	#main-nav {
+		position: absolute;
+		top: 100%;
+		left: 0;
+		right: 0;
+		margin-top: -20px;
+		border-bottom: 1px solid #ddd;
+		background: #fff;
+		display: none;
+		z-index: 1;
+	}
+} */
+#main-nav {
+	float: right;
+	margin: 0;
+}
+
+#main-nav-list {
+	float: left;
+}
+
+.main-nav-item {
+	margin: 10px;
+}
+
+.main-nav-item {
+	float: left;
+	margin: 0 15px;
+}
+
+.main-nav-link {
+	display: block;
+	font-weight: bold;
+	text-transform: uppercase;
+	text-decoration: none;
+	color: #999;
+	text-align: center;
+	padding: 10px 15px;
+	line-height: 1;
+	-webkit-transition: 0.2s;
+	-moz-transition: 0.2s;
+	-ms-transition: 0.2s;
+	transition: 0.2s;
+}
+
+.main-nav-link {
+	padding: 10px 0;
+}
+
+.main-nav-link:hover, .main-nav-link:active {
+	color: #10af88;
+}
+
+.main-nav-link:hover, .main-nav-link:active {
+	background: #10af88;
+	color: #fff;
+	-webkit-border-radius: 4px;
+	border-radius: 4px;
+}
+
+#github-btn, #search-btn {
+	float: left;
+	display: none;
+	width: 18px;
+	height: 18px;
+	text-align: center;
+	padding: 8px;
+	line-height: 18px;
+	cursor: pointer;
+	color: #999;
+	-webkit-transition: color 0.2s;
+	-moz-transition: color 0.2s;
+	-ms-transition: color 0.2s;
+	transition: color 0.2s;
+	text-decoration: none;
+}
+
+#github-btn:hover, #search-btn:hover {
+	color: #10af88;
+}
+
+#github-btn:before, #search-btn:before {
+	font-size: 18px;
+}
+
+#github-btn, #search-btn, #github-btn, #search-btn {
+	display: block;
+}
+
+#github-btn:before {
+	content: "\f113";
+}
+
+#search-btn:before {
+	content: "\f002";
+}
+
+#page-banner {
+	padding: 30px 0;
+	text-align: center;
+}
+
+#page-banner {
+	padding: 20px 0;
+	text-align: left;
+}
+
+#page-banner-inner {
+	position: relative;
+}
+
+#swbu-title {
+	color: #555;
+	font: 300 20px Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
+	text-shadow: 1px 0 #eee;
+	line-height: 1em;
+}
+
+#page-edit-link:before {
+	content: "\f040";
+}
+
+.page-content {
+	display: inline;
+}
+
+.swbu-main {
+	line-height: 1.6em;
+	color: #444;
+}
+
+.swbu-main p{
+	white-space: pre-wrap;
+}
+
+.swbu-main p, .swbu-main ol, .swbu-main ul, .swbu-main dl,
+	.swbu-main table, .swbu-main blockquote, .swbu-main iframe,
+	.swbu-main .highlight {
+	line-height: 1.9em;
+	margin: 1.6em 0;
+}
+
+.swbu-main td p{
+	margin: 0.1em 0;
+}
+
+.swbu-main h1 {
+	font-size: 2em;
+}
+
+.swbu-main h2 {
+	font-size: 1.5em;
+}
+
+.swbu-main h3 {
+	font-size: 1.3em;
+}
+
+.swbu-main h1, .swbu-main h2, .swbu-main h3, .swbu-main h4,
+	.swbu-main h5, .swbu-main h6 {
+	line-height: 1em;
+	font-weight: bold;
+	margin: 1em 0;
+}
+
+.swbu-main a {
+	color: #10af88;
+	text-decoration: none;
+}
+
+.swbu-main a:hover {
+	text-decoration: underline;
+}
+
+.swbu-main strong {
+	font-weight: bold;
+}
+
+.swbu-main em {
+	font-style: italic;
+}
+
+.swbu-main ul, .swbu-main ol, .swbu-main dl {
+	margin-left: 20px;
+}
+
+.swbu-main ul ul, .swbu-main ol ul, .swbu-main dl ul, .swbu-main ul ol,
+	.swbu-main ol ol, .swbu-main dl ol, .swbu-main ul dl, .swbu-main ol dl,
+	.swbu-main dl dl {
+	margin-top: 0;
+	margin-bottom: 0;
+}
+
+.swbu-main ul {
+	list-style: disc;
+}
+
+.swbu-main ol {
+	list-style: decimal;
+}
+
+.swbu-main dl {
+	list-style: square;
+}
+
+.swbu-main li p {
+	margin: 0;
+}
+
+.swbu-main li table, .swbu-main li blockquote, .swbu-main li iframe,
+	.swbu-main li .highlight {
+	margin: 1em 0;
+}
+
+.swbu-main blockquote {
+	border: 1px solid #ddd;
+	border-left: 4px solid #ddd;
+	padding: 0 20px;
+	position: relative;
+}
+
+.swbu-main blockquote {
+	margin-left: 40px;
+}
+
+.swbu-main blockquote footer {
+	margin: 1em 0;
+	font-style: italic;
+}
+
+.swbu-main blockquote footer cite a {
+	color: #999;
+}
+
+.swbu-main .note.success {
+	border-left-color: #50af51;
+}
+
+.swbu-main .note.info {
+	border-left-color: #5bc0de;
+}
+
+.swbu-main .note.warn {
+	border-left-color: #f0ad4e;
+}
+
+.swbu-main .note.danger {
+	border-left-color: #d9534f;
+}
+
+.swbu-main .note-title {
+	margin: 1em 0;
+	display: block;
+	font-size: 1.3em;
+	font-weight: bold;
+}
+
+.swbu-main table {
+	width: 100%;
+	border-top: 1px solid #ddd;
+	border-left: 1px solid #ddd;
+}
+
+.swbu-main table th {
+	font-weight: bold;
+	background: #eee;
+}
+
+.swbu-main table th, .swbu-main table td {
+	padding: 5px 15px;
+}
+
+.swbu-main table tr:nth-child(2n) {
+	/*background: #eee;*/
+	
+}
+
+#page-footer {
+	border-top: 1px solid #ddd;
+	color: #999;
+	padding: 1em 0 30px;
+	text-align: center;
+}
+
+#page-footer:before, #page-footer:after {
+	content: "";
+	display: table;
+}
+
+#page-footer:after {
+	clear: both;
+}
+
+#page-footer-updated {
+	font-size: 0.9em;
+	display: none;
+}
+
+#page-footer-updated {
+	display: inline;
+}
+
+#page-footer-prev, #page-footer-next {
+	font-family: Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
+	font-size: 1em;
+	color: #10af88;
+	font-weight: bold;
+	text-transform: uppercase;
+	text-decoration: none;
+}
+
+#page-footer-prev {
+	float: left;
+}
+
+#page-footer-prev:before {
+	content: "\f060";
+	padding-right: 10px;
+}
+
+#page-footer-next {
+	float: right;
+}
+
+#page-footer-next:after {
+	content: "\f061";
+	padding-left: 10px;
+}
+
+#page-mobile-menu {
+	width: 100%;
+	margin: 30px 0 0;
+	display: none;
+}
+/* 
+@media ( max-width : 768px) {
+	#page-mobile-menu {
+		display: block;
+	}
+} */
+.toc-wrap {
+	float: right;
+	-webkit-border-radius: 4px;
+	border-radius: 4px;
+	background: #eee;
+	border: 1px solid #ddd;
+	margin: 1.6em 0 1em 2em;
+	padding: 10px 15px;
+	line-height: 1.6em;
+}
+
+.toc-title {
+	font-weight: bold;
+	color: #444;
+}
+
+.toc-link {
+	color: #10af88;
+	text-decoration: none;
+	font-size: 0.9em;
+}
+
+.toc-link:hover {
+	text-decoration: underline;
+}
+
+.toc-child {
+	margin-left: 1em;
+}
+
+#sidebar {
+	margin: 0 1.2254901960784%;
+	font-family: Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
+	padding: 30px 0 40px;
+}
+
+/* @media ( max-width : 768px) {
+	#sidebar {
+		display: none;
+	}
+} */
+.sidebar-title {
+	display: block;
+	margin: 10px 0;
+	color: #666;
+	position: relative;
+	padding-left: 20px;
+	font-size: 102%;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+}
+
+.sidebar-title:before {
+	content: "";
+	width: 8px;
+	height: 8px;
+	background: #666;
+	-webkit-border-radius: 50%;
+	border-radius: 50%;
+	position: absolute;
+	top: 7px;
+	left: 0;
+}
+
+.sidebar-link {
+	color: #666;
+	text-decoration: none;
+	display: block;
+	font-weight: 300;
+	padding: 5px 15px;
+	border-left: 2px solid #ddd;
+	margin-left: 3px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+}
+
+.sidebar-link:hover, .sidebar-link.current {
+	color: #10af88;
+	border-color: #10af88;
+}
+
+.sidebar-link.current {
+	font-weight: bold;
+	border-left-color: #10af88;
+}
+
+#news-subscribe-link:before {
+	content: "\f09e";
+}
+
+#post-list {
+	padding-bottom: 30px;
+}
+
+.post {
+	padding: 20px 0;
+	width: 860px;
+	margin: 0 auto;
+}
+
+.post.full {
+	padding: 60px 0 30px;
+}
+
+.post-header {
+	text-align: center;
+}
+
+.post-title {
+	font: 300 2em Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
+	line-height: 1.2em;
+	color: #444;
+	text-decoration: none;
+	-webkit-transition: color 0.2s;
+	-moz-transition: color 0.2s;
+	-ms-transition: color 0.2s;
+	transition: color 0.2s;
+}
+
+a.post-title:hover {
+	color: #10af88;
+}
+
+.post-date-wrap {
+	padding: 20px 0;
+}
+
+.post-date {
+	font: 300 0.9em Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
+	line-height: 1em;
+	color: #999;
+	text-decoration: none;
+	position: relative;
+	background: #fff;
+	padding: 0 8px;
+	-webkit-transition: color 0.2s;
+	-moz-transition: color 0.2s;
+	-ms-transition: color 0.2s;
+	transition: color 0.2s;
+}
+
+.post-date:hover {
+	color: #444;
+}
+
+.post-footer {
+	padding: 20px 0 40px;
+}
+
+#api-header {
+	margin: 1.6em 0;
+}
+
+#api-header:before, #api-header:after {
+	content: "";
+	display: table;
+}
+
+#api-header:after {
+	clear: both;
+}
+
+#api-title {
+	color: #444;
+	font-size: 2em;
+	font-weight: bold;
+	margin-bottom: 4px;
+}
+
+.api-meta {
+	color: #999;
+	font-size: 0.85em;
+	line-height: 1.6em;
+	float: left;
+}
+
+.api-meta a {
+	color: #10af88;
+	text-decoration: none;
+}
+
+.api-meta a:hover {
+	text-decoration: underline;
+}
+
+.api-options {
+	float: right;
+	font-size: 0.85em;
+	color: #444;
+}
+
+.api-section-title {
+	border-top: 1px solid #ddd;
+	padding-top: 1em;
+}
+
+.api-item {
+	margin: 2.5em 0;
+}
+
+.api-item.private, .api-item.protected, .api-item.deprecated {
+	display: none;
+}
+
+.api-item-title {
+	font-weight: normal;
+	margin-bottom: 6px;
+	display: inline;
+	font-family: "Source Code Pro", Monaco, Menlo, Consolas, monospace;
+}
+
+.api-item-title a {
+	color: #444;
+}
+
+.api-item-params {
+	font-family: "Source Code Pro", Monaco, Menlo, Consolas, monospace;
+}
+
+.api-deprecated-msg {
+	margin: 1.6em 0;
+	color: #444;
+}
+
+.api-deprecated-msg:before {
+	content: "\f06a";
+	color: #f00;
+}
+
+.api-deprecated-msg strong {
+	font-weight: bold;
+	color: #f00;
+}
+
+.api-item-type {
+	color: #999;
+}
+
+.api-item-type a, .api-item-type span {
+	border-bottom: 1px dotted #999;
+}
+
+.api-item-type a:hover {
+	text-decoration: none;
+}
+
+.api-item-type span {
+	color: #444;
+}
+
+.api-item-flag {
+	background: #999;
+	color: #fff;
+	-webkit-border-radius: 3px;
+	border-radius: 3px;
+	font-size: 0.85em;
+	margin: 0 6px;
+	padding: 3px 5px;
+}
+
+.api-item-meta {
+	color: #999;
+	font-size: 0.85em;
+	line-height: 1.6em;
+}
+
+.api-item-meta a {
+	color: #10af88;
+	text-decoration: none;
+}
+
+.api-item-meta a:hover {
+	text-decoration: underline;
+}
+
+.api-item-subtitle {
+	margin: 1.6em 0;
+}
+
+#banner {
+	padding-top: 50px;
+	padding-bottom: 50px;
+}
+
+#banner {
+	padding-top: 150px;
+}
+
+#banner-title {
+	color: #555;
+	font: 300 35px Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
+	text-shadow: 1px 0 #eee;
+	line-height: 1.3;
+}
+
+#banner-getting-started-prefix, #banner-getting-started-input {
+	font-family: "Source Code Pro", Monaco, Menlo, Consolas, monospace;
+	font-size: 14px;
+	line-height: 40px;
+}
+
+#banner-getting-started-prefix, #banner-getting-started-input,
+	#banner-getting-started-prefix, #banner-getting-started-input {
+	font-size: 16px;
+}
+
+#banner-getting-started {
+	padding-top: 30px;
+}
+
+#banner-getting-started:before, #banner-getting-started:after {
+	content: "";
+	display: table;
+}
+
+#banner-getting-started:after {
+	clear: both;
+}
+
+#banner-getting-started-prefix {
+	float: left;
+	background: #c8c8c8;
+	padding-left: 15px;
+	color: #999;
+}
+
+#banner-getting-started-input {
+	float: left;
+	float: left;
+	background: #c8c8c8;
+	color: #555;
+	border: none;
+	padding: 0 15px;
+	margin: 0;
+	height: 40px;
+	-webkit-border-radius: 0;
+	border-radius: 0;
+}
+
+#banner-getting-started-btn {
+	float: left;
+	background: #bbb;
+	color: #777;
+	text-decoration: none;
+	width: 40px;
+	height: 40px;
+	text-align: center;
+	line-height: 40px;
+	font-size: 16px;
+}
+
+#banner-getting-started-btn:hover {
+	background: #aaa;
+	color: #555;
+}
+
+#banner-getting-started-btn:before {
+	content: "\f061";
+}
+
+#banner-share {
+	padding: 100px 0 0;
+	display: none;
+}
+
+#banner-share {
+	display: block;
+}
+
+.intro-wrap {
+	padding: 20px 0;
+}
+
+.intro-wrap {
+	padding: 40px 0;
+}
+
+.intro-feature-wrap {
+	display: inline;
+	float: left;
+	width: 97.5490196078431%;
+	margin: 0 1.2254901960784%;
+}
+
+.intro-feature-wrap {
+	display: inline;
+	float: left;
+	width: 47.5490196078431%;
+	margin: 0 1.2254901960784%;
+}
+
+.intro-feature {
+	margin: 20px 0;
+	padding-left: 50px;
+	position: relative;
+}
+
+.intro-feature {
+	margin: 40px 0;
+}
+
+.intro-feature:before {
+	font-size: 30px;
+	position: absolute;
+	top: 0;
+	left: 0;
+	color: #10af88;
+}
+
+#intro-feature-fast:before {
+	content: "\e604";
+}
+
+#intro-feature-markdown:before {
+	content: "\e606";
+}
+
+#intro-feature-deploy:before {
+	content: "\e603";
+}
+
+#intro-feature-plugin:before {
+	content: "\e605";
+}
+
+.intro-feature-title {
+	font-weight: 300;
+	font-family: Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
+	color: #10af88;
+	font-size: 24px;
+	padding-bottom: 20px;
+	line-height: 1.3em;
+}
+
+.intro-feature-desc {
+	color: #444;
+	line-height: 2em;
+}
+
+#intro-cmd-wrap {
+	margin: 20px auto;
+	width: 700px;
+	overflow: auto;
+	background: #eee;
+	padding: 15px 0;
+}
+
+#intro-cmd-wrap {
+	margin: 40px auto;
+}
+
+.intro-cmd-item {
+	line-height: 1.8;
+	font-family: "Source Code Pro", Monaco, Menlo, Consolas, monospace;
+	font-size: 16px;
+	color: #444;
+	white-space: nowrap;
+}
+
+.intro-cmd-item:before {
+	content: "$";
+	padding-right: 10px;
+	color: #10af88;
+}
+
+#intro-btn-wrap {
+	text-align: center;
+	padding: 25px 0;
+}
+
+#intro-btn {
+	display: inline-block;
+	padding: 15px 30px;
+	font-family: Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
+	font-weight: bold;
+	border: 3px solid #10af88;
+	-webkit-border-radius: 3px;
+	border-radius: 3px;
+	color: #10af88;
+	font-size: 16px;
+	text-transform: uppercase;
+	-webkit-transition: 0.2s;
+	-moz-transition: 0.2s;
+	-ms-transition: 0.2s;
+	transition: 0.2s;
+	text-decoration: none;
+	line-height: 1;
+}
+
+#intro-btn:hover {
+	color: #fff;
+	background: #10af88;
+}
+
+#footer {
+	padding: 30px 0;
+	font-family: Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
+	color: #999;
+	line-height: 1.5;
+	border-top: 1px solid #ccc;
+	text-align: center;
+	margin-top: 10px;
+}
+
+#footer {
+	text-align: center;
+}
+
+#footer-copyright {
+	float: center;
+}
+
+#footer-copyright a {
+	color: #777;
+	text-decoration: none;
+}
+
+#footer-copyright a:hover {
+	text-decoration: underline;
+	color: #10af88;
+}
+/* 
+@media ( max-width : 768px) {
+	#footer-links {
+		margin-top: 25px;
+	}
+} */
+#footer-links {
+	float: right;
+	margin-right: -10px;
+}
+
+.footer-link {
+	text-decoration: none;
+	width: 30px;
+	height: 30px;
+	font-size: 30px;
+	line-height: 30px;
+	display: inline-block;
+	text-align: center;
+	color: #999;
+	margin: 0 10px;
+	-webkit-transition: color 0.2s;
+	-moz-transition: color 0.2s;
+	-ms-transition: color 0.2s;
+	transition: color 0.2s;
+}
+
+.footer-link:hover {
+	color: #10af88;
+}
+
+.footer-link span {
+	display: none;
+}
+
+#footer-link-twitter:before {
+	content: "\f099";
+}
+
+#footer-link-github:before {
+	content: "\f113";
+}
+
+pre, code {
+	font-family: "Source Code Pro", Monaco, Menlo, Consolas, monospace;
+	color: #4d4d4c;
+	background: #eee;
+	font-size: 13px;
+}
+
+code {
+	-webkit-border-radius: 2px;
+	border-radius: 2px;
+	padding: 0 5px;
+}
+
+pre {
+	padding: 10px 15px;
+	line-height: 22px;
+	-webkit-border-radius: 4px;
+	border-radius: 4px;
+	border: 1px solid #ddd;
+}
+
+pre code {
+	border: none;
+	display: block;
+	padding: 0;
+}
+
+.highlight {
+	background: #eee;
+	border: 1px solid #ddd;
+	-webkit-border-radius: 4px;
+	border-radius: 4px;
+	padding: 10px 15px;
+	color: #4d4d4c;
+	overflow: auto;
+	margin: 0;
+}
+
+.highlight figcaption {
+	margin: -5px 0 5px;
+	font-size: 0.9em;
+	color: #999;
+}
+
+.highlight figcaption:before, .highlight figcaption:after {
+	content: "";
+	display: table;
+}
+
+.highlight figcaption:after {
+	clear: both;
+}
+
+.highlight figcaption a {
+	float: right;
+}
+
+.highlight pre {
+	padding: 0;
+	border: none;
+	background: none;
+}
+
+.highlight .line {
+	height: 22px;
+}
+
+pre .comment, pre .title {
+	color: #8e908c;
+}
+
+pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant,
+	pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype,
+	pre .css .id, pre .css .class, pre .css .pseudo {
+	color: #c82829;
+}
+
+pre .number, pre .preprocessor, pre .built_in, pre .literal, pre .params,
+	pre .constant {
+	color: #f5871f;
+}
+
+pre .class, pre .ruby .class .title, pre .css .rules .attribute {
+	color: #718c00;
+}
+
+pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol,
+	pre .xml .cdata {
+	color: #718c00;
+}
+
+pre .css .hexcolor {
+	color: #3e999f;
+}
+
+pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title,
+	pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title
+	{
+	color: #4271ae;
+}
+
+pre .keyword, pre .javascript .function {
+	color: #8959a8;
+}
+
+.call_out_icon {
+	position: absolute;
+	left: -40px;
+	top: 20px;
+	font-size: 25px;
+}
+
+em.d_callout_icon_info {
+	color: #5bc0de
+}
+
+em.d_callout_icon_warn {
+	color: #f0ad4e
+}
+
+em.d_callout_icon_danger {
+	color: #d9534f
+}
+
+em.d_callout_icon_success {
+	color: #50af51
+}
+
+.document_a {
+	border-left: none;
+	padding: 0 0 0 2px;
+	margin: 10px 0
+}
+
+.document_em {
+	margin-right: 12px;
+}
+
+.version_s {
+	margin-left: 10px;
+}
+
+.search_area input[type='text'] {
+	float: left;
+	height: 25px;
+	width: 200px;
+	padding: 0 10px;
+	margin-top: 5px;
+}
+
+.search_area input[type='button'] {
+	float: left;
+	height: 27px;
+	background-color: #11a782;
+	border: 0 none;
+	color: #ffffff;
+	cursor: pointer;
+	padding: 5px 10px;
+	margin-top: 5px;
+}
+
+.search_area input[type='button']:HOVER {
+	background-color: #10af88;
+}
+
+.search_results .highlight {
+	color: #dd4b39;
+	border: none;
+	background: none;
+	padding: 0;
+}
+
+.search_results li {
+	margin-bottom: 10px;
+}
+
+.search_results a {
+	font-size: 16px;
+}
+
+.up_btn {
+	position: fixed;
+	bottom: 180px;
+	right: 120px;
+	font-size: 30px;
+	cursor: pointer;
+	display: none;
+	color: #666;
+}
+
+.up_btn:HOVER {
+	color: #10af88;
+}
+
+.dl_icon {
+	line-height: 36px;
+	float: right;
+	padding: 0 15px;
+	font-size: 20px;
+}
+
+.dl_icon a {
+	color: #10af88;
+}
+
+.clear {
+	clear: both;
+}
+
+/* 页面响应式样式 */
+@media ( min-width : 768px) {
+	#sidebar {
+		display: block;
+		float: left;
+		width: 22.5490196078431%;
+	}
+	.outer {
+		width: 1045px;
+		padding: 0 25px;
+	}
+	.page-content {
+		width: 73%;
+		float: right;
+	}
+	#main-nav {
+		display: block;
+	}
+	#dl_icon {
+		display: block;
+	}
+	#navi_icon {
+		display: none;
+	}
+	.up_btn {
+		right: 120px;
+	}
+	.version_s{
+		display: inline;
+	}
+	.bdshare-slide-button{
+		display: block !important;
+	}
+}
+
+@media ( max-width : 768px) {
+	#sidebar {
+		width: 90%;
+	}
+	.outer {
+		width: 95%;
+		padding: 0;
+	}
+	.page-content {
+		width: 95%;
+	}
+	#main-nav {
+		display: none;
+	}
+	#dl_icon {
+		display: none;
+	}
+	#navi_icon {
+		display: block;
+	}
+	.up_btn {
+		right: 40px;
+	}
+	.version_s{
+		display: none;
+	}
+	.navi_show{
+		display: block;
+	}
+	.navi_hidden{
+		display: none;
+	}
+	.icon_active{
+		color: #10af88;
+	}
+	.icon_no_active{
+		color: #aaa;
+	}
+	.navi_icon{
+		line-height: 36px;
+		float: left;
+		padding: 0 5px 0 0;
+		font-size: 20px;
+		cursor: pointer;
+	}
+	/* 百度分享按钮,小屏幕不出现 */ 
+	.bdshare-slide-button{
+		display: none !important;
+	}
+}
+
+pre code{
+	overflow: auto;
+}

BIN
src/main/resources/static/bycdao-ui/images/api.ico


File diff suppressed because it is too large
+ 6 - 0
src/main/resources/static/bycdao-ui/jquery/clipboard/clipboard.min.js


File diff suppressed because it is too large
+ 1 - 0
src/main/resources/static/bycdao-ui/jquery/jquery-1.9.1.min.js


+ 1556 - 0
src/main/resources/static/bycdao-ui/jquery/marked.js

@@ -0,0 +1,1556 @@
+/**
+ * marked - a markdown parser
+ * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)
+ * https://github.com/markedjs/marked
+ */
+
+;(function(root) {
+'use strict';
+
+/**
+ * Block-Level Grammar
+ */
+
+var block = {
+  newline: /^\n+/,
+  code: /^( {4}[^\n]+\n*)+/,
+  fences: noop,
+  hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
+  heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
+  nptable: noop,
+  blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
+  list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
+  html: '^ {0,3}(?:' // optional indentation
+    + '<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
+    + '|comment[^\\n]*(\\n+|$)' // (2)
+    + '|<\\?[\\s\\S]*?\\?>\\n*' // (3)
+    + '|<![A-Z][\\s\\S]*?>\\n*' // (4)
+    + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*' // (5)
+    + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6)
+    + '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag
+    + '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag
+    + ')',
+  def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
+  table: noop,
+  lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
+  paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,
+  text: /^[^\n]+/
+};
+
+block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/;
+block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
+block.def = edit(block.def)
+  .replace('label', block._label)
+  .replace('title', block._title)
+  .getRegex();
+
+block.bullet = /(?:[*+-]|\d+\.)/;
+block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;
+block.item = edit(block.item, 'gm')
+  .replace(/bull/g, block.bullet)
+  .getRegex();
+
+block.list = edit(block.list)
+  .replace(/bull/g, block.bullet)
+  .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))')
+  .replace('def', '\\n+(?=' + block.def.source + ')')
+  .getRegex();
+
+block._tag = 'address|article|aside|base|basefont|blockquote|body|caption'
+  + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'
+  + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'
+  + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'
+  + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'
+  + '|track|ul';
+block._comment = /<!--(?!-?>)[\s\S]*?-->/;
+block.html = edit(block.html, 'i')
+  .replace('comment', block._comment)
+  .replace('tag', block._tag)
+  .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
+  .getRegex();
+
+block.paragraph = edit(block.paragraph)
+  .replace('hr', block.hr)
+  .replace('heading', block.heading)
+  .replace('lheading', block.lheading)
+  .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
+  .getRegex();
+
+block.blockquote = edit(block.blockquote)
+  .replace('paragraph', block.paragraph)
+  .getRegex();
+
+/**
+ * Normal Block Grammar
+ */
+
+block.normal = merge({}, block);
+
+/**
+ * GFM Block Grammar
+ */
+
+block.gfm = merge({}, block.normal, {
+  fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/,
+  paragraph: /^/,
+  heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/
+});
+
+block.gfm.paragraph = edit(block.paragraph)
+  .replace('(?!', '(?!'
+    + block.gfm.fences.source.replace('\\1', '\\2') + '|'
+    + block.list.source.replace('\\1', '\\3') + '|')
+  .getRegex();
+
+/**
+ * GFM + Tables Block Grammar
+ */
+
+block.tables = merge({}, block.gfm, {
+  nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
+  table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/
+});
+
+/**
+ * Pedantic grammar
+ */
+
+block.pedantic = merge({}, block.normal, {
+  html: edit(
+    '^ *(?:comment *(?:\\n|\\s*$)'
+    + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
+    + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))')
+    .replace('comment', block._comment)
+    .replace(/tag/g, '(?!(?:'
+      + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'
+      + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'
+      + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b')
+    .getRegex(),
+  def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/
+});
+
+/**
+ * Block Lexer
+ */
+
+function Lexer(options) {
+  this.tokens = [];
+  this.tokens.links = {};
+  this.options = options || marked.defaults;
+  this.rules = block.normal;
+
+  if (this.options.pedantic) {
+    this.rules = block.pedantic;
+  } else if (this.options.gfm) {
+    if (this.options.tables) {
+      this.rules = block.tables;
+    } else {
+      this.rules = block.gfm;
+    }
+  }
+}
+
+/**
+ * Expose Block Rules
+ */
+
+Lexer.rules = block;
+
+/**
+ * Static Lex Method
+ */
+
+Lexer.lex = function(src, options) {
+  var lexer = new Lexer(options);
+  return lexer.lex(src);
+};
+
+/**
+ * Preprocessing
+ */
+
+Lexer.prototype.lex = function(src) {
+  src = src
+    .replace(/\r\n|\r/g, '\n')
+    .replace(/\t/g, '    ')
+    .replace(/\u00a0/g, ' ')
+    .replace(/\u2424/g, '\n');
+
+  return this.token(src, true);
+};
+
+/**
+ * Lexing
+ */
+
+Lexer.prototype.token = function(src, top) {
+  src = src.replace(/^ +$/gm, '');
+  var next,
+      loose,
+      cap,
+      bull,
+      b,
+      item,
+      space,
+      i,
+      tag,
+      l,
+      isordered,
+      istask,
+      ischecked;
+
+  while (src) {
+    // newline
+    if (cap = this.rules.newline.exec(src)) {
+      src = src.substring(cap[0].length);
+      if (cap[0].length > 1) {
+        this.tokens.push({
+          type: 'space'
+        });
+      }
+    }
+
+    // code
+    if (cap = this.rules.code.exec(src)) {
+      src = src.substring(cap[0].length);
+      cap = cap[0].replace(/^ {4}/gm, '');
+      this.tokens.push({
+        type: 'code',
+        text: !this.options.pedantic
+          ? rtrim(cap, '\n')
+          : cap
+      });
+      continue;
+    }
+
+    // fences (gfm)
+    if (cap = this.rules.fences.exec(src)) {
+      src = src.substring(cap[0].length);
+      this.tokens.push({
+        type: 'code',
+        lang: cap[2],
+        text: cap[3] || ''
+      });
+      continue;
+    }
+
+    // heading
+    if (cap = this.rules.heading.exec(src)) {
+      src = src.substring(cap[0].length);
+      this.tokens.push({
+        type: 'heading',
+        depth: cap[1].length,
+        text: cap[2]
+      });
+      continue;
+    }
+
+    // table no leading pipe (gfm)
+    if (top && (cap = this.rules.nptable.exec(src))) {
+      item = {
+        type: 'table',
+        header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
+        align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
+        cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
+      };
+
+      if (item.header.length === item.align.length) {
+        src = src.substring(cap[0].length);
+
+        for (i = 0; i < item.align.length; i++) {
+          if (/^ *-+: *$/.test(item.align[i])) {
+            item.align[i] = 'right';
+          } else if (/^ *:-+: *$/.test(item.align[i])) {
+            item.align[i] = 'center';
+          } else if (/^ *:-+ *$/.test(item.align[i])) {
+            item.align[i] = 'left';
+          } else {
+            item.align[i] = null;
+          }
+        }
+
+        for (i = 0; i < item.cells.length; i++) {
+          item.cells[i] = splitCells(item.cells[i], item.header.length);
+        }
+
+        this.tokens.push(item);
+
+        continue;
+      }
+    }
+
+    // hr
+    if (cap = this.rules.hr.exec(src)) {
+      src = src.substring(cap[0].length);
+      this.tokens.push({
+        type: 'hr'
+      });
+      continue;
+    }
+
+    // blockquote
+    if (cap = this.rules.blockquote.exec(src)) {
+      src = src.substring(cap[0].length);
+
+      this.tokens.push({
+        type: 'blockquote_start'
+      });
+
+      cap = cap[0].replace(/^ *> ?/gm, '');
+
+      // Pass `top` to keep the current
+      // "toplevel" state. This is exactly
+      // how markdown.pl works.
+      this.token(cap, top);
+
+      this.tokens.push({
+        type: 'blockquote_end'
+      });
+
+      continue;
+    }
+
+    // list
+    if (cap = this.rules.list.exec(src)) {
+      src = src.substring(cap[0].length);
+      bull = cap[2];
+      isordered = bull.length > 1;
+
+      this.tokens.push({
+        type: 'list_start',
+        ordered: isordered,
+        start: isordered ? +bull : ''
+      });
+
+      // Get each top-level item.
+      cap = cap[0].match(this.rules.item);
+
+      next = false;
+      l = cap.length;
+      i = 0;
+
+      for (; i < l; i++) {
+        item = cap[i];
+
+        // Remove the list item's bullet
+        // so it is seen as the next token.
+        space = item.length;
+        item = item.replace(/^ *([*+-]|\d+\.) +/, '');
+
+        // Outdent whatever the
+        // list item contains. Hacky.
+        if (~item.indexOf('\n ')) {
+          space -= item.length;
+          item = !this.options.pedantic
+            ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')
+            : item.replace(/^ {1,4}/gm, '');
+        }
+
+        // Determine whether the next list item belongs here.
+        // Backpedal if it does not belong in this list.
+        if (this.options.smartLists && i !== l - 1) {
+          b = block.bullet.exec(cap[i + 1])[0];
+          if (bull !== b && !(bull.length > 1 && b.length > 1)) {
+            src = cap.slice(i + 1).join('\n') + src;
+            i = l - 1;
+          }
+        }
+
+        // Determine whether item is loose or not.
+        // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
+        // for discount behavior.
+        loose = next || /\n\n(?!\s*$)/.test(item);
+        if (i !== l - 1) {
+          next = item.charAt(item.length - 1) === '\n';
+          if (!loose) loose = next;
+        }
+
+        // Check for task list items
+        istask = /^\[[ xX]\] /.test(item);
+        ischecked = undefined;
+        if (istask) {
+          ischecked = item[1] !== ' ';
+          item = item.replace(/^\[[ xX]\] +/, '');
+        }
+
+        this.tokens.push({
+          type: loose
+            ? 'loose_item_start'
+            : 'list_item_start',
+          task: istask,
+          checked: ischecked
+        });
+
+        // Recurse.
+        this.token(item, false);
+
+        this.tokens.push({
+          type: 'list_item_end'
+        });
+      }
+
+      this.tokens.push({
+        type: 'list_end'
+      });
+
+      continue;
+    }
+
+    // html
+    if (cap = this.rules.html.exec(src)) {
+      src = src.substring(cap[0].length);
+      this.tokens.push({
+        type: this.options.sanitize
+          ? 'paragraph'
+          : 'html',
+        pre: !this.options.sanitizer
+          && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
+        text: cap[0]
+      });
+      continue;
+    }
+
+    // def
+    if (top && (cap = this.rules.def.exec(src))) {
+      src = src.substring(cap[0].length);
+      if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
+      tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
+      if (!this.tokens.links[tag]) {
+        this.tokens.links[tag] = {
+          href: cap[2],
+          title: cap[3]
+        };
+      }
+      continue;
+    }
+
+    // table (gfm)
+    if (top && (cap = this.rules.table.exec(src))) {
+      item = {
+        type: 'table',
+        header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
+        align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
+        cells: cap[3] ? cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') : []
+      };
+
+      if (item.header.length === item.align.length) {
+        src = src.substring(cap[0].length);
+
+        for (i = 0; i < item.align.length; i++) {
+          if (/^ *-+: *$/.test(item.align[i])) {
+            item.align[i] = 'right';
+          } else if (/^ *:-+: *$/.test(item.align[i])) {
+            item.align[i] = 'center';
+          } else if (/^ *:-+ *$/.test(item.align[i])) {
+            item.align[i] = 'left';
+          } else {
+            item.align[i] = null;
+          }
+        }
+
+        for (i = 0; i < item.cells.length; i++) {
+          item.cells[i] = splitCells(
+            item.cells[i].replace(/^ *\| *| *\| *$/g, ''),
+            item.header.length);
+        }
+
+        this.tokens.push(item);
+
+        continue;
+      }
+    }
+
+    // lheading
+    if (cap = this.rules.lheading.exec(src)) {
+      src = src.substring(cap[0].length);
+      this.tokens.push({
+        type: 'heading',
+        depth: cap[2] === '=' ? 1 : 2,
+        text: cap[1]
+      });
+      continue;
+    }
+
+    // top-level paragraph
+    if (top && (cap = this.rules.paragraph.exec(src))) {
+      src = src.substring(cap[0].length);
+      this.tokens.push({
+        type: 'paragraph',
+        text: cap[1].charAt(cap[1].length - 1) === '\n'
+          ? cap[1].slice(0, -1)
+          : cap[1]
+      });
+      continue;
+    }
+
+    // text
+    if (cap = this.rules.text.exec(src)) {
+      // Top-level should never reach here.
+      src = src.substring(cap[0].length);
+      this.tokens.push({
+        type: 'text',
+        text: cap[0]
+      });
+      continue;
+    }
+
+    if (src) {
+      throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
+    }
+  }
+
+  return this.tokens;
+};
+
+/**
+ * Inline-Level Grammar
+ */
+
+var inline = {
+  escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
+  autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
+  url: noop,
+  tag: '^comment'
+    + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
+    + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
+    + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
+    + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html>
+    + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section
+  link: /^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,
+  reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
+  nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
+  strong: /^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)|^__([^\s])__(?!_)|^\*\*([^\s])\*\*(?!\*)/,
+  em: /^_([^\s][\s\S]*?[^\s_])_(?!_)|^_([^\s_][\s\S]*?[^\s])_(?!_)|^\*([^\s][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*][\s\S]*?[^\s])\*(?!\*)|^_([^\s_])_(?!_)|^\*([^\s*])\*(?!\*)/,
+  code: /^(`+)\s*([\s\S]*?[^`]?)\s*\1(?!`)/,
+  br: /^ {2,}\n(?!\s*$)/,
+  del: noop,
+  text: /^[\s\S]+?(?=[\\<!\[`*]|\b_| {2,}\n|$)/
+};
+
+inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;
+
+inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
+inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;
+inline.autolink = edit(inline.autolink)
+  .replace('scheme', inline._scheme)
+  .replace('email', inline._email)
+  .getRegex();
+
+inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
+
+inline.tag = edit(inline.tag)
+  .replace('comment', block._comment)
+  .replace('attribute', inline._attribute)
+  .getRegex();
+
+inline._label = /(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/;
+inline._href = /\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f()\\]*\)|[^\s\x00-\x1f()\\])*?)/;
+inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
+
+inline.link = edit(inline.link)
+  .replace('label', inline._label)
+  .replace('href', inline._href)
+  .replace('title', inline._title)
+  .getRegex();
+
+inline.reflink = edit(inline.reflink)
+  .replace('label', inline._label)
+  .getRegex();
+
+/**
+ * Normal Inline Grammar
+ */
+
+inline.normal = merge({}, inline);
+
+/**
+ * Pedantic Inline Grammar
+ */
+
+inline.pedantic = merge({}, inline.normal, {
+  strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
+  em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
+  link: edit(/^!?\[(label)\]\((.*?)\)/)
+    .replace('label', inline._label)
+    .getRegex(),
+  reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/)
+    .replace('label', inline._label)
+    .getRegex()
+});
+
+/**
+ * GFM Inline Grammar
+ */
+
+inline.gfm = merge({}, inline.normal, {
+  escape: edit(inline.escape).replace('])', '~|])').getRegex(),
+  url: edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/)
+    .replace('email', inline._email)
+    .getRegex(),
+  _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
+  del: /^~~(?=\S)([\s\S]*?\S)~~/,
+  text: edit(inline.text)
+    .replace(']|', '~]|')
+    .replace('|', '|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&\'*+/=?^_`{\\|}~-]+@|')
+    .getRegex()
+});
+
+/**
+ * GFM + Line Breaks Inline Grammar
+ */
+
+inline.breaks = merge({}, inline.gfm, {
+  br: edit(inline.br).replace('{2,}', '*').getRegex(),
+  text: edit(inline.gfm.text).replace('{2,}', '*').getRegex()
+});
+
+/**
+ * Inline Lexer & Compiler
+ */
+
+function InlineLexer(links, options) {
+  this.options = options || marked.defaults;
+  this.links = links;
+  this.rules = inline.normal;
+  this.renderer = this.options.renderer || new Renderer();
+  this.renderer.options = this.options;
+
+  if (!this.links) {
+    throw new Error('Tokens array requires a `links` property.');
+  }
+
+  if (this.options.pedantic) {
+    this.rules = inline.pedantic;
+  } else if (this.options.gfm) {
+    if (this.options.breaks) {
+      this.rules = inline.breaks;
+    } else {
+      this.rules = inline.gfm;
+    }
+  }
+}
+
+/**
+ * Expose Inline Rules
+ */
+
+InlineLexer.rules = inline;
+
+/**
+ * Static Lexing/Compiling Method
+ */
+
+InlineLexer.output = function(src, links, options) {
+  var inline = new InlineLexer(links, options);
+  return inline.output(src);
+};
+
+/**
+ * Lexing/Compiling
+ */
+
+InlineLexer.prototype.output = function(src) {
+  var out = '',
+      link,
+      text,
+      href,
+      title,
+      cap;
+
+  while (src) {
+    // escape
+    if (cap = this.rules.escape.exec(src)) {
+      src = src.substring(cap[0].length);
+      out += cap[1];
+      continue;
+    }
+
+    // autolink
+    if (cap = this.rules.autolink.exec(src)) {
+      src = src.substring(cap[0].length);
+      if (cap[2] === '@') {
+        text = escape(this.mangle(cap[1]));
+        href = 'mailto:' + text;
+      } else {
+        text = escape(cap[1]);
+        href = text;
+      }
+      out += this.renderer.link(href, null, text);
+      continue;
+    }
+
+    // url (gfm)
+    if (!this.inLink && (cap = this.rules.url.exec(src))) {
+      cap[0] = this.rules._backpedal.exec(cap[0])[0];
+      src = src.substring(cap[0].length);
+      if (cap[2] === '@') {
+        text = escape(cap[0]);
+        href = 'mailto:' + text;
+      } else {
+        text = escape(cap[0]);
+        if (cap[1] === 'www.') {
+          href = 'http://' + text;
+        } else {
+          href = text;
+        }
+      }
+      out += this.renderer.link(href, null, text);
+      continue;
+    }
+
+    // tag
+    if (cap = this.rules.tag.exec(src)) {
+      if (!this.inLink && /^<a /i.test(cap[0])) {
+        this.inLink = true;
+      } else if (this.inLink && /^<\/a>/i.test(cap[0])) {
+        this.inLink = false;
+      }
+      src = src.substring(cap[0].length);
+      out += this.options.sanitize
+        ? this.options.sanitizer
+          ? this.options.sanitizer(cap[0])
+          : escape(cap[0])
+        : cap[0]
+      continue;
+    }
+
+    // link
+    if (cap = this.rules.link.exec(src)) {
+      src = src.substring(cap[0].length);
+      this.inLink = true;
+      href = cap[2];
+      if (this.options.pedantic) {
+        link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
+
+        if (link) {
+          href = link[1];
+          title = link[3];
+        } else {
+          title = '';
+        }
+      } else {
+        title = cap[3] ? cap[3].slice(1, -1) : '';
+      }
+      href = href.trim().replace(/^<([\s\S]*)>$/, '$1');
+      out += this.outputLink(cap, {
+        href: InlineLexer.escapes(href),
+        title: InlineLexer.escapes(title)
+      });
+      this.inLink = false;
+      continue;
+    }
+
+    // reflink, nolink
+    if ((cap = this.rules.reflink.exec(src))
+        || (cap = this.rules.nolink.exec(src))) {
+      src = src.substring(cap[0].length);
+      link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
+      link = this.links[link.toLowerCase()];
+      if (!link || !link.href) {
+        out += cap[0].charAt(0);
+        src = cap[0].substring(1) + src;
+        continue;
+      }
+      this.inLink = true;
+      out += this.outputLink(cap, link);
+      this.inLink = false;
+      continue;
+    }
+
+    // strong
+    if (cap = this.rules.strong.exec(src)) {
+      src = src.substring(cap[0].length);
+      out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1]));
+      continue;
+    }
+
+    // em
+    if (cap = this.rules.em.exec(src)) {
+      src = src.substring(cap[0].length);
+      out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1]));
+      continue;
+    }
+
+    // code
+    if (cap = this.rules.code.exec(src)) {
+      src = src.substring(cap[0].length);
+      out += this.renderer.codespan(escape(cap[2].trim(), true));
+      continue;
+    }
+
+    // br
+    if (cap = this.rules.br.exec(src)) {
+      src = src.substring(cap[0].length);
+      out += this.renderer.br();
+      continue;
+    }
+
+    // del (gfm)
+    if (cap = this.rules.del.exec(src)) {
+      src = src.substring(cap[0].length);
+      out += this.renderer.del(this.output(cap[1]));
+      continue;
+    }
+
+    // text
+    if (cap = this.rules.text.exec(src)) {
+      src = src.substring(cap[0].length);
+      out += this.renderer.text(escape(this.smartypants(cap[0])));
+      continue;
+    }
+
+    if (src) {
+      throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
+    }
+  }
+
+  return out;
+};
+
+InlineLexer.escapes = function(text) {
+  return text ? text.replace(InlineLexer.rules._escapes, '$1') : text;
+}
+
+/**
+ * Compile Link
+ */
+
+InlineLexer.prototype.outputLink = function(cap, link) {
+  var href = link.href,
+      title = link.title ? escape(link.title) : null;
+
+  return cap[0].charAt(0) !== '!'
+    ? this.renderer.link(href, title, this.output(cap[1]))
+    : this.renderer.image(href, title, escape(cap[1]));
+};
+
+/**
+ * Smartypants Transformations
+ */
+
+InlineLexer.prototype.smartypants = function(text) {
+  if (!this.options.smartypants) return text;
+  return text
+    // em-dashes
+    .replace(/---/g, '\u2014')
+    // en-dashes
+    .replace(/--/g, '\u2013')
+    // opening singles
+    .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
+    // closing singles & apostrophes
+    .replace(/'/g, '\u2019')
+    // opening doubles
+    .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
+    // closing doubles
+    .replace(/"/g, '\u201d')
+    // ellipses
+    .replace(/\.{3}/g, '\u2026');
+};
+
+/**
+ * Mangle Links
+ */
+
+InlineLexer.prototype.mangle = function(text) {
+  if (!this.options.mangle) return text;
+  var out = '',
+      l = text.length,
+      i = 0,
+      ch;
+
+  for (; i < l; i++) {
+    ch = text.charCodeAt(i);
+    if (Math.random() > 0.5) {
+      ch = 'x' + ch.toString(16);
+    }
+    out += '&#' + ch + ';';
+  }
+
+  return out;
+};
+
+/**
+ * Renderer
+ */
+
+function Renderer(options) {
+  this.options = options || marked.defaults;
+}
+
+Renderer.prototype.code = function(code, lang, escaped) {
+  if (this.options.highlight) {
+    var out = this.options.highlight(code, lang);
+    if (out != null && out !== code) {
+      escaped = true;
+      code = out;
+    }
+  }
+
+  if (!lang) {
+    return '<pre><code>'
+      + (escaped ? code : escape(code, true))
+      + '</code></pre>';
+  }
+
+  return '<pre><code class="'
+    + this.options.langPrefix
+    + escape(lang, true)
+    + '">'
+    + (escaped ? code : escape(code, true))
+    + '</code></pre>\n';
+};
+
+Renderer.prototype.blockquote = function(quote) {
+  return '<blockquote>\n' + quote + '</blockquote>\n';
+};
+
+Renderer.prototype.html = function(html) {
+  return html;
+};
+
+Renderer.prototype.heading = function(text, level, raw) {
+  if (this.options.headerIds) {
+    return '<h'
+      + level
+      + ' id="'
+      + this.options.headerPrefix
+      + raw.toLowerCase().replace(/[^\w]+/g, '-')
+      + '">'
+      + text
+      + '</h'
+      + level
+      + '>\n';
+  }
+  // ignore IDs
+  return '<h' + level + '>' + text + '</h' + level + '>\n';
+};
+
+Renderer.prototype.hr = function() {
+  return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
+};
+
+Renderer.prototype.list = function(body, ordered, start) {
+  var type = ordered ? 'ol' : 'ul',
+      startatt = (ordered && start !== 1) ? (' start="' + start + '"') : '';
+  return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
+};
+
+Renderer.prototype.listitem = function(text) {
+  return '<li>' + text + '</li>\n';
+};
+
+Renderer.prototype.checkbox = function(checked) {
+  return '<input '
+    + (checked ? 'checked="" ' : '')
+    + 'disabled="" type="checkbox"'
+    + (this.options.xhtml ? ' /' : '')
+    + '> ';
+}
+
+Renderer.prototype.paragraph = function(text) {
+  return '<p>' + text + '</p>\n';
+};
+
+Renderer.prototype.table = function(header, body) {
+  if (body) body = '<tbody>' + body + '</tbody>';
+
+  return '<table>\n'
+    + '<thead>\n'
+    + header
+    + '</thead>\n'
+    + body
+    + '</table>\n';
+};
+
+Renderer.prototype.tablerow = function(content) {
+  return '<tr>\n' + content + '</tr>\n';
+};
+
+Renderer.prototype.tablecell = function(content, flags) {
+  var type = flags.header ? 'th' : 'td';
+  var tag = flags.align
+    ? '<' + type + ' align="' + flags.align + '">'
+    : '<' + type + '>';
+  return tag + content + '</' + type + '>\n';
+};
+
+// span level renderer
+Renderer.prototype.strong = function(text) {
+  return '<strong>' + text + '</strong>';
+};
+
+Renderer.prototype.em = function(text) {
+  return '<em>' + text + '</em>';
+};
+
+Renderer.prototype.codespan = function(text) {
+  return '<code>' + text + '</code>';
+};
+
+Renderer.prototype.br = function() {
+  return this.options.xhtml ? '<br/>' : '<br>';
+};
+
+Renderer.prototype.del = function(text) {
+  return '<del>' + text + '</del>';
+};
+
+Renderer.prototype.link = function(href, title, text) {
+  if (this.options.sanitize) {
+    try {
+      var prot = decodeURIComponent(unescape(href))
+        .replace(/[^\w:]/g, '')
+        .toLowerCase();
+    } catch (e) {
+      return text;
+    }
+    if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
+      return text;
+    }
+  }
+  if (this.options.baseUrl && !originIndependentUrl.test(href)) {
+    href = resolveUrl(this.options.baseUrl, href);
+  }
+  try {
+    href = encodeURI(href).replace(/%25/g, '%');
+  } catch (e) {
+    return text;
+  }
+  var out = '<a href="' + escape(href) + '"';
+  if (title) {
+    out += ' title="' + title + '"';
+  }
+  out += '>' + text + '</a>';
+  return out;
+};
+
+Renderer.prototype.image = function(href, title, text) {
+  if (this.options.baseUrl && !originIndependentUrl.test(href)) {
+    href = resolveUrl(this.options.baseUrl, href);
+  }
+  var out = '<img src="' + href + '" alt="' + text + '"';
+  if (title) {
+    out += ' title="' + title + '"';
+  }
+  out += this.options.xhtml ? '/>' : '>';
+  return out;
+};
+
+Renderer.prototype.text = function(text) {
+  return text;
+};
+
+/**
+ * TextRenderer
+ * returns only the textual part of the token
+ */
+
+function TextRenderer() {}
+
+// no need for block level renderers
+
+TextRenderer.prototype.strong =
+TextRenderer.prototype.em =
+TextRenderer.prototype.codespan =
+TextRenderer.prototype.del =
+TextRenderer.prototype.text = function (text) {
+  return text;
+}
+
+TextRenderer.prototype.link =
+TextRenderer.prototype.image = function(href, title, text) {
+  return '' + text;
+}
+
+TextRenderer.prototype.br = function() {
+  return '';
+}
+
+/**
+ * Parsing & Compiling
+ */
+
+function Parser(options) {
+  this.tokens = [];
+  this.token = null;
+  this.options = options || marked.defaults;
+  this.options.renderer = this.options.renderer || new Renderer();
+  this.renderer = this.options.renderer;
+  this.renderer.options = this.options;
+}
+
+/**
+ * Static Parse Method
+ */
+
+Parser.parse = function(src, options) {
+  var parser = new Parser(options);
+  return parser.parse(src);
+};
+
+/**
+ * Parse Loop
+ */
+
+Parser.prototype.parse = function(src) {
+  this.inline = new InlineLexer(src.links, this.options);
+  // use an InlineLexer with a TextRenderer to extract pure text
+  this.inlineText = new InlineLexer(
+    src.links,
+    merge({}, this.options, {renderer: new TextRenderer()})
+  );
+  this.tokens = src.reverse();
+
+  var out = '';
+  while (this.next()) {
+    out += this.tok();
+  }
+
+  return out;
+};
+
+/**
+ * Next Token
+ */
+
+Parser.prototype.next = function() {
+  return this.token = this.tokens.pop();
+};
+
+/**
+ * Preview Next Token
+ */
+
+Parser.prototype.peek = function() {
+  return this.tokens[this.tokens.length - 1] || 0;
+};
+
+/**
+ * Parse Text Tokens
+ */
+
+Parser.prototype.parseText = function() {
+  var body = this.token.text;
+
+  while (this.peek().type === 'text') {
+    body += '\n' + this.next().text;
+  }
+
+  return this.inline.output(body);
+};
+
+/**
+ * Parse Current Token
+ */
+
+Parser.prototype.tok = function() {
+  switch (this.token.type) {
+    case 'space': {
+      return '';
+    }
+    case 'hr': {
+      return this.renderer.hr();
+    }
+    case 'heading': {
+      return this.renderer.heading(
+        this.inline.output(this.token.text),
+        this.token.depth,
+        unescape(this.inlineText.output(this.token.text)));
+    }
+    case 'code': {
+      return this.renderer.code(this.token.text,
+        this.token.lang,
+        this.token.escaped);
+    }
+    case 'table': {
+      var header = '',
+          body = '',
+          i,
+          row,
+          cell,
+          j;
+
+      // header
+      cell = '';
+      for (i = 0; i < this.token.header.length; i++) {
+        cell += this.renderer.tablecell(
+          this.inline.output(this.token.header[i]),
+          { header: true, align: this.token.align[i] }
+        );
+      }
+      header += this.renderer.tablerow(cell);
+
+      for (i = 0; i < this.token.cells.length; i++) {
+        row = this.token.cells[i];
+
+        cell = '';
+        for (j = 0; j < row.length; j++) {
+          cell += this.renderer.tablecell(
+            this.inline.output(row[j]),
+            { header: false, align: this.token.align[j] }
+          );
+        }
+
+        body += this.renderer.tablerow(cell);
+      }
+      return this.renderer.table(header, body);
+    }
+    case 'blockquote_start': {
+      body = '';
+
+      while (this.next().type !== 'blockquote_end') {
+        body += this.tok();
+      }
+
+      return this.renderer.blockquote(body);
+    }
+    case 'list_start': {
+      body = '';
+      var ordered = this.token.ordered,
+          start = this.token.start;
+
+      while (this.next().type !== 'list_end') {
+        body += this.tok();
+      }
+
+      return this.renderer.list(body, ordered, start);
+    }
+    case 'list_item_start': {
+      body = '';
+
+      if (this.token.task) {
+        body += this.renderer.checkbox(this.token.checked);
+      }
+
+      while (this.next().type !== 'list_item_end') {
+        body += this.token.type === 'text'
+          ? this.parseText()
+          : this.tok();
+      }
+
+      return this.renderer.listitem(body);
+    }
+    case 'loose_item_start': {
+      body = '';
+
+      while (this.next().type !== 'list_item_end') {
+        body += this.tok();
+      }
+
+      return this.renderer.listitem(body);
+    }
+    case 'html': {
+      // TODO parse inline content if parameter markdown=1
+      return this.renderer.html(this.token.text);
+    }
+    case 'paragraph': {
+      return this.renderer.paragraph(this.inline.output(this.token.text));
+    }
+    case 'text': {
+      return this.renderer.paragraph(this.parseText());
+    }
+  }
+};
+
+/**
+ * Helpers
+ */
+
+function escape(html, encode) {
+  return html
+    .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&amp;')
+    .replace(/</g, '&lt;')
+    .replace(/>/g, '&gt;')
+    .replace(/"/g, '&quot;')
+    .replace(/'/g, '&#39;');
+}
+
+function unescape(html) {
+  // explicitly match decimal, hex, and named HTML entities
+  return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, function(_, n) {
+    n = n.toLowerCase();
+    if (n === 'colon') return ':';
+    if (n.charAt(0) === '#') {
+      return n.charAt(1) === 'x'
+        ? String.fromCharCode(parseInt(n.substring(2), 16))
+        : String.fromCharCode(+n.substring(1));
+    }
+    return '';
+  });
+}
+
+function edit(regex, opt) {
+  regex = regex.source || regex;
+  opt = opt || '';
+  return {
+    replace: function(name, val) {
+      val = val.source || val;
+      val = val.replace(/(^|[^\[])\^/g, '$1');
+      regex = regex.replace(name, val);
+      return this;
+    },
+    getRegex: function() {
+      return new RegExp(regex, opt);
+    }
+  };
+}
+
+function resolveUrl(base, href) {
+  if (!baseUrls[' ' + base]) {
+    // we can ignore everything in base after the last slash of its path component,
+    // but we might need to add _that_
+    // https://tools.ietf.org/html/rfc3986#section-3
+    if (/^[^:]+:\/*[^/]*$/.test(base)) {
+      baseUrls[' ' + base] = base + '/';
+    } else {
+      baseUrls[' ' + base] = rtrim(base, '/', true);
+    }
+  }
+  base = baseUrls[' ' + base];
+
+  if (href.slice(0, 2) === '//') {
+    return base.replace(/:[\s\S]*/, ':') + href;
+  } else if (href.charAt(0) === '/') {
+    return base.replace(/(:\/*[^/]*)[\s\S]*/, '$1') + href;
+  } else {
+    return base + href;
+  }
+}
+var baseUrls = {};
+var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
+
+function noop() {}
+noop.exec = noop;
+
+function merge(obj) {
+  var i = 1,
+      target,
+      key;
+
+  for (; i < arguments.length; i++) {
+    target = arguments[i];
+    for (key in target) {
+      if (Object.prototype.hasOwnProperty.call(target, key)) {
+        obj[key] = target[key];
+      }
+    }
+  }
+
+  return obj;
+}
+
+function splitCells(tableRow, count) {
+  // ensure that every cell-delimiting pipe has a space
+  // before it to distinguish it from an escaped pipe
+  var row = tableRow.replace(/\|/g, function (match, offset, str) {
+        var escaped = false,
+            curr = offset;
+        while (--curr >= 0 && str[curr] === '\\') escaped = !escaped;
+        if (escaped) {
+          // odd number of slashes means | is escaped
+          // so we leave it alone
+          return '|';
+        } else {
+          // add space before unescaped |
+          return ' |';
+        }
+      }),
+      cells = row.split(/ \|/),
+      i = 0;
+
+  if (cells.length > count) {
+    cells.splice(count);
+  } else {
+    while (cells.length < count) cells.push('');
+  }
+
+  for (; i < cells.length; i++) {
+    // leading or trailing whitespace is ignored per the gfm spec
+    cells[i] = cells[i].trim().replace(/\\\|/g, '|');
+  }
+  return cells;
+}
+
+// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
+// /c*$/ is vulnerable to REDOS.
+// invert: Remove suffix of non-c chars instead. Default falsey.
+function rtrim(str, c, invert) {
+  if (str.length === 0) {
+    return '';
+  }
+
+  // Length of suffix matching the invert condition.
+  var suffLen = 0;
+
+  // Step left until we fail to match the invert condition.
+  while (suffLen < str.length) {
+    var currChar = str.charAt(str.length - suffLen - 1);
+    if (currChar === c && !invert) {
+      suffLen++;
+    } else if (currChar !== c && invert) {
+      suffLen++;
+    } else {
+      break;
+    }
+  }
+
+  return str.substr(0, str.length - suffLen);
+}
+
+/**
+ * Marked
+ */
+
+function marked(src, opt, callback) {
+  // throw error in case of non string input
+  if (typeof src === 'undefined' || src === null) {
+    throw new Error('marked(): input parameter is undefined or null');
+  }
+  if (typeof src !== 'string') {
+    throw new Error('marked(): input parameter is of type '
+      + Object.prototype.toString.call(src) + ', string expected');
+  }
+
+  if (callback || typeof opt === 'function') {
+    if (!callback) {
+      callback = opt;
+      opt = null;
+    }
+
+    opt = merge({}, marked.defaults, opt || {});
+
+    var highlight = opt.highlight,
+        tokens,
+        pending,
+        i = 0;
+
+    try {
+      tokens = Lexer.lex(src, opt)
+    } catch (e) {
+      return callback(e);
+    }
+
+    pending = tokens.length;
+
+    var done = function(err) {
+      if (err) {
+        opt.highlight = highlight;
+        return callback(err);
+      }
+
+      var out;
+
+      try {
+        out = Parser.parse(tokens, opt);
+      } catch (e) {
+        err = e;
+      }
+
+      opt.highlight = highlight;
+
+      return err
+        ? callback(err)
+        : callback(null, out);
+    };
+
+    if (!highlight || highlight.length < 3) {
+      return done();
+    }
+
+    delete opt.highlight;
+
+    if (!pending) return done();
+
+    for (; i < tokens.length; i++) {
+      (function(token) {
+        if (token.type !== 'code') {
+          return --pending || done();
+        }
+        return highlight(token.text, token.lang, function(err, code) {
+          if (err) return done(err);
+          if (code == null || code === token.text) {
+            return --pending || done();
+          }
+          token.text = code;
+          token.escaped = true;
+          --pending || done();
+        });
+      })(tokens[i]);
+    }
+
+    return;
+  }
+  try {
+    if (opt) opt = merge({}, marked.defaults, opt);
+    return Parser.parse(Lexer.lex(src, opt), opt);
+  } catch (e) {
+    e.message += '\nPlease report this to https://github.com/markedjs/marked.';
+    if ((opt || marked.defaults).silent) {
+      return '<p>An error occurred:</p><pre>'
+        + escape(e.message + '', true)
+        + '</pre>';
+    }
+    throw e;
+  }
+}
+
+/**
+ * Options
+ */
+
+marked.options =
+marked.setOptions = function(opt) {
+  merge(marked.defaults, opt);
+  return marked;
+};
+
+marked.getDefaults = function () {
+  return {
+    baseUrl: null,
+    breaks: false,
+    gfm: true,
+    headerIds: true,
+    headerPrefix: '',
+    highlight: null,
+    langPrefix: 'language-',
+    mangle: true,
+    pedantic: false,
+    renderer: new Renderer(),
+    sanitize: false,
+    sanitizer: null,
+    silent: false,
+    smartLists: false,
+    smartypants: false,
+    tables: true,
+    xhtml: false
+  };
+}
+
+marked.defaults = marked.getDefaults();
+
+/**
+ * Expose
+ */
+
+marked.Parser = Parser;
+marked.parser = Parser.parse;
+
+marked.Renderer = Renderer;
+marked.TextRenderer = TextRenderer;
+
+marked.Lexer = Lexer;
+marked.lexer = Lexer.lex;
+
+marked.InlineLexer = InlineLexer;
+marked.inlineLexer = InlineLexer.output;
+
+marked.parse = marked;
+
+if (typeof module !== 'undefined' && typeof exports === 'object') {
+  module.exports = marked;
+} else if (typeof define === 'function' && define.amd) {
+  define(function() { return marked; });
+} else {
+  root.marked = marked;
+}
+})(this || (typeof window !== 'undefined' ? window : global));

File diff suppressed because it is too large
+ 1 - 0
src/main/resources/static/bycdao-ui/jquery/template-web.js


BIN
src/main/resources/static/bycdao-ui/jquery/treegrid/img/collapse.png


BIN
src/main/resources/static/bycdao-ui/jquery/treegrid/img/expand.png


BIN
src/main/resources/static/bycdao-ui/jquery/treegrid/img/file.png


BIN
src/main/resources/static/bycdao-ui/jquery/treegrid/img/folder.png


+ 4 - 0
src/main/resources/static/bycdao-ui/jquery/treegrid/jquery.treegrid.bootstrap3.js

@@ -0,0 +1,4 @@
+$.extend($.fn.treegrid.defaults, {
+    expanderExpandedClass: 'glyphicon glyphicon-chevron-down',
+    expanderCollapsedClass: 'glyphicon glyphicon-chevron-right'
+});

+ 6 - 0
src/main/resources/static/bycdao-ui/jquery/treegrid/jquery.treegrid.css

@@ -0,0 +1,6 @@
+.treegrid-indent {width:16px; height: 16px; display: inline-block; position: relative;}
+
+.treegrid-expander {width:16px; height: 16px; display: inline-block; position: relative; cursor: pointer;}
+
+.treegrid-expander-expanded{background-image: url(img/collapse.png); }
+.treegrid-expander-collapsed{background-image: url(img/expand.png);}

File diff suppressed because it is too large
+ 1 - 0
src/main/resources/static/bycdao-ui/jquery/treegrid/jquery.treegrid.min.js


+ 3 - 0
src/main/resources/static/bycdao-ui/jsonview/jquery.jsonview.min.css

@@ -0,0 +1,3 @@
+@charset "UTF-8";.jsonview{font-family:monospace;font-size:1.1em;white-space:pre-wrap}.jsonview .prop{font-weight:700;text-decoration:none;color: #4a0;
+                                                                                          font-weight: bold;font-size: 16px;
+                                                                                          display: inline;}.jsonview .null,.jsonview .undefined{color:red}.jsonview .bool,.jsonview .num{color: #f63;font-size:16px;font-weight: bold;}.jsonview .string{color: #f63;font-size:16px;white-space:pre-wrap;}.jsonview .string.multiline{display:inline-block;vertical-align:text-top}.jsonview .collapser{position:absolute;left:-1em;cursor:pointer}.jsonview .collapsible{transition:height 1.2s;transition:width 1.2s}.jsonview .collapsible.collapsed{height:.8em;width:1em;display:inline-block;overflow:hidden;margin:0}.jsonview .collapsible.collapsed:before{content:"…";width:1em;margin-left:.2em}.jsonview .collapser.collapsed{transform:rotate(0)}.jsonview .q{display:inline-block;width:0;color:transparent}.jsonview li{position:relative}.jsonview ul{list-style:none;margin:0 0 0 2em;padding:0}.jsonview h1{font-size:1.2em}

File diff suppressed because it is too large
+ 0 - 0
src/main/resources/static/bycdao-ui/jsonview/jquery.jsonview.min.js


File diff suppressed because it is too large
+ 1 - 0
src/main/resources/static/bycdao-ui/layer3.0.3/layer.js


File diff suppressed because it is too large
+ 1 - 0
src/main/resources/static/bycdao-ui/layer3.0.3/mobile/layer.js


File diff suppressed because it is too large
+ 0 - 0
src/main/resources/static/bycdao-ui/layer3.0.3/mobile/need/layer.css


BIN
src/main/resources/static/bycdao-ui/layer3.0.3/skin/default/icon-ext.png


BIN
src/main/resources/static/bycdao-ui/layer3.0.3/skin/default/icon.png


File diff suppressed because it is too large
+ 0 - 0
src/main/resources/static/bycdao-ui/layer3.0.3/skin/default/layer.css


BIN
src/main/resources/static/bycdao-ui/layer3.0.3/skin/default/loading-0.gif


BIN
src/main/resources/static/bycdao-ui/layer3.0.3/skin/default/loading-1.gif


BIN
src/main/resources/static/bycdao-ui/layer3.0.3/skin/default/loading-2.gif


+ 566 - 0
src/main/resources/static/doc.html

@@ -0,0 +1,566 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
+    <title>API接口文档</title>
+    <link rel="shortcut icon" href="/bycdao-ui/images/api.ico"/>
+    <script type="text/javascript" src="/bycdao-ui/jquery/jquery-1.9.1.min.js"></script>
+    <link rel="stylesheet" href="/bycdao-ui/bootstrap/css/bootstrap.min.css"/>
+    <script type="text/javascript" src="/bycdao-ui/jquery/clipboard/clipboard.min.js"></script>
+    <script type="text/javascript" src="/bycdao-ui/layer3.0.3/layer.js"></script>
+    <link rel="stylesheet" href="/bycdao-ui/jsonview/jquery.jsonview.min.css"/>
+    <script type="text/javascript" src="/bycdao-ui/jsonview/jquery.jsonview.min.js"></script>
+    <link rel="stylesheet" href="/bycdao-ui/layer3.0.3/skin/default/layer.css"/>
+    <link rel="stylesheet" href="/bycdao-ui/highlight/styles/docco.css"/>
+    <link rel="stylesheet" href="/bycdao-ui/highlight/styles/style.css"/>
+    <link rel="stylesheet" href="/bycdao-ui/highlight/styles/default.css"/>
+    <script src="/bycdao-ui/highlight/highlight.pack.js"></script>
+    <script src="/bycdao-ui/jquery/marked.js"></script>
+    <link rel="stylesheet" href="/bycdao-ui/cdao/swaggerbootstrapui.css"/>
+    <script src="/bycdao-ui/jquery/template-web.js"></script>
+</head>
+<body style="overflow: hidden;">
+<div class="bycdao-left" style="height: 100%;overflow-y: auto;overflow-x: hidden;">
+    <ul class="nav nav-list" id="menu">
+        <li>
+            <a href="javascript:void(0)">
+                <i class="icon-text-width"></i>
+                <span class="menu-text"> 简介 </span>
+            </a>
+        </li>
+        <li class="active">
+            <a href="#" class="dropdown-toggle">
+                <i class="icon-file-alt"></i>
+                <span class="menu-text">
+									其他页面
+									<span class="badge badge-primary ">3</span>
+								</span>
+                <b class="arrow icon-angle-down"></b>
+            </a>
+            <ul class="submenu">
+                <li>
+                    <a href="javascript:void(0)">
+                        <i class="icon-double-angle-right"></i>
+                        帮助
+                    </a>
+                </li>
+
+                <li>
+                    <a href="javascript:void(0)">
+                        <i class="icon-double-angle-right"></i>
+                        404错误页面
+                    </a>
+                </li>
+
+                <li>
+                    <a href="javascript:void(0)">
+                        <i class="icon-double-angle-right"></i>
+                        500错误页面
+                    </a>
+                </li>
+            </ul>
+        </li>
+    </ul>
+</div>
+<!--离线文档说明-->
+<script type="text/html" id="offLinecontentScript">
+    <div style="width:99%;margin:0px auto;">
+        <div class="alert alert-info" role="alert">
+            提供markdwon格式类型的离线文档,开发者可拷贝该内容通过其他markdown转换工具进行转换为html或pdf.
+        </div>
+        <div class="input-inline" style="margin-bottom:10px;">
+            <button class="btn btn-primary" type="button" id="btnCopy">拷贝文档</button>
+        </div>
+        <div class='input-inline'>
+            <textarea class='form-control' style='width: 100%;height: 100%;' id="txtOffLineDoc">
+# 简介
+
+**标题**:{{title}}
+
+**简介**:{{description}}
+
+**HOST**:{{host}}
+
+**联系人**:{{contact}}
+
+**接口路径**:{{location}}
+<% for( i = 0; i < tags.length; i++) { var tag=tags[i] ; %># <%= tag.name %><% for( j = 0; j < paths.length; j++) {var path=paths[j]; if(path.tags.indexOf(tag.name)>-1){ %>
+## <%= path.summary %>
+
+**接口说明**:<%= path.description %>
+
+
+**接口地址**:`<%= path.url %>`
+
+
+**请求方式**:`<%= path.methodType %>`
+
+
+**consumes**:`<%= path.consumes %>`
+
+
+**produces**:`<%= path.produces %>`
+
+**请求参数**:
+<% if(path.parameters!=null && path.parameters.length>0){ %>
+| 参数名称         | 说明     |     in |  是否必须      |  类型   |  schema  |
+| ------------ | -------------------------------- |-----------|--------|----|--- |
+<% for( a = 0; a < path.parameters.length; a++) {var param=path.parameters[a]; %>|<%=param.name%>| <%=param.description%>  | <%=param.in%> | <%=param.require%> |<%=param.type%>  | <%=param.schemaValue%>   |
+                <%}%>
+<%}else{%>暂无<%}%><% if(path.refparameters!=null && path.refparameters.length>0){ %>
+**schema属性说明**
+<% for( a = 0; a < path.refparameters.length; a++) { var ref=path.refparameters[a];%>
+**<%=ref.name%>**
+| 参数名称         | 说明    |     in |  是否必须   |  类型  |  schema |
+| ------------ | -------------------------------- |-----------|--------|----|--- |
+<% for( b = 0; b < ref.params.length; b++) { var rp=ref.params[b];%>|<%=rp.name%>| <%=rp.description%>  | <%=rp.in%> | <%=rp.require%> |<%=rp.type%>  | <%=rp.schemaValue%>   |
+                <%}}}%>
+**响应数据**:
+
+```json
+<%= path.responseValue %>
+```
+**响应参数说明**:
+<% if(path.responseParameters!=null && path.responseParameters.length>0){ %>
+| 参数名称         | 说明                             |    类型 |  schema |
+| ------------ | -------------------|-------|----------- |
+<% for( a = 0; a < path.responseParameters.length; a++) { var param=path.responseParameters[a];%>|<%=param.name%>| <%=param.description%>  |<%=param.type%>  | <%=param.schemaValue%>   |
+<%}}else{%>
+暂无
+<%}%>
+<% if(path.responseRefParameters!=null && path.responseRefParameters.length>0){ %>
+**schema属性说明**
+<% for( a = 0; a < path.responseRefParameters.length; a++) { var ref=path.responseRefParameters[a];%>
+**<%=ref.name%>**
+| 参数名称         |  说明          |   类型  |  schema |
+| ------------ | ------------------|--------|----------- |
+<% for( b = 0; b < ref.params.length; b++) { var rp=ref.params[b];%>|<%=rp.name%> | <%=rp.description%>   |<%=rp.type%>  | <%=rp.schemaValue%>   |
+                <%}%>
+<%}}%>
+**响应状态码说明**:
+<% if(path.responseCodes!=null && path.responseCodes.length>0){ %>
+| 状态码         | 说明                             |    schema                         |
+| ------------ | -------------------------------- |---------------------- |
+<% for( a = 0; a < path.responseCodes.length; a++) { var param=path.responseCodes[a];%>| <%=param.code%> | <%=param.description%>  |<%=param.schema%>|
+                <%}%>
+<%}else{%>
+暂无
+<%}%>
+        <%}%>
+    <%}%>
+<%}%>
+            </textarea>
+        </div>
+    </div>
+</script>
+
+<!--文档说明-->
+<script type="text/html" id="contentScript">
+    <div style="padding: 10px 0;border-bottom: 1px dashed #ccc;height: 50px;vertical-align: middle;line-height: 30px;">
+        <div style="    float: left;width: 90%;font-size: 20px;">{{summary}}</div>
+        <div style="float: right;width: 10%;text-align: right;vertical-align: top;">
+            <a id="copyDocHref" style="cursor: pointer;text-decoration: none;" href="javascript:void(0);">复制文档</a></div>
+    </div>
+    <div class="swbu-main" itemprop="articleBody">
+        <div id="contentDoc"></div>
+        <!--<textarea rows="10" cols="10" id="docText">-->
+        <textarea rows="10" cols="10" id="docText" style="display: none;">
+
+**接口说明**:{{description}}
+
+
+**接口地址**:`{{url}}`
+
+
+**请求方式**:`{{methodType}}`
+
+
+**consumes**:`{{consumes}}`
+
+
+**produces**:`{{produces}}`
+
+
+**请求参数**:
+{{ if parameters && parameters.length>0 }}
+| 参数名称         | 说明     |     in |  是否必须      |  类型   |  schema  |
+| ------------ | -------------------------------- |-----------|--------|----|--- |
+{{each parameters}}| {{$value.name}}         |      {{$value.description}}   |     {{$value.in}}        |       {{$value.require}}      | {{$value.type}}   | {{$value.schemaValue}}     |
+            {{/each}}
+{{else}}
+暂无
+{{/if}}
+
+{{ if refparameters && refparameters.length>0 }}
+**schema属性说明**
+  {{each refparameters}}
+**{{$value.name}}**
+
+| 参数名称         | 说明    |     in |  是否必须   |  类型  |  schema |
+| ------------ | -------------------------------- |-----------|--------|----|--- |
+{{each $value.params}}| {{$value.name}}  | {{$value.description}} |   {{$value.in}}    |   {{$value.require}}   |{{$value.type}}  | {{$value.schemaValue}}      |
+            {{/each}}
+{{/each}}
+
+{{/if}}
+
+**响应数据**:
+
+```json
+{{responseValue}}
+```
+
+**响应参数说明**:
+{{ if responseParameters && responseParameters.length>0 }}
+| 参数名称         | 说明                             |    类型 |  schema |
+| ------------ | -------------------|-------|----------- |
+{{each responseParameters}}| {{$value.name}}     |{{$value.description}}      |    {{$value.type}}   |   {{$value.schemaValue}}    |
+            {{/each}}
+{{else}}
+暂无
+{{/if}}
+
+{{ if responseRefParameters && responseRefParameters.length>0 }}
+**schema属性说明**
+  {{each responseRefParameters}}
+**{{$value.name}}**
+
+| 参数名称         |  说明          |   类型  |  schema |
+| ------------ | ------------------|--------|----------- |
+{{each $value.params}}| {{$value.name}}         |     {{$value.description}}      |  {{$value.type}}   | {{$value.schemaValue}}     |
+            {{/each}}
+{{/each}}
+
+{{/if}}
+
+**响应状态码说明**:
+{{ if responseCodes}}
+| 状态码         | 说明                             |    schema                         |
+| ------------ | -------------------------------- |---------------------- |
+{{each responseCodes}}| {{$value.code}}         | {{$value.description}}                        |{{$value.schema}}                          |
+{{/each}}
+{{else}}
+暂无
+{{/if}}
+
+
+</textarea>
+    </div>
+</script>
+
+<!--Debug调试tab-->
+<script type="text/html" id="DebugScript">
+    <div style="width: 100%;margin: 0px auto;margin-top: 10px;">
+        <div class="input-group m-bot15">
+            <span class="input-group-btn">
+                <button class="btn btn-default btn-info" type="button">{{methodType}}</button>
+            </span>
+            <input type="text" id="txtreqUrl" data-originalurl="<%=url.substring(1)%>" class="form-control"
+                   value="<%=url.substring(1)%>">
+            <span class="input-group-btn">
+                <button id="btnRequest" class="btn btn-default btn-primary" type="button"> 发 送 </button>
+            </span>
+        </div>
+        <div style="margin-top: 15px;">
+            <div class="swbu-main">
+                <%if((parameters!=null && parameters.length>0)||(globalParameters!=null && globalParameters.length>0)){
+                var fileform=false;%>
+                <% for( a = 0; a < parameters.length ; a++ ) {var param=parameters[a]; %>
+                <% if(param.type=="MultipartFile"){ fileform=true;}%>
+                <%}%>
+
+                <%if(fileform){%>
+                <form id="uploadForm" target="uploadIframe" action="<%=url.substring(1)%>" type=""
+                      enctype="multipart/form-data" method="{{methodType}}">
+                    <table class="">
+                        <thead>
+                        <tr>
+                            <th></th>
+                            <th>参数名称</th>
+                            <th>参数值</th>
+                            <th>操作</th>
+                        </tr>
+                        </thead>
+                        <tbody id="paramBody">
+                        <!--遍历 是否有全局参数--->
+                        <%if(globalParameters!=null && globalParameters.length>0){ %>
+                        <% for( a = 0; a < globalParameters.length ; a++ ) {var param=globalParameters[a]; %>
+                        <%if(param.in!="header"){%>
+                        <tr data-name="<%=param.name%>" data-in="<%=param.in%>" data-required="<%=param.require%>">
+                            <td width="5%">
+                                <div class="checkbox"><label><input type="checkbox" value="" checked=""></label></div>
+                            </td>
+                            <td width="35%">
+                                <input class="form-control p-key" value="<%=param.name%>">
+                            </td>
+                            <td>
+                                <%if(param.in=="body"){ %>
+                                <%if(param.type=="MultipartFile"){%>
+                                <input name="<%=param.name%>" type="file" class="form-control p-value"
+                                       data-name="<%=param.name%>" placeholder="<%=param.description%>"/>
+                                <%}else {%>
+                                <textarea class="form-control p-value" style="font-size: 16px;" rows="10"
+                                          data-in="<%=param.in%>" data-apiUrl="<%=url.substring(1)%>"
+                                          name="<%=param.name%>" data-name="<%=param.name%>"
+                                          placeholder="<%=param.description%>"><%=param.txtValue%></textarea>
+                                <%}%>
+                                <%}else{%>
+                                <input class="form-control p-value" name="<%=param.name%>" data-in="<%=param.in%>"
+                                       data-apiurl="<%=url.substring(1)%>"
+                                       data-name="<%=param.name%>" placeholder="<%=param.description%>"
+                                       value="<%=param.txtValue%>"/>
+                                <%}%>
+                            </td>
+                            <td width="5%">
+                                <button class="btn btn-danger btn-circle btn-small btn-param-delete" type="button">
+                                    <strong>×</strong></button>
+                            </td>
+                        </tr>
+                        <%}%>
+                        <%}%>
+                        <%}%>
+
+                        <% for( a = 0; a < parameters.length ; a++ ) {var param=parameters[a]; %>
+                        <%if(param.in!="header"){%>
+                        <tr data-name="<%=param.name%>" data-in="<%=param.in%>" data-required="<%=param.require%>"
+                            data-type="<%=param.type%>">
+                            <td width="5%">
+                                <div class="checkbox"><label><input type="checkbox" value="" checked=""></label></div>
+                            </td>
+                            <td width="35%">
+                                <input class="form-control p-key" value="<%=param.name%>">
+                            </td>
+                            <td>
+                                <%if(param.in=="body"){ %>
+                                <%if(param.type=="MultipartFile"){%>
+                                <input name="<%=param.name%>" type="file" class="form-control p-value"
+                                       data-name="<%=param.name%>" placeholder="<%=param.description%>"/>
+                                <%}else {%>
+                                <textarea class="form-control p-value" style="font-size: 16px;" rows="10"
+                                          data-in="<%=param.in%>" data-apiUrl="<%=url.substring(1)%>"
+                                          name="<%=param.name%>" data-name="<%=param.name%>"
+                                          placeholder="<%=param.description%>"><%=param.txtValue%></textarea>
+                                <%}%>
+                                <%}else{%>
+                                <input class="form-control p-value p-<%=param.in%>" name="<%=param.name%>"
+                                       data-in="<%=param.in%>" data-apiurl="<%=url.substring(1)%>"
+                                       data-name="<%=param.name%>" placeholder="<%=param.description%>"
+                                       value="<%=param.txtValue%>"/>
+                                <%}%>
+                            </td>
+                            <td width="5%">
+                                <button class="btn btn-danger btn-circle btn-small btn-param-delete" type="button">
+                                    <strong>×</strong></button>
+                            </td>
+                        </tr>
+                        <%}%>
+
+                        <%}%>
+                        </tbody>
+                    </table>
+                </form>
+                <div id="resptab" class="tabs-container">
+                    <iframe name="uploadIframe" id="uploadIframe"
+                            style="border: none;height: 1%;display: none;"></iframe>
+                </div>
+                <%}else{%>
+                <table class="">
+                    <thead>
+                    <tr>
+                        <th></th>
+                        <th>参数名称</th>
+                        <th>参数值</th>
+                        <th>操作</th>
+                    </tr>
+                    </thead>
+                    <tbody id="paramBody">
+                    <!--遍历 是否有全局参数--->
+                    <%if(globalParameters!=null && globalParameters.length>0){ %>
+                    <% for( a = 0; a < globalParameters.length ; a++ ) {var param=globalParameters[a]; %>
+                    <tr data-name="<%=param.name%>" data-in="<%=param.in%>" data-required="<%=param.require%>">
+                        <td width="5%">
+                            <div class="checkbox"><label><input type="checkbox" value="" checked=""></label></div>
+                        </td>
+                        <td width="35%">
+                            <input class="form-control p-key" value="<%=param.name%>">
+                        </td>
+                        <td>
+                            <%if(param.in=="body"){ %>
+                            <%if(param.type=="MultipartFile"){%>
+                            <input name="<%=param.name%>" type="file" class="form-control p-value"
+                                   data-name="<%=param.name%>" placeholder="<%=param.description%>"/>
+                            <%}else {%>
+                            <textarea class="form-control p-value" style="font-size: 16px;" rows="10"
+                                      data-in="<%=param.in%>" data-apiUrl="<%=url.substring(1)%>"
+                                      name="<%=param.name%>" data-name="<%=param.name%>"
+                                      placeholder="<%=param.description%>"><%=param.txtValue%></textarea>
+                            <%}%>
+                            <%}else{%>
+                            <input class="form-control p-value" name="<%=param.name%>" data-in="<%=param.in%>"
+                                   data-apiurl="<%=url.substring(1)%>"
+                                   data-name="<%=param.name%>" placeholder="<%=param.description%>"
+                                   value="<%=param.txtValue%>"/>
+                            <%}%>
+                        </td>
+                        <td width="5%">
+                            <button class="btn btn-danger btn-circle btn-small btn-param-delete" type="button">
+                                <strong>×</strong></button>
+                        </td>
+                    </tr>
+                    <%}%>
+                    <%}%>
+
+                    <% for( a = 0; a < parameters.length ; a++ ) {var param=parameters[a]; %>
+                    <tr data-name="<%=param.name%>" data-in="<%=param.in%>" data-required="<%=param.require%>">
+                        <td width="5%">
+                            <div class="checkbox"><label><input type="checkbox" value="" checked=""></label></div>
+                        </td>
+                        <td width="35%">
+                            <input class="form-control p-key" value="<%=param.name%>">
+                        </td>
+                        <td>
+                            <%if(param.in=="body"){ %>
+                            <%if(param.type=="MultipartFile"){%>
+                            <input name="<%=param.name%>" type="file" class="form-control p-value"
+                                   data-name="<%=param.name%>" placeholder="<%=param.description%>"/>
+                            <%}else {%>
+                            <textarea class="form-control p-value" style="font-size: 16px;" rows="10"
+                                      data-in="<%=param.in%>" data-apiUrl="<%=url.substring(1)%>"
+                                      name="<%=param.name%>" data-name="<%=param.name%>"
+                                      placeholder="<%=param.description%>"><%=param.txtValue%></textarea>
+                            <%}%>
+                            <%}else{%>
+                            <input class="form-control p-value p-<%=param.in%>" name="<%=param.name%>"
+                                   data-in="<%=param.in%>" data-apiurl="<%=url.substring(1)%>"
+                                   data-name="<%=param.name%>" placeholder="<%=param.description%>"
+                                   value="<%=param.txtValue%>"/>
+                            <%}%>
+                        </td>
+                        <td width="5%">
+                            <button class="btn btn-danger btn-circle btn-small btn-param-delete" type="button">
+                                <strong>×</strong></button>
+                        </td>
+                    </tr>
+                    <%}%>
+                    </tbody>
+                </table>
+                <%}%>
+
+                <%}%>
+            </div>
+        </div>
+        <div id="responsebody">
+        </div>
+    </div>
+</script>
+<!--全局参数-->
+<script type="text/html" id="GlobalParamScript">
+    <div style="width:99%;margin:0px auto;">
+        <div class="alert alert-info" role="alert">
+            提供全局参数Debug功能,目前默认提供header(请求头)、query(form)两种方式的入参.<br/><br/>
+            在此添加全局参数后,默认Debug调试tab页会带上该参数,该全局参数只在该分组下有效,不同的分组需要分别设置
+        </div>
+        <div class="input-inline" style="margin-bottom:10px;">
+            <button class="btn btn-primary" type="button" id="btnAddParam">添加参数</button>
+        </div>
+        <div style="margin-top: 15px;">
+            <div class="swbu-main">
+                <table class="" id="globalTable">
+                    <thead>
+                    <tr>
+                        <th>参数名称</th>
+                        <th>参数值</th>
+                        <th>参数类型</th>
+                        <th>操作</th>
+                    </tr>
+                    </thead>
+                    <tbody id="globalTabBody">
+                    <%if(globalParameters!=null && globalParameters.length>0){ %>
+                    <% for( a = 0; a < globalParameters.length ; a++ ) {var param=globalParameters[a]; %>
+                    <tr>
+                        <td><input class="form-control p-key" value="<%=param.name%>" data-old='<%=param.name%>'></td>
+                        <td><input class="form-control p-key" value="<%=param.value%>"></td>
+                        <td><select class='form-control'>
+                            <option value='header'
+                            <%if(param.in=="header"){%> selected <%}%> >header</option>
+                            <option value='query'
+                            <%if(param.in=="query"){%> selected <%}%>>query</option></select></td>
+                        <td>
+                            <button class="btn btn-circle btn-info btn-small btn-save" type="button">保存</button>&nbsp;&nbsp;<button
+                                class="btn btn-circle btn-danger btn-small btn-cancel" type="button">删除
+                        </button>
+                        </td>
+                    </tr>
+
+                    <%}}%>
+                    </tbody>
+                </table>
+            </div>
+        </div>
+    </div>
+</script>
+
+<!--SwaggerBootstrapUi简介-->
+<script type="text/html" id="SwaggerBootstrapUiIntroScript">
+    <div style="width:99%;margin:0px auto;">
+        <div style="margin-top: 15px;">
+            <div class="swbu-main" itemprop="sbuarticleBody">
+                <div id="sbuDescriptionDoc" style="width: 90%;margin: 0px auto;">
+                    <table>
+                        <tr>
+                            <td colspan="2" style="text-align: center;">{{title}}</td>
+                        </tr>
+                        <tr>
+                            <td>简介</td>
+                            <td>{{description}}</td>
+                        </tr>
+                        <tr>
+                            <td>作者</td>
+                            <td>{{contact}}</td>
+                        </tr>
+                        <tr>
+                            <td>版本</td>
+                            <td>{{version}}</td>
+                        </tr>
+                        <tr>
+                            <td>host</td>
+                            <td>{{host}}</td>
+                        </tr>
+                        <tr>
+                            <td>服务url</td>
+                            <td>{{termsOfService}}</td>
+                        </tr>
+                    </table>
+                </div>
+                <!--<textarea rows="10" cols="10" id="docText">-->
+
+            </div>
+        </div>
+</script>
+<div class="bycdao-main" id="content" style="height: 100%;overflow-y: auto;">
+    <div id="myTab" class="tabs-container" style="width:99%;margin:0px auto;">
+        <ul class="nav nav-tabs">
+            <li class="active">
+                <a data-toggle="tab" href="#tab1" aria-expanded="false"> 接口说明</a>
+            </li>
+            <li class=""><a data-toggle="tab" href="#tab2" aria-expanded="true"> 在线调试</a></li>
+        </ul>
+        <div class="tab-content">
+            <div id="tab1" class="tab-pane active">
+                <div class="panel-body" id="tabBody">
+
+                </div>
+            </div>
+            <div id="tab2" class="tab-pane">
+                <div class="panel-body"><strong>正在开发中,敬请期待......</strong>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script type="text/javascript" src="/bycdao-ui/ace/bootstrap.min.js"></script>
+<script type="text/javascript" src="/bycdao-ui/ace/ace.min.js"></script>
+<script type="text/javascript" src="/bycdao-ui/cdao/swaggerbootstrapui.js"></script>
+</body>
+</html>

Some files were not shown because too many files changed in this diff