├── 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 | 
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 |
--------------------------------------------------------------------------------