├── GUI SCM.png ├── GUI ├── css │ ├── animate.css │ └── main.css ├── img │ ├── favicon.png │ └── logo.png ├── index.html ├── js │ └── main.js ├── package-lock.json └── package.json ├── README.md ├── UML SCM.jpg ├── Vyper-contracts └── auto.vy ├── contracts ├── Migrations.sol └── auto.sol ├── migrations ├── 1_initial_migration.js └── 2_deploy_contracts.js ├── test ├── TestMetacoin.sol └── metacoin.js └── truffle.js /GUI SCM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SatoshiNextTechLab/BlockSCM/d5886437baa3ede25013afc3f403ee6dc2b33175/GUI SCM.png -------------------------------------------------------------------------------- /GUI/css/animate.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /*! 4 | * animate.css -http://daneden.me/animate 5 | * Version - 3.5.2 6 | * Licensed under the MIT license - http://opensource.org/licenses/MIT 7 | * 8 | * Copyright (c) 2017 Daniel Eden 9 | */ 10 | 11 | .animated { 12 | animation-duration: 1s; 13 | animation-fill-mode: both; 14 | } 15 | 16 | .animated.infinite { 17 | animation-iteration-count: infinite; 18 | } 19 | 20 | .animated.hinge { 21 | animation-duration: 2s; 22 | } 23 | 24 | .animated.flipOutX, 25 | .animated.flipOutY, 26 | .animated.bounceIn, 27 | .animated.bounceOut { 28 | animation-duration: .75s; 29 | } 30 | 31 | @keyframes bounce { 32 | from, 20%, 53%, 80%, to { 33 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 34 | transform: translate3d(0,0,0); 35 | } 36 | 37 | 40%, 43% { 38 | animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); 39 | transform: translate3d(0, -30px, 0); 40 | } 41 | 42 | 70% { 43 | animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); 44 | transform: translate3d(0, -15px, 0); 45 | } 46 | 47 | 90% { 48 | transform: translate3d(0,-4px,0); 49 | } 50 | } 51 | 52 | .bounce { 53 | animation-name: bounce; 54 | transform-origin: center bottom; 55 | } 56 | 57 | @keyframes flash { 58 | from, 50%, to { 59 | opacity: 1; 60 | } 61 | 62 | 25%, 75% { 63 | opacity: 0; 64 | } 65 | } 66 | 67 | .flash { 68 | animation-name: flash; 69 | } 70 | 71 | /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ 72 | 73 | @keyframes pulse { 74 | from { 75 | transform: scale3d(1, 1, 1); 76 | } 77 | 78 | 50% { 79 | transform: scale3d(1.05, 1.05, 1.05); 80 | } 81 | 82 | to { 83 | transform: scale3d(1, 1, 1); 84 | } 85 | } 86 | 87 | .pulse { 88 | animation-name: pulse; 89 | } 90 | 91 | @keyframes rubberBand { 92 | from { 93 | transform: scale3d(1, 1, 1); 94 | } 95 | 96 | 30% { 97 | transform: scale3d(1.25, 0.75, 1); 98 | } 99 | 100 | 40% { 101 | transform: scale3d(0.75, 1.25, 1); 102 | } 103 | 104 | 50% { 105 | transform: scale3d(1.15, 0.85, 1); 106 | } 107 | 108 | 65% { 109 | transform: scale3d(.95, 1.05, 1); 110 | } 111 | 112 | 75% { 113 | transform: scale3d(1.05, .95, 1); 114 | } 115 | 116 | to { 117 | transform: scale3d(1, 1, 1); 118 | } 119 | } 120 | 121 | .rubberBand { 122 | animation-name: rubberBand; 123 | } 124 | 125 | @keyframes shake { 126 | from, to { 127 | transform: translate3d(0, 0, 0); 128 | } 129 | 130 | 10%, 30%, 50%, 70%, 90% { 131 | transform: translate3d(-10px, 0, 0); 132 | } 133 | 134 | 20%, 40%, 60%, 80% { 135 | transform: translate3d(10px, 0, 0); 136 | } 137 | } 138 | 139 | .shake { 140 | animation-name: shake; 141 | } 142 | 143 | @keyframes headShake { 144 | 0% { 145 | transform: translateX(0); 146 | } 147 | 148 | 6.5% { 149 | transform: translateX(-6px) rotateY(-9deg); 150 | } 151 | 152 | 18.5% { 153 | transform: translateX(5px) rotateY(7deg); 154 | } 155 | 156 | 31.5% { 157 | transform: translateX(-3px) rotateY(-5deg); 158 | } 159 | 160 | 43.5% { 161 | transform: translateX(2px) rotateY(3deg); 162 | } 163 | 164 | 50% { 165 | transform: translateX(0); 166 | } 167 | } 168 | 169 | .headShake { 170 | animation-timing-function: ease-in-out; 171 | animation-name: headShake; 172 | } 173 | 174 | @keyframes swing { 175 | 20% { 176 | transform: rotate3d(0, 0, 1, 15deg); 177 | } 178 | 179 | 40% { 180 | transform: rotate3d(0, 0, 1, -10deg); 181 | } 182 | 183 | 60% { 184 | transform: rotate3d(0, 0, 1, 5deg); 185 | } 186 | 187 | 80% { 188 | transform: rotate3d(0, 0, 1, -5deg); 189 | } 190 | 191 | to { 192 | transform: rotate3d(0, 0, 1, 0deg); 193 | } 194 | } 195 | 196 | .swing { 197 | transform-origin: top center; 198 | animation-name: swing; 199 | } 200 | 201 | @keyframes tada { 202 | from { 203 | transform: scale3d(1, 1, 1); 204 | } 205 | 206 | 10%, 20% { 207 | transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); 208 | } 209 | 210 | 30%, 50%, 70%, 90% { 211 | transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); 212 | } 213 | 214 | 40%, 60%, 80% { 215 | transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); 216 | } 217 | 218 | to { 219 | transform: scale3d(1, 1, 1); 220 | } 221 | } 222 | 223 | .tada { 224 | animation-name: tada; 225 | } 226 | 227 | /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ 228 | 229 | @keyframes wobble { 230 | from { 231 | transform: none; 232 | } 233 | 234 | 15% { 235 | transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); 236 | } 237 | 238 | 30% { 239 | transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); 240 | } 241 | 242 | 45% { 243 | transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); 244 | } 245 | 246 | 60% { 247 | transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); 248 | } 249 | 250 | 75% { 251 | transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); 252 | } 253 | 254 | to { 255 | transform: none; 256 | } 257 | } 258 | 259 | .wobble { 260 | animation-name: wobble; 261 | } 262 | 263 | @keyframes jello { 264 | from, 11.1%, to { 265 | transform: none; 266 | } 267 | 268 | 22.2% { 269 | transform: skewX(-12.5deg) skewY(-12.5deg); 270 | } 271 | 272 | 33.3% { 273 | transform: skewX(6.25deg) skewY(6.25deg); 274 | } 275 | 276 | 44.4% { 277 | transform: skewX(-3.125deg) skewY(-3.125deg); 278 | } 279 | 280 | 55.5% { 281 | transform: skewX(1.5625deg) skewY(1.5625deg); 282 | } 283 | 284 | 66.6% { 285 | transform: skewX(-0.78125deg) skewY(-0.78125deg); 286 | } 287 | 288 | 77.7% { 289 | transform: skewX(0.390625deg) skewY(0.390625deg); 290 | } 291 | 292 | 88.8% { 293 | transform: skewX(-0.1953125deg) skewY(-0.1953125deg); 294 | } 295 | } 296 | 297 | .jello { 298 | animation-name: jello; 299 | transform-origin: center; 300 | } 301 | 302 | @keyframes bounceIn { 303 | from, 20%, 40%, 60%, 80%, to { 304 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 305 | } 306 | 307 | 0% { 308 | opacity: 0; 309 | transform: scale3d(.3, .3, .3); 310 | } 311 | 312 | 20% { 313 | transform: scale3d(1.1, 1.1, 1.1); 314 | } 315 | 316 | 40% { 317 | transform: scale3d(.9, .9, .9); 318 | } 319 | 320 | 60% { 321 | opacity: 1; 322 | transform: scale3d(1.03, 1.03, 1.03); 323 | } 324 | 325 | 80% { 326 | transform: scale3d(.97, .97, .97); 327 | } 328 | 329 | to { 330 | opacity: 1; 331 | transform: scale3d(1, 1, 1); 332 | } 333 | } 334 | 335 | .bounceIn { 336 | animation-name: bounceIn; 337 | } 338 | 339 | @keyframes bounceInDown { 340 | from, 60%, 75%, 90%, to { 341 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 342 | } 343 | 344 | 0% { 345 | opacity: 0; 346 | transform: translate3d(0, -3000px, 0); 347 | } 348 | 349 | 60% { 350 | opacity: 1; 351 | transform: translate3d(0, 25px, 0); 352 | } 353 | 354 | 75% { 355 | transform: translate3d(0, -10px, 0); 356 | } 357 | 358 | 90% { 359 | transform: translate3d(0, 5px, 0); 360 | } 361 | 362 | to { 363 | transform: none; 364 | } 365 | } 366 | 367 | .bounceInDown { 368 | animation-name: bounceInDown; 369 | } 370 | 371 | @keyframes bounceInLeft { 372 | from, 60%, 75%, 90%, to { 373 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 374 | } 375 | 376 | 0% { 377 | opacity: 0; 378 | transform: translate3d(-3000px, 0, 0); 379 | } 380 | 381 | 60% { 382 | opacity: 1; 383 | transform: translate3d(25px, 0, 0); 384 | } 385 | 386 | 75% { 387 | transform: translate3d(-10px, 0, 0); 388 | } 389 | 390 | 90% { 391 | transform: translate3d(5px, 0, 0); 392 | } 393 | 394 | to { 395 | transform: none; 396 | } 397 | } 398 | 399 | .bounceInLeft { 400 | animation-name: bounceInLeft; 401 | } 402 | 403 | @keyframes bounceInRight { 404 | from, 60%, 75%, 90%, to { 405 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 406 | } 407 | 408 | from { 409 | opacity: 0; 410 | transform: translate3d(3000px, 0, 0); 411 | } 412 | 413 | 60% { 414 | opacity: 1; 415 | transform: translate3d(-25px, 0, 0); 416 | } 417 | 418 | 75% { 419 | transform: translate3d(10px, 0, 0); 420 | } 421 | 422 | 90% { 423 | transform: translate3d(-5px, 0, 0); 424 | } 425 | 426 | to { 427 | transform: none; 428 | } 429 | } 430 | 431 | .bounceInRight { 432 | animation-name: bounceInRight; 433 | } 434 | 435 | @keyframes bounceInUp { 436 | from, 60%, 75%, 90%, to { 437 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 438 | } 439 | 440 | from { 441 | opacity: 0; 442 | transform: translate3d(0, 3000px, 0); 443 | } 444 | 445 | 60% { 446 | opacity: 1; 447 | transform: translate3d(0, -20px, 0); 448 | } 449 | 450 | 75% { 451 | transform: translate3d(0, 10px, 0); 452 | } 453 | 454 | 90% { 455 | transform: translate3d(0, -5px, 0); 456 | } 457 | 458 | to { 459 | transform: translate3d(0, 0, 0); 460 | } 461 | } 462 | 463 | .bounceInUp { 464 | animation-name: bounceInUp; 465 | } 466 | 467 | @keyframes bounceOut { 468 | 20% { 469 | transform: scale3d(.9, .9, .9); 470 | } 471 | 472 | 50%, 55% { 473 | opacity: 1; 474 | transform: scale3d(1.1, 1.1, 1.1); 475 | } 476 | 477 | to { 478 | opacity: 0; 479 | transform: scale3d(.3, .3, .3); 480 | } 481 | } 482 | 483 | .bounceOut { 484 | animation-name: bounceOut; 485 | } 486 | 487 | @keyframes bounceOutDown { 488 | 20% { 489 | transform: translate3d(0, 10px, 0); 490 | } 491 | 492 | 40%, 45% { 493 | opacity: 1; 494 | transform: translate3d(0, -20px, 0); 495 | } 496 | 497 | to { 498 | opacity: 0; 499 | transform: translate3d(0, 2000px, 0); 500 | } 501 | } 502 | 503 | .bounceOutDown { 504 | animation-name: bounceOutDown; 505 | } 506 | 507 | @keyframes bounceOutLeft { 508 | 20% { 509 | opacity: 1; 510 | transform: translate3d(20px, 0, 0); 511 | } 512 | 513 | to { 514 | opacity: 0; 515 | transform: translate3d(-2000px, 0, 0); 516 | } 517 | } 518 | 519 | .bounceOutLeft { 520 | animation-name: bounceOutLeft; 521 | } 522 | 523 | @keyframes bounceOutRight { 524 | 20% { 525 | opacity: 1; 526 | transform: translate3d(-20px, 0, 0); 527 | } 528 | 529 | to { 530 | opacity: 0; 531 | transform: translate3d(2000px, 0, 0); 532 | } 533 | } 534 | 535 | .bounceOutRight { 536 | animation-name: bounceOutRight; 537 | } 538 | 539 | @keyframes bounceOutUp { 540 | 20% { 541 | transform: translate3d(0, -10px, 0); 542 | } 543 | 544 | 40%, 45% { 545 | opacity: 1; 546 | transform: translate3d(0, 20px, 0); 547 | } 548 | 549 | to { 550 | opacity: 0; 551 | transform: translate3d(0, -2000px, 0); 552 | } 553 | } 554 | 555 | .bounceOutUp { 556 | animation-name: bounceOutUp; 557 | } 558 | 559 | @keyframes fadeIn { 560 | from { 561 | opacity: 0; 562 | } 563 | 564 | to { 565 | opacity: 1; 566 | } 567 | } 568 | 569 | .fadeIn { 570 | animation-name: fadeIn; 571 | } 572 | 573 | @keyframes fadeInDown { 574 | from { 575 | opacity: 0; 576 | transform: translate3d(0, -100%, 0); 577 | } 578 | 579 | to { 580 | opacity: 1; 581 | transform: none; 582 | } 583 | } 584 | 585 | .fadeInDown { 586 | animation-name: fadeInDown; 587 | } 588 | 589 | @keyframes fadeInDownBig { 590 | from { 591 | opacity: 0; 592 | transform: translate3d(0, -2000px, 0); 593 | } 594 | 595 | to { 596 | opacity: 1; 597 | transform: none; 598 | } 599 | } 600 | 601 | .fadeInDownBig { 602 | animation-name: fadeInDownBig; 603 | } 604 | 605 | @keyframes fadeInLeft { 606 | from { 607 | opacity: 0; 608 | transform: translate3d(-100%, 0, 0); 609 | } 610 | 611 | to { 612 | opacity: 1; 613 | transform: none; 614 | } 615 | } 616 | 617 | .fadeInLeft { 618 | animation-name: fadeInLeft; 619 | } 620 | 621 | @keyframes fadeInLeftBig { 622 | from { 623 | opacity: 0; 624 | transform: translate3d(-2000px, 0, 0); 625 | } 626 | 627 | to { 628 | opacity: 1; 629 | transform: none; 630 | } 631 | } 632 | 633 | .fadeInLeftBig { 634 | animation-name: fadeInLeftBig; 635 | } 636 | 637 | @keyframes fadeInRight { 638 | from { 639 | opacity: 0; 640 | transform: translate3d(100%, 0, 0); 641 | } 642 | 643 | to { 644 | opacity: 1; 645 | transform: none; 646 | } 647 | } 648 | 649 | .fadeInRight { 650 | animation-name: fadeInRight; 651 | } 652 | 653 | @keyframes fadeInRightBig { 654 | from { 655 | opacity: 0; 656 | transform: translate3d(2000px, 0, 0); 657 | } 658 | 659 | to { 660 | opacity: 1; 661 | transform: none; 662 | } 663 | } 664 | 665 | .fadeInRightBig { 666 | animation-name: fadeInRightBig; 667 | } 668 | 669 | @keyframes fadeInUp { 670 | from { 671 | opacity: 0; 672 | transform: translate3d(0, 100%, 0); 673 | } 674 | 675 | to { 676 | opacity: 1; 677 | transform: none; 678 | } 679 | } 680 | 681 | .fadeInUp { 682 | animation-name: fadeInUp; 683 | } 684 | 685 | @keyframes fadeInUpBig { 686 | from { 687 | opacity: 0; 688 | transform: translate3d(0, 2000px, 0); 689 | } 690 | 691 | to { 692 | opacity: 1; 693 | transform: none; 694 | } 695 | } 696 | 697 | .fadeInUpBig { 698 | animation-name: fadeInUpBig; 699 | } 700 | 701 | @keyframes fadeOut { 702 | from { 703 | opacity: 1; 704 | } 705 | 706 | to { 707 | opacity: 0; 708 | } 709 | } 710 | 711 | .fadeOut { 712 | animation-name: fadeOut; 713 | } 714 | 715 | @keyframes fadeOutDown { 716 | from { 717 | opacity: 1; 718 | } 719 | 720 | to { 721 | opacity: 0; 722 | transform: translate3d(0, 100%, 0); 723 | } 724 | } 725 | 726 | .fadeOutDown { 727 | animation-name: fadeOutDown; 728 | } 729 | 730 | @keyframes fadeOutDownBig { 731 | from { 732 | opacity: 1; 733 | } 734 | 735 | to { 736 | opacity: 0; 737 | transform: translate3d(0, 2000px, 0); 738 | } 739 | } 740 | 741 | .fadeOutDownBig { 742 | animation-name: fadeOutDownBig; 743 | } 744 | 745 | @keyframes fadeOutLeft { 746 | from { 747 | opacity: 1; 748 | } 749 | 750 | to { 751 | opacity: 0; 752 | transform: translate3d(-100%, 0, 0); 753 | } 754 | } 755 | 756 | .fadeOutLeft { 757 | animation-name: fadeOutLeft; 758 | } 759 | 760 | @keyframes fadeOutLeftBig { 761 | from { 762 | opacity: 1; 763 | } 764 | 765 | to { 766 | opacity: 0; 767 | transform: translate3d(-2000px, 0, 0); 768 | } 769 | } 770 | 771 | .fadeOutLeftBig { 772 | animation-name: fadeOutLeftBig; 773 | } 774 | 775 | @keyframes fadeOutRight { 776 | from { 777 | opacity: 1; 778 | } 779 | 780 | to { 781 | opacity: 0; 782 | transform: translate3d(100%, 0, 0); 783 | } 784 | } 785 | 786 | .fadeOutRight { 787 | animation-name: fadeOutRight; 788 | } 789 | 790 | @keyframes fadeOutRightBig { 791 | from { 792 | opacity: 1; 793 | } 794 | 795 | to { 796 | opacity: 0; 797 | transform: translate3d(2000px, 0, 0); 798 | } 799 | } 800 | 801 | .fadeOutRightBig { 802 | animation-name: fadeOutRightBig; 803 | } 804 | 805 | @keyframes fadeOutUp { 806 | from { 807 | opacity: 1; 808 | } 809 | 810 | to { 811 | opacity: 0; 812 | transform: translate3d(0, -100%, 0); 813 | } 814 | } 815 | 816 | .fadeOutUp { 817 | animation-name: fadeOutUp; 818 | } 819 | 820 | @keyframes fadeOutUpBig { 821 | from { 822 | opacity: 1; 823 | } 824 | 825 | to { 826 | opacity: 0; 827 | transform: translate3d(0, -2000px, 0); 828 | } 829 | } 830 | 831 | .fadeOutUpBig { 832 | animation-name: fadeOutUpBig; 833 | } 834 | 835 | @keyframes flip { 836 | from { 837 | transform: perspective(400px) rotate3d(0, 1, 0, -360deg); 838 | animation-timing-function: ease-out; 839 | } 840 | 841 | 40% { 842 | transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); 843 | animation-timing-function: ease-out; 844 | } 845 | 846 | 50% { 847 | transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); 848 | animation-timing-function: ease-in; 849 | } 850 | 851 | 80% { 852 | transform: perspective(400px) scale3d(.95, .95, .95); 853 | animation-timing-function: ease-in; 854 | } 855 | 856 | to { 857 | transform: perspective(400px); 858 | animation-timing-function: ease-in; 859 | } 860 | } 861 | 862 | .animated.flip { 863 | -webkit-backface-visibility: visible; 864 | backface-visibility: visible; 865 | animation-name: flip; 866 | } 867 | 868 | @keyframes flipInX { 869 | from { 870 | transform: perspective(400px) rotate3d(1, 0, 0, 90deg); 871 | animation-timing-function: ease-in; 872 | opacity: 0; 873 | } 874 | 875 | 40% { 876 | transform: perspective(400px) rotate3d(1, 0, 0, -20deg); 877 | animation-timing-function: ease-in; 878 | } 879 | 880 | 60% { 881 | transform: perspective(400px) rotate3d(1, 0, 0, 10deg); 882 | opacity: 1; 883 | } 884 | 885 | 80% { 886 | transform: perspective(400px) rotate3d(1, 0, 0, -5deg); 887 | } 888 | 889 | to { 890 | transform: perspective(400px); 891 | } 892 | } 893 | 894 | .flipInX { 895 | -webkit-backface-visibility: visible !important; 896 | backface-visibility: visible !important; 897 | animation-name: flipInX; 898 | } 899 | 900 | @keyframes flipInY { 901 | from { 902 | transform: perspective(400px) rotate3d(0, 1, 0, 90deg); 903 | animation-timing-function: ease-in; 904 | opacity: 0; 905 | } 906 | 907 | 40% { 908 | transform: perspective(400px) rotate3d(0, 1, 0, -20deg); 909 | animation-timing-function: ease-in; 910 | } 911 | 912 | 60% { 913 | transform: perspective(400px) rotate3d(0, 1, 0, 10deg); 914 | opacity: 1; 915 | } 916 | 917 | 80% { 918 | transform: perspective(400px) rotate3d(0, 1, 0, -5deg); 919 | } 920 | 921 | to { 922 | transform: perspective(400px); 923 | } 924 | } 925 | 926 | .flipInY { 927 | -webkit-backface-visibility: visible !important; 928 | backface-visibility: visible !important; 929 | animation-name: flipInY; 930 | } 931 | 932 | @keyframes flipOutX { 933 | from { 934 | transform: perspective(400px); 935 | } 936 | 937 | 30% { 938 | transform: perspective(400px) rotate3d(1, 0, 0, -20deg); 939 | opacity: 1; 940 | } 941 | 942 | to { 943 | transform: perspective(400px) rotate3d(1, 0, 0, 90deg); 944 | opacity: 0; 945 | } 946 | } 947 | 948 | .flipOutX { 949 | animation-name: flipOutX; 950 | -webkit-backface-visibility: visible !important; 951 | backface-visibility: visible !important; 952 | } 953 | 954 | @keyframes flipOutY { 955 | from { 956 | transform: perspective(400px); 957 | } 958 | 959 | 30% { 960 | transform: perspective(400px) rotate3d(0, 1, 0, -15deg); 961 | opacity: 1; 962 | } 963 | 964 | to { 965 | transform: perspective(400px) rotate3d(0, 1, 0, 90deg); 966 | opacity: 0; 967 | } 968 | } 969 | 970 | .flipOutY { 971 | -webkit-backface-visibility: visible !important; 972 | backface-visibility: visible !important; 973 | animation-name: flipOutY; 974 | } 975 | 976 | @keyframes lightSpeedIn { 977 | from { 978 | transform: translate3d(100%, 0, 0) skewX(-30deg); 979 | opacity: 0; 980 | } 981 | 982 | 60% { 983 | transform: skewX(20deg); 984 | opacity: 1; 985 | } 986 | 987 | 80% { 988 | transform: skewX(-5deg); 989 | opacity: 1; 990 | } 991 | 992 | to { 993 | transform: none; 994 | opacity: 1; 995 | } 996 | } 997 | 998 | .lightSpeedIn { 999 | animation-name: lightSpeedIn; 1000 | animation-timing-function: ease-out; 1001 | } 1002 | 1003 | @keyframes lightSpeedOut { 1004 | from { 1005 | opacity: 1; 1006 | } 1007 | 1008 | to { 1009 | transform: translate3d(100%, 0, 0) skewX(30deg); 1010 | opacity: 0; 1011 | } 1012 | } 1013 | 1014 | .lightSpeedOut { 1015 | animation-name: lightSpeedOut; 1016 | animation-timing-function: ease-in; 1017 | } 1018 | 1019 | @keyframes rotateIn { 1020 | from { 1021 | transform-origin: center; 1022 | transform: rotate3d(0, 0, 1, -200deg); 1023 | opacity: 0; 1024 | } 1025 | 1026 | to { 1027 | transform-origin: center; 1028 | transform: none; 1029 | opacity: 1; 1030 | } 1031 | } 1032 | 1033 | .rotateIn { 1034 | animation-name: rotateIn; 1035 | } 1036 | 1037 | @keyframes rotateInDownLeft { 1038 | from { 1039 | transform-origin: left bottom; 1040 | transform: rotate3d(0, 0, 1, -45deg); 1041 | opacity: 0; 1042 | } 1043 | 1044 | to { 1045 | transform-origin: left bottom; 1046 | transform: none; 1047 | opacity: 1; 1048 | } 1049 | } 1050 | 1051 | .rotateInDownLeft { 1052 | animation-name: rotateInDownLeft; 1053 | } 1054 | 1055 | @keyframes rotateInDownRight { 1056 | from { 1057 | transform-origin: right bottom; 1058 | transform: rotate3d(0, 0, 1, 45deg); 1059 | opacity: 0; 1060 | } 1061 | 1062 | to { 1063 | transform-origin: right bottom; 1064 | transform: none; 1065 | opacity: 1; 1066 | } 1067 | } 1068 | 1069 | .rotateInDownRight { 1070 | animation-name: rotateInDownRight; 1071 | } 1072 | 1073 | @keyframes rotateInUpLeft { 1074 | from { 1075 | transform-origin: left bottom; 1076 | transform: rotate3d(0, 0, 1, 45deg); 1077 | opacity: 0; 1078 | } 1079 | 1080 | to { 1081 | transform-origin: left bottom; 1082 | transform: none; 1083 | opacity: 1; 1084 | } 1085 | } 1086 | 1087 | .rotateInUpLeft { 1088 | animation-name: rotateInUpLeft; 1089 | } 1090 | 1091 | @keyframes rotateInUpRight { 1092 | from { 1093 | transform-origin: right bottom; 1094 | transform: rotate3d(0, 0, 1, -90deg); 1095 | opacity: 0; 1096 | } 1097 | 1098 | to { 1099 | transform-origin: right bottom; 1100 | transform: none; 1101 | opacity: 1; 1102 | } 1103 | } 1104 | 1105 | .rotateInUpRight { 1106 | animation-name: rotateInUpRight; 1107 | } 1108 | 1109 | @keyframes rotateOut { 1110 | from { 1111 | transform-origin: center; 1112 | opacity: 1; 1113 | } 1114 | 1115 | to { 1116 | transform-origin: center; 1117 | transform: rotate3d(0, 0, 1, 200deg); 1118 | opacity: 0; 1119 | } 1120 | } 1121 | 1122 | .rotateOut { 1123 | animation-name: rotateOut; 1124 | } 1125 | 1126 | @keyframes rotateOutDownLeft { 1127 | from { 1128 | transform-origin: left bottom; 1129 | opacity: 1; 1130 | } 1131 | 1132 | to { 1133 | transform-origin: left bottom; 1134 | transform: rotate3d(0, 0, 1, 45deg); 1135 | opacity: 0; 1136 | } 1137 | } 1138 | 1139 | .rotateOutDownLeft { 1140 | animation-name: rotateOutDownLeft; 1141 | } 1142 | 1143 | @keyframes rotateOutDownRight { 1144 | from { 1145 | transform-origin: right bottom; 1146 | opacity: 1; 1147 | } 1148 | 1149 | to { 1150 | transform-origin: right bottom; 1151 | transform: rotate3d(0, 0, 1, -45deg); 1152 | opacity: 0; 1153 | } 1154 | } 1155 | 1156 | .rotateOutDownRight { 1157 | animation-name: rotateOutDownRight; 1158 | } 1159 | 1160 | @keyframes rotateOutUpLeft { 1161 | from { 1162 | transform-origin: left bottom; 1163 | opacity: 1; 1164 | } 1165 | 1166 | to { 1167 | transform-origin: left bottom; 1168 | transform: rotate3d(0, 0, 1, -45deg); 1169 | opacity: 0; 1170 | } 1171 | } 1172 | 1173 | .rotateOutUpLeft { 1174 | animation-name: rotateOutUpLeft; 1175 | } 1176 | 1177 | @keyframes rotateOutUpRight { 1178 | from { 1179 | transform-origin: right bottom; 1180 | opacity: 1; 1181 | } 1182 | 1183 | to { 1184 | transform-origin: right bottom; 1185 | transform: rotate3d(0, 0, 1, 90deg); 1186 | opacity: 0; 1187 | } 1188 | } 1189 | 1190 | .rotateOutUpRight { 1191 | animation-name: rotateOutUpRight; 1192 | } 1193 | 1194 | @keyframes hinge { 1195 | 0% { 1196 | transform-origin: top left; 1197 | animation-timing-function: ease-in-out; 1198 | } 1199 | 1200 | 20%, 60% { 1201 | transform: rotate3d(0, 0, 1, 80deg); 1202 | transform-origin: top left; 1203 | animation-timing-function: ease-in-out; 1204 | } 1205 | 1206 | 40%, 80% { 1207 | transform: rotate3d(0, 0, 1, 60deg); 1208 | transform-origin: top left; 1209 | animation-timing-function: ease-in-out; 1210 | opacity: 1; 1211 | } 1212 | 1213 | to { 1214 | transform: translate3d(0, 700px, 0); 1215 | opacity: 0; 1216 | } 1217 | } 1218 | 1219 | .hinge { 1220 | animation-name: hinge; 1221 | } 1222 | 1223 | @keyframes jackInTheBox { 1224 | from { 1225 | opacity: 0; 1226 | transform: scale(0.1) rotate(30deg); 1227 | transform-origin: center bottom; 1228 | } 1229 | 1230 | 50% { 1231 | transform: rotate(-10deg); 1232 | } 1233 | 1234 | 70% { 1235 | transform: rotate(3deg); 1236 | } 1237 | 1238 | to { 1239 | opacity: 1; 1240 | transform: scale(1); 1241 | } 1242 | } 1243 | 1244 | .jackInTheBox { 1245 | animation-name: jackInTheBox; 1246 | } 1247 | 1248 | /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ 1249 | 1250 | @keyframes rollIn { 1251 | from { 1252 | opacity: 0; 1253 | transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); 1254 | } 1255 | 1256 | to { 1257 | opacity: 1; 1258 | transform: none; 1259 | } 1260 | } 1261 | 1262 | .rollIn { 1263 | animation-name: rollIn; 1264 | } 1265 | 1266 | /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ 1267 | 1268 | @keyframes rollOut { 1269 | from { 1270 | opacity: 1; 1271 | } 1272 | 1273 | to { 1274 | opacity: 0; 1275 | transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); 1276 | } 1277 | } 1278 | 1279 | .rollOut { 1280 | animation-name: rollOut; 1281 | } 1282 | 1283 | @keyframes zoomIn { 1284 | from { 1285 | opacity: 0; 1286 | transform: scale3d(.3, .3, .3); 1287 | } 1288 | 1289 | 50% { 1290 | opacity: 1; 1291 | } 1292 | } 1293 | 1294 | .zoomIn { 1295 | animation-name: zoomIn; 1296 | } 1297 | 1298 | @keyframes zoomInDown { 1299 | from { 1300 | opacity: 0; 1301 | transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); 1302 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 1303 | } 1304 | 1305 | 60% { 1306 | opacity: 1; 1307 | transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); 1308 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 1309 | } 1310 | } 1311 | 1312 | .zoomInDown { 1313 | animation-name: zoomInDown; 1314 | } 1315 | 1316 | @keyframes zoomInLeft { 1317 | from { 1318 | opacity: 0; 1319 | transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); 1320 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 1321 | } 1322 | 1323 | 60% { 1324 | opacity: 1; 1325 | transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); 1326 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 1327 | } 1328 | } 1329 | 1330 | .zoomInLeft { 1331 | animation-name: zoomInLeft; 1332 | } 1333 | 1334 | @keyframes zoomInRight { 1335 | from { 1336 | opacity: 0; 1337 | transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); 1338 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 1339 | } 1340 | 1341 | 60% { 1342 | opacity: 1; 1343 | transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); 1344 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 1345 | } 1346 | } 1347 | 1348 | .zoomInRight { 1349 | animation-name: zoomInRight; 1350 | } 1351 | 1352 | @keyframes zoomInUp { 1353 | from { 1354 | opacity: 0; 1355 | transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); 1356 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 1357 | } 1358 | 1359 | 60% { 1360 | opacity: 1; 1361 | transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); 1362 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 1363 | } 1364 | } 1365 | 1366 | .zoomInUp { 1367 | animation-name: zoomInUp; 1368 | } 1369 | 1370 | @keyframes zoomOut { 1371 | from { 1372 | opacity: 1; 1373 | } 1374 | 1375 | 50% { 1376 | opacity: 0; 1377 | transform: scale3d(.3, .3, .3); 1378 | } 1379 | 1380 | to { 1381 | opacity: 0; 1382 | } 1383 | } 1384 | 1385 | .zoomOut { 1386 | animation-name: zoomOut; 1387 | } 1388 | 1389 | @keyframes zoomOutDown { 1390 | 40% { 1391 | opacity: 1; 1392 | transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); 1393 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 1394 | } 1395 | 1396 | to { 1397 | opacity: 0; 1398 | transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); 1399 | transform-origin: center bottom; 1400 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 1401 | } 1402 | } 1403 | 1404 | .zoomOutDown { 1405 | animation-name: zoomOutDown; 1406 | } 1407 | 1408 | @keyframes zoomOutLeft { 1409 | 40% { 1410 | opacity: 1; 1411 | transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); 1412 | } 1413 | 1414 | to { 1415 | opacity: 0; 1416 | transform: scale(.1) translate3d(-2000px, 0, 0); 1417 | transform-origin: left center; 1418 | } 1419 | } 1420 | 1421 | .zoomOutLeft { 1422 | animation-name: zoomOutLeft; 1423 | } 1424 | 1425 | @keyframes zoomOutRight { 1426 | 40% { 1427 | opacity: 1; 1428 | transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); 1429 | } 1430 | 1431 | to { 1432 | opacity: 0; 1433 | transform: scale(.1) translate3d(2000px, 0, 0); 1434 | transform-origin: right center; 1435 | } 1436 | } 1437 | 1438 | .zoomOutRight { 1439 | animation-name: zoomOutRight; 1440 | } 1441 | 1442 | @keyframes zoomOutUp { 1443 | 40% { 1444 | opacity: 1; 1445 | transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); 1446 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 1447 | } 1448 | 1449 | to { 1450 | opacity: 0; 1451 | transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); 1452 | transform-origin: center bottom; 1453 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 1454 | } 1455 | } 1456 | 1457 | .zoomOutUp { 1458 | animation-name: zoomOutUp; 1459 | } 1460 | 1461 | @keyframes slideInDown { 1462 | from { 1463 | transform: translate3d(0, -100%, 0); 1464 | visibility: visible; 1465 | } 1466 | 1467 | to { 1468 | transform: translate3d(0, 0, 0); 1469 | } 1470 | } 1471 | 1472 | .slideInDown { 1473 | animation-name: slideInDown; 1474 | } 1475 | 1476 | @keyframes slideInLeft { 1477 | from { 1478 | transform: translate3d(-100%, 0, 0); 1479 | visibility: visible; 1480 | } 1481 | 1482 | to { 1483 | transform: translate3d(0, 0, 0); 1484 | } 1485 | } 1486 | 1487 | .slideInLeft { 1488 | animation-name: slideInLeft; 1489 | } 1490 | 1491 | @keyframes slideInRight { 1492 | from { 1493 | transform: translate3d(100%, 0, 0); 1494 | visibility: visible; 1495 | } 1496 | 1497 | to { 1498 | transform: translate3d(0, 0, 0); 1499 | } 1500 | } 1501 | 1502 | .slideInRight { 1503 | animation-name: slideInRight; 1504 | } 1505 | 1506 | @keyframes slideInUp { 1507 | from { 1508 | transform: translate3d(0, 100%, 0); 1509 | visibility: visible; 1510 | } 1511 | 1512 | to { 1513 | transform: translate3d(0, 0, 0); 1514 | } 1515 | } 1516 | 1517 | .slideInUp { 1518 | animation-name: slideInUp; 1519 | } 1520 | 1521 | @keyframes slideOutDown { 1522 | from { 1523 | transform: translate3d(0, 0, 0); 1524 | } 1525 | 1526 | to { 1527 | visibility: hidden; 1528 | transform: translate3d(0, 100%, 0); 1529 | } 1530 | } 1531 | 1532 | .slideOutDown { 1533 | animation-name: slideOutDown; 1534 | } 1535 | 1536 | @keyframes slideOutLeft { 1537 | from { 1538 | transform: translate3d(0, 0, 0); 1539 | } 1540 | 1541 | to { 1542 | visibility: hidden; 1543 | transform: translate3d(-100%, 0, 0); 1544 | } 1545 | } 1546 | 1547 | .slideOutLeft { 1548 | animation-name: slideOutLeft; 1549 | } 1550 | 1551 | @keyframes slideOutRight { 1552 | from { 1553 | transform: translate3d(0, 0, 0); 1554 | } 1555 | 1556 | to { 1557 | visibility: hidden; 1558 | transform: translate3d(100%, 0, 0); 1559 | } 1560 | } 1561 | 1562 | .slideOutRight { 1563 | animation-name: slideOutRight; 1564 | } 1565 | 1566 | @keyframes slideOutUp { 1567 | from { 1568 | transform: translate3d(0, 0, 0); 1569 | } 1570 | 1571 | to { 1572 | visibility: hidden; 1573 | transform: translate3d(0, -100%, 0); 1574 | } 1575 | } 1576 | 1577 | .slideOutUp { 1578 | animation-name: slideOutUp; 1579 | } 1580 | -------------------------------------------------------------------------------- /GUI/css/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-color: rgb(211, 242, 174); 3 | } 4 | 5 | .hed { 6 | padding: 20px 100px 5px 100px; 7 | background-color: teal; 8 | color: white; 9 | border-bottom: 10px; 10 | } 11 | 12 | .sub-hed { 13 | padding: 10px 0px 10px 0px; 14 | } 15 | 16 | .pad-up { 17 | padding-top: 10px; 18 | } 19 | 20 | .cont1 { 21 | padding: 10px 0px 10px 0px; 22 | background-color: rgb(220,80,0); 23 | border-radius: 10px; 24 | } 25 | 26 | .cont2 { 27 | padding: 10px 0px 10px 0px; 28 | background-color: rgb(220,190,0); 29 | border-radius: 10px; 30 | } 31 | 32 | .fut { 33 | font-size: 13.5px; 34 | font-weight: bold; 35 | } 36 | -------------------------------------------------------------------------------- /GUI/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SatoshiNextTechLab/BlockSCM/d5886437baa3ede25013afc3f403ee6dc2b33175/GUI/img/favicon.png -------------------------------------------------------------------------------- /GUI/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SatoshiNextTechLab/BlockSCM/d5886437baa3ede25013afc3f403ee6dc2b33175/GUI/img/logo.png -------------------------------------------------------------------------------- /GUI/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Spare Route Directory 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 23 | 24 | 25 |
26 |
27 | 28 |
29 |

Decentralized Spare Route Service

30 |
31 | 32 |
33 | 34 |
35 | 36 |
37 |

Send Parts to Manufacturer

38 |
39 | 40 |
41 | 42 | 43 |
44 | 45 |
46 | 47 | 48 |
49 | 50 |
51 | 52 | 53 |
54 | 55 |
56 | 57 | 58 |
59 | 60 |
61 | 62 |
63 |
64 | 65 |
66 |
67 | 68 |
69 |

Use Parts Sent By OEM

70 |
71 | 72 |
73 | 74 | 75 |
76 | 77 |
78 | 79 | 80 |
81 | 82 |
83 | 84 |
85 | 86 |
87 | Remaining Parts : 88 | 89 | 90 |
91 |
92 | 93 |
94 |
95 |
96 |

Vehicle To Dealer

97 |
98 |
99 | 100 | 101 |
102 |
103 | Vehicle Name : 104 | 105 |
106 |
107 | 108 | 109 |
110 |
111 | 112 |
113 |
114 |
115 |
116 | 117 | 118 | 119 | 120 |
121 | 122 | 123 | 124 |
125 |
126 |
127 |
128 | Made with By Satoshi Lab, Next Tech 129 |
130 |
131 |
132 | 133 | 134 | 135 | 542 | 543 | 544 | 545 | -------------------------------------------------------------------------------- /GUI/js/main.js: -------------------------------------------------------------------------------- 1 | function init() { 2 | $(".hed").addClass("animated fadeInDown"); 3 | $(".cont1").addClass("animated fadeInDown"); 4 | $(".cont2").addClass("animated fadeInDown"); 5 | $(".cont3").addClass("animated fadeInDown"); 6 | } 7 | 8 | $(document).ready(init()); 9 | -------------------------------------------------------------------------------- /GUI/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "servicechain", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "abbrev": { 8 | "version": "1.1.1", 9 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 10 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 11 | "dev": true 12 | }, 13 | "accepts": { 14 | "version": "1.3.4", 15 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", 16 | "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", 17 | "dev": true, 18 | "requires": { 19 | "mime-types": "2.1.17", 20 | "negotiator": "0.6.1" 21 | } 22 | }, 23 | "after": { 24 | "version": "0.8.1", 25 | "resolved": "https://registry.npmjs.org/after/-/after-0.8.1.tgz", 26 | "integrity": "sha1-q11PuIP1loFtNRX495HAr0ht1ic=", 27 | "dev": true 28 | }, 29 | "ajv": { 30 | "version": "4.11.8", 31 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", 32 | "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", 33 | "dev": true, 34 | "requires": { 35 | "co": "4.6.0", 36 | "json-stable-stringify": "1.0.1" 37 | } 38 | }, 39 | "ansi-regex": { 40 | "version": "2.1.1", 41 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 42 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 43 | "dev": true 44 | }, 45 | "ansi-styles": { 46 | "version": "2.2.1", 47 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 48 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 49 | "dev": true 50 | }, 51 | "anymatch": { 52 | "version": "1.3.2", 53 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", 54 | "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", 55 | "dev": true, 56 | "requires": { 57 | "micromatch": "2.3.11", 58 | "normalize-path": "2.1.1" 59 | } 60 | }, 61 | "arr-diff": { 62 | "version": "2.0.0", 63 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", 64 | "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", 65 | "dev": true, 66 | "requires": { 67 | "arr-flatten": "1.1.0" 68 | } 69 | }, 70 | "arr-flatten": { 71 | "version": "1.1.0", 72 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 73 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", 74 | "dev": true 75 | }, 76 | "array-unique": { 77 | "version": "0.2.1", 78 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", 79 | "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", 80 | "dev": true 81 | }, 82 | "arraybuffer.slice": { 83 | "version": "0.0.6", 84 | "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", 85 | "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", 86 | "dev": true 87 | }, 88 | "asn1": { 89 | "version": "0.2.3", 90 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 91 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", 92 | "dev": true 93 | }, 94 | "assert-plus": { 95 | "version": "0.2.0", 96 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", 97 | "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", 98 | "dev": true 99 | }, 100 | "async": { 101 | "version": "1.5.2", 102 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", 103 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", 104 | "dev": true 105 | }, 106 | "async-each": { 107 | "version": "1.0.1", 108 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", 109 | "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", 110 | "dev": true 111 | }, 112 | "async-each-series": { 113 | "version": "0.1.1", 114 | "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", 115 | "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", 116 | "dev": true 117 | }, 118 | "asynckit": { 119 | "version": "0.4.0", 120 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 121 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 122 | "dev": true 123 | }, 124 | "aws-sign2": { 125 | "version": "0.6.0", 126 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", 127 | "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", 128 | "dev": true 129 | }, 130 | "aws4": { 131 | "version": "1.6.0", 132 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", 133 | "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", 134 | "dev": true 135 | }, 136 | "backo2": { 137 | "version": "1.0.2", 138 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 139 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", 140 | "dev": true 141 | }, 142 | "balanced-match": { 143 | "version": "1.0.0", 144 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 145 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 146 | "dev": true 147 | }, 148 | "base64-arraybuffer": { 149 | "version": "0.1.5", 150 | "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", 151 | "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", 152 | "dev": true 153 | }, 154 | "base64id": { 155 | "version": "0.1.0", 156 | "resolved": "https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz", 157 | "integrity": "sha1-As4P3u4M709ACA4ec+g08LG/zj8=", 158 | "dev": true 159 | }, 160 | "batch": { 161 | "version": "0.5.3", 162 | "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", 163 | "integrity": "sha1-PzQU84AyF0O/wQQvmoP/HVgk1GQ=", 164 | "dev": true 165 | }, 166 | "bcrypt-pbkdf": { 167 | "version": "1.0.1", 168 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 169 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 170 | "dev": true, 171 | "optional": true, 172 | "requires": { 173 | "tweetnacl": "0.14.5" 174 | } 175 | }, 176 | "better-assert": { 177 | "version": "1.0.2", 178 | "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", 179 | "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", 180 | "dev": true, 181 | "requires": { 182 | "callsite": "1.0.0" 183 | } 184 | }, 185 | "bignumber.js": { 186 | "version": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934" 187 | }, 188 | "binary-extensions": { 189 | "version": "1.11.0", 190 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", 191 | "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", 192 | "dev": true 193 | }, 194 | "blob": { 195 | "version": "0.0.4", 196 | "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", 197 | "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", 198 | "dev": true 199 | }, 200 | "boom": { 201 | "version": "2.10.1", 202 | "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", 203 | "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", 204 | "dev": true, 205 | "requires": { 206 | "hoek": "4.2.1" 207 | } 208 | }, 209 | "brace-expansion": { 210 | "version": "1.1.8", 211 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 212 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 213 | "dev": true, 214 | "requires": { 215 | "balanced-match": "1.0.0", 216 | "concat-map": "0.0.1" 217 | } 218 | }, 219 | "braces": { 220 | "version": "1.8.5", 221 | "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", 222 | "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", 223 | "dev": true, 224 | "requires": { 225 | "expand-range": "1.8.2", 226 | "preserve": "0.2.0", 227 | "repeat-element": "1.1.2" 228 | } 229 | }, 230 | "browser-sync": { 231 | "version": "2.18.13", 232 | "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.18.13.tgz", 233 | "integrity": "sha512-qhdrmgshVGwweogT/bdOKkZDxVxqiF4+9mibaDeAxvDBeoUtdgABk5x7YQ1KCcLRchAfv8AVtp9NuITl5CTNqg==", 234 | "dev": true, 235 | "requires": { 236 | "browser-sync-client": "2.5.1", 237 | "browser-sync-ui": "0.6.3", 238 | "bs-recipes": "1.3.4", 239 | "chokidar": "1.7.0", 240 | "connect": "3.5.0", 241 | "dev-ip": "1.0.1", 242 | "easy-extender": "2.3.2", 243 | "eazy-logger": "3.0.2", 244 | "emitter-steward": "1.0.0", 245 | "fs-extra": "3.0.1", 246 | "http-proxy": "1.15.2", 247 | "immutable": "3.8.1", 248 | "localtunnel": "1.8.3", 249 | "micromatch": "2.3.11", 250 | "opn": "4.0.2", 251 | "portscanner": "2.1.1", 252 | "qs": "6.2.1", 253 | "resp-modifier": "6.0.2", 254 | "rx": "4.1.0", 255 | "serve-index": "1.8.0", 256 | "serve-static": "1.12.2", 257 | "server-destroy": "1.0.1", 258 | "socket.io": "1.6.0", 259 | "socket.io-client": "1.6.0", 260 | "ua-parser-js": "0.7.12", 261 | "yargs": "6.4.0" 262 | } 263 | }, 264 | "browser-sync-client": { 265 | "version": "2.5.1", 266 | "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.5.1.tgz", 267 | "integrity": "sha1-7BrWmknC4tS2RbGLHAbCmz2a+Os=", 268 | "dev": true, 269 | "requires": { 270 | "etag": "1.8.1", 271 | "fresh": "0.3.0" 272 | } 273 | }, 274 | "browser-sync-ui": { 275 | "version": "0.6.3", 276 | "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-0.6.3.tgz", 277 | "integrity": "sha1-ZApTfBgGiTA9W+krxHa568RBwLw=", 278 | "dev": true, 279 | "requires": { 280 | "async-each-series": "0.1.1", 281 | "connect-history-api-fallback": "1.5.0", 282 | "immutable": "3.8.1", 283 | "server-destroy": "1.0.1", 284 | "stream-throttle": "0.1.3", 285 | "weinre": "2.0.0-pre-I0Z7U9OV" 286 | } 287 | }, 288 | "bs-recipes": { 289 | "version": "1.3.4", 290 | "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", 291 | "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", 292 | "dev": true 293 | }, 294 | "builtin-modules": { 295 | "version": "1.1.1", 296 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 297 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 298 | "dev": true 299 | }, 300 | "callsite": { 301 | "version": "1.0.0", 302 | "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", 303 | "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", 304 | "dev": true 305 | }, 306 | "camelcase": { 307 | "version": "1.2.1", 308 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", 309 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", 310 | "dev": true 311 | }, 312 | "caseless": { 313 | "version": "0.12.0", 314 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 315 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 316 | "dev": true 317 | }, 318 | "chalk": { 319 | "version": "1.1.3", 320 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 321 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 322 | "dev": true, 323 | "requires": { 324 | "ansi-styles": "2.2.1", 325 | "escape-string-regexp": "1.0.5", 326 | "has-ansi": "2.0.0", 327 | "strip-ansi": "3.0.1", 328 | "supports-color": "2.0.0" 329 | } 330 | }, 331 | "chokidar": { 332 | "version": "1.7.0", 333 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", 334 | "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", 335 | "dev": true, 336 | "requires": { 337 | "anymatch": "1.3.2", 338 | "async-each": "1.0.1", 339 | "fsevents": "1.1.3", 340 | "glob-parent": "2.0.0", 341 | "inherits": "2.0.3", 342 | "is-binary-path": "1.0.1", 343 | "is-glob": "2.0.1", 344 | "path-is-absolute": "1.0.1", 345 | "readdirp": "2.1.0" 346 | } 347 | }, 348 | "cliui": { 349 | "version": "3.2.0", 350 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", 351 | "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", 352 | "dev": true, 353 | "requires": { 354 | "string-width": "1.0.2", 355 | "strip-ansi": "3.0.1", 356 | "wrap-ansi": "2.1.0" 357 | } 358 | }, 359 | "co": { 360 | "version": "4.6.0", 361 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 362 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 363 | "dev": true 364 | }, 365 | "code-point-at": { 366 | "version": "1.1.0", 367 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 368 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 369 | "dev": true 370 | }, 371 | "combined-stream": { 372 | "version": "1.0.5", 373 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", 374 | "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", 375 | "dev": true, 376 | "requires": { 377 | "delayed-stream": "1.0.0" 378 | } 379 | }, 380 | "commander": { 381 | "version": "2.12.2", 382 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", 383 | "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==", 384 | "dev": true 385 | }, 386 | "component-bind": { 387 | "version": "1.0.0", 388 | "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", 389 | "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", 390 | "dev": true 391 | }, 392 | "component-emitter": { 393 | "version": "1.1.2", 394 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", 395 | "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", 396 | "dev": true 397 | }, 398 | "component-inherit": { 399 | "version": "0.0.3", 400 | "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", 401 | "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", 402 | "dev": true 403 | }, 404 | "concat-map": { 405 | "version": "0.0.1", 406 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 407 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 408 | "dev": true 409 | }, 410 | "connect": { 411 | "version": "3.5.0", 412 | "resolved": "https://registry.npmjs.org/connect/-/connect-3.5.0.tgz", 413 | "integrity": "sha1-s1dSWgtMH1BZnNmD4dnv7qlncZg=", 414 | "dev": true, 415 | "requires": { 416 | "debug": "2.2.0", 417 | "finalhandler": "0.5.0", 418 | "parseurl": "1.3.2", 419 | "utils-merge": "1.0.0" 420 | } 421 | }, 422 | "connect-history-api-fallback": { 423 | "version": "1.5.0", 424 | "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", 425 | "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", 426 | "dev": true 427 | }, 428 | "connect-logger": { 429 | "version": "0.0.1", 430 | "resolved": "https://registry.npmjs.org/connect-logger/-/connect-logger-0.0.1.tgz", 431 | "integrity": "sha1-TZmZeKHSC7RgjnzUNNdBZSJVF0s=", 432 | "dev": true, 433 | "requires": { 434 | "moment": "2.20.0" 435 | } 436 | }, 437 | "cookie": { 438 | "version": "0.3.1", 439 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 440 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", 441 | "dev": true 442 | }, 443 | "core-util-is": { 444 | "version": "1.0.2", 445 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 446 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 447 | "dev": true 448 | }, 449 | "cryptiles": { 450 | "version": "2.0.5", 451 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", 452 | "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", 453 | "dev": true, 454 | "requires": { 455 | "boom": "2.10.1" 456 | } 457 | }, 458 | "crypto-js": { 459 | "version": "3.1.8", 460 | "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz", 461 | "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=" 462 | }, 463 | "dashdash": { 464 | "version": "1.14.1", 465 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 466 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 467 | "dev": true, 468 | "requires": { 469 | "assert-plus": "1.0.0" 470 | }, 471 | "dependencies": { 472 | "assert-plus": { 473 | "version": "1.0.0", 474 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 475 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 476 | "dev": true 477 | } 478 | } 479 | }, 480 | "debug": { 481 | "version": "2.2.0", 482 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", 483 | "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", 484 | "dev": true, 485 | "requires": { 486 | "ms": "0.7.1" 487 | } 488 | }, 489 | "decamelize": { 490 | "version": "1.2.0", 491 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 492 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 493 | "dev": true 494 | }, 495 | "delayed-stream": { 496 | "version": "1.0.0", 497 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 498 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 499 | "dev": true 500 | }, 501 | "depd": { 502 | "version": "1.1.1", 503 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", 504 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", 505 | "dev": true 506 | }, 507 | "destroy": { 508 | "version": "1.0.4", 509 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 510 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", 511 | "dev": true 512 | }, 513 | "dev-ip": { 514 | "version": "1.0.1", 515 | "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", 516 | "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", 517 | "dev": true 518 | }, 519 | "easy-extender": { 520 | "version": "2.3.2", 521 | "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.2.tgz", 522 | "integrity": "sha1-PTJI/r4rFZYHMW2PnPSRwWZIIh0=", 523 | "dev": true, 524 | "requires": { 525 | "lodash": "3.10.1" 526 | }, 527 | "dependencies": { 528 | "lodash": { 529 | "version": "3.10.1", 530 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", 531 | "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", 532 | "dev": true 533 | } 534 | } 535 | }, 536 | "eazy-logger": { 537 | "version": "3.0.2", 538 | "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", 539 | "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=", 540 | "dev": true, 541 | "requires": { 542 | "tfunk": "3.1.0" 543 | } 544 | }, 545 | "ecc-jsbn": { 546 | "version": "0.1.1", 547 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 548 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 549 | "dev": true, 550 | "optional": true, 551 | "requires": { 552 | "jsbn": "0.1.1" 553 | } 554 | }, 555 | "ee-first": { 556 | "version": "1.1.1", 557 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 558 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", 559 | "dev": true 560 | }, 561 | "emitter-steward": { 562 | "version": "1.0.0", 563 | "resolved": "https://registry.npmjs.org/emitter-steward/-/emitter-steward-1.0.0.tgz", 564 | "integrity": "sha1-80Ea3pdYp1Zd+Eiy2gy70bRsvWQ=", 565 | "dev": true 566 | }, 567 | "encodeurl": { 568 | "version": "1.0.1", 569 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", 570 | "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", 571 | "dev": true 572 | }, 573 | "engine.io": { 574 | "version": "1.8.0", 575 | "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.0.tgz", 576 | "integrity": "sha1-PutfJky3XbvsG6rqJtYfWk6s4qo=", 577 | "dev": true, 578 | "requires": { 579 | "accepts": "1.3.3", 580 | "base64id": "0.1.0", 581 | "cookie": "0.3.1", 582 | "debug": "2.3.3", 583 | "engine.io-parser": "1.3.1", 584 | "ws": "1.1.1" 585 | }, 586 | "dependencies": { 587 | "accepts": { 588 | "version": "1.3.3", 589 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", 590 | "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", 591 | "dev": true, 592 | "requires": { 593 | "mime-types": "2.1.17", 594 | "negotiator": "0.6.1" 595 | } 596 | }, 597 | "debug": { 598 | "version": "2.3.3", 599 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", 600 | "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", 601 | "dev": true, 602 | "requires": { 603 | "ms": "0.7.2" 604 | } 605 | }, 606 | "ms": { 607 | "version": "0.7.2", 608 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 609 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 610 | "dev": true 611 | } 612 | } 613 | }, 614 | "engine.io-client": { 615 | "version": "1.8.0", 616 | "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.0.tgz", 617 | "integrity": "sha1-e3MOQSdBQIdZbZvjyI0rxf22z1w=", 618 | "dev": true, 619 | "requires": { 620 | "component-emitter": "1.2.1", 621 | "component-inherit": "0.0.3", 622 | "debug": "2.3.3", 623 | "engine.io-parser": "1.3.1", 624 | "has-cors": "1.1.0", 625 | "indexof": "0.0.1", 626 | "parsejson": "0.0.3", 627 | "parseqs": "0.0.5", 628 | "parseuri": "0.0.5", 629 | "ws": "1.1.1", 630 | "xmlhttprequest-ssl": "1.5.3", 631 | "yeast": "0.1.2" 632 | }, 633 | "dependencies": { 634 | "component-emitter": { 635 | "version": "1.2.1", 636 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 637 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", 638 | "dev": true 639 | }, 640 | "debug": { 641 | "version": "2.3.3", 642 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", 643 | "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", 644 | "dev": true, 645 | "requires": { 646 | "ms": "0.7.2" 647 | } 648 | }, 649 | "ms": { 650 | "version": "0.7.2", 651 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 652 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 653 | "dev": true 654 | } 655 | } 656 | }, 657 | "engine.io-parser": { 658 | "version": "1.3.1", 659 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.1.tgz", 660 | "integrity": "sha1-lVTxrjMQfW+9FwylRm0vgz9qB88=", 661 | "dev": true, 662 | "requires": { 663 | "after": "0.8.1", 664 | "arraybuffer.slice": "0.0.6", 665 | "base64-arraybuffer": "0.1.5", 666 | "blob": "0.0.4", 667 | "has-binary": "0.1.6", 668 | "wtf-8": "1.0.0" 669 | }, 670 | "dependencies": { 671 | "has-binary": { 672 | "version": "0.1.6", 673 | "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.6.tgz", 674 | "integrity": "sha1-JTJvOc+k9hath4eJTjryz7x7bhA=", 675 | "dev": true, 676 | "requires": { 677 | "isarray": "0.0.1" 678 | } 679 | }, 680 | "isarray": { 681 | "version": "0.0.1", 682 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 683 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 684 | "dev": true 685 | } 686 | } 687 | }, 688 | "error-ex": { 689 | "version": "1.3.1", 690 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", 691 | "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", 692 | "dev": true, 693 | "requires": { 694 | "is-arrayish": "0.2.1" 695 | } 696 | }, 697 | "escape-html": { 698 | "version": "1.0.3", 699 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 700 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", 701 | "dev": true 702 | }, 703 | "escape-string-regexp": { 704 | "version": "1.0.5", 705 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 706 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 707 | "dev": true 708 | }, 709 | "etag": { 710 | "version": "1.8.1", 711 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 712 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", 713 | "dev": true 714 | }, 715 | "eventemitter3": { 716 | "version": "1.2.0", 717 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", 718 | "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", 719 | "dev": true 720 | }, 721 | "expand-brackets": { 722 | "version": "0.1.5", 723 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", 724 | "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", 725 | "dev": true, 726 | "requires": { 727 | "is-posix-bracket": "0.1.1" 728 | } 729 | }, 730 | "expand-range": { 731 | "version": "1.8.2", 732 | "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", 733 | "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", 734 | "dev": true, 735 | "requires": { 736 | "fill-range": "2.2.3" 737 | } 738 | }, 739 | "express": { 740 | "version": "2.5.11", 741 | "resolved": "https://registry.npmjs.org/express/-/express-2.5.11.tgz", 742 | "integrity": "sha1-TOjqHzY15p5J8Ou0l7aksKUc5vA=", 743 | "dev": true, 744 | "requires": { 745 | "connect": "1.9.2", 746 | "mime": "1.2.4", 747 | "mkdirp": "0.3.0", 748 | "qs": "0.4.2" 749 | }, 750 | "dependencies": { 751 | "connect": { 752 | "version": "1.9.2", 753 | "resolved": "https://registry.npmjs.org/connect/-/connect-1.9.2.tgz", 754 | "integrity": "sha1-QogKIulDiuWait105Df1iujlKAc=", 755 | "dev": true, 756 | "requires": { 757 | "formidable": "1.0.17", 758 | "mime": "1.2.4", 759 | "qs": "0.4.2" 760 | } 761 | }, 762 | "qs": { 763 | "version": "0.4.2", 764 | "resolved": "https://registry.npmjs.org/qs/-/qs-0.4.2.tgz", 765 | "integrity": "sha1-PKxMhh43GoycR3CsI82o3mObjl8=", 766 | "dev": true 767 | } 768 | } 769 | }, 770 | "extend": { 771 | "version": "3.0.1", 772 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 773 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", 774 | "dev": true 775 | }, 776 | "extglob": { 777 | "version": "0.3.2", 778 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", 779 | "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", 780 | "dev": true, 781 | "requires": { 782 | "is-extglob": "1.0.0" 783 | } 784 | }, 785 | "extsprintf": { 786 | "version": "1.3.0", 787 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 788 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 789 | "dev": true 790 | }, 791 | "filename-regex": { 792 | "version": "2.0.1", 793 | "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", 794 | "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", 795 | "dev": true 796 | }, 797 | "fill-range": { 798 | "version": "2.2.3", 799 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", 800 | "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", 801 | "dev": true, 802 | "requires": { 803 | "is-number": "2.1.0", 804 | "isobject": "2.1.0", 805 | "randomatic": "1.1.7", 806 | "repeat-element": "1.1.2", 807 | "repeat-string": "1.6.1" 808 | } 809 | }, 810 | "finalhandler": { 811 | "version": "0.5.0", 812 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.5.0.tgz", 813 | "integrity": "sha1-6VCKvs6bbbqHGmlCodeRG5GRGsc=", 814 | "dev": true, 815 | "requires": { 816 | "debug": "2.2.0", 817 | "escape-html": "1.0.3", 818 | "on-finished": "2.3.0", 819 | "statuses": "1.3.1", 820 | "unpipe": "1.0.0" 821 | } 822 | }, 823 | "find-up": { 824 | "version": "1.1.2", 825 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", 826 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", 827 | "dev": true, 828 | "requires": { 829 | "path-exists": "2.1.0", 830 | "pinkie-promise": "2.0.1" 831 | } 832 | }, 833 | "for-in": { 834 | "version": "1.0.2", 835 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 836 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", 837 | "dev": true 838 | }, 839 | "for-own": { 840 | "version": "0.1.5", 841 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", 842 | "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", 843 | "dev": true, 844 | "requires": { 845 | "for-in": "1.0.2" 846 | } 847 | }, 848 | "forever-agent": { 849 | "version": "0.6.1", 850 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 851 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 852 | "dev": true 853 | }, 854 | "form-data": { 855 | "version": "2.1.4", 856 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", 857 | "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", 858 | "dev": true, 859 | "requires": { 860 | "asynckit": "0.4.0", 861 | "combined-stream": "1.0.5", 862 | "mime-types": "2.1.17" 863 | } 864 | }, 865 | "formidable": { 866 | "version": "1.0.17", 867 | "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.17.tgz", 868 | "integrity": "sha1-71SRSQ+UM7cF+qdyScmQKa40hVk=", 869 | "dev": true 870 | }, 871 | "fresh": { 872 | "version": "0.3.0", 873 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", 874 | "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=", 875 | "dev": true 876 | }, 877 | "fs-extra": { 878 | "version": "3.0.1", 879 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", 880 | "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", 881 | "dev": true, 882 | "requires": { 883 | "graceful-fs": "4.1.11", 884 | "jsonfile": "3.0.1", 885 | "universalify": "0.1.1" 886 | } 887 | }, 888 | "fsevents": { 889 | "version": "1.1.3", 890 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", 891 | "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", 892 | "dev": true, 893 | "optional": true, 894 | "requires": { 895 | "nan": "2.8.0", 896 | "node-pre-gyp": "0.6.39" 897 | }, 898 | "dependencies": { 899 | "abbrev": { 900 | "version": "1.1.0", 901 | "bundled": true, 902 | "dev": true, 903 | "optional": true 904 | }, 905 | "ajv": { 906 | "version": "4.11.8", 907 | "bundled": true, 908 | "dev": true, 909 | "optional": true, 910 | "requires": { 911 | "co": "4.6.0", 912 | "json-stable-stringify": "1.0.1" 913 | } 914 | }, 915 | "ansi-regex": { 916 | "version": "2.1.1", 917 | "bundled": true, 918 | "dev": true 919 | }, 920 | "aproba": { 921 | "version": "1.1.1", 922 | "bundled": true, 923 | "dev": true, 924 | "optional": true 925 | }, 926 | "are-we-there-yet": { 927 | "version": "1.1.4", 928 | "bundled": true, 929 | "dev": true, 930 | "optional": true, 931 | "requires": { 932 | "delegates": "1.0.0", 933 | "readable-stream": "2.2.9" 934 | } 935 | }, 936 | "asn1": { 937 | "version": "0.2.3", 938 | "bundled": true, 939 | "dev": true, 940 | "optional": true 941 | }, 942 | "assert-plus": { 943 | "version": "0.2.0", 944 | "bundled": true, 945 | "dev": true, 946 | "optional": true 947 | }, 948 | "asynckit": { 949 | "version": "0.4.0", 950 | "bundled": true, 951 | "dev": true, 952 | "optional": true 953 | }, 954 | "aws-sign2": { 955 | "version": "0.6.0", 956 | "bundled": true, 957 | "dev": true, 958 | "optional": true 959 | }, 960 | "aws4": { 961 | "version": "1.6.0", 962 | "bundled": true, 963 | "dev": true, 964 | "optional": true 965 | }, 966 | "balanced-match": { 967 | "version": "0.4.2", 968 | "bundled": true, 969 | "dev": true 970 | }, 971 | "bcrypt-pbkdf": { 972 | "version": "1.0.1", 973 | "bundled": true, 974 | "dev": true, 975 | "optional": true, 976 | "requires": { 977 | "tweetnacl": "0.14.5" 978 | } 979 | }, 980 | "block-stream": { 981 | "version": "0.0.9", 982 | "bundled": true, 983 | "dev": true, 984 | "requires": { 985 | "inherits": "2.0.3" 986 | } 987 | }, 988 | "boom": { 989 | "version": "2.10.1", 990 | "bundled": true, 991 | "dev": true, 992 | "requires": { 993 | "hoek": "4.2.1" 994 | } 995 | }, 996 | "brace-expansion": { 997 | "version": "1.1.7", 998 | "bundled": true, 999 | "dev": true, 1000 | "requires": { 1001 | "balanced-match": "0.4.2", 1002 | "concat-map": "0.0.1" 1003 | } 1004 | }, 1005 | "buffer-shims": { 1006 | "version": "1.0.0", 1007 | "bundled": true, 1008 | "dev": true 1009 | }, 1010 | "caseless": { 1011 | "version": "0.12.0", 1012 | "bundled": true, 1013 | "dev": true, 1014 | "optional": true 1015 | }, 1016 | "co": { 1017 | "version": "4.6.0", 1018 | "bundled": true, 1019 | "dev": true, 1020 | "optional": true 1021 | }, 1022 | "code-point-at": { 1023 | "version": "1.1.0", 1024 | "bundled": true, 1025 | "dev": true 1026 | }, 1027 | "combined-stream": { 1028 | "version": "1.0.5", 1029 | "bundled": true, 1030 | "dev": true, 1031 | "requires": { 1032 | "delayed-stream": "1.0.0" 1033 | } 1034 | }, 1035 | "concat-map": { 1036 | "version": "0.0.1", 1037 | "bundled": true, 1038 | "dev": true 1039 | }, 1040 | "console-control-strings": { 1041 | "version": "1.1.0", 1042 | "bundled": true, 1043 | "dev": true 1044 | }, 1045 | "core-util-is": { 1046 | "version": "1.0.2", 1047 | "bundled": true, 1048 | "dev": true 1049 | }, 1050 | "cryptiles": { 1051 | "version": "2.0.5", 1052 | "bundled": true, 1053 | "dev": true, 1054 | "requires": { 1055 | "boom": "2.10.1" 1056 | } 1057 | }, 1058 | "dashdash": { 1059 | "version": "1.14.1", 1060 | "bundled": true, 1061 | "dev": true, 1062 | "optional": true, 1063 | "requires": { 1064 | "assert-plus": "1.0.0" 1065 | }, 1066 | "dependencies": { 1067 | "assert-plus": { 1068 | "version": "1.0.0", 1069 | "bundled": true, 1070 | "dev": true, 1071 | "optional": true 1072 | } 1073 | } 1074 | }, 1075 | "debug": { 1076 | "version": "2.6.8", 1077 | "bundled": true, 1078 | "dev": true, 1079 | "optional": true, 1080 | "requires": { 1081 | "ms": "2.0.0" 1082 | } 1083 | }, 1084 | "deep-extend": { 1085 | "version": "0.4.2", 1086 | "bundled": true, 1087 | "dev": true, 1088 | "optional": true 1089 | }, 1090 | "delayed-stream": { 1091 | "version": "1.0.0", 1092 | "bundled": true, 1093 | "dev": true 1094 | }, 1095 | "delegates": { 1096 | "version": "1.0.0", 1097 | "bundled": true, 1098 | "dev": true, 1099 | "optional": true 1100 | }, 1101 | "detect-libc": { 1102 | "version": "1.0.2", 1103 | "bundled": true, 1104 | "dev": true, 1105 | "optional": true 1106 | }, 1107 | "ecc-jsbn": { 1108 | "version": "0.1.1", 1109 | "bundled": true, 1110 | "dev": true, 1111 | "optional": true, 1112 | "requires": { 1113 | "jsbn": "0.1.1" 1114 | } 1115 | }, 1116 | "extend": { 1117 | "version": "3.0.1", 1118 | "bundled": true, 1119 | "dev": true, 1120 | "optional": true 1121 | }, 1122 | "extsprintf": { 1123 | "version": "1.0.2", 1124 | "bundled": true, 1125 | "dev": true 1126 | }, 1127 | "forever-agent": { 1128 | "version": "0.6.1", 1129 | "bundled": true, 1130 | "dev": true, 1131 | "optional": true 1132 | }, 1133 | "form-data": { 1134 | "version": "2.1.4", 1135 | "bundled": true, 1136 | "dev": true, 1137 | "optional": true, 1138 | "requires": { 1139 | "asynckit": "0.4.0", 1140 | "combined-stream": "1.0.5", 1141 | "mime-types": "2.1.15" 1142 | } 1143 | }, 1144 | "fs.realpath": { 1145 | "version": "1.0.0", 1146 | "bundled": true, 1147 | "dev": true 1148 | }, 1149 | "fstream": { 1150 | "version": "1.0.11", 1151 | "bundled": true, 1152 | "dev": true, 1153 | "requires": { 1154 | "graceful-fs": "4.1.11", 1155 | "inherits": "2.0.3", 1156 | "mkdirp": "0.5.1", 1157 | "rimraf": "2.6.1" 1158 | } 1159 | }, 1160 | "fstream-ignore": { 1161 | "version": "1.0.5", 1162 | "bundled": true, 1163 | "dev": true, 1164 | "optional": true, 1165 | "requires": { 1166 | "fstream": "1.0.11", 1167 | "inherits": "2.0.3", 1168 | "minimatch": "3.0.4" 1169 | } 1170 | }, 1171 | "gauge": { 1172 | "version": "2.7.4", 1173 | "bundled": true, 1174 | "dev": true, 1175 | "optional": true, 1176 | "requires": { 1177 | "aproba": "1.1.1", 1178 | "console-control-strings": "1.1.0", 1179 | "has-unicode": "2.0.1", 1180 | "object-assign": "4.1.1", 1181 | "signal-exit": "3.0.2", 1182 | "string-width": "1.0.2", 1183 | "strip-ansi": "3.0.1", 1184 | "wide-align": "1.1.2" 1185 | } 1186 | }, 1187 | "getpass": { 1188 | "version": "0.1.7", 1189 | "bundled": true, 1190 | "dev": true, 1191 | "optional": true, 1192 | "requires": { 1193 | "assert-plus": "1.0.0" 1194 | }, 1195 | "dependencies": { 1196 | "assert-plus": { 1197 | "version": "1.0.0", 1198 | "bundled": true, 1199 | "dev": true, 1200 | "optional": true 1201 | } 1202 | } 1203 | }, 1204 | "glob": { 1205 | "version": "7.1.2", 1206 | "bundled": true, 1207 | "dev": true, 1208 | "requires": { 1209 | "fs.realpath": "1.0.0", 1210 | "inflight": "1.0.6", 1211 | "inherits": "2.0.3", 1212 | "minimatch": "3.0.4", 1213 | "once": "1.4.0", 1214 | "path-is-absolute": "1.0.1" 1215 | } 1216 | }, 1217 | "graceful-fs": { 1218 | "version": "4.1.11", 1219 | "bundled": true, 1220 | "dev": true 1221 | }, 1222 | "har-schema": { 1223 | "version": "1.0.5", 1224 | "bundled": true, 1225 | "dev": true, 1226 | "optional": true 1227 | }, 1228 | "har-validator": { 1229 | "version": "4.2.1", 1230 | "bundled": true, 1231 | "dev": true, 1232 | "optional": true, 1233 | "requires": { 1234 | "ajv": "4.11.8", 1235 | "har-schema": "1.0.5" 1236 | } 1237 | }, 1238 | "has-unicode": { 1239 | "version": "2.0.1", 1240 | "bundled": true, 1241 | "dev": true, 1242 | "optional": true 1243 | }, 1244 | "hawk": { 1245 | "version": "3.1.3", 1246 | "bundled": true, 1247 | "dev": true, 1248 | "requires": { 1249 | "boom": "2.10.1", 1250 | "cryptiles": "2.0.5", 1251 | "hoek": "4.2.1", 1252 | "sntp": "1.0.9" 1253 | } 1254 | }, 1255 | "hoek": { 1256 | "version": "4.2.1", 1257 | "bundled": true, 1258 | "dev": true 1259 | }, 1260 | "http-signature": { 1261 | "version": "1.1.1", 1262 | "bundled": true, 1263 | "dev": true, 1264 | "optional": true, 1265 | "requires": { 1266 | "assert-plus": "0.2.0", 1267 | "jsprim": "1.4.0", 1268 | "sshpk": "1.13.0" 1269 | } 1270 | }, 1271 | "inflight": { 1272 | "version": "1.0.6", 1273 | "bundled": true, 1274 | "dev": true, 1275 | "requires": { 1276 | "once": "1.4.0", 1277 | "wrappy": "1.0.2" 1278 | } 1279 | }, 1280 | "inherits": { 1281 | "version": "2.0.3", 1282 | "bundled": true, 1283 | "dev": true 1284 | }, 1285 | "ini": { 1286 | "version": "1.3.4", 1287 | "bundled": true, 1288 | "dev": true, 1289 | "optional": true 1290 | }, 1291 | "is-fullwidth-code-point": { 1292 | "version": "1.0.0", 1293 | "bundled": true, 1294 | "dev": true, 1295 | "requires": { 1296 | "number-is-nan": "1.0.1" 1297 | } 1298 | }, 1299 | "is-typedarray": { 1300 | "version": "1.0.0", 1301 | "bundled": true, 1302 | "dev": true, 1303 | "optional": true 1304 | }, 1305 | "isarray": { 1306 | "version": "1.0.0", 1307 | "bundled": true, 1308 | "dev": true 1309 | }, 1310 | "isstream": { 1311 | "version": "0.1.2", 1312 | "bundled": true, 1313 | "dev": true, 1314 | "optional": true 1315 | }, 1316 | "jodid25519": { 1317 | "version": "1.0.2", 1318 | "bundled": true, 1319 | "dev": true, 1320 | "optional": true, 1321 | "requires": { 1322 | "jsbn": "0.1.1" 1323 | } 1324 | }, 1325 | "jsbn": { 1326 | "version": "0.1.1", 1327 | "bundled": true, 1328 | "dev": true, 1329 | "optional": true 1330 | }, 1331 | "json-schema": { 1332 | "version": "0.2.3", 1333 | "bundled": true, 1334 | "dev": true, 1335 | "optional": true 1336 | }, 1337 | "json-stable-stringify": { 1338 | "version": "1.0.1", 1339 | "bundled": true, 1340 | "dev": true, 1341 | "optional": true, 1342 | "requires": { 1343 | "jsonify": "0.0.0" 1344 | } 1345 | }, 1346 | "json-stringify-safe": { 1347 | "version": "5.0.1", 1348 | "bundled": true, 1349 | "dev": true, 1350 | "optional": true 1351 | }, 1352 | "jsonify": { 1353 | "version": "0.0.0", 1354 | "bundled": true, 1355 | "dev": true, 1356 | "optional": true 1357 | }, 1358 | "jsprim": { 1359 | "version": "1.4.0", 1360 | "bundled": true, 1361 | "dev": true, 1362 | "optional": true, 1363 | "requires": { 1364 | "assert-plus": "1.0.0", 1365 | "extsprintf": "1.0.2", 1366 | "json-schema": "0.2.3", 1367 | "verror": "1.3.6" 1368 | }, 1369 | "dependencies": { 1370 | "assert-plus": { 1371 | "version": "1.0.0", 1372 | "bundled": true, 1373 | "dev": true, 1374 | "optional": true 1375 | } 1376 | } 1377 | }, 1378 | "mime-db": { 1379 | "version": "1.27.0", 1380 | "bundled": true, 1381 | "dev": true 1382 | }, 1383 | "mime-types": { 1384 | "version": "2.1.15", 1385 | "bundled": true, 1386 | "dev": true, 1387 | "requires": { 1388 | "mime-db": "1.27.0" 1389 | } 1390 | }, 1391 | "minimatch": { 1392 | "version": "3.0.4", 1393 | "bundled": true, 1394 | "dev": true, 1395 | "requires": { 1396 | "brace-expansion": "1.1.7" 1397 | } 1398 | }, 1399 | "minimist": { 1400 | "version": "0.0.8", 1401 | "bundled": true, 1402 | "dev": true 1403 | }, 1404 | "mkdirp": { 1405 | "version": "0.5.1", 1406 | "bundled": true, 1407 | "dev": true, 1408 | "requires": { 1409 | "minimist": "0.0.8" 1410 | } 1411 | }, 1412 | "ms": { 1413 | "version": "2.0.0", 1414 | "bundled": true, 1415 | "dev": true, 1416 | "optional": true 1417 | }, 1418 | "node-pre-gyp": { 1419 | "version": "0.6.39", 1420 | "bundled": true, 1421 | "dev": true, 1422 | "optional": true, 1423 | "requires": { 1424 | "detect-libc": "1.0.2", 1425 | "hawk": "3.1.3", 1426 | "mkdirp": "0.5.1", 1427 | "nopt": "4.0.1", 1428 | "npmlog": "4.1.0", 1429 | "rc": "1.2.1", 1430 | "request": "2.81.0", 1431 | "rimraf": "2.6.1", 1432 | "semver": "5.3.0", 1433 | "tar": "2.2.1", 1434 | "tar-pack": "3.4.0" 1435 | } 1436 | }, 1437 | "nopt": { 1438 | "version": "4.0.1", 1439 | "bundled": true, 1440 | "dev": true, 1441 | "optional": true, 1442 | "requires": { 1443 | "abbrev": "1.1.0", 1444 | "osenv": "0.1.4" 1445 | } 1446 | }, 1447 | "npmlog": { 1448 | "version": "4.1.0", 1449 | "bundled": true, 1450 | "dev": true, 1451 | "optional": true, 1452 | "requires": { 1453 | "are-we-there-yet": "1.1.4", 1454 | "console-control-strings": "1.1.0", 1455 | "gauge": "2.7.4", 1456 | "set-blocking": "2.0.0" 1457 | } 1458 | }, 1459 | "number-is-nan": { 1460 | "version": "1.0.1", 1461 | "bundled": true, 1462 | "dev": true 1463 | }, 1464 | "oauth-sign": { 1465 | "version": "0.8.2", 1466 | "bundled": true, 1467 | "dev": true, 1468 | "optional": true 1469 | }, 1470 | "object-assign": { 1471 | "version": "4.1.1", 1472 | "bundled": true, 1473 | "dev": true, 1474 | "optional": true 1475 | }, 1476 | "once": { 1477 | "version": "1.4.0", 1478 | "bundled": true, 1479 | "dev": true, 1480 | "requires": { 1481 | "wrappy": "1.0.2" 1482 | } 1483 | }, 1484 | "os-homedir": { 1485 | "version": "1.0.2", 1486 | "bundled": true, 1487 | "dev": true, 1488 | "optional": true 1489 | }, 1490 | "os-tmpdir": { 1491 | "version": "1.0.2", 1492 | "bundled": true, 1493 | "dev": true, 1494 | "optional": true 1495 | }, 1496 | "osenv": { 1497 | "version": "0.1.4", 1498 | "bundled": true, 1499 | "dev": true, 1500 | "optional": true, 1501 | "requires": { 1502 | "os-homedir": "1.0.2", 1503 | "os-tmpdir": "1.0.2" 1504 | } 1505 | }, 1506 | "path-is-absolute": { 1507 | "version": "1.0.1", 1508 | "bundled": true, 1509 | "dev": true 1510 | }, 1511 | "performance-now": { 1512 | "version": "0.2.0", 1513 | "bundled": true, 1514 | "dev": true, 1515 | "optional": true 1516 | }, 1517 | "process-nextick-args": { 1518 | "version": "1.0.7", 1519 | "bundled": true, 1520 | "dev": true 1521 | }, 1522 | "punycode": { 1523 | "version": "1.4.1", 1524 | "bundled": true, 1525 | "dev": true, 1526 | "optional": true 1527 | }, 1528 | "qs": { 1529 | "version": "6.4.0", 1530 | "bundled": true, 1531 | "dev": true, 1532 | "optional": true 1533 | }, 1534 | "rc": { 1535 | "version": "1.2.1", 1536 | "bundled": true, 1537 | "dev": true, 1538 | "optional": true, 1539 | "requires": { 1540 | "deep-extend": "0.4.2", 1541 | "ini": "1.3.4", 1542 | "minimist": "1.2.0", 1543 | "strip-json-comments": "2.0.1" 1544 | }, 1545 | "dependencies": { 1546 | "minimist": { 1547 | "version": "1.2.0", 1548 | "bundled": true, 1549 | "dev": true, 1550 | "optional": true 1551 | } 1552 | } 1553 | }, 1554 | "readable-stream": { 1555 | "version": "2.2.9", 1556 | "bundled": true, 1557 | "dev": true, 1558 | "requires": { 1559 | "buffer-shims": "1.0.0", 1560 | "core-util-is": "1.0.2", 1561 | "inherits": "2.0.3", 1562 | "isarray": "1.0.0", 1563 | "process-nextick-args": "1.0.7", 1564 | "string_decoder": "1.0.1", 1565 | "util-deprecate": "1.0.2" 1566 | } 1567 | }, 1568 | "request": { 1569 | "version": "2.81.0", 1570 | "bundled": true, 1571 | "dev": true, 1572 | "optional": true, 1573 | "requires": { 1574 | "aws-sign2": "0.6.0", 1575 | "aws4": "1.6.0", 1576 | "caseless": "0.12.0", 1577 | "combined-stream": "1.0.5", 1578 | "extend": "3.0.1", 1579 | "forever-agent": "0.6.1", 1580 | "form-data": "2.1.4", 1581 | "har-validator": "4.2.1", 1582 | "hawk": "3.1.3", 1583 | "http-signature": "1.1.1", 1584 | "is-typedarray": "1.0.0", 1585 | "isstream": "0.1.2", 1586 | "json-stringify-safe": "5.0.1", 1587 | "mime-types": "2.1.15", 1588 | "oauth-sign": "0.8.2", 1589 | "performance-now": "0.2.0", 1590 | "qs": "6.4.0", 1591 | "safe-buffer": "5.0.1", 1592 | "stringstream": "0.0.5", 1593 | "tough-cookie": "2.3.2", 1594 | "tunnel-agent": "0.6.0", 1595 | "uuid": "3.0.1" 1596 | } 1597 | }, 1598 | "rimraf": { 1599 | "version": "2.6.1", 1600 | "bundled": true, 1601 | "dev": true, 1602 | "requires": { 1603 | "glob": "7.1.2" 1604 | } 1605 | }, 1606 | "safe-buffer": { 1607 | "version": "5.0.1", 1608 | "bundled": true, 1609 | "dev": true 1610 | }, 1611 | "semver": { 1612 | "version": "5.3.0", 1613 | "bundled": true, 1614 | "dev": true, 1615 | "optional": true 1616 | }, 1617 | "set-blocking": { 1618 | "version": "2.0.0", 1619 | "bundled": true, 1620 | "dev": true, 1621 | "optional": true 1622 | }, 1623 | "signal-exit": { 1624 | "version": "3.0.2", 1625 | "bundled": true, 1626 | "dev": true, 1627 | "optional": true 1628 | }, 1629 | "sntp": { 1630 | "version": "1.0.9", 1631 | "bundled": true, 1632 | "dev": true, 1633 | "requires": { 1634 | "hoek": "4.2.1" 1635 | } 1636 | }, 1637 | "sshpk": { 1638 | "version": "1.13.0", 1639 | "bundled": true, 1640 | "dev": true, 1641 | "optional": true, 1642 | "requires": { 1643 | "asn1": "0.2.3", 1644 | "assert-plus": "1.0.0", 1645 | "bcrypt-pbkdf": "1.0.1", 1646 | "dashdash": "1.14.1", 1647 | "ecc-jsbn": "0.1.1", 1648 | "getpass": "0.1.7", 1649 | "jodid25519": "1.0.2", 1650 | "jsbn": "0.1.1", 1651 | "tweetnacl": "0.14.5" 1652 | }, 1653 | "dependencies": { 1654 | "assert-plus": { 1655 | "version": "1.0.0", 1656 | "bundled": true, 1657 | "dev": true, 1658 | "optional": true 1659 | } 1660 | } 1661 | }, 1662 | "string-width": { 1663 | "version": "1.0.2", 1664 | "bundled": true, 1665 | "dev": true, 1666 | "requires": { 1667 | "code-point-at": "1.1.0", 1668 | "is-fullwidth-code-point": "1.0.0", 1669 | "strip-ansi": "3.0.1" 1670 | } 1671 | }, 1672 | "string_decoder": { 1673 | "version": "1.0.1", 1674 | "bundled": true, 1675 | "dev": true, 1676 | "requires": { 1677 | "safe-buffer": "5.0.1" 1678 | } 1679 | }, 1680 | "stringstream": { 1681 | "version": "0.0.5", 1682 | "bundled": true, 1683 | "dev": true, 1684 | "optional": true 1685 | }, 1686 | "strip-ansi": { 1687 | "version": "3.0.1", 1688 | "bundled": true, 1689 | "dev": true, 1690 | "requires": { 1691 | "ansi-regex": "2.1.1" 1692 | } 1693 | }, 1694 | "strip-json-comments": { 1695 | "version": "2.0.1", 1696 | "bundled": true, 1697 | "dev": true, 1698 | "optional": true 1699 | }, 1700 | "tar": { 1701 | "version": "2.2.1", 1702 | "bundled": true, 1703 | "dev": true, 1704 | "requires": { 1705 | "block-stream": "0.0.9", 1706 | "fstream": "1.0.11", 1707 | "inherits": "2.0.3" 1708 | } 1709 | }, 1710 | "tar-pack": { 1711 | "version": "3.4.0", 1712 | "bundled": true, 1713 | "dev": true, 1714 | "optional": true, 1715 | "requires": { 1716 | "debug": "2.6.8", 1717 | "fstream": "1.0.11", 1718 | "fstream-ignore": "1.0.5", 1719 | "once": "1.4.0", 1720 | "readable-stream": "2.2.9", 1721 | "rimraf": "2.6.1", 1722 | "tar": "2.2.1", 1723 | "uid-number": "0.0.6" 1724 | } 1725 | }, 1726 | "tough-cookie": { 1727 | "version": "2.3.2", 1728 | "bundled": true, 1729 | "dev": true, 1730 | "optional": true, 1731 | "requires": { 1732 | "punycode": "1.4.1" 1733 | } 1734 | }, 1735 | "tunnel-agent": { 1736 | "version": "0.6.0", 1737 | "bundled": true, 1738 | "dev": true, 1739 | "optional": true, 1740 | "requires": { 1741 | "safe-buffer": "5.0.1" 1742 | } 1743 | }, 1744 | "tweetnacl": { 1745 | "version": "0.14.5", 1746 | "bundled": true, 1747 | "dev": true, 1748 | "optional": true 1749 | }, 1750 | "uid-number": { 1751 | "version": "0.0.6", 1752 | "bundled": true, 1753 | "dev": true, 1754 | "optional": true 1755 | }, 1756 | "util-deprecate": { 1757 | "version": "1.0.2", 1758 | "bundled": true, 1759 | "dev": true 1760 | }, 1761 | "uuid": { 1762 | "version": "3.0.1", 1763 | "bundled": true, 1764 | "dev": true, 1765 | "optional": true 1766 | }, 1767 | "verror": { 1768 | "version": "1.3.6", 1769 | "bundled": true, 1770 | "dev": true, 1771 | "optional": true, 1772 | "requires": { 1773 | "extsprintf": "1.0.2" 1774 | } 1775 | }, 1776 | "wide-align": { 1777 | "version": "1.1.2", 1778 | "bundled": true, 1779 | "dev": true, 1780 | "optional": true, 1781 | "requires": { 1782 | "string-width": "1.0.2" 1783 | } 1784 | }, 1785 | "wrappy": { 1786 | "version": "1.0.2", 1787 | "bundled": true, 1788 | "dev": true 1789 | } 1790 | } 1791 | }, 1792 | "get-caller-file": { 1793 | "version": "1.0.2", 1794 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", 1795 | "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", 1796 | "dev": true 1797 | }, 1798 | "getpass": { 1799 | "version": "0.1.7", 1800 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 1801 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 1802 | "dev": true, 1803 | "requires": { 1804 | "assert-plus": "1.0.0" 1805 | }, 1806 | "dependencies": { 1807 | "assert-plus": { 1808 | "version": "1.0.0", 1809 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1810 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 1811 | "dev": true 1812 | } 1813 | } 1814 | }, 1815 | "glob-base": { 1816 | "version": "0.3.0", 1817 | "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", 1818 | "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", 1819 | "dev": true, 1820 | "requires": { 1821 | "glob-parent": "2.0.0", 1822 | "is-glob": "2.0.1" 1823 | } 1824 | }, 1825 | "glob-parent": { 1826 | "version": "2.0.0", 1827 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", 1828 | "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", 1829 | "dev": true, 1830 | "requires": { 1831 | "is-glob": "2.0.1" 1832 | } 1833 | }, 1834 | "graceful-fs": { 1835 | "version": "4.1.11", 1836 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 1837 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 1838 | "dev": true 1839 | }, 1840 | "har-schema": { 1841 | "version": "1.0.5", 1842 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", 1843 | "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", 1844 | "dev": true 1845 | }, 1846 | "har-validator": { 1847 | "version": "4.2.1", 1848 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", 1849 | "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", 1850 | "dev": true, 1851 | "requires": { 1852 | "ajv": "4.11.8", 1853 | "har-schema": "1.0.5" 1854 | } 1855 | }, 1856 | "has-ansi": { 1857 | "version": "2.0.0", 1858 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 1859 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 1860 | "dev": true, 1861 | "requires": { 1862 | "ansi-regex": "2.1.1" 1863 | } 1864 | }, 1865 | "has-binary": { 1866 | "version": "0.1.7", 1867 | "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", 1868 | "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", 1869 | "dev": true, 1870 | "requires": { 1871 | "isarray": "0.0.1" 1872 | }, 1873 | "dependencies": { 1874 | "isarray": { 1875 | "version": "0.0.1", 1876 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1877 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 1878 | "dev": true 1879 | } 1880 | } 1881 | }, 1882 | "has-cors": { 1883 | "version": "1.1.0", 1884 | "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", 1885 | "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", 1886 | "dev": true 1887 | }, 1888 | "hawk": { 1889 | "version": "3.1.3", 1890 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", 1891 | "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", 1892 | "dev": true, 1893 | "requires": { 1894 | "boom": "2.10.1", 1895 | "cryptiles": "2.0.5", 1896 | "hoek": "4.2.1", 1897 | "sntp": "1.0.9" 1898 | } 1899 | }, 1900 | "hoek": { 1901 | "version": "4.2.1", 1902 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", 1903 | "integrity": "sha1-9634502AA12C445DD5A7C5734B572BB8738AACBB", 1904 | "dev": true 1905 | }, 1906 | "hosted-git-info": { 1907 | "version": "2.5.0", 1908 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", 1909 | "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", 1910 | "dev": true 1911 | }, 1912 | "http-errors": { 1913 | "version": "1.5.1", 1914 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz", 1915 | "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=", 1916 | "dev": true, 1917 | "requires": { 1918 | "inherits": "2.0.3", 1919 | "setprototypeof": "1.0.2", 1920 | "statuses": "1.3.1" 1921 | } 1922 | }, 1923 | "http-proxy": { 1924 | "version": "1.15.2", 1925 | "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", 1926 | "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=", 1927 | "dev": true, 1928 | "requires": { 1929 | "eventemitter3": "1.2.0", 1930 | "requires-port": "1.0.0" 1931 | } 1932 | }, 1933 | "http-signature": { 1934 | "version": "1.1.1", 1935 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", 1936 | "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", 1937 | "dev": true, 1938 | "requires": { 1939 | "assert-plus": "0.2.0", 1940 | "jsprim": "1.4.1", 1941 | "sshpk": "1.13.1" 1942 | } 1943 | }, 1944 | "immutable": { 1945 | "version": "3.8.1", 1946 | "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.1.tgz", 1947 | "integrity": "sha1-IAgH8Rqw9ycQ6khVQt4IgHX2jNI=", 1948 | "dev": true 1949 | }, 1950 | "indexof": { 1951 | "version": "0.0.1", 1952 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", 1953 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", 1954 | "dev": true 1955 | }, 1956 | "inherits": { 1957 | "version": "2.0.3", 1958 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1959 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 1960 | "dev": true 1961 | }, 1962 | "invert-kv": { 1963 | "version": "1.0.0", 1964 | "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", 1965 | "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", 1966 | "dev": true 1967 | }, 1968 | "is-arrayish": { 1969 | "version": "0.2.1", 1970 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1971 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 1972 | "dev": true 1973 | }, 1974 | "is-binary-path": { 1975 | "version": "1.0.1", 1976 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", 1977 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", 1978 | "dev": true, 1979 | "requires": { 1980 | "binary-extensions": "1.11.0" 1981 | } 1982 | }, 1983 | "is-buffer": { 1984 | "version": "1.1.6", 1985 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 1986 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 1987 | "dev": true 1988 | }, 1989 | "is-builtin-module": { 1990 | "version": "1.0.0", 1991 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", 1992 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", 1993 | "dev": true, 1994 | "requires": { 1995 | "builtin-modules": "1.1.1" 1996 | } 1997 | }, 1998 | "is-dotfile": { 1999 | "version": "1.0.3", 2000 | "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", 2001 | "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", 2002 | "dev": true 2003 | }, 2004 | "is-equal-shallow": { 2005 | "version": "0.1.3", 2006 | "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", 2007 | "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", 2008 | "dev": true, 2009 | "requires": { 2010 | "is-primitive": "2.0.0" 2011 | } 2012 | }, 2013 | "is-extendable": { 2014 | "version": "0.1.1", 2015 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 2016 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", 2017 | "dev": true 2018 | }, 2019 | "is-extglob": { 2020 | "version": "1.0.0", 2021 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", 2022 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", 2023 | "dev": true 2024 | }, 2025 | "is-fullwidth-code-point": { 2026 | "version": "1.0.0", 2027 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 2028 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 2029 | "dev": true, 2030 | "requires": { 2031 | "number-is-nan": "1.0.1" 2032 | } 2033 | }, 2034 | "is-glob": { 2035 | "version": "2.0.1", 2036 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", 2037 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", 2038 | "dev": true, 2039 | "requires": { 2040 | "is-extglob": "1.0.0" 2041 | } 2042 | }, 2043 | "is-number": { 2044 | "version": "2.1.0", 2045 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", 2046 | "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", 2047 | "dev": true, 2048 | "requires": { 2049 | "kind-of": "3.2.2" 2050 | } 2051 | }, 2052 | "is-number-like": { 2053 | "version": "1.0.8", 2054 | "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", 2055 | "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", 2056 | "dev": true, 2057 | "requires": { 2058 | "lodash.isfinite": "3.3.2" 2059 | } 2060 | }, 2061 | "is-posix-bracket": { 2062 | "version": "0.1.1", 2063 | "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", 2064 | "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", 2065 | "dev": true 2066 | }, 2067 | "is-primitive": { 2068 | "version": "2.0.0", 2069 | "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", 2070 | "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", 2071 | "dev": true 2072 | }, 2073 | "is-typedarray": { 2074 | "version": "1.0.0", 2075 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 2076 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 2077 | "dev": true 2078 | }, 2079 | "is-utf8": { 2080 | "version": "0.2.1", 2081 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 2082 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", 2083 | "dev": true 2084 | }, 2085 | "isarray": { 2086 | "version": "1.0.0", 2087 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 2088 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 2089 | "dev": true 2090 | }, 2091 | "isobject": { 2092 | "version": "2.1.0", 2093 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 2094 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 2095 | "dev": true, 2096 | "requires": { 2097 | "isarray": "1.0.0" 2098 | } 2099 | }, 2100 | "isstream": { 2101 | "version": "0.1.2", 2102 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 2103 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 2104 | "dev": true 2105 | }, 2106 | "jsbn": { 2107 | "version": "0.1.1", 2108 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 2109 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 2110 | "dev": true, 2111 | "optional": true 2112 | }, 2113 | "json-schema": { 2114 | "version": "0.2.3", 2115 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 2116 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 2117 | "dev": true 2118 | }, 2119 | "json-stable-stringify": { 2120 | "version": "1.0.1", 2121 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 2122 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", 2123 | "dev": true, 2124 | "requires": { 2125 | "jsonify": "0.0.0" 2126 | } 2127 | }, 2128 | "json-stringify-safe": { 2129 | "version": "5.0.1", 2130 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 2131 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 2132 | "dev": true 2133 | }, 2134 | "json3": { 2135 | "version": "3.3.2", 2136 | "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", 2137 | "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", 2138 | "dev": true 2139 | }, 2140 | "jsonfile": { 2141 | "version": "3.0.1", 2142 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", 2143 | "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", 2144 | "dev": true, 2145 | "requires": { 2146 | "graceful-fs": "4.1.11" 2147 | } 2148 | }, 2149 | "jsonify": { 2150 | "version": "0.0.0", 2151 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 2152 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 2153 | "dev": true 2154 | }, 2155 | "jsprim": { 2156 | "version": "1.4.1", 2157 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 2158 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 2159 | "dev": true, 2160 | "requires": { 2161 | "assert-plus": "1.0.0", 2162 | "extsprintf": "1.3.0", 2163 | "json-schema": "0.2.3", 2164 | "verror": "1.10.0" 2165 | }, 2166 | "dependencies": { 2167 | "assert-plus": { 2168 | "version": "1.0.0", 2169 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 2170 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 2171 | "dev": true 2172 | } 2173 | } 2174 | }, 2175 | "kind-of": { 2176 | "version": "3.2.2", 2177 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2178 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2179 | "dev": true, 2180 | "requires": { 2181 | "is-buffer": "1.1.6" 2182 | } 2183 | }, 2184 | "lcid": { 2185 | "version": "1.0.0", 2186 | "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", 2187 | "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", 2188 | "dev": true, 2189 | "requires": { 2190 | "invert-kv": "1.0.0" 2191 | } 2192 | }, 2193 | "limiter": { 2194 | "version": "1.1.2", 2195 | "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.2.tgz", 2196 | "integrity": "sha512-JIKZ0xb6fZZYa3deZ0BgXCgX6HgV8Nx3mFGeFHmFWW8Fb2c08e0CyE+G3nalpD0xGvGssjGb1UdFr+PprxZEbw==", 2197 | "dev": true 2198 | }, 2199 | "lite-server": { 2200 | "version": "2.3.0", 2201 | "resolved": "https://registry.npmjs.org/lite-server/-/lite-server-2.3.0.tgz", 2202 | "integrity": "sha1-W0zI9dX9SDYQVICrKsSKOg3isMg=", 2203 | "dev": true, 2204 | "requires": { 2205 | "browser-sync": "2.18.13", 2206 | "connect-history-api-fallback": "1.5.0", 2207 | "connect-logger": "0.0.1", 2208 | "lodash": "4.17.4", 2209 | "minimist": "1.2.0" 2210 | } 2211 | }, 2212 | "load-json-file": { 2213 | "version": "1.1.0", 2214 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", 2215 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", 2216 | "dev": true, 2217 | "requires": { 2218 | "graceful-fs": "4.1.11", 2219 | "parse-json": "2.2.0", 2220 | "pify": "2.3.0", 2221 | "pinkie-promise": "2.0.1", 2222 | "strip-bom": "2.0.0" 2223 | } 2224 | }, 2225 | "localtunnel": { 2226 | "version": "1.8.3", 2227 | "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.8.3.tgz", 2228 | "integrity": "sha1-3MWSL9hWUQN9S94k/ZMkjQsk6wU=", 2229 | "dev": true, 2230 | "requires": { 2231 | "debug": "2.6.8", 2232 | "openurl": "1.1.1", 2233 | "request": "2.81.0", 2234 | "yargs": "3.29.0" 2235 | }, 2236 | "dependencies": { 2237 | "debug": { 2238 | "version": "2.6.8", 2239 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", 2240 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", 2241 | "dev": true, 2242 | "requires": { 2243 | "ms": "2.0.0" 2244 | } 2245 | }, 2246 | "ms": { 2247 | "version": "2.0.0", 2248 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2249 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 2250 | "dev": true 2251 | }, 2252 | "yargs": { 2253 | "version": "3.29.0", 2254 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.29.0.tgz", 2255 | "integrity": "sha1-GquWYOrnnYuPZ1vK7qtu40ws9pw=", 2256 | "dev": true, 2257 | "requires": { 2258 | "camelcase": "1.2.1", 2259 | "cliui": "3.2.0", 2260 | "decamelize": "1.2.0", 2261 | "os-locale": "1.4.0", 2262 | "window-size": "0.1.4", 2263 | "y18n": "3.2.1" 2264 | } 2265 | } 2266 | } 2267 | }, 2268 | "lodash": { 2269 | "version": "4.17.4", 2270 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 2271 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", 2272 | "dev": true 2273 | }, 2274 | "lodash.isfinite": { 2275 | "version": "3.3.2", 2276 | "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", 2277 | "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", 2278 | "dev": true 2279 | }, 2280 | "micromatch": { 2281 | "version": "2.3.11", 2282 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", 2283 | "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", 2284 | "dev": true, 2285 | "requires": { 2286 | "arr-diff": "2.0.0", 2287 | "array-unique": "0.2.1", 2288 | "braces": "1.8.5", 2289 | "expand-brackets": "0.1.5", 2290 | "extglob": "0.3.2", 2291 | "filename-regex": "2.0.1", 2292 | "is-extglob": "1.0.0", 2293 | "is-glob": "2.0.1", 2294 | "kind-of": "3.2.2", 2295 | "normalize-path": "2.1.1", 2296 | "object.omit": "2.0.1", 2297 | "parse-glob": "3.0.4", 2298 | "regex-cache": "0.4.4" 2299 | } 2300 | }, 2301 | "mime": { 2302 | "version": "1.2.4", 2303 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.4.tgz", 2304 | "integrity": "sha1-EbX9rynCUJJVF2uArVIClPXekrc=", 2305 | "dev": true 2306 | }, 2307 | "mime-db": { 2308 | "version": "1.30.0", 2309 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", 2310 | "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", 2311 | "dev": true 2312 | }, 2313 | "mime-types": { 2314 | "version": "2.1.17", 2315 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", 2316 | "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", 2317 | "dev": true, 2318 | "requires": { 2319 | "mime-db": "1.30.0" 2320 | } 2321 | }, 2322 | "minimatch": { 2323 | "version": "3.0.4", 2324 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2325 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2326 | "dev": true, 2327 | "requires": { 2328 | "brace-expansion": "1.1.8" 2329 | } 2330 | }, 2331 | "minimist": { 2332 | "version": "1.2.0", 2333 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 2334 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 2335 | "dev": true 2336 | }, 2337 | "mkdirp": { 2338 | "version": "0.3.0", 2339 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", 2340 | "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", 2341 | "dev": true 2342 | }, 2343 | "moment": { 2344 | "version": "2.20.0", 2345 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.0.tgz", 2346 | "integrity": "sha512-r7aEpLB/mhMUiC5ksahDajF/Jr3wS/qLzUnwOJCZyKWF34ibdvW8saujBKfR7aQlov//JgFA38HXOoIt7lXzcA==", 2347 | "dev": true 2348 | }, 2349 | "ms": { 2350 | "version": "0.7.1", 2351 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", 2352 | "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", 2353 | "dev": true 2354 | }, 2355 | "nan": { 2356 | "version": "2.8.0", 2357 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", 2358 | "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", 2359 | "dev": true, 2360 | "optional": true 2361 | }, 2362 | "negotiator": { 2363 | "version": "0.6.1", 2364 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 2365 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", 2366 | "dev": true 2367 | }, 2368 | "nopt": { 2369 | "version": "3.0.6", 2370 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", 2371 | "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", 2372 | "dev": true, 2373 | "requires": { 2374 | "abbrev": "1.1.1" 2375 | } 2376 | }, 2377 | "normalize-package-data": { 2378 | "version": "2.4.0", 2379 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", 2380 | "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", 2381 | "dev": true, 2382 | "requires": { 2383 | "hosted-git-info": "2.5.0", 2384 | "is-builtin-module": "1.0.0", 2385 | "semver": "5.4.1", 2386 | "validate-npm-package-license": "3.0.1" 2387 | } 2388 | }, 2389 | "normalize-path": { 2390 | "version": "2.1.1", 2391 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", 2392 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", 2393 | "dev": true, 2394 | "requires": { 2395 | "remove-trailing-separator": "1.1.0" 2396 | } 2397 | }, 2398 | "number-is-nan": { 2399 | "version": "1.0.1", 2400 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 2401 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 2402 | "dev": true 2403 | }, 2404 | "oauth-sign": { 2405 | "version": "0.8.2", 2406 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 2407 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", 2408 | "dev": true 2409 | }, 2410 | "object-assign": { 2411 | "version": "4.1.1", 2412 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2413 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 2414 | "dev": true 2415 | }, 2416 | "object-component": { 2417 | "version": "0.0.3", 2418 | "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", 2419 | "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", 2420 | "dev": true 2421 | }, 2422 | "object-path": { 2423 | "version": "0.9.2", 2424 | "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", 2425 | "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", 2426 | "dev": true 2427 | }, 2428 | "object.omit": { 2429 | "version": "2.0.1", 2430 | "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", 2431 | "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", 2432 | "dev": true, 2433 | "requires": { 2434 | "for-own": "0.1.5", 2435 | "is-extendable": "0.1.1" 2436 | } 2437 | }, 2438 | "on-finished": { 2439 | "version": "2.3.0", 2440 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 2441 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 2442 | "dev": true, 2443 | "requires": { 2444 | "ee-first": "1.1.1" 2445 | } 2446 | }, 2447 | "openurl": { 2448 | "version": "1.1.1", 2449 | "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", 2450 | "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", 2451 | "dev": true 2452 | }, 2453 | "opn": { 2454 | "version": "4.0.2", 2455 | "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", 2456 | "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", 2457 | "dev": true, 2458 | "requires": { 2459 | "object-assign": "4.1.1", 2460 | "pinkie-promise": "2.0.1" 2461 | } 2462 | }, 2463 | "options": { 2464 | "version": "0.0.6", 2465 | "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", 2466 | "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", 2467 | "dev": true 2468 | }, 2469 | "os-locale": { 2470 | "version": "1.4.0", 2471 | "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", 2472 | "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", 2473 | "dev": true, 2474 | "requires": { 2475 | "lcid": "1.0.0" 2476 | } 2477 | }, 2478 | "parse-glob": { 2479 | "version": "3.0.4", 2480 | "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", 2481 | "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", 2482 | "dev": true, 2483 | "requires": { 2484 | "glob-base": "0.3.0", 2485 | "is-dotfile": "1.0.3", 2486 | "is-extglob": "1.0.0", 2487 | "is-glob": "2.0.1" 2488 | } 2489 | }, 2490 | "parse-json": { 2491 | "version": "2.2.0", 2492 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 2493 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 2494 | "dev": true, 2495 | "requires": { 2496 | "error-ex": "1.3.1" 2497 | } 2498 | }, 2499 | "parsejson": { 2500 | "version": "0.0.3", 2501 | "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", 2502 | "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", 2503 | "dev": true, 2504 | "requires": { 2505 | "better-assert": "1.0.2" 2506 | } 2507 | }, 2508 | "parseqs": { 2509 | "version": "0.0.5", 2510 | "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", 2511 | "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", 2512 | "dev": true, 2513 | "requires": { 2514 | "better-assert": "1.0.2" 2515 | } 2516 | }, 2517 | "parseuri": { 2518 | "version": "0.0.5", 2519 | "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", 2520 | "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", 2521 | "dev": true, 2522 | "requires": { 2523 | "better-assert": "1.0.2" 2524 | } 2525 | }, 2526 | "parseurl": { 2527 | "version": "1.3.2", 2528 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 2529 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", 2530 | "dev": true 2531 | }, 2532 | "path-exists": { 2533 | "version": "2.1.0", 2534 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", 2535 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", 2536 | "dev": true, 2537 | "requires": { 2538 | "pinkie-promise": "2.0.1" 2539 | } 2540 | }, 2541 | "path-is-absolute": { 2542 | "version": "1.0.1", 2543 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2544 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2545 | "dev": true 2546 | }, 2547 | "path-type": { 2548 | "version": "1.1.0", 2549 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", 2550 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", 2551 | "dev": true, 2552 | "requires": { 2553 | "graceful-fs": "4.1.11", 2554 | "pify": "2.3.0", 2555 | "pinkie-promise": "2.0.1" 2556 | } 2557 | }, 2558 | "performance-now": { 2559 | "version": "0.2.0", 2560 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", 2561 | "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", 2562 | "dev": true 2563 | }, 2564 | "pify": { 2565 | "version": "2.3.0", 2566 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 2567 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 2568 | "dev": true 2569 | }, 2570 | "pinkie": { 2571 | "version": "2.0.4", 2572 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 2573 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 2574 | "dev": true 2575 | }, 2576 | "pinkie-promise": { 2577 | "version": "2.0.1", 2578 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 2579 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 2580 | "dev": true, 2581 | "requires": { 2582 | "pinkie": "2.0.4" 2583 | } 2584 | }, 2585 | "portscanner": { 2586 | "version": "2.1.1", 2587 | "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", 2588 | "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", 2589 | "dev": true, 2590 | "requires": { 2591 | "async": "1.5.2", 2592 | "is-number-like": "1.0.8" 2593 | } 2594 | }, 2595 | "preserve": { 2596 | "version": "0.2.0", 2597 | "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", 2598 | "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", 2599 | "dev": true 2600 | }, 2601 | "process-nextick-args": { 2602 | "version": "1.0.7", 2603 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 2604 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", 2605 | "dev": true 2606 | }, 2607 | "punycode": { 2608 | "version": "1.4.1", 2609 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2610 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 2611 | "dev": true 2612 | }, 2613 | "qs": { 2614 | "version": "6.2.1", 2615 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz", 2616 | "integrity": "sha1-zgPF/wk1vB2daanxTL0Y5WjWdiU=", 2617 | "dev": true 2618 | }, 2619 | "randomatic": { 2620 | "version": "1.1.7", 2621 | "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", 2622 | "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", 2623 | "dev": true, 2624 | "requires": { 2625 | "is-number": "3.0.0", 2626 | "kind-of": "4.0.0" 2627 | }, 2628 | "dependencies": { 2629 | "is-number": { 2630 | "version": "3.0.0", 2631 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 2632 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 2633 | "dev": true, 2634 | "requires": { 2635 | "kind-of": "3.2.2" 2636 | }, 2637 | "dependencies": { 2638 | "kind-of": { 2639 | "version": "3.2.2", 2640 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2641 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2642 | "dev": true, 2643 | "requires": { 2644 | "is-buffer": "1.1.6" 2645 | } 2646 | } 2647 | } 2648 | }, 2649 | "kind-of": { 2650 | "version": "4.0.0", 2651 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 2652 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 2653 | "dev": true, 2654 | "requires": { 2655 | "is-buffer": "1.1.6" 2656 | } 2657 | } 2658 | } 2659 | }, 2660 | "range-parser": { 2661 | "version": "1.2.0", 2662 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 2663 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", 2664 | "dev": true 2665 | }, 2666 | "read-pkg": { 2667 | "version": "1.1.0", 2668 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", 2669 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", 2670 | "dev": true, 2671 | "requires": { 2672 | "load-json-file": "1.1.0", 2673 | "normalize-package-data": "2.4.0", 2674 | "path-type": "1.1.0" 2675 | } 2676 | }, 2677 | "read-pkg-up": { 2678 | "version": "1.0.1", 2679 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", 2680 | "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", 2681 | "dev": true, 2682 | "requires": { 2683 | "find-up": "1.1.2", 2684 | "read-pkg": "1.1.0" 2685 | } 2686 | }, 2687 | "readable-stream": { 2688 | "version": "2.3.3", 2689 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 2690 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 2691 | "dev": true, 2692 | "requires": { 2693 | "core-util-is": "1.0.2", 2694 | "inherits": "2.0.3", 2695 | "isarray": "1.0.0", 2696 | "process-nextick-args": "1.0.7", 2697 | "safe-buffer": "5.1.1", 2698 | "string_decoder": "1.0.3", 2699 | "util-deprecate": "1.0.2" 2700 | } 2701 | }, 2702 | "readdirp": { 2703 | "version": "2.1.0", 2704 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", 2705 | "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", 2706 | "dev": true, 2707 | "requires": { 2708 | "graceful-fs": "4.1.11", 2709 | "minimatch": "3.0.4", 2710 | "readable-stream": "2.3.3", 2711 | "set-immediate-shim": "1.0.1" 2712 | } 2713 | }, 2714 | "regex-cache": { 2715 | "version": "0.4.4", 2716 | "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", 2717 | "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", 2718 | "dev": true, 2719 | "requires": { 2720 | "is-equal-shallow": "0.1.3" 2721 | } 2722 | }, 2723 | "remove-trailing-separator": { 2724 | "version": "1.1.0", 2725 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", 2726 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", 2727 | "dev": true 2728 | }, 2729 | "repeat-element": { 2730 | "version": "1.1.2", 2731 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", 2732 | "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", 2733 | "dev": true 2734 | }, 2735 | "repeat-string": { 2736 | "version": "1.6.1", 2737 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 2738 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 2739 | "dev": true 2740 | }, 2741 | "request": { 2742 | "version": "2.81.0", 2743 | "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", 2744 | "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", 2745 | "dev": true, 2746 | "requires": { 2747 | "aws-sign2": "0.6.0", 2748 | "aws4": "1.6.0", 2749 | "caseless": "0.12.0", 2750 | "combined-stream": "1.0.5", 2751 | "extend": "3.0.1", 2752 | "forever-agent": "0.6.1", 2753 | "form-data": "2.1.4", 2754 | "har-validator": "4.2.1", 2755 | "hawk": "3.1.3", 2756 | "http-signature": "1.1.1", 2757 | "is-typedarray": "1.0.0", 2758 | "isstream": "0.1.2", 2759 | "json-stringify-safe": "5.0.1", 2760 | "mime-types": "2.1.17", 2761 | "oauth-sign": "0.8.2", 2762 | "performance-now": "0.2.0", 2763 | "qs": "6.4.0", 2764 | "safe-buffer": "5.1.1", 2765 | "stringstream": "0.0.5", 2766 | "tough-cookie": "2.3.3", 2767 | "tunnel-agent": "0.6.0", 2768 | "uuid": "3.1.0" 2769 | }, 2770 | "dependencies": { 2771 | "qs": { 2772 | "version": "6.4.0", 2773 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", 2774 | "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", 2775 | "dev": true 2776 | } 2777 | } 2778 | }, 2779 | "require-directory": { 2780 | "version": "2.1.1", 2781 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2782 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 2783 | "dev": true 2784 | }, 2785 | "require-main-filename": { 2786 | "version": "1.0.1", 2787 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", 2788 | "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", 2789 | "dev": true 2790 | }, 2791 | "requires-port": { 2792 | "version": "1.0.0", 2793 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 2794 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", 2795 | "dev": true 2796 | }, 2797 | "resp-modifier": { 2798 | "version": "6.0.2", 2799 | "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", 2800 | "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", 2801 | "dev": true, 2802 | "requires": { 2803 | "debug": "2.2.0", 2804 | "minimatch": "3.0.4" 2805 | } 2806 | }, 2807 | "rx": { 2808 | "version": "4.1.0", 2809 | "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", 2810 | "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", 2811 | "dev": true 2812 | }, 2813 | "safe-buffer": { 2814 | "version": "5.1.1", 2815 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 2816 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", 2817 | "dev": true 2818 | }, 2819 | "semver": { 2820 | "version": "5.4.1", 2821 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", 2822 | "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", 2823 | "dev": true 2824 | }, 2825 | "send": { 2826 | "version": "0.15.2", 2827 | "resolved": "https://registry.npmjs.org/send/-/send-0.15.2.tgz", 2828 | "integrity": "sha1-+R+rRAO8+H5xb3DOtdsvV4vcF9Y=", 2829 | "dev": true, 2830 | "requires": { 2831 | "debug": "2.6.4", 2832 | "depd": "1.1.1", 2833 | "destroy": "1.0.4", 2834 | "encodeurl": "1.0.1", 2835 | "escape-html": "1.0.3", 2836 | "etag": "1.8.1", 2837 | "fresh": "0.5.0", 2838 | "http-errors": "1.6.2", 2839 | "mime": "1.3.4", 2840 | "ms": "1.0.0", 2841 | "on-finished": "2.3.0", 2842 | "range-parser": "1.2.0", 2843 | "statuses": "1.3.1" 2844 | }, 2845 | "dependencies": { 2846 | "debug": { 2847 | "version": "2.6.4", 2848 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.4.tgz", 2849 | "integrity": "sha1-dYaps8OXQcAoKuM0RcTorHRzT+A=", 2850 | "dev": true, 2851 | "requires": { 2852 | "ms": "0.7.3" 2853 | }, 2854 | "dependencies": { 2855 | "ms": { 2856 | "version": "0.7.3", 2857 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", 2858 | "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=", 2859 | "dev": true 2860 | } 2861 | } 2862 | }, 2863 | "fresh": { 2864 | "version": "0.5.0", 2865 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", 2866 | "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=", 2867 | "dev": true 2868 | }, 2869 | "http-errors": { 2870 | "version": "1.6.2", 2871 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", 2872 | "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", 2873 | "dev": true, 2874 | "requires": { 2875 | "depd": "1.1.1", 2876 | "inherits": "2.0.3", 2877 | "setprototypeof": "1.0.3", 2878 | "statuses": "1.3.1" 2879 | } 2880 | }, 2881 | "mime": { 2882 | "version": "1.3.4", 2883 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", 2884 | "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", 2885 | "dev": true 2886 | }, 2887 | "ms": { 2888 | "version": "1.0.0", 2889 | "resolved": "https://registry.npmjs.org/ms/-/ms-1.0.0.tgz", 2890 | "integrity": "sha1-Wa3NIu3FQ/e1OBhi0xOHsfS8lHM=", 2891 | "dev": true 2892 | }, 2893 | "setprototypeof": { 2894 | "version": "1.0.3", 2895 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 2896 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", 2897 | "dev": true 2898 | } 2899 | } 2900 | }, 2901 | "serve-index": { 2902 | "version": "1.8.0", 2903 | "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.8.0.tgz", 2904 | "integrity": "sha1-fF2WwT+xMRAfk8HFd0+FFqHnjTs=", 2905 | "dev": true, 2906 | "requires": { 2907 | "accepts": "1.3.4", 2908 | "batch": "0.5.3", 2909 | "debug": "2.2.0", 2910 | "escape-html": "1.0.3", 2911 | "http-errors": "1.5.1", 2912 | "mime-types": "2.1.17", 2913 | "parseurl": "1.3.2" 2914 | } 2915 | }, 2916 | "serve-static": { 2917 | "version": "1.12.2", 2918 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.2.tgz", 2919 | "integrity": "sha1-5UbicmCBuBtLzsjpCAjrzdMjr7o=", 2920 | "dev": true, 2921 | "requires": { 2922 | "encodeurl": "1.0.1", 2923 | "escape-html": "1.0.3", 2924 | "parseurl": "1.3.2", 2925 | "send": "0.15.2" 2926 | } 2927 | }, 2928 | "server-destroy": { 2929 | "version": "1.0.1", 2930 | "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", 2931 | "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", 2932 | "dev": true 2933 | }, 2934 | "set-blocking": { 2935 | "version": "2.0.0", 2936 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2937 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 2938 | "dev": true 2939 | }, 2940 | "set-immediate-shim": { 2941 | "version": "1.0.1", 2942 | "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", 2943 | "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", 2944 | "dev": true 2945 | }, 2946 | "setprototypeof": { 2947 | "version": "1.0.2", 2948 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz", 2949 | "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg=", 2950 | "dev": true 2951 | }, 2952 | "sntp": { 2953 | "version": "1.0.9", 2954 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", 2955 | "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", 2956 | "dev": true, 2957 | "requires": { 2958 | "hoek": "4.2.1" 2959 | } 2960 | }, 2961 | "socket.io": { 2962 | "version": "1.6.0", 2963 | "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.6.0.tgz", 2964 | "integrity": "sha1-PkDZMmN+a9kjmBslyvfFPoO24uE=", 2965 | "dev": true, 2966 | "requires": { 2967 | "debug": "2.3.3", 2968 | "engine.io": "1.8.0", 2969 | "has-binary": "0.1.7", 2970 | "object-assign": "4.1.0", 2971 | "socket.io-adapter": "0.5.0", 2972 | "socket.io-client": "1.6.0", 2973 | "socket.io-parser": "2.3.1" 2974 | }, 2975 | "dependencies": { 2976 | "debug": { 2977 | "version": "2.3.3", 2978 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", 2979 | "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", 2980 | "dev": true, 2981 | "requires": { 2982 | "ms": "0.7.2" 2983 | } 2984 | }, 2985 | "ms": { 2986 | "version": "0.7.2", 2987 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 2988 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 2989 | "dev": true 2990 | }, 2991 | "object-assign": { 2992 | "version": "4.1.0", 2993 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", 2994 | "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", 2995 | "dev": true 2996 | } 2997 | } 2998 | }, 2999 | "socket.io-adapter": { 3000 | "version": "0.5.0", 3001 | "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", 3002 | "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", 3003 | "dev": true, 3004 | "requires": { 3005 | "debug": "2.3.3", 3006 | "socket.io-parser": "2.3.1" 3007 | }, 3008 | "dependencies": { 3009 | "debug": { 3010 | "version": "2.3.3", 3011 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", 3012 | "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", 3013 | "dev": true, 3014 | "requires": { 3015 | "ms": "0.7.2" 3016 | } 3017 | }, 3018 | "ms": { 3019 | "version": "0.7.2", 3020 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 3021 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 3022 | "dev": true 3023 | } 3024 | } 3025 | }, 3026 | "socket.io-client": { 3027 | "version": "1.6.0", 3028 | "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.6.0.tgz", 3029 | "integrity": "sha1-W2aPT3cTBN/u0XkGRwg4b6ZxeFM=", 3030 | "dev": true, 3031 | "requires": { 3032 | "backo2": "1.0.2", 3033 | "component-bind": "1.0.0", 3034 | "component-emitter": "1.2.1", 3035 | "debug": "2.3.3", 3036 | "engine.io-client": "1.8.0", 3037 | "has-binary": "0.1.7", 3038 | "indexof": "0.0.1", 3039 | "object-component": "0.0.3", 3040 | "parseuri": "0.0.5", 3041 | "socket.io-parser": "2.3.1", 3042 | "to-array": "0.1.4" 3043 | }, 3044 | "dependencies": { 3045 | "component-emitter": { 3046 | "version": "1.2.1", 3047 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 3048 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", 3049 | "dev": true 3050 | }, 3051 | "debug": { 3052 | "version": "2.3.3", 3053 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", 3054 | "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", 3055 | "dev": true, 3056 | "requires": { 3057 | "ms": "0.7.2" 3058 | } 3059 | }, 3060 | "ms": { 3061 | "version": "0.7.2", 3062 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 3063 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 3064 | "dev": true 3065 | } 3066 | } 3067 | }, 3068 | "socket.io-parser": { 3069 | "version": "2.3.1", 3070 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", 3071 | "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", 3072 | "dev": true, 3073 | "requires": { 3074 | "component-emitter": "1.1.2", 3075 | "debug": "2.2.0", 3076 | "isarray": "0.0.1", 3077 | "json3": "3.3.2" 3078 | }, 3079 | "dependencies": { 3080 | "isarray": { 3081 | "version": "0.0.1", 3082 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 3083 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 3084 | "dev": true 3085 | } 3086 | } 3087 | }, 3088 | "spdx-correct": { 3089 | "version": "1.0.2", 3090 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", 3091 | "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", 3092 | "dev": true, 3093 | "requires": { 3094 | "spdx-license-ids": "1.2.2" 3095 | } 3096 | }, 3097 | "spdx-expression-parse": { 3098 | "version": "1.0.4", 3099 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", 3100 | "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", 3101 | "dev": true 3102 | }, 3103 | "spdx-license-ids": { 3104 | "version": "1.2.2", 3105 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", 3106 | "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", 3107 | "dev": true 3108 | }, 3109 | "sshpk": { 3110 | "version": "1.13.1", 3111 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", 3112 | "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", 3113 | "dev": true, 3114 | "requires": { 3115 | "asn1": "0.2.3", 3116 | "assert-plus": "1.0.0", 3117 | "bcrypt-pbkdf": "1.0.1", 3118 | "dashdash": "1.14.1", 3119 | "ecc-jsbn": "0.1.1", 3120 | "getpass": "0.1.7", 3121 | "jsbn": "0.1.1", 3122 | "tweetnacl": "0.14.5" 3123 | }, 3124 | "dependencies": { 3125 | "assert-plus": { 3126 | "version": "1.0.0", 3127 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 3128 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 3129 | "dev": true 3130 | } 3131 | } 3132 | }, 3133 | "statuses": { 3134 | "version": "1.3.1", 3135 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", 3136 | "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", 3137 | "dev": true 3138 | }, 3139 | "stream-throttle": { 3140 | "version": "0.1.3", 3141 | "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", 3142 | "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", 3143 | "dev": true, 3144 | "requires": { 3145 | "commander": "2.12.2", 3146 | "limiter": "1.1.2" 3147 | } 3148 | }, 3149 | "string-width": { 3150 | "version": "1.0.2", 3151 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 3152 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 3153 | "dev": true, 3154 | "requires": { 3155 | "code-point-at": "1.1.0", 3156 | "is-fullwidth-code-point": "1.0.0", 3157 | "strip-ansi": "3.0.1" 3158 | } 3159 | }, 3160 | "string_decoder": { 3161 | "version": "1.0.3", 3162 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 3163 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 3164 | "dev": true, 3165 | "requires": { 3166 | "safe-buffer": "5.1.1" 3167 | } 3168 | }, 3169 | "stringstream": { 3170 | "version": "0.0.5", 3171 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 3172 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", 3173 | "dev": true 3174 | }, 3175 | "strip-ansi": { 3176 | "version": "3.0.1", 3177 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 3178 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 3179 | "dev": true, 3180 | "requires": { 3181 | "ansi-regex": "2.1.1" 3182 | } 3183 | }, 3184 | "strip-bom": { 3185 | "version": "2.0.0", 3186 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", 3187 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", 3188 | "dev": true, 3189 | "requires": { 3190 | "is-utf8": "0.2.1" 3191 | } 3192 | }, 3193 | "supports-color": { 3194 | "version": "2.0.0", 3195 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 3196 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 3197 | "dev": true 3198 | }, 3199 | "tfunk": { 3200 | "version": "3.1.0", 3201 | "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", 3202 | "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=", 3203 | "dev": true, 3204 | "requires": { 3205 | "chalk": "1.1.3", 3206 | "object-path": "0.9.2" 3207 | } 3208 | }, 3209 | "to-array": { 3210 | "version": "0.1.4", 3211 | "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", 3212 | "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", 3213 | "dev": true 3214 | }, 3215 | "tough-cookie": { 3216 | "version": "2.3.3", 3217 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", 3218 | "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", 3219 | "dev": true, 3220 | "requires": { 3221 | "punycode": "1.4.1" 3222 | } 3223 | }, 3224 | "tunnel-agent": { 3225 | "version": "0.6.0", 3226 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 3227 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 3228 | "dev": true, 3229 | "requires": { 3230 | "safe-buffer": "5.1.1" 3231 | } 3232 | }, 3233 | "tweetnacl": { 3234 | "version": "0.14.5", 3235 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 3236 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 3237 | "dev": true, 3238 | "optional": true 3239 | }, 3240 | "ua-parser-js": { 3241 | "version": "0.7.12", 3242 | "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.12.tgz", 3243 | "integrity": "sha1-BMgamb3V3FImPqKdJMa/jUgYpLs=", 3244 | "dev": true 3245 | }, 3246 | "ultron": { 3247 | "version": "1.0.2", 3248 | "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", 3249 | "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", 3250 | "dev": true 3251 | }, 3252 | "underscore": { 3253 | "version": "1.7.0", 3254 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", 3255 | "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", 3256 | "dev": true 3257 | }, 3258 | "universalify": { 3259 | "version": "0.1.1", 3260 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", 3261 | "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", 3262 | "dev": true 3263 | }, 3264 | "unpipe": { 3265 | "version": "1.0.0", 3266 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 3267 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", 3268 | "dev": true 3269 | }, 3270 | "utf8": { 3271 | "version": "2.1.2", 3272 | "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", 3273 | "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" 3274 | }, 3275 | "util-deprecate": { 3276 | "version": "1.0.2", 3277 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3278 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 3279 | "dev": true 3280 | }, 3281 | "utils-merge": { 3282 | "version": "1.0.0", 3283 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", 3284 | "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", 3285 | "dev": true 3286 | }, 3287 | "uuid": { 3288 | "version": "3.1.0", 3289 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", 3290 | "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", 3291 | "dev": true 3292 | }, 3293 | "validate-npm-package-license": { 3294 | "version": "3.0.1", 3295 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", 3296 | "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", 3297 | "dev": true, 3298 | "requires": { 3299 | "spdx-correct": "1.0.2", 3300 | "spdx-expression-parse": "1.0.4" 3301 | } 3302 | }, 3303 | "verror": { 3304 | "version": "1.10.0", 3305 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 3306 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 3307 | "dev": true, 3308 | "requires": { 3309 | "assert-plus": "1.0.0", 3310 | "core-util-is": "1.0.2", 3311 | "extsprintf": "1.3.0" 3312 | }, 3313 | "dependencies": { 3314 | "assert-plus": { 3315 | "version": "1.0.0", 3316 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 3317 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 3318 | "dev": true 3319 | } 3320 | } 3321 | }, 3322 | "web3": { 3323 | "version": "github:ethereum/web3.js#64c932cff2bffbc97959117b5abc48b6c1c40832", 3324 | "requires": { 3325 | "bignumber.js": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934", 3326 | "crypto-js": "3.1.8", 3327 | "utf8": "2.1.2", 3328 | "xhr2": "0.1.4", 3329 | "xmlhttprequest": "1.8.0" 3330 | } 3331 | }, 3332 | "weinre": { 3333 | "version": "2.0.0-pre-I0Z7U9OV", 3334 | "resolved": "https://registry.npmjs.org/weinre/-/weinre-2.0.0-pre-I0Z7U9OV.tgz", 3335 | "integrity": "sha1-/viqIjkh97QLu71MPtQwL2/QqBM=", 3336 | "dev": true, 3337 | "requires": { 3338 | "express": "2.5.11", 3339 | "nopt": "3.0.6", 3340 | "underscore": "1.7.0" 3341 | } 3342 | }, 3343 | "which-module": { 3344 | "version": "1.0.0", 3345 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", 3346 | "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", 3347 | "dev": true 3348 | }, 3349 | "window-size": { 3350 | "version": "0.1.4", 3351 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", 3352 | "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", 3353 | "dev": true 3354 | }, 3355 | "wrap-ansi": { 3356 | "version": "2.1.0", 3357 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", 3358 | "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", 3359 | "dev": true, 3360 | "requires": { 3361 | "string-width": "1.0.2", 3362 | "strip-ansi": "3.0.1" 3363 | } 3364 | }, 3365 | "ws": { 3366 | "version": "1.1.1", 3367 | "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.1.tgz", 3368 | "integrity": "sha1-CC3bbGQehdS7RR8D1S8G6r2x8Bg=", 3369 | "dev": true, 3370 | "requires": { 3371 | "options": "0.0.6", 3372 | "ultron": "1.0.2" 3373 | } 3374 | }, 3375 | "wtf-8": { 3376 | "version": "1.0.0", 3377 | "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", 3378 | "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", 3379 | "dev": true 3380 | }, 3381 | "xhr2": { 3382 | "version": "0.1.4", 3383 | "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", 3384 | "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=" 3385 | }, 3386 | "xmlhttprequest": { 3387 | "version": "1.8.0", 3388 | "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", 3389 | "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" 3390 | }, 3391 | "xmlhttprequest-ssl": { 3392 | "version": "1.5.3", 3393 | "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", 3394 | "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", 3395 | "dev": true 3396 | }, 3397 | "y18n": { 3398 | "version": "3.2.1", 3399 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", 3400 | "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", 3401 | "dev": true 3402 | }, 3403 | "yargs": { 3404 | "version": "6.4.0", 3405 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", 3406 | "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=", 3407 | "dev": true, 3408 | "requires": { 3409 | "camelcase": "3.0.0", 3410 | "cliui": "3.2.0", 3411 | "decamelize": "1.2.0", 3412 | "get-caller-file": "1.0.2", 3413 | "os-locale": "1.4.0", 3414 | "read-pkg-up": "1.0.1", 3415 | "require-directory": "2.1.1", 3416 | "require-main-filename": "1.0.1", 3417 | "set-blocking": "2.0.0", 3418 | "string-width": "1.0.2", 3419 | "which-module": "1.0.0", 3420 | "window-size": "0.2.0", 3421 | "y18n": "3.2.1", 3422 | "yargs-parser": "4.2.1" 3423 | }, 3424 | "dependencies": { 3425 | "camelcase": { 3426 | "version": "3.0.0", 3427 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", 3428 | "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", 3429 | "dev": true 3430 | }, 3431 | "window-size": { 3432 | "version": "0.2.0", 3433 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", 3434 | "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", 3435 | "dev": true 3436 | } 3437 | } 3438 | }, 3439 | "yargs-parser": { 3440 | "version": "4.2.1", 3441 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", 3442 | "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", 3443 | "dev": true, 3444 | "requires": { 3445 | "camelcase": "3.0.0" 3446 | }, 3447 | "dependencies": { 3448 | "camelcase": { 3449 | "version": "3.0.0", 3450 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", 3451 | "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", 3452 | "dev": true 3453 | } 3454 | } 3455 | }, 3456 | "yeast": { 3457 | "version": "0.1.2", 3458 | "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", 3459 | "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", 3460 | "dev": true 3461 | } 3462 | } 3463 | } 3464 | -------------------------------------------------------------------------------- /GUI/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "servicechain", 3 | "version": "1.0.0", 4 | "description": "nil", 5 | "main": "index.html", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "dev": "lite-server" 9 | 10 | }, 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "web3": "github:ethereum/web3.js" 15 | 16 | }, 17 | "devDependencies": { 18 | "lite-server": "^2.3.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 1. [Link to demo-video](https://youtu.be/MDTmZL2sXgk)
3 | 2. [Link to contract deployed & tested on the Ropsten network](https://ropsten.etherscan.io/tx/0x04410d805f46d05dccd69c5e2a6a7c26d76cbf9403c4792658720df9eb93c1d3)
4 | 5 | ## BlockSCM - Supply Chain Management 3.0 6 | The Automobile industry's supply chain is massive logistical arrangment that is an integral part of any automobile manufacturing company. It mediates between multiple parties, and optimizes the creation of distribution of resources, but the presence of numerous interacting parties, differential pricing, and quality & complicance issues create a logistical nightmare which wastes both time and resources. The [failure of Boeing's supply chain for 787](http://www.maxqtech.com/3-true-stories-of-supply-chain-management-disasters-and-how-to-avoid-them/) led to a disastrous 3 year delay of their product. Using that as a case-study, we show blockchains are currently the best-suited solution to the problems in current supply chain infrastructure. 7 | 8 | ### The Problem 9 | 1. **Differential Pricing**: Companies prefer keeping their pricings a secret, since this allows them to pay lower prices when outsourcing to developing countries. 10 | 2. **Numerous Parties Invovled**: Mediating between so many parties can be a big problem for logistics-providers, slowing down the delivery of services and creating a large overhead for logistics. Furthermore, a centralized mediator of these parties can misuse power to perfer some parties over others. 11 | 3. **Quality & Compliance issues**: Procuring a replacement for defective parts is a long-drawn and uncomfortable process. 12 | 4. **Inevitable disruptions**: LEAN "on-demand" manufacturing falls flat in a situations where natural disasters and socio-economic problems are common. For example, Japan (frequently affected by earthquakes) has outsourced most of it's supply chain logistics to other countries. 13 | 7. **Centralization**: A central mediator for parties is required, which centralizes power in the hands of a few and is a gateway to misuse of resources. 14 | 8. **Fraud by Middlemen**: As number of interacting parties increase, there is a proportional increase in middlemen. They lead to fraud and slow down the supply without adding anything to the network. 15 | 9. **Tracking history of any product**: Validating identity vendor and checking for tampering by middlemen is not possible. 16 | 17 | ### How does our solution help? 18 | 19 | | Problems | How our solution solves them | 20 | | --- | --- | 21 | | **Differential Pricing** | Permissioned ledger for confidential transactions between parties | 22 | | **Numerous parties invovled** | Consensus between multiple parties is maintained through Smart Contracts | 23 | | **Quality & Compliance issues** | Smart contract stores money while all solutions are checked and tested | 24 | | **Inevitable disruptions** | Digital ledger is free of geographical constraints like natural disasters, socio-economic issues | 25 | | **Procuring replacements for defective pieces** | Smart contract only lets out payments once both parties satisified | 26 | | **Centralization** | Risk of fraud is mitigated by using decentralized nodes for checking delivery status | 27 | | **Fraud by Middlemen** | Because of using doubly-signed smart contracts, no financial fraud by middlemen can occur in the system | 28 | | **Tracking supply-chain history of each part** | Using our network's merkle trees we can verify vendor identity and validity of product | 29 | 30 | ### Protocol 31 | 32 | 1. Manufacture requests parts from OEM. 33 | 2. OEM lists down all the parts and their details in the contract. 34 | 3. If parts are genuine and non defective the OEM gets paid. 35 | 4. Now Manufacturer starts assembling the car. 36 | 37 | This protocol has been implemented as a smart contract, and has been optimized for the use-case of automobile supply chains. It has been **deployed and tested** on the Ropsten network. The link to that deployed contract can be [found here](https://ropsten.etherscan.io/tx/0x04410d805f46d05dccd69c5e2a6a7c26d76cbf9403c4792658720df9eb93c1d3). 38 | 39 | 40 | ### GUI interface of our hack 41 | 42 | 43 | 44 | ## Architecture and Tech-stack 45 | 46 | ![System Architecture](https://raw.githubusercontent.com/SatoshiNextTechLab/TheSpareRoute/master/UML%20SCM.jpg) 47 | 48 | 49 | ### Architecture Modules 50 | 1. **Add parts** - The OEM uses the function Add parts for adding the produced spare part with its name,quantity,ID and price per unit. 51 | 2. **Buy parts show price** - The Automobile Manufacturer finds the price he has to pay by calling this function with the name and number of part he needs. 52 | 3. **Use OEM parts** - The Automobile Manufacturer pays money temporarily for the parts only if the parts are found to be genuine. 53 | 4. **Pay to OEM** - The OEM can call this function to claim the money for the parts only after 10 hours from the time the Manufacturer pays(if defective products are found the Manufacturer refunds the part). 54 | 5. **Part to vehicle** - This function is used to assign the part to the Vehicle in which the part is to be installed. 55 | 6. **Check part location** - This function is used to check the vehicle in which the part is installed. 56 | 7. **Vehicle assembled** - This function is used to set the vehicle as manufactured completely and ready to be sent to the dealer. 57 | 8. **Showroom** - The Dealer and client can get the final vehicle from here. 58 | 59 | ### Tech Stack 60 | 1. Ethereum smart constracts (in solidity) 61 | 2. Ropsten testnet 62 | 3. Truffle framework 63 | 4. Remix IDE 64 | 5. Web3.js 65 | 6. Geth 66 | 67 | ##### Steps to compile in Truffle 68 | 1. git clone https://github.com/SatoshiNextTechLab/BlockSCM.git 69 | 2. truffle compile 70 | 3. truffle migrate 71 | 4. truffle console 72 | 5. Interact using Web3.js 73 | 74 | ##### Steps to compile GUI 75 | 1. clone repo https://github.com/SatoshiNextTechLab/BlockSCM.git 76 | 2. cd into TheSpareRoute-master/GUI 77 | 2. npm install . 78 | 3. npm install lite-server --save-dev 79 | 3. npm run dev 80 | 81 | ## Built by undergraduates at [Next Tech Lab, SRM Institute of Science and Technology](http://nextech.io/index2.html) 82 | -------------------------------------------------------------------------------- /UML SCM.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SatoshiNextTechLab/BlockSCM/d5886437baa3ede25013afc3f403ee6dc2b33175/UML SCM.jpg -------------------------------------------------------------------------------- /Vyper-contracts/auto.vy: -------------------------------------------------------------------------------- 1 | #Vyper Contract 2 | time_now: public(timestamp) 3 | string_hash: public(bytes32) 4 | pooltime: public(timestamp) 5 | 6 | auto_industry: public({ 7 | typ: uint256, 8 | _add: address 9 | }[address]) 10 | 11 | 12 | vehicle: public({ 13 | vehicle_id: uint256, 14 | vehicle_name: bytes32 15 | }[uint256]) 16 | 17 | parts_mapping: public(uint256[bytes32]) 18 | id_mapping: public(uint256[bytes32]) 19 | time_mapping: public(timestamp[bytes32]) 20 | hashing_item: public(bytes32[bytes32]) 21 | price_mapping: public(uint256[bytes32]) 22 | completeness: public(uint256[uint256]) 23 | 24 | @public 25 | @payable 26 | def __init__(): 27 | pass 28 | 29 | 30 | @public 31 | def add_OEM(): 32 | self.auto_industry[msg.sender]= {typ: 1,_add: msg.sender} 33 | 34 | @public 35 | def add_AUTO_MANU(): 36 | self.auto_industry[msg.sender]= {typ: 2,_add: msg.sender} 37 | 38 | 39 | @public 40 | def addparts(name: bytes32,quantity: uint256,ids: uint256,price: uint256): 41 | assert self.auto_industry[msg.sender].typ == 1 42 | self.parts_mapping[name]+=quantity 43 | self.time_now=block.timestamp 44 | self.id_mapping[name]=ids 45 | self.time_mapping[name]=self.time_now 46 | self.price_mapping[name]=price 47 | # figure out a way to hash name,ids and time together 48 | self.hashing_item[name]=sha3(name) 49 | 50 | @public 51 | @constant 52 | def display(part_name: bytes32) -> uint256: 53 | return self.parts_mapping[part_name] 54 | 55 | @public 56 | @constant 57 | def buy_part_amount_show(name_of_part: bytes32, how_many: uint256) -> uint256: 58 | return how_many*self.price_mapping[name_of_part] 59 | 60 | @public 61 | @payable 62 | def use_OEM_Parts(name_of_part: bytes32,how_many: uint256,id_of_item: bytes32): 63 | #include hash check here 64 | assert self.parts_mapping[name_of_part] > how_many 65 | self.parts_mapping[name_of_part]-=how_many 66 | self.pooltime = block.timestamp 67 | 68 | 69 | @public 70 | @constant 71 | def getPoolMoney() -> uint256(wei): 72 | return self.balance 73 | 74 | @public 75 | def defective(_name_of_part: bytes32, no_of_pieces: uint256(wei)): 76 | assert self.auto_industry[msg.sender].typ == 2 77 | send(msg.sender,no_of_pieces*self.price_mapping[_name_of_part]) 78 | 79 | 80 | @public 81 | @payable 82 | def pay_to_OEM(): 83 | assert self.auto_industry[msg.sender].typ == 1 84 | if (block.timestamp - self.pooltime) > 36000 : 85 | send(msg.sender,self.balance) 86 | 87 | @public 88 | def part_to_vehicle(partid: uint256,vehicle_n: bytes32,_vehicle_id: uint256): 89 | assert self.auto_industry[msg.sender].typ ==2 90 | assert self.completeness[_vehicle_id]!=1 91 | self.vehicle[partid] = {vehicle_id: _vehicle_id,vehicle_name: vehicle_n} 92 | 93 | 94 | @public 95 | @constant 96 | def check_part_location(partid: uint256) -> uint256: 97 | return self.vehicle[partid].vehicle_id 98 | 99 | @public 100 | @constant 101 | def check_part_location2(partid: uint256) -> bytes32: 102 | return self.vehicle[partid].vehicle_name 103 | 104 | 105 | @public 106 | def vehicle_assembled(vehicle_id: uint256): 107 | self.completeness[vehicle_id]=1 108 | 109 | 110 | @public 111 | @payable 112 | def __default__(): 113 | pass 114 | -------------------------------------------------------------------------------- /contracts/Migrations.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.4; 2 | 3 | contract Migrations { 4 | address public owner; 5 | uint public last_completed_migration; 6 | 7 | modifier restricted() { 8 | if (msg.sender == owner) _; 9 | } 10 | 11 | function Migrations() { 12 | owner = msg.sender; 13 | } 14 | 15 | function setCompleted(uint completed) restricted { 16 | last_completed_migration = completed; 17 | } 18 | 19 | function upgrade(address new_address) restricted { 20 | Migrations upgraded = Migrations(new_address); 21 | upgraded.setCompleted(last_completed_migration); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /contracts/auto.sol: -------------------------------------------------------------------------------- 1 | //Blockchain consortium for Automobile Sector – 2 | //Setup a private blockchain consortium with 3 | //minimum 2 parties (Automobile manufacturer and 4 | //OEM manufacturer). The Blockchain solution is 5 | //enabled to track the movement of automobile spare parts from 6 | //OEM warehouse to Automobile manufacturer facility where 7 | //they are also recorded in the blockchain while 8 | //each part is installed in a vehicle and the 9 | //information of vehicle is recorded in the ledger as well. 10 | 11 | 12 | pragma solidity ^0.4.0; 13 | 14 | contract SomeContract { 15 | 16 | function SomeContract() public payable{ 17 | 18 | } 19 | 20 | event TheOemAddedAnItem(address oemaddress,bytes32 itemname,uint quantityofitem); 21 | event TheManufacturerRequestedForParts(bytes32 nameofpart,uint numberofparts); 22 | event TheManufacturerRequestedForMoreParts(bytes32 nameofthepart,uint numberoftheparts); 23 | event TheOemGotPaid(address _oemsaddress,uint moneyinthepoolforoem); 24 | event TheManufacturerRefundedTheDefectiveItem(bytes32 defectiveitem,uint numberofdefective); 25 | event TheVehicleIsReadyToBeSendToTheDealer(uint thevehicleid); 26 | 27 | struct auto_industry { 28 | 29 | uint typ; 30 | address add; 31 | 32 | } 33 | 34 | // add oem to the network 35 | mapping(address => auto_industry ) addautoindustry; 36 | 37 | function add_OEM() { 38 | 39 | addautoindustry[msg.sender]=auto_industry(1,msg.sender); 40 | 41 | } 42 | 43 | modifier only_OEM() { 44 | 45 | if (addautoindustry[msg.sender].typ==1){ 46 | _; 47 | } 48 | 49 | else { 50 | throw; 51 | } 52 | 53 | } 54 | // add automobile manufacturer 55 | function add_AUTO_MANU() { 56 | 57 | addautoindustry[msg.sender]=auto_industry(2,msg.sender); 58 | 59 | } 60 | 61 | modifier only_AUTO_MANU() { 62 | 63 | if (addautoindustry[msg.sender].typ==2){ 64 | _; 65 | } 66 | 67 | else { 68 | throw; 69 | } 70 | 71 | } 72 | 73 | mapping (bytes32 => uint) parts_mapping; 74 | mapping (bytes32 => uint) id_mapping; 75 | mapping (bytes32 => uint) time_mapping; 76 | mapping (bytes32 => bytes32) hashing_item; 77 | mapping (bytes32 => uint) price_mapping; 78 | 79 | //takes input of part name,no of part,part id (for adding the part to list) 80 | function addparts(bytes32 name, uint quantity, uint ids,uint price) only_OEM { 81 | 82 | uint p=parts_mapping[name]; 83 | parts_mapping[name]=p+quantity; 84 | uint time_now=now; 85 | id_mapping[name] = ids; 86 | time_mapping[name]=time_now; 87 | price_mapping[name]=price; 88 | hashing_item[name]=sha3(name,ids,time_now); 89 | TheOemAddedAnItem(msg.sender,name,quantity); 90 | 91 | } 92 | 93 | //displays the no of quantity remaining for a particular part 94 | function display(bytes32 part_name) constant returns(uint) { 95 | 96 | return parts_mapping[part_name]; 97 | 98 | } 99 | 100 | //not useful just for testing 101 | function display_time(bytes32 part_name) constant returns(uint) { 102 | 103 | return time_mapping[part_name]; 104 | 105 | } 106 | 107 | //modiier takes name and id of the part and tells weather it is genuine 108 | modifier auth_part(bytes32 name, uint id_item) { 109 | 110 | uint time_created=time_mapping[name]; 111 | bytes32 hash_temp=sha3(name,id_item,time_created); 112 | bytes32 orig_hash=hashing_item[name]; 113 | if(hash_temp==orig_hash) { 114 | _; 115 | } 116 | else { 117 | throw; 118 | } 119 | 120 | } 121 | 122 | uint pooltime; 123 | 124 | // used to calculate money for desired part from oem 125 | function buy_part_amount_show (bytes32 name_of_part , uint how_many) constant returns(uint) { 126 | 127 | uint amount = how_many * price_mapping[name_of_part]; 128 | return amount; 129 | 130 | } 131 | 132 | // checking for authenticity of parts and paying temporarily to the pool 133 | function use_OEM_Parts(bytes32 name_of_part, uint how_many, uint id_of_item) auth_part(name_of_part , id_of_item) payable { 134 | 135 | if( parts_mapping[name_of_part] < how_many ){ 136 | TheManufacturerRequestedForMoreParts(name_of_part,how_many); 137 | } 138 | 139 | parts_mapping[name_of_part] = parts_mapping[name_of_part] - how_many; 140 | uint amount = msg.value; 141 | this.transfer(amount); 142 | pooltime=now; 143 | 144 | TheManufacturerRequestedForParts(name_of_part,how_many); 145 | 146 | 147 | } 148 | 149 | //give the amount present in the pool 150 | function getPoolMoney() constant returns (uint){ 151 | 152 | return this.balance; 153 | 154 | } 155 | 156 | //for giving back defective items,after this manufacturer gets his money and oem takes the defective part 157 | function defective(bytes32 _name_of_part, uint no_of_pieces) only_AUTO_MANU { 158 | 159 | uint __amount = no_of_pieces * price_mapping[_name_of_part]; 160 | msg.sender.transfer(__amount); 161 | TheManufacturerRefundedTheDefectiveItem(_name_of_part,no_of_pieces); 162 | 163 | } 164 | 165 | //by this function oem can take out money out of the pool to his account after 10 hrs 166 | function pay_to_OEM() payable only_OEM() { 167 | 168 | if(now-pooltime > 36000){ 169 | TheOemGotPaid(msg.sender, this.balance); 170 | msg.sender.transfer(this.balance); 171 | } 172 | 173 | } 174 | mapping (uint => vehicle) partinauto; 175 | struct vehicle 176 | { 177 | uint vehicle_id; 178 | string vehicle_name; 179 | } 180 | mapping (uint => uint) completeness; 181 | //for assigning the part to the vehicle 182 | function part_to_vehicle(uint partid,string vehicle_n,uint _vehicle_id) only_AUTO_MANU 183 | { 184 | if(completeness[_vehicle_id]==1) 185 | { 186 | throw; 187 | } 188 | else 189 | { 190 | partinauto[partid]=vehicle(_vehicle_id,vehicle_n); 191 | } 192 | } 193 | //for finding the location(the vehicle) where the part is installed 194 | function check_part_location(uint partid) constant returns(uint a,string b) 195 | { 196 | a=partinauto[partid].vehicle_id; 197 | b=partinauto[partid].vehicle_name; 198 | } 199 | //to set the status of manufactiring complete and is ready to be sent to the dealer 200 | function vehicle_assembled(uint vehicle_id_) 201 | { 202 | completeness[vehicle_id_]=1; 203 | TheVehicleIsReadyToBeSendToTheDealer(vehicle_id_); 204 | } 205 | function () payable{ 206 | 207 | } 208 | 209 | } 210 | -------------------------------------------------------------------------------- /migrations/1_initial_migration.js: -------------------------------------------------------------------------------- 1 | var Migrations = artifacts.require("./Migrations.sol"); 2 | 3 | module.exports = function(deployer) { 4 | deployer.deploy(Migrations); 5 | }; 6 | -------------------------------------------------------------------------------- /migrations/2_deploy_contracts.js: -------------------------------------------------------------------------------- 1 | var auto = artifacts.require("./auto.sol"); 2 | 3 | module.exports = function(deployer) { 4 | deployer.deploy(auto); 5 | }; 6 | -------------------------------------------------------------------------------- /test/TestMetacoin.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.2; 2 | 3 | import "truffle/Assert.sol"; 4 | import "truffle/DeployedAddresses.sol"; 5 | import "../contracts/MetaCoin.sol"; 6 | 7 | contract TestMetacoin { 8 | 9 | function testInitialBalanceUsingDeployedContract() { 10 | MetaCoin meta = MetaCoin(DeployedAddresses.MetaCoin()); 11 | 12 | uint expected = 10000; 13 | 14 | Assert.equal(meta.getBalance(tx.origin), expected, "Owner should have 10000 MetaCoin initially"); 15 | } 16 | 17 | function testInitialBalanceWithNewMetaCoin() { 18 | MetaCoin meta = new MetaCoin(); 19 | 20 | uint expected = 10000; 21 | 22 | Assert.equal(meta.getBalance(tx.origin), expected, "Owner should have 10000 MetaCoin initially"); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /test/metacoin.js: -------------------------------------------------------------------------------- 1 | var MetaCoin = artifacts.require("./MetaCoin.sol"); 2 | 3 | contract('MetaCoin', function(accounts) { 4 | it("should put 10000 MetaCoin in the first account", function() { 5 | return MetaCoin.deployed().then(function(instance) { 6 | return instance.getBalance.call(accounts[0]); 7 | }).then(function(balance) { 8 | assert.equal(balance.valueOf(), 10000, "10000 wasn't in the first account"); 9 | }); 10 | }); 11 | it("should call a function that depends on a linked library", function() { 12 | var meta; 13 | var metaCoinBalance; 14 | var metaCoinEthBalance; 15 | 16 | return MetaCoin.deployed().then(function(instance) { 17 | meta = instance; 18 | return meta.getBalance.call(accounts[0]); 19 | }).then(function(outCoinBalance) { 20 | metaCoinBalance = outCoinBalance.toNumber(); 21 | return meta.getBalanceInEth.call(accounts[0]); 22 | }).then(function(outCoinBalanceEth) { 23 | metaCoinEthBalance = outCoinBalanceEth.toNumber(); 24 | }).then(function() { 25 | assert.equal(metaCoinEthBalance, 2 * metaCoinBalance, "Library function returned unexpected function, linkage may be broken"); 26 | }); 27 | }); 28 | it("should send coin correctly", function() { 29 | var meta; 30 | 31 | // Get initial balances of first and second account. 32 | var account_one = accounts[0]; 33 | var account_two = accounts[1]; 34 | 35 | var account_one_starting_balance; 36 | var account_two_starting_balance; 37 | var account_one_ending_balance; 38 | var account_two_ending_balance; 39 | 40 | var amount = 10; 41 | 42 | return MetaCoin.deployed().then(function(instance) { 43 | meta = instance; 44 | return meta.getBalance.call(account_one); 45 | }).then(function(balance) { 46 | account_one_starting_balance = balance.toNumber(); 47 | return meta.getBalance.call(account_two); 48 | }).then(function(balance) { 49 | account_two_starting_balance = balance.toNumber(); 50 | return meta.sendCoin(account_two, amount, {from: account_one}); 51 | }).then(function() { 52 | return meta.getBalance.call(account_one); 53 | }).then(function(balance) { 54 | account_one_ending_balance = balance.toNumber(); 55 | return meta.getBalance.call(account_two); 56 | }).then(function(balance) { 57 | account_two_ending_balance = balance.toNumber(); 58 | 59 | assert.equal(account_one_ending_balance, account_one_starting_balance - amount, "Amount wasn't correctly taken from the sender"); 60 | assert.equal(account_two_ending_balance, account_two_starting_balance + amount, "Amount wasn't correctly sent to the receiver"); 61 | }); 62 | }); 63 | }); 64 | -------------------------------------------------------------------------------- /truffle.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | networks: { 3 | development: { 4 | host: "localhost", 5 | port: 8545, 6 | network_id: "*" // Match any network id 7 | } 8 | } 9 | }; 10 | --------------------------------------------------------------------------------