4 <meta charset=
"utf-8" />
5 <title>BIP39 - Mnemonic Code
</title>
7 * Bootstrap v3.2
.0 (http://getbootstrap.com)
8 * Copyright
2011-
2014 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
10 *//*! normalize.css v3.0
.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:
100%;-ms-text-size-adjust:
100%}body{margin:
0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:
0}[hidden],template{display:none}a{background:
0 0}a:active,a:hover{outline:
0}abbr[title]{border-bottom:
1px dotted}b,strong{font-weight:
700}dfn{font-style:italic}h1{margin:
.67em
0;font-size:
2em}mark{color:#
000;background:#ff0}small{font-size:
80%}sub,sup{position:relative;font-size:
75%;line-height:
0;vertical-align:baseline}sup{top:-
.5em}sub{bottom:-
.25em}img{border:
0}svg:not(:root){overflow:hidden}figure{margin:
1em
40px}hr{height:
0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:
1em}button,input,optgroup,select,textarea{margin:
0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:
0;border:
0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:
0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:
.35em
.625em
.75em;margin:
0 2px;border:
1px solid silver}legend{padding:
0;border:
0}textarea{overflow:auto}optgroup{font-weight:
700}table{border-spacing:
0;border-collapse:collapse}td,th{padding:
0}@media print{*{color:#
000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:
1px solid #
999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:
100%!important}p,h2,h3{orphans:
3;widows:
3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn
>.caret,.dropup
>.btn
>.caret{border-top-color:#
000!important}.label{border:
1px solid #
000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:
1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:
1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:
400;line-height:
1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\
2a"}.glyphicon-plus:before{content:"\
2b"}.glyphicon-euro:before{content:"\
20ac"}.glyphicon-minus:before{content:"\
2212"}.glyphicon-cloud:before{content:"\
2601"}.glyphicon-envelope:before{content:"\
2709"}.glyphicon-pencil:before{content:"\
270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-
5-
1:before{content:"\e191"}.glyphicon-sound-
6-
1:before{content:"\e192"}.glyphicon-sound-
7-
1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:
10px;-webkit-tap-highlight-color:rgba(
0,
0,
0,
0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:
14px;line-height:
1.42857143;color:#
333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#
428bca;text-decoration:none}a:hover,a:focus{color:#
2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:
5px auto -webkit-focus-ring-color;outline-offset:-
2px}figure{margin:
0}img{vertical-align:middle}.img-responsive,.thumbnail
>img,.thumbnail a
>img,.carousel-inner
>.item
>img,.carousel-inner
>.item
>a
>img{display:block;width:
100% \
9;max-width:
100%;height:auto}.img-rounded{border-radius:
6px}.img-thumbnail{display:inline-block;width:
100% \
9;max-width:
100%;height:auto;padding:
4px;line-height:
1.42857143;background-color:#fff;border:
1px solid #ddd;border-radius:
4px;-webkit-transition:all
.2s ease-in-out;-o-transition:all
.2s ease-in-out;transition:all
.2s ease-in-out}.img-circle{border-radius:
50%}hr{margin-top:
20px;margin-bottom:
20px;border:
0;border-top:
1px solid #eee}.sr-only{position:absolute;width:
1px;height:
1px;padding:
0;margin:-
1px;overflow:hidden;clip:rect(
0,
0,
0,
0);border:
0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:
0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:
500;line-height:
1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:
400;line-height:
1;color:#
777}h1,.h1,h2,.h2,h3,.h3{margin-top:
20px;margin-bottom:
10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:
65%}h4,.h4,h5,.h5,h6,.h6{margin-top:
10px;margin-bottom:
10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:
75%}h1,.h1{font-size:
36px}h2,.h2{font-size:
30px}h3,.h3{font-size:
24px}h4,.h4{font-size:
18px}h5,.h5{font-size:
14px}h6,.h6{font-size:
12px}p{margin:
0 0 10px}.lead{margin-bottom:
20px;font-size:
16px;font-weight:
300;line-height:
1.4}@media (min-width:
768px){.lead{font-size:
21px}}small,.small{font-size:
85%}cite{font-style:normal}mark,.mark{padding:
.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#
777}.text-primary{color:#
428bca}a.text-primary:hover{color:#
3071a9}.text-success{color:#
3c763d}a.text-success:hover{color:#
2b542c}.text-info{color:#
31708f}a.text-info:hover{color:#
245269}.text-warning{color:#
8a6d3b}a.text-warning:hover{color:#
66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#
843534}.bg-primary{color:#fff;background-color:#
428bca}a.bg-primary:hover{background-color:#
3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:
9px;margin:
40px
0 20px;border-bottom:
1px solid #eee}ul,ol{margin-top:
0;margin-bottom:
10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:
0}.list-unstyled{padding-left:
0;list-style:none}.list-inline{padding-left:
0;margin-left:-
5px;list-style:none}.list-inline
>li{display:inline-block;padding-right:
5px;padding-left:
5px}dl{margin-top:
0;margin-bottom:
20px}dt,dd{line-height:
1.42857143}dt{font-weight:
700}dd{margin-left:
0}@media (min-width:
768px){.dl-horizontal dt{float:left;width:
160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:
180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:
1px dotted #
777}.initialism{font-size:
90%;text-transform:uppercase}blockquote{padding:
10px
20px;margin:
0 0 20px;font-size:
17.5px;border-left:
5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:
0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:
80%;line-height:
1.42857143;color:#
777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\
2014 \
00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:
15px;padding-left:
0;text-align:right;border-right:
5px solid #eee;border-left:
0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\
00A0 \
2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:
20px;font-style:normal;line-height:
1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:
2px
4px;font-size:
90%;color:#c7254e;background-color:#f9f2f4;border-radius:
4px}kbd{padding:
2px
4px;font-size:
90%;color:#fff;background-color:#
333;border-radius:
3px;-webkit-box-shadow:inset
0 -
1px
0 rgba(
0,
0,
0,
.25);box-shadow:inset
0 -
1px
0 rgba(
0,
0,
0,
.25)}kbd kbd{padding:
0;font-size:
100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:
9.5px;margin:
0 0 10px;font-size:
13px;line-height:
1.42857143;color:#
333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:
1px solid #ccc;border-radius:
4px}pre code{padding:
0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:
0}.pre-scrollable{max-height:
340px;overflow-y:scroll}.container{padding-right:
15px;padding-left:
15px;margin-right:auto;margin-left:auto}@media (min-width:
768px){.container{width:
750px}}@media (min-width:
992px){.container{width:
970px}}@media (min-width:
1200px){.container{width:
1170px}}.container-fluid{padding-right:
15px;padding-left:
15px;margin-right:auto;margin-left:auto}.row{margin-right:-
15px;margin-left:-
15px}.col-xs-
1,.col-sm-
1,.col-md-
1,.col-lg-
1,.col-xs-
2,.col-sm-
2,.col-md-
2,.col-lg-
2,.col-xs-
3,.col-sm-
3,.col-md-
3,.col-lg-
3,.col-xs-
4,.col-sm-
4,.col-md-
4,.col-lg-
4,.col-xs-
5,.col-sm-
5,.col-md-
5,.col-lg-
5,.col-xs-
6,.col-sm-
6,.col-md-
6,.col-lg-
6,.col-xs-
7,.col-sm-
7,.col-md-
7,.col-lg-
7,.col-xs-
8,.col-sm-
8,.col-md-
8,.col-lg-
8,.col-xs-
9,.col-sm-
9,.col-md-
9,.col-lg-
9,.col-xs-
10,.col-sm-
10,.col-md-
10,.col-lg-
10,.col-xs-
11,.col-sm-
11,.col-md-
11,.col-lg-
11,.col-xs-
12,.col-sm-
12,.col-md-
12,.col-lg-
12{position:relative;min-height:
1px;padding-right:
15px;padding-left:
15px}.col-xs-
1,.col-xs-
2,.col-xs-
3,.col-xs-
4,.col-xs-
5,.col-xs-
6,.col-xs-
7,.col-xs-
8,.col-xs-
9,.col-xs-
10,.col-xs-
11,.col-xs-
12{float:left}.col-xs-
12{width:
100%}.col-xs-
11{width:
91.66666667%}.col-xs-
10{width:
83.33333333%}.col-xs-
9{width:
75%}.col-xs-
8{width:
66.66666667%}.col-xs-
7{width:
58.33333333%}.col-xs-
6{width:
50%}.col-xs-
5{width:
41.66666667%}.col-xs-
4{width:
33.33333333%}.col-xs-
3{width:
25%}.col-xs-
2{width:
16.66666667%}.col-xs-
1{width:
8.33333333%}.col-xs-pull-
12{right:
100%}.col-xs-pull-
11{right:
91.66666667%}.col-xs-pull-
10{right:
83.33333333%}.col-xs-pull-
9{right:
75%}.col-xs-pull-
8{right:
66.66666667%}.col-xs-pull-
7{right:
58.33333333%}.col-xs-pull-
6{right:
50%}.col-xs-pull-
5{right:
41.66666667%}.col-xs-pull-
4{right:
33.33333333%}.col-xs-pull-
3{right:
25%}.col-xs-pull-
2{right:
16.66666667%}.col-xs-pull-
1{right:
8.33333333%}.col-xs-pull-
0{right:auto}.col-xs-push-
12{left:
100%}.col-xs-push-
11{left:
91.66666667%}.col-xs-push-
10{left:
83.33333333%}.col-xs-push-
9{left:
75%}.col-xs-push-
8{left:
66.66666667%}.col-xs-push-
7{left:
58.33333333%}.col-xs-push-
6{left:
50%}.col-xs-push-
5{left:
41.66666667%}.col-xs-push-
4{left:
33.33333333%}.col-xs-push-
3{left:
25%}.col-xs-push-
2{left:
16.66666667%}.col-xs-push-
1{left:
8.33333333%}.col-xs-push-
0{left:auto}.col-xs-offset-
12{margin-left:
100%}.col-xs-offset-
11{margin-left:
91.66666667%}.col-xs-offset-
10{margin-left:
83.33333333%}.col-xs-offset-
9{margin-left:
75%}.col-xs-offset-
8{margin-left:
66.66666667%}.col-xs-offset-
7{margin-left:
58.33333333%}.col-xs-offset-
6{margin-left:
50%}.col-xs-offset-
5{margin-left:
41.66666667%}.col-xs-offset-
4{margin-left:
33.33333333%}.col-xs-offset-
3{margin-left:
25%}.col-xs-offset-
2{margin-left:
16.66666667%}.col-xs-offset-
1{margin-left:
8.33333333%}.col-xs-offset-
0{margin-left:
0}@media (min-width:
768px){.col-sm-
1,.col-sm-
2,.col-sm-
3,.col-sm-
4,.col-sm-
5,.col-sm-
6,.col-sm-
7,.col-sm-
8,.col-sm-
9,.col-sm-
10,.col-sm-
11,.col-sm-
12{float:left}.col-sm-
12{width:
100%}.col-sm-
11{width:
91.66666667%}.col-sm-
10{width:
83.33333333%}.col-sm-
9{width:
75%}.col-sm-
8{width:
66.66666667%}.col-sm-
7{width:
58.33333333%}.col-sm-
6{width:
50%}.col-sm-
5{width:
41.66666667%}.col-sm-
4{width:
33.33333333%}.col-sm-
3{width:
25%}.col-sm-
2{width:
16.66666667%}.col-sm-
1{width:
8.33333333%}.col-sm-pull-
12{right:
100%}.col-sm-pull-
11{right:
91.66666667%}.col-sm-pull-
10{right:
83.33333333%}.col-sm-pull-
9{right:
75%}.col-sm-pull-
8{right:
66.66666667%}.col-sm-pull-
7{right:
58.33333333%}.col-sm-pull-
6{right:
50%}.col-sm-pull-
5{right:
41.66666667%}.col-sm-pull-
4{right:
33.33333333%}.col-sm-pull-
3{right:
25%}.col-sm-pull-
2{right:
16.66666667%}.col-sm-pull-
1{right:
8.33333333%}.col-sm-pull-
0{right:auto}.col-sm-push-
12{left:
100%}.col-sm-push-
11{left:
91.66666667%}.col-sm-push-
10{left:
83.33333333%}.col-sm-push-
9{left:
75%}.col-sm-push-
8{left:
66.66666667%}.col-sm-push-
7{left:
58.33333333%}.col-sm-push-
6{left:
50%}.col-sm-push-
5{left:
41.66666667%}.col-sm-push-
4{left:
33.33333333%}.col-sm-push-
3{left:
25%}.col-sm-push-
2{left:
16.66666667%}.col-sm-push-
1{left:
8.33333333%}.col-sm-push-
0{left:auto}.col-sm-offset-
12{margin-left:
100%}.col-sm-offset-
11{margin-left:
91.66666667%}.col-sm-offset-
10{margin-left:
83.33333333%}.col-sm-offset-
9{margin-left:
75%}.col-sm-offset-
8{margin-left:
66.66666667%}.col-sm-offset-
7{margin-left:
58.33333333%}.col-sm-offset-
6{margin-left:
50%}.col-sm-offset-
5{margin-left:
41.66666667%}.col-sm-offset-
4{margin-left:
33.33333333%}.col-sm-offset-
3{margin-left:
25%}.col-sm-offset-
2{margin-left:
16.66666667%}.col-sm-offset-
1{margin-left:
8.33333333%}.col-sm-offset-
0{margin-left:
0}}@media (min-width:
992px){.col-md-
1,.col-md-
2,.col-md-
3,.col-md-
4,.col-md-
5,.col-md-
6,.col-md-
7,.col-md-
8,.col-md-
9,.col-md-
10,.col-md-
11,.col-md-
12{float:left}.col-md-
12{width:
100%}.col-md-
11{width:
91.66666667%}.col-md-
10{width:
83.33333333%}.col-md-
9{width:
75%}.col-md-
8{width:
66.66666667%}.col-md-
7{width:
58.33333333%}.col-md-
6{width:
50%}.col-md-
5{width:
41.66666667%}.col-md-
4{width:
33.33333333%}.col-md-
3{width:
25%}.col-md-
2{width:
16.66666667%}.col-md-
1{width:
8.33333333%}.col-md-pull-
12{right:
100%}.col-md-pull-
11{right:
91.66666667%}.col-md-pull-
10{right:
83.33333333%}.col-md-pull-
9{right:
75%}.col-md-pull-
8{right:
66.66666667%}.col-md-pull-
7{right:
58.33333333%}.col-md-pull-
6{right:
50%}.col-md-pull-
5{right:
41.66666667%}.col-md-pull-
4{right:
33.33333333%}.col-md-pull-
3{right:
25%}.col-md-pull-
2{right:
16.66666667%}.col-md-pull-
1{right:
8.33333333%}.col-md-pull-
0{right:auto}.col-md-push-
12{left:
100%}.col-md-push-
11{left:
91.66666667%}.col-md-push-
10{left:
83.33333333%}.col-md-push-
9{left:
75%}.col-md-push-
8{left:
66.66666667%}.col-md-push-
7{left:
58.33333333%}.col-md-push-
6{left:
50%}.col-md-push-
5{left:
41.66666667%}.col-md-push-
4{left:
33.33333333%}.col-md-push-
3{left:
25%}.col-md-push-
2{left:
16.66666667%}.col-md-push-
1{left:
8.33333333%}.col-md-push-
0{left:auto}.col-md-offset-
12{margin-left:
100%}.col-md-offset-
11{margin-left:
91.66666667%}.col-md-offset-
10{margin-left:
83.33333333%}.col-md-offset-
9{margin-left:
75%}.col-md-offset-
8{margin-left:
66.66666667%}.col-md-offset-
7{margin-left:
58.33333333%}.col-md-offset-
6{margin-left:
50%}.col-md-offset-
5{margin-left:
41.66666667%}.col-md-offset-
4{margin-left:
33.33333333%}.col-md-offset-
3{margin-left:
25%}.col-md-offset-
2{margin-left:
16.66666667%}.col-md-offset-
1{margin-left:
8.33333333%}.col-md-offset-
0{margin-left:
0}}@media (min-width:
1200px){.col-lg-
1,.col-lg-
2,.col-lg-
3,.col-lg-
4,.col-lg-
5,.col-lg-
6,.col-lg-
7,.col-lg-
8,.col-lg-
9,.col-lg-
10,.col-lg-
11,.col-lg-
12{float:left}.col-lg-
12{width:
100%}.col-lg-
11{width:
91.66666667%}.col-lg-
10{width:
83.33333333%}.col-lg-
9{width:
75%}.col-lg-
8{width:
66.66666667%}.col-lg-
7{width:
58.33333333%}.col-lg-
6{width:
50%}.col-lg-
5{width:
41.66666667%}.col-lg-
4{width:
33.33333333%}.col-lg-
3{width:
25%}.col-lg-
2{width:
16.66666667%}.col-lg-
1{width:
8.33333333%}.col-lg-pull-
12{right:
100%}.col-lg-pull-
11{right:
91.66666667%}.col-lg-pull-
10{right:
83.33333333%}.col-lg-pull-
9{right:
75%}.col-lg-pull-
8{right:
66.66666667%}.col-lg-pull-
7{right:
58.33333333%}.col-lg-pull-
6{right:
50%}.col-lg-pull-
5{right:
41.66666667%}.col-lg-pull-
4{right:
33.33333333%}.col-lg-pull-
3{right:
25%}.col-lg-pull-
2{right:
16.66666667%}.col-lg-pull-
1{right:
8.33333333%}.col-lg-pull-
0{right:auto}.col-lg-push-
12{left:
100%}.col-lg-push-
11{left:
91.66666667%}.col-lg-push-
10{left:
83.33333333%}.col-lg-push-
9{left:
75%}.col-lg-push-
8{left:
66.66666667%}.col-lg-push-
7{left:
58.33333333%}.col-lg-push-
6{left:
50%}.col-lg-push-
5{left:
41.66666667%}.col-lg-push-
4{left:
33.33333333%}.col-lg-push-
3{left:
25%}.col-lg-push-
2{left:
16.66666667%}.col-lg-push-
1{left:
8.33333333%}.col-lg-push-
0{left:auto}.col-lg-offset-
12{margin-left:
100%}.col-lg-offset-
11{margin-left:
91.66666667%}.col-lg-offset-
10{margin-left:
83.33333333%}.col-lg-offset-
9{margin-left:
75%}.col-lg-offset-
8{margin-left:
66.66666667%}.col-lg-offset-
7{margin-left:
58.33333333%}.col-lg-offset-
6{margin-left:
50%}.col-lg-offset-
5{margin-left:
41.66666667%}.col-lg-offset-
4{margin-left:
33.33333333%}.col-lg-offset-
3{margin-left:
25%}.col-lg-offset-
2{margin-left:
16.66666667%}.col-lg-offset-
1{margin-left:
8.33333333%}.col-lg-offset-
0{margin-left:
0}}table{background-color:transparent}th{text-align:left}.table{width:
100%;max-width:
100%;margin-bottom:
20px}.table
>thead
>tr
>th,.table
>tbody
>tr
>th,.table
>tfoot
>tr
>th,.table
>thead
>tr
>td,.table
>tbody
>tr
>td,.table
>tfoot
>tr
>td{padding:
8px;line-height:
1.42857143;vertical-align:top;border-top:
1px solid #ddd}.table
>thead
>tr
>th{vertical-align:bottom;border-bottom:
2px solid #ddd}.table
>caption+thead
>tr:first-child
>th,.table
>colgroup+thead
>tr:first-child
>th,.table
>thead:first-child
>tr:first-child
>th,.table
>caption+thead
>tr:first-child
>td,.table
>colgroup+thead
>tr:first-child
>td,.table
>thead:first-child
>tr:first-child
>td{border-top:
0}.table
>tbody+tbody{border-top:
2px solid #ddd}.table .table{background-color:#fff}.table-condensed
>thead
>tr
>th,.table-condensed
>tbody
>tr
>th,.table-condensed
>tfoot
>tr
>th,.table-condensed
>thead
>tr
>td,.table-condensed
>tbody
>tr
>td,.table-condensed
>tfoot
>tr
>td{padding:
5px}.table-bordered{border:
1px solid #ddd}.table-bordered
>thead
>tr
>th,.table-bordered
>tbody
>tr
>th,.table-bordered
>tfoot
>tr
>th,.table-bordered
>thead
>tr
>td,.table-bordered
>tbody
>tr
>td,.table-bordered
>tfoot
>tr
>td{border:
1px solid #ddd}.table-bordered
>thead
>tr
>th,.table-bordered
>thead
>tr
>td{border-bottom-width:
2px}.table-striped
>tbody
>tr:nth-child(odd)
>td,.table-striped
>tbody
>tr:nth-child(odd)
>th{background-color:#f9f9f9}.table-hover
>tbody
>tr:hover
>td,.table-hover
>tbody
>tr:hover
>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table
>thead
>tr
>td.active,.table
>tbody
>tr
>td.active,.table
>tfoot
>tr
>td.active,.table
>thead
>tr
>th.active,.table
>tbody
>tr
>th.active,.table
>tfoot
>tr
>th.active,.table
>thead
>tr.active
>td,.table
>tbody
>tr.active
>td,.table
>tfoot
>tr.active
>td,.table
>thead
>tr.active
>th,.table
>tbody
>tr.active
>th,.table
>tfoot
>tr.active
>th{background-color:#f5f5f5}.table-hover
>tbody
>tr
>td.active:hover,.table-hover
>tbody
>tr
>th.active:hover,.table-hover
>tbody
>tr.active:hover
>td,.table-hover
>tbody
>tr:hover
>.active,.table-hover
>tbody
>tr.active:hover
>th{background-color:#e8e8e8}.table
>thead
>tr
>td.success,.table
>tbody
>tr
>td.success,.table
>tfoot
>tr
>td.success,.table
>thead
>tr
>th.success,.table
>tbody
>tr
>th.success,.table
>tfoot
>tr
>th.success,.table
>thead
>tr.success
>td,.table
>tbody
>tr.success
>td,.table
>tfoot
>tr.success
>td,.table
>thead
>tr.success
>th,.table
>tbody
>tr.success
>th,.table
>tfoot
>tr.success
>th{background-color:#dff0d8}.table-hover
>tbody
>tr
>td.success:hover,.table-hover
>tbody
>tr
>th.success:hover,.table-hover
>tbody
>tr.success:hover
>td,.table-hover
>tbody
>tr:hover
>.success,.table-hover
>tbody
>tr.success:hover
>th{background-color:#d0e9c6}.table
>thead
>tr
>td.info,.table
>tbody
>tr
>td.info,.table
>tfoot
>tr
>td.info,.table
>thead
>tr
>th.info,.table
>tbody
>tr
>th.info,.table
>tfoot
>tr
>th.info,.table
>thead
>tr.info
>td,.table
>tbody
>tr.info
>td,.table
>tfoot
>tr.info
>td,.table
>thead
>tr.info
>th,.table
>tbody
>tr.info
>th,.table
>tfoot
>tr.info
>th{background-color:#d9edf7}.table-hover
>tbody
>tr
>td.info:hover,.table-hover
>tbody
>tr
>th.info:hover,.table-hover
>tbody
>tr.info:hover
>td,.table-hover
>tbody
>tr:hover
>.info,.table-hover
>tbody
>tr.info:hover
>th{background-color:#c4e3f3}.table
>thead
>tr
>td.warning,.table
>tbody
>tr
>td.warning,.table
>tfoot
>tr
>td.warning,.table
>thead
>tr
>th.warning,.table
>tbody
>tr
>th.warning,.table
>tfoot
>tr
>th.warning,.table
>thead
>tr.warning
>td,.table
>tbody
>tr.warning
>td,.table
>tfoot
>tr.warning
>td,.table
>thead
>tr.warning
>th,.table
>tbody
>tr.warning
>th,.table
>tfoot
>tr.warning
>th{background-color:#fcf8e3}.table-hover
>tbody
>tr
>td.warning:hover,.table-hover
>tbody
>tr
>th.warning:hover,.table-hover
>tbody
>tr.warning:hover
>td,.table-hover
>tbody
>tr:hover
>.warning,.table-hover
>tbody
>tr.warning:hover
>th{background-color:#faf2cc}.table
>thead
>tr
>td.danger,.table
>tbody
>tr
>td.danger,.table
>tfoot
>tr
>td.danger,.table
>thead
>tr
>th.danger,.table
>tbody
>tr
>th.danger,.table
>tfoot
>tr
>th.danger,.table
>thead
>tr.danger
>td,.table
>tbody
>tr.danger
>td,.table
>tfoot
>tr.danger
>td,.table
>thead
>tr.danger
>th,.table
>tbody
>tr.danger
>th,.table
>tfoot
>tr.danger
>th{background-color:#f2dede}.table-hover
>tbody
>tr
>td.danger:hover,.table-hover
>tbody
>tr
>th.danger:hover,.table-hover
>tbody
>tr.danger:hover
>td,.table-hover
>tbody
>tr:hover
>.danger,.table-hover
>tbody
>tr.danger:hover
>th{background-color:#ebcccc}@media screen and (max-width:
767px){.table-responsive{width:
100%;margin-bottom:
15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:
1px solid #ddd}.table-responsive
>.table{margin-bottom:
0}.table-responsive
>.table
>thead
>tr
>th,.table-responsive
>.table
>tbody
>tr
>th,.table-responsive
>.table
>tfoot
>tr
>th,.table-responsive
>.table
>thead
>tr
>td,.table-responsive
>.table
>tbody
>tr
>td,.table-responsive
>.table
>tfoot
>tr
>td{white-space:nowrap}.table-responsive
>.table-bordered{border:
0}.table-responsive
>.table-bordered
>thead
>tr
>th:first-child,.table-responsive
>.table-bordered
>tbody
>tr
>th:first-child,.table-responsive
>.table-bordered
>tfoot
>tr
>th:first-child,.table-responsive
>.table-bordered
>thead
>tr
>td:first-child,.table-responsive
>.table-bordered
>tbody
>tr
>td:first-child,.table-responsive
>.table-bordered
>tfoot
>tr
>td:first-child{border-left:
0}.table-responsive
>.table-bordered
>thead
>tr
>th:last-child,.table-responsive
>.table-bordered
>tbody
>tr
>th:last-child,.table-responsive
>.table-bordered
>tfoot
>tr
>th:last-child,.table-responsive
>.table-bordered
>thead
>tr
>td:last-child,.table-responsive
>.table-bordered
>tbody
>tr
>td:last-child,.table-responsive
>.table-bordered
>tfoot
>tr
>td:last-child{border-right:
0}.table-responsive
>.table-bordered
>tbody
>tr:last-child
>th,.table-responsive
>.table-bordered
>tfoot
>tr:last-child
>th,.table-responsive
>.table-bordered
>tbody
>tr:last-child
>td,.table-responsive
>.table-bordered
>tfoot
>tr:last-child
>td{border-bottom:
0}}fieldset{min-width:
0;padding:
0;margin:
0;border:
0}legend{display:block;width:
100%;padding:
0;margin-bottom:
20px;font-size:
21px;line-height:inherit;color:#
333;border:
0;border-bottom:
1px solid #e5e5e5}label{display:inline-block;max-width:
100%;margin-bottom:
5px;font-weight:
700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:
4px
0 0;margin-top:
1px \
9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:
100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:
5px auto -webkit-focus-ring-color;outline-offset:-
2px}output{display:block;padding-top:
7px;font-size:
14px;line-height:
1.42857143;color:#
555}.form-control{display:block;width:
100%;height:
34px;padding:
6px
12px;font-size:
14px;line-height:
1.42857143;color:#
555;background-color:#fff;background-image:none;border:
1px solid #ccc;border-radius:
4px;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075);-webkit-transition:border-color ease-in-out
.15s,-webkit-box-shadow ease-in-out
.15s;-o-transition:border-color ease-in-out
.15s,box-shadow ease-in-out
.15s;transition:border-color ease-in-out
.15s,box-shadow ease-in-out
.15s}.form-control:focus{border-color:#
66afe9;outline:
0;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 8px rgba(
102,
175,
233,
.6);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 8px rgba(
102,
175,
233,
.6)}.form-control::-moz-placeholder{color:#
777;opacity:
1}.form-control:-ms-input-placeholder{color:#
777}.form-control::-webkit-input-placeholder{color:#
777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:
1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:
34px;line-height:
1.42857143 \
0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:
30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:
46px}.form-group{margin-bottom:
15px}.radio,.checkbox{position:relative;display:block;min-height:
20px;margin-top:
10px;margin-bottom:
10px}.radio label,.checkbox label{padding-left:
20px;margin-bottom:
0;font-weight:
400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:
4px \
9;margin-left:-
20px}.radio+.radio,.checkbox+.checkbox{margin-top:-
5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:
20px;margin-bottom:
0;font-weight:
400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:
0;margin-left:
10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:
7px;padding-bottom:
7px;margin-bottom:
0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:
0;padding-left:
0}.input-sm,.form-horizontal .form-group-sm .form-control{height:
30px;padding:
5px
10px;font-size:
12px;line-height:
1.5;border-radius:
3px}select.input-sm{height:
30px;line-height:
30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:
46px;padding:
10px
16px;font-size:
18px;line-height:
1.33;border-radius:
6px}select.input-lg{height:
46px;line-height:
46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:
42.5px}.form-control-feedback{position:absolute;top:
25px;right:
0;z-index:
2;display:block;width:
34px;height:
34px;line-height:
34px;text-align:center}.input-lg+.form-control-feedback{width:
46px;height:
46px;line-height:
46px}.input-sm+.form-control-feedback{width:
30px;height:
30px;line-height:
30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#
3c763d}.has-success .form-control{border-color:#
3c763d;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075)}.has-success .form-control:focus{border-color:#
2b542c;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #
67b168;box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #
67b168}.has-success .input-group-addon{color:#
3c763d;background-color:#dff0d8;border-color:#
3c763d}.has-success .form-control-feedback{color:#
3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#
8a6d3b}.has-warning .form-control{border-color:#
8a6d3b;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075)}.has-warning .form-control:focus{border-color:#
66512c;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #c0a16b;box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #c0a16b}.has-warning .input-group-addon{color:#
8a6d3b;background-color:#fcf8e3;border-color:#
8a6d3b}.has-warning .form-control-feedback{color:#
8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075)}.has-error .form-control:focus{border-color:#
843534;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #ce8483;box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:
0}.help-block{display:block;margin-top:
5px;margin-bottom:
10px;color:#
737373}@media (min-width:
768px){.form-inline .form-group{display:inline-block;margin-bottom:
0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group
>.form-control{width:
100%}.form-inline .control-label{margin-bottom:
0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:
0;margin-bottom:
0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:
0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:
0}.form-inline .has-feedback .form-control-feedback{top:
0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:
7px;margin-top:
0;margin-bottom:
0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:
27px}.form-horizontal .form-group{margin-right:-
15px;margin-left:-
15px}@media (min-width:
768px){.form-horizontal .control-label{padding-top:
7px;margin-bottom:
0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:
0;right:
15px}@media (min-width:
768px){.form-horizontal .form-group-lg .control-label{padding-top:
14.3px}}@media (min-width:
768px){.form-horizontal .form-group-sm .control-label{padding-top:
6px}}.btn{display:inline-block;padding:
6px
12px;margin-bottom:
0;font-size:
14px;font-weight:
400;line-height:
1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:
1px solid transparent;border-radius:
4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:
5px auto -webkit-focus-ring-color;outline-offset:-
2px}.btn:hover,.btn:focus{color:#
333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:
0;-webkit-box-shadow:inset
0 3px
5px rgba(
0,
0,
0,
.125);box-shadow:inset
0 3px
5px rgba(
0,
0,
0,
.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=
65);-webkit-box-shadow:none;box-shadow:none;opacity:
.65}.btn-default{color:#
333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open
>.dropdown-toggle.btn-default{color:#
333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open
>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#
333}.btn-primary{color:#fff;background-color:#
428bca;border-color:#
357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open
>.dropdown-toggle.btn-primary{color:#fff;background-color:#
3071a9;border-color:#
285e8e}.btn-primary:active,.btn-primary.active,.open
>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#
428bca;border-color:#
357ebd}.btn-primary .badge{color:#
428bca;background-color:#fff}.btn-success{color:#fff;background-color:#
5cb85c;border-color:#
4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open
>.dropdown-toggle.btn-success{color:#fff;background-color:#
449d44;border-color:#
398439}.btn-success:active,.btn-success.active,.open
>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#
5cb85c;border-color:#
4cae4c}.btn-success .badge{color:#
5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#
5bc0de;border-color:#
46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open
>.dropdown-toggle.btn-info{color:#fff;background-color:#
31b0d5;border-color:#
269abc}.btn-info:active,.btn-info.active,.open
>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#
5bc0de;border-color:#
46b8da}.btn-info .badge{color:#
5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open
>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open
>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open
>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open
>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:
400;color:#
428bca;cursor:pointer;border-radius:
0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#
2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#
777;text-decoration:none}.btn-lg,.btn-group-lg
>.btn{padding:
10px
16px;font-size:
18px;line-height:
1.33;border-radius:
6px}.btn-sm,.btn-group-sm
>.btn{padding:
5px
10px;font-size:
12px;line-height:
1.5;border-radius:
3px}.btn-xs,.btn-group-xs
>.btn{padding:
1px
5px;font-size:
12px;line-height:
1.5;border-radius:
3px}.btn-block{display:block;width:
100%}.btn-block+.btn-block{margin-top:
5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:
100%}.fade{opacity:
0;-webkit-transition:opacity
.15s linear;-o-transition:opacity
.15s linear;transition:opacity
.15s linear}.fade.in{opacity:
1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:
0;overflow:hidden;-webkit-transition:height
.35s ease;-o-transition:height
.35s ease;transition:height
.35s ease}.caret{display:inline-block;width:
0;height:
0;margin-left:
2px;vertical-align:middle;border-top:
4px solid;border-right:
4px solid transparent;border-left:
4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:
0}.dropdown-menu{position:absolute;top:
100%;left:
0;z-index:
1000;display:none;float:left;min-width:
160px;padding:
5px
0;margin:
2px
0 0;font-size:
14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:
1px solid #ccc;border:
1px solid rgba(
0,
0,
0,
.15);border-radius:
4px;-webkit-box-shadow:
0 6px
12px rgba(
0,
0,
0,
.175);box-shadow:
0 6px
12px rgba(
0,
0,
0,
.175)}.dropdown-menu.pull-right{right:
0;left:auto}.dropdown-menu .divider{height:
1px;margin:
9px
0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu
>li
>a{display:block;padding:
3px
20px;clear:both;font-weight:
400;line-height:
1.42857143;color:#
333;white-space:nowrap}.dropdown-menu
>li
>a:hover,.dropdown-menu
>li
>a:focus{color:#
262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu
>.active
>a,.dropdown-menu
>.active
>a:hover,.dropdown-menu
>.active
>a:focus{color:#fff;text-decoration:none;background-color:#
428bca;outline:
0}.dropdown-menu
>.disabled
>a,.dropdown-menu
>.disabled
>a:hover,.dropdown-menu
>.disabled
>a:focus{color:#
777}.dropdown-menu
>.disabled
>a:hover,.dropdown-menu
>.disabled
>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open
>.dropdown-menu{display:block}.open
>a{outline:
0}.dropdown-menu-right{right:
0;left:auto}.dropdown-menu-left{right:auto;left:
0}.dropdown-header{display:block;padding:
3px
20px;font-size:
12px;line-height:
1.42857143;color:#
777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:
0;right:
0;bottom:
0;left:
0;z-index:
990}.pull-right
>.dropdown-menu{right:
0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:
0;border-bottom:
4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:
100%;margin-bottom:
1px}@media (min-width:
768px){.navbar-right .dropdown-menu{right:
0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:
0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group
>.btn,.btn-group-vertical
>.btn{position:relative;float:left}.btn-group
>.btn:hover,.btn-group-vertical
>.btn:hover,.btn-group
>.btn:focus,.btn-group-vertical
>.btn:focus,.btn-group
>.btn:active,.btn-group-vertical
>.btn:active,.btn-group
>.btn.active,.btn-group-vertical
>.btn.active{z-index:
2}.btn-group
>.btn:focus,.btn-group-vertical
>.btn:focus{outline:
0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-
1px}.btn-toolbar{margin-left:-
5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar
>.btn,.btn-toolbar
>.btn-group,.btn-toolbar
>.input-group{margin-left:
5px}.btn-group
>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:
0}.btn-group
>.btn:first-child{margin-left:
0}.btn-group
>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:
0;border-bottom-right-radius:
0}.btn-group
>.btn:last-child:not(:first-child),.btn-group
>.dropdown-toggle:not(:first-child){border-top-left-radius:
0;border-bottom-left-radius:
0}.btn-group
>.btn-group{float:left}.btn-group
>.btn-group:not(:first-child):not(:last-child)
>.btn{border-radius:
0}.btn-group
>.btn-group:first-child
>.btn:last-child,.btn-group
>.btn-group:first-child
>.dropdown-toggle{border-top-right-radius:
0;border-bottom-right-radius:
0}.btn-group
>.btn-group:last-child
>.btn:first-child{border-top-left-radius:
0;border-bottom-left-radius:
0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:
0}.btn-group
>.btn+.dropdown-toggle{padding-right:
8px;padding-left:
8px}.btn-group
>.btn-lg+.dropdown-toggle{padding-right:
12px;padding-left:
12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset
0 3px
5px rgba(
0,
0,
0,
.125);box-shadow:inset
0 3px
5px rgba(
0,
0,
0,
.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:
0}.btn-lg .caret{border-width:
5px
5px
0;border-bottom-width:
0}.dropup .btn-lg .caret{border-width:
0 5px
5px}.btn-group-vertical
>.btn,.btn-group-vertical
>.btn-group,.btn-group-vertical
>.btn-group
>.btn{display:block;float:none;width:
100%;max-width:
100%}.btn-group-vertical
>.btn-group
>.btn{float:none}.btn-group-vertical
>.btn+.btn,.btn-group-vertical
>.btn+.btn-group,.btn-group-vertical
>.btn-group+.btn,.btn-group-vertical
>.btn-group+.btn-group{margin-top:-
1px;margin-left:
0}.btn-group-vertical
>.btn:not(:first-child):not(:last-child){border-radius:
0}.btn-group-vertical
>.btn:first-child:not(:last-child){border-top-right-radius:
4px;border-bottom-right-radius:
0;border-bottom-left-radius:
0}.btn-group-vertical
>.btn:last-child:not(:first-child){border-top-left-radius:
0;border-top-right-radius:
0;border-bottom-left-radius:
4px}.btn-group-vertical
>.btn-group:not(:first-child):not(:last-child)
>.btn{border-radius:
0}.btn-group-vertical
>.btn-group:first-child:not(:last-child)
>.btn:last-child,.btn-group-vertical
>.btn-group:first-child:not(:last-child)
>.dropdown-toggle{border-bottom-right-radius:
0;border-bottom-left-radius:
0}.btn-group-vertical
>.btn-group:last-child:not(:first-child)
>.btn:first-child{border-top-left-radius:
0;border-top-right-radius:
0}.btn-group-justified{display:table;width:
100%;table-layout:fixed;border-collapse:separate}.btn-group-justified
>.btn,.btn-group-justified
>.btn-group{display:table-cell;float:none;width:
1%}.btn-group-justified
>.btn-group .btn{width:
100%}.btn-group-justified
>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]
>.btn
>input[type=radio],[data-toggle=buttons]
>.btn
>input[type=checkbox]{position:absolute;z-index:-
1;filter:alpha(opacity=
0);opacity:
0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:
0;padding-left:
0}.input-group .form-control{position:relative;z-index:
2;float:left;width:
100%;margin-bottom:
0}.input-group-lg
>.form-control,.input-group-lg
>.input-group-addon,.input-group-lg
>.input-group-btn
>.btn{height:
46px;padding:
10px
16px;font-size:
18px;line-height:
1.33;border-radius:
6px}select.input-group-lg
>.form-control,select.input-group-lg
>.input-group-addon,select.input-group-lg
>.input-group-btn
>.btn{height:
46px;line-height:
46px}textarea.input-group-lg
>.form-control,textarea.input-group-lg
>.input-group-addon,textarea.input-group-lg
>.input-group-btn
>.btn,select[multiple].input-group-lg
>.form-control,select[multiple].input-group-lg
>.input-group-addon,select[multiple].input-group-lg
>.input-group-btn
>.btn{height:auto}.input-group-sm
>.form-control,.input-group-sm
>.input-group-addon,.input-group-sm
>.input-group-btn
>.btn{height:
30px;padding:
5px
10px;font-size:
12px;line-height:
1.5;border-radius:
3px}select.input-group-sm
>.form-control,select.input-group-sm
>.input-group-addon,select.input-group-sm
>.input-group-btn
>.btn{height:
30px;line-height:
30px}textarea.input-group-sm
>.form-control,textarea.input-group-sm
>.input-group-addon,textarea.input-group-sm
>.input-group-btn
>.btn,select[multiple].input-group-sm
>.form-control,select[multiple].input-group-sm
>.input-group-addon,select[multiple].input-group-sm
>.input-group-btn
>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:
0}.input-group-addon,.input-group-btn{width:
1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:
6px
12px;font-size:
14px;font-weight:
400;line-height:
1;color:#
555;text-align:center;background-color:#eee;border:
1px solid #ccc;border-radius:
4px}.input-group-addon.input-sm{padding:
5px
10px;font-size:
12px;border-radius:
3px}.input-group-addon.input-lg{padding:
10px
16px;font-size:
18px;border-radius:
6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:
0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child
>.btn,.input-group-btn:first-child
>.btn-group
>.btn,.input-group-btn:first-child
>.dropdown-toggle,.input-group-btn:last-child
>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child
>.btn-group:not(:last-child)
>.btn{border-top-right-radius:
0;border-bottom-right-radius:
0}.input-group-addon:first-child{border-right:
0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child
>.btn,.input-group-btn:last-child
>.btn-group
>.btn,.input-group-btn:last-child
>.dropdown-toggle,.input-group-btn:first-child
>.btn:not(:first-child),.input-group-btn:first-child
>.btn-group:not(:first-child)
>.btn{border-top-left-radius:
0;border-bottom-left-radius:
0}.input-group-addon:last-child{border-left:
0}.input-group-btn{position:relative;font-size:
0;white-space:nowrap}.input-group-btn
>.btn{position:relative}.input-group-btn
>.btn+.btn{margin-left:-
1px}.input-group-btn
>.btn:hover,.input-group-btn
>.btn:focus,.input-group-btn
>.btn:active{z-index:
2}.input-group-btn:first-child
>.btn,.input-group-btn:first-child
>.btn-group{margin-right:-
1px}.input-group-btn:last-child
>.btn,.input-group-btn:last-child
>.btn-group{margin-left:-
1px}.nav{padding-left:
0;margin-bottom:
0;list-style:none}.nav
>li{position:relative;display:block}.nav
>li
>a{position:relative;display:block;padding:
10px
15px}.nav
>li
>a:hover,.nav
>li
>a:focus{text-decoration:none;background-color:#eee}.nav
>li.disabled
>a{color:#
777}.nav
>li.disabled
>a:hover,.nav
>li.disabled
>a:focus{color:#
777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open
>a,.nav .open
>a:hover,.nav .open
>a:focus{background-color:#eee;border-color:#
428bca}.nav .nav-divider{height:
1px;margin:
9px
0;overflow:hidden;background-color:#e5e5e5}.nav
>li
>a
>img{max-width:none}.nav-tabs{border-bottom:
1px solid #ddd}.nav-tabs
>li{float:left;margin-bottom:-
1px}.nav-tabs
>li
>a{margin-right:
2px;line-height:
1.42857143;border:
1px solid transparent;border-radius:
4px
4px
0 0}.nav-tabs
>li
>a:hover{border-color:#eee #eee #ddd}.nav-tabs
>li.active
>a,.nav-tabs
>li.active
>a:hover,.nav-tabs
>li.active
>a:focus{color:#
555;cursor:default;background-color:#fff;border:
1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:
100%;border-bottom:
0}.nav-tabs.nav-justified
>li{float:none}.nav-tabs.nav-justified
>li
>a{margin-bottom:
5px;text-align:center}.nav-tabs.nav-justified
>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:
768px){.nav-tabs.nav-justified
>li{display:table-cell;width:
1%}.nav-tabs.nav-justified
>li
>a{margin-bottom:
0}}.nav-tabs.nav-justified
>li
>a{margin-right:
0;border-radius:
4px}.nav-tabs.nav-justified
>.active
>a,.nav-tabs.nav-justified
>.active
>a:hover,.nav-tabs.nav-justified
>.active
>a:focus{border:
1px solid #ddd}@media (min-width:
768px){.nav-tabs.nav-justified
>li
>a{border-bottom:
1px solid #ddd;border-radius:
4px
4px
0 0}.nav-tabs.nav-justified
>.active
>a,.nav-tabs.nav-justified
>.active
>a:hover,.nav-tabs.nav-justified
>.active
>a:focus{border-bottom-color:#fff}}.nav-pills
>li{float:left}.nav-pills
>li
>a{border-radius:
4px}.nav-pills
>li+li{margin-left:
2px}.nav-pills
>li.active
>a,.nav-pills
>li.active
>a:hover,.nav-pills
>li.active
>a:focus{color:#fff;background-color:#
428bca}.nav-stacked
>li{float:none}.nav-stacked
>li+li{margin-top:
2px;margin-left:
0}.nav-justified{width:
100%}.nav-justified
>li{float:none}.nav-justified
>li
>a{margin-bottom:
5px;text-align:center}.nav-justified
>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:
768px){.nav-justified
>li{display:table-cell;width:
1%}.nav-justified
>li
>a{margin-bottom:
0}}.nav-tabs-justified{border-bottom:
0}.nav-tabs-justified
>li
>a{margin-right:
0;border-radius:
4px}.nav-tabs-justified
>.active
>a,.nav-tabs-justified
>.active
>a:hover,.nav-tabs-justified
>.active
>a:focus{border:
1px solid #ddd}@media (min-width:
768px){.nav-tabs-justified
>li
>a{border-bottom:
1px solid #ddd;border-radius:
4px
4px
0 0}.nav-tabs-justified
>.active
>a,.nav-tabs-justified
>.active
>a:hover,.nav-tabs-justified
>.active
>a:focus{border-bottom-color:#fff}}.tab-content
>.tab-pane{display:none}.tab-content
>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-
1px;border-top-left-radius:
0;border-top-right-radius:
0}.navbar{position:relative;min-height:
50px;margin-bottom:
20px;border:
1px solid transparent}@media (min-width:
768px){.navbar{border-radius:
4px}}@media (min-width:
768px){.navbar-header{float:left}}.navbar-collapse{padding-right:
15px;padding-left:
15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:
1px solid transparent;-webkit-box-shadow:inset
0 1px
0 rgba(
255,
255,
255,
.1);box-shadow:inset
0 1px
0 rgba(
255,
255,
255,
.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:
768px){.navbar-collapse{width:auto;border-top:
0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:
0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:
0;padding-left:
0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:
340px}@media (max-width:
480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:
200px}}.container
>.navbar-header,.container-fluid
>.navbar-header,.container
>.navbar-collapse,.container-fluid
>.navbar-collapse{margin-right:-
15px;margin-left:-
15px}@media (min-width:
768px){.container
>.navbar-header,.container-fluid
>.navbar-header,.container
>.navbar-collapse,.container-fluid
>.navbar-collapse{margin-right:
0;margin-left:
0}}.navbar-static-top{z-index:
1000;border-width:
0 0 1px}@media (min-width:
768px){.navbar-static-top{border-radius:
0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:
0;left:
0;z-index:
1030;-webkit-transform:translate3d(
0,
0,
0);-o-transform:translate3d(
0,
0,
0);transform:translate3d(
0,
0,
0)}@media (min-width:
768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:
0}}.navbar-fixed-top{top:
0;border-width:
0 0 1px}.navbar-fixed-bottom{bottom:
0;margin-bottom:
0;border-width:
1px
0 0}.navbar-brand{float:left;height:
50px;padding:
15px
15px;font-size:
18px;line-height:
20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:
768px){.navbar
>.container .navbar-brand,.navbar
>.container-fluid .navbar-brand{margin-left:-
15px}}.navbar-toggle{position:relative;float:right;padding:
9px
10px;margin-top:
8px;margin-right:
15px;margin-bottom:
8px;background-color:transparent;background-image:none;border:
1px solid transparent;border-radius:
4px}.navbar-toggle:focus{outline:
0}.navbar-toggle .icon-bar{display:block;width:
22px;height:
2px;border-radius:
1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:
4px}@media (min-width:
768px){.navbar-toggle{display:none}}.navbar-nav{margin:
7.5px -
15px}.navbar-nav
>li
>a{padding-top:
10px;padding-bottom:
10px;line-height:
20px}@media (max-width:
767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:
0;background-color:transparent;border:
0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu
>li
>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:
5px
15px
5px
25px}.navbar-nav .open .dropdown-menu
>li
>a{line-height:
20px}.navbar-nav .open .dropdown-menu
>li
>a:hover,.navbar-nav .open .dropdown-menu
>li
>a:focus{background-image:none}}@media (min-width:
768px){.navbar-nav{float:left;margin:
0}.navbar-nav
>li{float:left}.navbar-nav
>li
>a{padding-top:
15px;padding-bottom:
15px}.navbar-nav.navbar-right:last-child{margin-right:-
15px}}@media (min-width:
768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:
10px
15px;margin-top:
8px;margin-right:-
15px;margin-bottom:
8px;margin-left:-
15px;border-top:
1px solid transparent;border-bottom:
1px solid transparent;-webkit-box-shadow:inset
0 1px
0 rgba(
255,
255,
255,
.1),
0 1px
0 rgba(
255,
255,
255,
.1);box-shadow:inset
0 1px
0 rgba(
255,
255,
255,
.1),
0 1px
0 rgba(
255,
255,
255,
.1)}@media (min-width:
768px){.navbar-form .form-group{display:inline-block;margin-bottom:
0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group
>.form-control{width:
100%}.navbar-form .control-label{margin-bottom:
0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:
0;margin-bottom:
0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:
0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:
0}.navbar-form .has-feedback .form-control-feedback{top:
0}}@media (max-width:
767px){.navbar-form .form-group{margin-bottom:
5px}}@media (min-width:
768px){.navbar-form{width:auto;padding-top:
0;padding-bottom:
0;margin-right:
0;margin-left:
0;border:
0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-
15px}}.navbar-nav
>li
>.dropdown-menu{margin-top:
0;border-top-left-radius:
0;border-top-right-radius:
0}.navbar-fixed-bottom .navbar-nav
>li
>.dropdown-menu{border-bottom-right-radius:
0;border-bottom-left-radius:
0}.navbar-btn{margin-top:
8px;margin-bottom:
8px}.navbar-btn.btn-sm{margin-top:
10px;margin-bottom:
10px}.navbar-btn.btn-xs{margin-top:
14px;margin-bottom:
14px}.navbar-text{margin-top:
15px;margin-bottom:
15px}@media (min-width:
768px){.navbar-text{float:left;margin-right:
15px;margin-left:
15px}.navbar-text.navbar-right:last-child{margin-right:
0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#
777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#
5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#
777}.navbar-default .navbar-nav
>li
>a{color:#
777}.navbar-default .navbar-nav
>li
>a:hover,.navbar-default .navbar-nav
>li
>a:focus{color:#
333;background-color:transparent}.navbar-default .navbar-nav
>.active
>a,.navbar-default .navbar-nav
>.active
>a:hover,.navbar-default .navbar-nav
>.active
>a:focus{color:#
555;background-color:#e7e7e7}.navbar-default .navbar-nav
>.disabled
>a,.navbar-default .navbar-nav
>.disabled
>a:hover,.navbar-default .navbar-nav
>.disabled
>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#
888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav
>.open
>a,.navbar-default .navbar-nav
>.open
>a:hover,.navbar-default .navbar-nav
>.open
>a:focus{color:#
555;background-color:#e7e7e7}@media (max-width:
767px){.navbar-default .navbar-nav .open .dropdown-menu
>li
>a{color:#
777}.navbar-default .navbar-nav .open .dropdown-menu
>li
>a:hover,.navbar-default .navbar-nav .open .dropdown-menu
>li
>a:focus{color:#
333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu
>.active
>a,.navbar-default .navbar-nav .open .dropdown-menu
>.active
>a:hover,.navbar-default .navbar-nav .open .dropdown-menu
>.active
>a:focus{color:#
555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu
>.disabled
>a,.navbar-default .navbar-nav .open .dropdown-menu
>.disabled
>a:hover,.navbar-default .navbar-nav .open .dropdown-menu
>.disabled
>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#
777}.navbar-default .navbar-link:hover{color:#
333}.navbar-default .btn-link{color:#
777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#
333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#
222;border-color:#
080808}.navbar-inverse .navbar-brand{color:#
777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#
777}.navbar-inverse .navbar-nav
>li
>a{color:#
777}.navbar-inverse .navbar-nav
>li
>a:hover,.navbar-inverse .navbar-nav
>li
>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav
>.active
>a,.navbar-inverse .navbar-nav
>.active
>a:hover,.navbar-inverse .navbar-nav
>.active
>a:focus{color:#fff;background-color:#
080808}.navbar-inverse .navbar-nav
>.disabled
>a,.navbar-inverse .navbar-nav
>.disabled
>a:hover,.navbar-inverse .navbar-nav
>.disabled
>a:focus{color:#
444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#
333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#
333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#
101010}.navbar-inverse .navbar-nav
>.open
>a,.navbar-inverse .navbar-nav
>.open
>a:hover,.navbar-inverse .navbar-nav
>.open
>a:focus{color:#fff;background-color:#
080808}@media (max-width:
767px){.navbar-inverse .navbar-nav .open .dropdown-menu
>.dropdown-header{border-color:#
080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#
080808}.navbar-inverse .navbar-nav .open .dropdown-menu
>li
>a{color:#
777}.navbar-inverse .navbar-nav .open .dropdown-menu
>li
>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu
>li
>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu
>.active
>a,.navbar-inverse .navbar-nav .open .dropdown-menu
>.active
>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu
>.active
>a:focus{color:#fff;background-color:#
080808}.navbar-inverse .navbar-nav .open .dropdown-menu
>.disabled
>a,.navbar-inverse .navbar-nav .open .dropdown-menu
>.disabled
>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu
>.disabled
>a:focus{color:#
444;background-color:transparent}}.navbar-inverse .navbar-link{color:#
777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#
777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#
444}.breadcrumb{padding:
8px
15px;margin-bottom:
20px;list-style:none;background-color:#f5f5f5;border-radius:
4px}.breadcrumb
>li{display:inline-block}.breadcrumb
>li+li:before{padding:
0 5px;color:#ccc;content:"/\
00a0"}.breadcrumb
>.active{color:#
777}.pagination{display:inline-block;padding-left:
0;margin:
20px
0;border-radius:
4px}.pagination
>li{display:inline}.pagination
>li
>a,.pagination
>li
>span{position:relative;float:left;padding:
6px
12px;margin-left:-
1px;line-height:
1.42857143;color:#
428bca;text-decoration:none;background-color:#fff;border:
1px solid #ddd}.pagination
>li:first-child
>a,.pagination
>li:first-child
>span{margin-left:
0;border-top-left-radius:
4px;border-bottom-left-radius:
4px}.pagination
>li:last-child
>a,.pagination
>li:last-child
>span{border-top-right-radius:
4px;border-bottom-right-radius:
4px}.pagination
>li
>a:hover,.pagination
>li
>span:hover,.pagination
>li
>a:focus,.pagination
>li
>span:focus{color:#
2a6496;background-color:#eee;border-color:#ddd}.pagination
>.active
>a,.pagination
>.active
>span,.pagination
>.active
>a:hover,.pagination
>.active
>span:hover,.pagination
>.active
>a:focus,.pagination
>.active
>span:focus{z-index:
2;color:#fff;cursor:default;background-color:#
428bca;border-color:#
428bca}.pagination
>.disabled
>span,.pagination
>.disabled
>span:hover,.pagination
>.disabled
>span:focus,.pagination
>.disabled
>a,.pagination
>.disabled
>a:hover,.pagination
>.disabled
>a:focus{color:#
777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg
>li
>a,.pagination-lg
>li
>span{padding:
10px
16px;font-size:
18px}.pagination-lg
>li:first-child
>a,.pagination-lg
>li:first-child
>span{border-top-left-radius:
6px;border-bottom-left-radius:
6px}.pagination-lg
>li:last-child
>a,.pagination-lg
>li:last-child
>span{border-top-right-radius:
6px;border-bottom-right-radius:
6px}.pagination-sm
>li
>a,.pagination-sm
>li
>span{padding:
5px
10px;font-size:
12px}.pagination-sm
>li:first-child
>a,.pagination-sm
>li:first-child
>span{border-top-left-radius:
3px;border-bottom-left-radius:
3px}.pagination-sm
>li:last-child
>a,.pagination-sm
>li:last-child
>span{border-top-right-radius:
3px;border-bottom-right-radius:
3px}.pager{padding-left:
0;margin:
20px
0;text-align:center;list-style:none}.pager li{display:inline}.pager li
>a,.pager li
>span{display:inline-block;padding:
5px
14px;background-color:#fff;border:
1px solid #ddd;border-radius:
15px}.pager li
>a:hover,.pager li
>a:focus{text-decoration:none;background-color:#eee}.pager .next
>a,.pager .next
>span{float:right}.pager .previous
>a,.pager .previous
>span{float:left}.pager .disabled
>a,.pager .disabled
>a:hover,.pager .disabled
>a:focus,.pager .disabled
>span{color:#
777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:
.2em
.6em
.3em;font-size:
75%;font-weight:
700;line-height:
1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:
.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-
1px}.label-default{background-color:#
777}.label-default[href]:hover,.label-default[href]:focus{background-color:#
5e5e5e}.label-primary{background-color:#
428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#
3071a9}.label-success{background-color:#
5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#
449d44}.label-info{background-color:#
5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#
31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:
10px;padding:
3px
7px;font-size:
12px;font-weight:
700;line-height:
1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#
777;border-radius:
10px}.badge:empty{display:none}.btn .badge{position:relative;top:-
1px}.btn-xs .badge{top:
0;padding:
1px
5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active
>.badge,.nav-pills
>.active
>a
>.badge{color:#
428bca;background-color:#fff}.nav-pills
>li
>a
>.badge{margin-left:
3px}.jumbotron{padding:
30px;margin-bottom:
30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:
15px;font-size:
21px;font-weight:
200}.jumbotron
>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:
6px}.jumbotron .container{max-width:
100%}@media screen and (min-width:
768px){.jumbotron{padding-top:
48px;padding-bottom:
48px}.container .jumbotron{padding-right:
60px;padding-left:
60px}.jumbotron h1,.jumbotron .h1{font-size:
63px}}.thumbnail{display:block;padding:
4px;margin-bottom:
20px;line-height:
1.42857143;background-color:#fff;border:
1px solid #ddd;border-radius:
4px;-webkit-transition:all
.2s ease-in-out;-o-transition:all
.2s ease-in-out;transition:all
.2s ease-in-out}.thumbnail
>img,.thumbnail a
>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#
428bca}.thumbnail .caption{padding:
9px;color:#
333}.alert{padding:
15px;margin-bottom:
20px;border:
1px solid transparent;border-radius:
4px}.alert h4{margin-top:
0;color:inherit}.alert .alert-link{font-weight:
700}.alert
>p,.alert
>ul{margin-bottom:
0}.alert
>p+p{margin-top:
5px}.alert-dismissable,.alert-dismissible{padding-right:
35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-
2px;right:-
21px;color:inherit}.alert-success{color:#
3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#
2b542c}.alert-info{color:#
31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#
245269}.alert-warning{color:#
8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#
66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#
843534}@-webkit-keyframes progress-bar-stripes{from{background-position:
40px
0}to{background-position:
0 0}}@-o-keyframes progress-bar-stripes{from{background-position:
40px
0}to{background-position:
0 0}}@keyframes progress-bar-stripes{from{background-position:
40px
0}to{background-position:
0 0}}.progress{height:
20px;margin-bottom:
20px;overflow:hidden;background-color:#f5f5f5;border-radius:
4px;-webkit-box-shadow:inset
0 1px
2px rgba(
0,
0,
0,
.1);box-shadow:inset
0 1px
2px rgba(
0,
0,
0,
.1)}.progress-bar{float:left;width:
0;height:
100%;font-size:
12px;line-height:
20px;color:#fff;text-align:center;background-color:#
428bca;-webkit-box-shadow:inset
0 -
1px
0 rgba(
0,
0,
0,
.15);box-shadow:inset
0 -
1px
0 rgba(
0,
0,
0,
.15);-webkit-transition:width
.6s ease;-o-transition:width
.6s ease;transition:width
.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:-o-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);-webkit-background-size:
40px
40px;background-size:
40px
40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes
2s linear infinite;-o-animation:progress-bar-stripes
2s linear infinite;animation:progress-bar-stripes
2s linear infinite}.progress-bar[
aria-valuenow="
1"],.progress-bar[
aria-valuenow="
2"]{min-width:
30px}.progress-bar[
aria-valuenow="
0"]{min-width:
30px;color:#
777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#
5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:-o-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent)}.progress-bar-info{background-color:#
5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:-o-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:-o-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:-o-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent)}.media,.media-body{overflow:hidden;zoom:
1}.media,.media .media{margin-top:
15px}.media:first-child{margin-top:
0}.media-object{display:block}.media-heading{margin:
0 0 5px}.media
>.pull-left{margin-right:
10px}.media
>.pull-right{margin-left:
10px}.media-list{padding-left:
0;list-style:none}.list-group{padding-left:
0;margin-bottom:
20px}.list-group-item{position:relative;display:block;padding:
10px
15px;margin-bottom:-
1px;background-color:#fff;border:
1px solid #ddd}.list-group-item:first-child{border-top-left-radius:
4px;border-top-right-radius:
4px}.list-group-item:last-child{margin-bottom:
0;border-bottom-right-radius:
4px;border-bottom-left-radius:
4px}.list-group-item
>.badge{float:right}.list-group-item
>.badge+.badge{margin-right:
5px}a.list-group-item{color:#
555}a.list-group-item .list-group-item-heading{color:#
333}a.list-group-item:hover,a.list-group-item:focus{color:#
555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#
777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#
777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:
2;color:#fff;background-color:#
428bca;border-color:#
428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading
>small,.list-group-item.active:hover .list-group-item-heading
>small,.list-group-item.active:focus .list-group-item-heading
>small,.list-group-item.active .list-group-item-heading
>.small,.list-group-item.active:hover .list-group-item-heading
>.small,.list-group-item.active:focus .list-group-item-heading
>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#
3c763d;background-color:#dff0d8}a.list-group-item-success{color:#
3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#
3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#
3c763d;border-color:#
3c763d}.list-group-item-info{color:#
31708f;background-color:#d9edf7}a.list-group-item-info{color:#
31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#
31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#
31708f;border-color:#
31708f}.list-group-item-warning{color:#
8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#
8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#
8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#
8a6d3b;border-color:#
8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:
0;margin-bottom:
5px}.list-group-item-text{margin-bottom:
0;line-height:
1.3}.panel{margin-bottom:
20px;background-color:#fff;border:
1px solid transparent;border-radius:
4px;-webkit-box-shadow:
0 1px
1px rgba(
0,
0,
0,
.05);box-shadow:
0 1px
1px rgba(
0,
0,
0,
.05)}.panel-body{padding:
15px}.panel-heading{padding:
10px
15px;border-bottom:
1px solid transparent;border-top-left-radius:
3px;border-top-right-radius:
3px}.panel-heading
>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:
0;margin-bottom:
0;font-size:
16px;color:inherit}.panel-title
>a{color:inherit}.panel-footer{padding:
10px
15px;background-color:#f5f5f5;border-top:
1px solid #ddd;border-bottom-right-radius:
3px;border-bottom-left-radius:
3px}.panel
>.list-group{margin-bottom:
0}.panel
>.list-group .list-group-item{border-width:
1px
0;border-radius:
0}.panel
>.list-group:first-child .list-group-item:first-child{border-top:
0;border-top-left-radius:
3px;border-top-right-radius:
3px}.panel
>.list-group:last-child .list-group-item:last-child{border-bottom:
0;border-bottom-right-radius:
3px;border-bottom-left-radius:
3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:
0}.list-group+.panel-footer{border-top-width:
0}.panel
>.table,.panel
>.table-responsive
>.table,.panel
>.panel-collapse
>.table{margin-bottom:
0}.panel
>.table:first-child,.panel
>.table-responsive:first-child
>.table:first-child{border-top-left-radius:
3px;border-top-right-radius:
3px}.panel
>.table:first-child
>thead:first-child
>tr:first-child td:first-child,.panel
>.table-responsive:first-child
>.table:first-child
>thead:first-child
>tr:first-child td:first-child,.panel
>.table:first-child
>tbody:first-child
>tr:first-child td:first-child,.panel
>.table-responsive:first-child
>.table:first-child
>tbody:first-child
>tr:first-child td:first-child,.panel
>.table:first-child
>thead:first-child
>tr:first-child th:first-child,.panel
>.table-responsive:first-child
>.table:first-child
>thead:first-child
>tr:first-child th:first-child,.panel
>.table:first-child
>tbody:first-child
>tr:first-child th:first-child,.panel
>.table-responsive:first-child
>.table:first-child
>tbody:first-child
>tr:first-child th:first-child{border-top-left-radius:
3px}.panel
>.table:first-child
>thead:first-child
>tr:first-child td:last-child,.panel
>.table-responsive:first-child
>.table:first-child
>thead:first-child
>tr:first-child td:last-child,.panel
>.table:first-child
>tbody:first-child
>tr:first-child td:last-child,.panel
>.table-responsive:first-child
>.table:first-child
>tbody:first-child
>tr:first-child td:last-child,.panel
>.table:first-child
>thead:first-child
>tr:first-child th:last-child,.panel
>.table-responsive:first-child
>.table:first-child
>thead:first-child
>tr:first-child th:last-child,.panel
>.table:first-child
>tbody:first-child
>tr:first-child th:last-child,.panel
>.table-responsive:first-child
>.table:first-child
>tbody:first-child
>tr:first-child th:last-child{border-top-right-radius:
3px}.panel
>.table:last-child,.panel
>.table-responsive:last-child
>.table:last-child{border-bottom-right-radius:
3px;border-bottom-left-radius:
3px}.panel
>.table:last-child
>tbody:last-child
>tr:last-child td:first-child,.panel
>.table-responsive:last-child
>.table:last-child
>tbody:last-child
>tr:last-child td:first-child,.panel
>.table:last-child
>tfoot:last-child
>tr:last-child td:first-child,.panel
>.table-responsive:last-child
>.table:last-child
>tfoot:last-child
>tr:last-child td:first-child,.panel
>.table:last-child
>tbody:last-child
>tr:last-child th:first-child,.panel
>.table-responsive:last-child
>.table:last-child
>tbody:last-child
>tr:last-child th:first-child,.panel
>.table:last-child
>tfoot:last-child
>tr:last-child th:first-child,.panel
>.table-responsive:last-child
>.table:last-child
>tfoot:last-child
>tr:last-child th:first-child{border-bottom-left-radius:
3px}.panel
>.table:last-child
>tbody:last-child
>tr:last-child td:last-child,.panel
>.table-responsive:last-child
>.table:last-child
>tbody:last-child
>tr:last-child td:last-child,.panel
>.table:last-child
>tfoot:last-child
>tr:last-child td:last-child,.panel
>.table-responsive:last-child
>.table:last-child
>tfoot:last-child
>tr:last-child td:last-child,.panel
>.table:last-child
>tbody:last-child
>tr:last-child th:last-child,.panel
>.table-responsive:last-child
>.table:last-child
>tbody:last-child
>tr:last-child th:last-child,.panel
>.table:last-child
>tfoot:last-child
>tr:last-child th:last-child,.panel
>.table-responsive:last-child
>.table:last-child
>tfoot:last-child
>tr:last-child th:last-child{border-bottom-right-radius:
3px}.panel
>.panel-body+.table,.panel
>.panel-body+.table-responsive{border-top:
1px solid #ddd}.panel
>.table
>tbody:first-child
>tr:first-child th,.panel
>.table
>tbody:first-child
>tr:first-child td{border-top:
0}.panel
>.table-bordered,.panel
>.table-responsive
>.table-bordered{border:
0}.panel
>.table-bordered
>thead
>tr
>th:first-child,.panel
>.table-responsive
>.table-bordered
>thead
>tr
>th:first-child,.panel
>.table-bordered
>tbody
>tr
>th:first-child,.panel
>.table-responsive
>.table-bordered
>tbody
>tr
>th:first-child,.panel
>.table-bordered
>tfoot
>tr
>th:first-child,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr
>th:first-child,.panel
>.table-bordered
>thead
>tr
>td:first-child,.panel
>.table-responsive
>.table-bordered
>thead
>tr
>td:first-child,.panel
>.table-bordered
>tbody
>tr
>td:first-child,.panel
>.table-responsive
>.table-bordered
>tbody
>tr
>td:first-child,.panel
>.table-bordered
>tfoot
>tr
>td:first-child,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr
>td:first-child{border-left:
0}.panel
>.table-bordered
>thead
>tr
>th:last-child,.panel
>.table-responsive
>.table-bordered
>thead
>tr
>th:last-child,.panel
>.table-bordered
>tbody
>tr
>th:last-child,.panel
>.table-responsive
>.table-bordered
>tbody
>tr
>th:last-child,.panel
>.table-bordered
>tfoot
>tr
>th:last-child,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr
>th:last-child,.panel
>.table-bordered
>thead
>tr
>td:last-child,.panel
>.table-responsive
>.table-bordered
>thead
>tr
>td:last-child,.panel
>.table-bordered
>tbody
>tr
>td:last-child,.panel
>.table-responsive
>.table-bordered
>tbody
>tr
>td:last-child,.panel
>.table-bordered
>tfoot
>tr
>td:last-child,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr
>td:last-child{border-right:
0}.panel
>.table-bordered
>thead
>tr:first-child
>td,.panel
>.table-responsive
>.table-bordered
>thead
>tr:first-child
>td,.panel
>.table-bordered
>tbody
>tr:first-child
>td,.panel
>.table-responsive
>.table-bordered
>tbody
>tr:first-child
>td,.panel
>.table-bordered
>thead
>tr:first-child
>th,.panel
>.table-responsive
>.table-bordered
>thead
>tr:first-child
>th,.panel
>.table-bordered
>tbody
>tr:first-child
>th,.panel
>.table-responsive
>.table-bordered
>tbody
>tr:first-child
>th{border-bottom:
0}.panel
>.table-bordered
>tbody
>tr:last-child
>td,.panel
>.table-responsive
>.table-bordered
>tbody
>tr:last-child
>td,.panel
>.table-bordered
>tfoot
>tr:last-child
>td,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr:last-child
>td,.panel
>.table-bordered
>tbody
>tr:last-child
>th,.panel
>.table-responsive
>.table-bordered
>tbody
>tr:last-child
>th,.panel
>.table-bordered
>tfoot
>tr:last-child
>th,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr:last-child
>th{border-bottom:
0}.panel
>.table-responsive{margin-bottom:
0;border:
0}.panel-group{margin-bottom:
20px}.panel-group .panel{margin-bottom:
0;border-radius:
4px}.panel-group .panel+.panel{margin-top:
5px}.panel-group .panel-heading{border-bottom:
0}.panel-group .panel-heading+.panel-collapse
>.panel-body{border-top:
1px solid #ddd}.panel-group .panel-footer{border-top:
0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:
1px solid #ddd}.panel-default{border-color:#ddd}.panel-default
>.panel-heading{color:#
333;background-color:#f5f5f5;border-color:#ddd}.panel-default
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#ddd}.panel-default
>.panel-heading .badge{color:#f5f5f5;background-color:#
333}.panel-default
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#
428bca}.panel-primary
>.panel-heading{color:#fff;background-color:#
428bca;border-color:#
428bca}.panel-primary
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#
428bca}.panel-primary
>.panel-heading .badge{color:#
428bca;background-color:#fff}.panel-primary
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#
428bca}.panel-success{border-color:#d6e9c6}.panel-success
>.panel-heading{color:#
3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#d6e9c6}.panel-success
>.panel-heading .badge{color:#dff0d8;background-color:#
3c763d}.panel-success
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info
>.panel-heading{color:#
31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#bce8f1}.panel-info
>.panel-heading .badge{color:#d9edf7;background-color:#
31708f}.panel-info
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning
>.panel-heading{color:#
8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#faebcc}.panel-warning
>.panel-heading .badge{color:#fcf8e3;background-color:#
8a6d3b}.panel-warning
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger
>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#ebccd1}.panel-danger
>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:
0;padding:
0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:
0;bottom:
0;left:
0;width:
100%;height:
100%;border:
0}.embed-responsive.embed-responsive-
16by9{padding-bottom:
56.25%}.embed-responsive.embed-responsive-
4by3{padding-bottom:
75%}.well{min-height:
20px;padding:
19px;margin-bottom:
20px;background-color:#f5f5f5;border:
1px solid #e3e3e3;border-radius:
4px;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.05);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.05)}.well blockquote{border-color:#ddd;border-color:rgba(
0,
0,
0,
.15)}.well-lg{padding:
24px;border-radius:
6px}.well-sm{padding:
9px;border-radius:
3px}.close{float:right;font-size:
21px;font-weight:
700;line-height:
1;color:#
000;text-shadow:
0 1px
0 #fff;filter:alpha(opacity=
20);opacity:
.2}.close:hover,.close:focus{color:#
000;text-decoration:none;cursor:pointer;filter:alpha(opacity=
50);opacity:
.5}button.close{-webkit-appearance:none;padding:
0;cursor:pointer;background:
0 0;border:
0}.modal-open{overflow:hidden}.modal{position:fixed;top:
0;right:
0;bottom:
0;left:
0;z-index:
1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:
0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform
.3s ease-out;-o-transition:-o-transform
.3s ease-out;transition:transform
.3s ease-out;-webkit-transform:translate3d(
0,-
25%,
0);-o-transform:translate3d(
0,-
25%,
0);transform:translate3d(
0,-
25%,
0)}.modal.in .modal-dialog{-webkit-transform:translate3d(
0,
0,
0);-o-transform:translate3d(
0,
0,
0);transform:translate3d(
0,
0,
0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:
10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:
1px solid #
999;border:
1px solid rgba(
0,
0,
0,
.2);border-radius:
6px;outline:
0;-webkit-box-shadow:
0 3px
9px rgba(
0,
0,
0,
.5);box-shadow:
0 3px
9px rgba(
0,
0,
0,
.5)}.modal-backdrop{position:fixed;top:
0;right:
0;bottom:
0;left:
0;z-index:
1040;background-color:#
000}.modal-backdrop.fade{filter:alpha(opacity=
0);opacity:
0}.modal-backdrop.in{filter:alpha(opacity=
50);opacity:
.5}.modal-header{min-height:
16.43px;padding:
15px;border-bottom:
1px solid #e5e5e5}.modal-header .close{margin-top:-
2px}.modal-title{margin:
0;line-height:
1.42857143}.modal-body{position:relative;padding:
15px}.modal-footer{padding:
15px;text-align:right;border-top:
1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:
0;margin-left:
5px}.modal-footer .btn-group .btn+.btn{margin-left:-
1px}.modal-footer .btn-block+.btn-block{margin-left:
0}.modal-scrollbar-measure{position:absolute;top:-
9999px;width:
50px;height:
50px;overflow:scroll}@media (min-width:
768px){.modal-dialog{width:
600px;margin:
30px auto}.modal-content{-webkit-box-shadow:
0 5px
15px rgba(
0,
0,
0,
.5);box-shadow:
0 5px
15px rgba(
0,
0,
0,
.5)}.modal-sm{width:
300px}}@media (min-width:
992px){.modal-lg{width:
900px}}.tooltip{position:absolute;z-index:
1070;display:block;font-size:
12px;line-height:
1.4;visibility:visible;filter:alpha(opacity=
0);opacity:
0}.tooltip.in{filter:alpha(opacity=
90);opacity:
.9}.tooltip.top{padding:
5px
0;margin-top:-
3px}.tooltip.right{padding:
0 5px;margin-left:
3px}.tooltip.bottom{padding:
5px
0;margin-top:
3px}.tooltip.left{padding:
0 5px;margin-left:-
3px}.tooltip-inner{max-width:
200px;padding:
3px
8px;color:#fff;text-align:center;text-decoration:none;background-color:#
000;border-radius:
4px}.tooltip-arrow{position:absolute;width:
0;height:
0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:
0;left:
50%;margin-left:-
5px;border-width:
5px
5px
0;border-top-color:#
000}.tooltip.top-left .tooltip-arrow{bottom:
0;left:
5px;border-width:
5px
5px
0;border-top-color:#
000}.tooltip.top-right .tooltip-arrow{right:
5px;bottom:
0;border-width:
5px
5px
0;border-top-color:#
000}.tooltip.right .tooltip-arrow{top:
50%;left:
0;margin-top:-
5px;border-width:
5px
5px
5px
0;border-right-color:#
000}.tooltip.left .tooltip-arrow{top:
50%;right:
0;margin-top:-
5px;border-width:
5px
0 5px
5px;border-left-color:#
000}.tooltip.bottom .tooltip-arrow{top:
0;left:
50%;margin-left:-
5px;border-width:
0 5px
5px;border-bottom-color:#
000}.tooltip.bottom-left .tooltip-arrow{top:
0;left:
5px;border-width:
0 5px
5px;border-bottom-color:#
000}.tooltip.bottom-right .tooltip-arrow{top:
0;right:
5px;border-width:
0 5px
5px;border-bottom-color:#
000}.popover{position:absolute;top:
0;left:
0;z-index:
1060;display:none;max-width:
276px;padding:
1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:
1px solid #ccc;border:
1px solid rgba(
0,
0,
0,
.2);border-radius:
6px;-webkit-box-shadow:
0 5px
10px rgba(
0,
0,
0,
.2);box-shadow:
0 5px
10px rgba(
0,
0,
0,
.2)}.popover.top{margin-top:-
10px}.popover.right{margin-left:
10px}.popover.bottom{margin-top:
10px}.popover.left{margin-left:-
10px}.popover-title{padding:
8px
14px;margin:
0;font-size:
14px;font-weight:
400;line-height:
18px;background-color:#f7f7f7;border-bottom:
1px solid #ebebeb;border-radius:
5px
5px
0 0}.popover-content{padding:
9px
14px}.popover
>.arrow,.popover
>.arrow:after{position:absolute;display:block;width:
0;height:
0;border-color:transparent;border-style:solid}.popover
>.arrow{border-width:
11px}.popover
>.arrow:after{content:"";border-width:
10px}.popover.top
>.arrow{bottom:-
11px;left:
50%;margin-left:-
11px;border-top-color:#
999;border-top-color:rgba(
0,
0,
0,
.25);border-bottom-width:
0}.popover.top
>.arrow:after{bottom:
1px;margin-left:-
10px;content:" ";border-top-color:#fff;border-bottom-width:
0}.popover.right
>.arrow{top:
50%;left:-
11px;margin-top:-
11px;border-right-color:#
999;border-right-color:rgba(
0,
0,
0,
.25);border-left-width:
0}.popover.right
>.arrow:after{bottom:-
10px;left:
1px;content:" ";border-right-color:#fff;border-left-width:
0}.popover.bottom
>.arrow{top:-
11px;left:
50%;margin-left:-
11px;border-top-width:
0;border-bottom-color:#
999;border-bottom-color:rgba(
0,
0,
0,
.25)}.popover.bottom
>.arrow:after{top:
1px;margin-left:-
10px;content:" ";border-top-width:
0;border-bottom-color:#fff}.popover.left
>.arrow{top:
50%;right:-
11px;margin-top:-
11px;border-right-width:
0;border-left-color:#
999;border-left-color:rgba(
0,
0,
0,
.25)}.popover.left
>.arrow:after{right:
1px;bottom:-
10px;content:" ";border-right-width:
0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:
100%;overflow:hidden}.carousel-inner
>.item{position:relative;display:none;-webkit-transition:
.6s ease-in-out left;-o-transition:
.6s ease-in-out left;transition:
.6s ease-in-out left}.carousel-inner
>.item
>img,.carousel-inner
>.item
>a
>img{line-height:
1}.carousel-inner
>.active,.carousel-inner
>.next,.carousel-inner
>.prev{display:block}.carousel-inner
>.active{left:
0}.carousel-inner
>.next,.carousel-inner
>.prev{position:absolute;top:
0;width:
100%}.carousel-inner
>.next{left:
100%}.carousel-inner
>.prev{left:-
100%}.carousel-inner
>.next.left,.carousel-inner
>.prev.right{left:
0}.carousel-inner
>.active.left{left:-
100%}.carousel-inner
>.active.right{left:
100%}.carousel-control{position:absolute;top:
0;bottom:
0;left:
0;width:
15%;font-size:
20px;color:#fff;text-align:center;text-shadow:
0 1px
2px rgba(
0,
0,
0,
.6);filter:alpha(opacity=
50);opacity:
.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(
0,
0,
0,
.5)
0,rgba(
0,
0,
0,
.0001)
100%);background-image:-o-linear-gradient(left,rgba(
0,
0,
0,
.5)
0,rgba(
0,
0,
0,
.0001)
100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(
0,
0,
0,
.5)),to(rgba(
0,
0,
0,
.0001)));background-image:linear-gradient(to right,rgba(
0,
0,
0,
.5)
0,rgba(
0,
0,
0,
.0001)
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#
80000000', endColorstr='#
00000000', GradientType=
1);background-repeat:repeat-x}.carousel-control.right{right:
0;left:auto;background-image:-webkit-linear-gradient(left,rgba(
0,
0,
0,
.0001)
0,rgba(
0,
0,
0,
.5)
100%);background-image:-o-linear-gradient(left,rgba(
0,
0,
0,
.0001)
0,rgba(
0,
0,
0,
.5)
100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(
0,
0,
0,
.0001)),to(rgba(
0,
0,
0,
.5)));background-image:linear-gradient(to right,rgba(
0,
0,
0,
.0001)
0,rgba(
0,
0,
0,
.5)
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#
00000000', endColorstr='#
80000000', GradientType=
1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=
90);outline:
0;opacity:
.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:
50%;z-index:
5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:
50%;margin-left:-
10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:
50%;margin-right:-
10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:
20px;height:
20px;margin-top:-
10px;font-family:serif}.carousel-control .icon-prev:before{content:'\
2039'}.carousel-control .icon-next:before{content:'\
203a'}.carousel-indicators{position:absolute;bottom:
10px;left:
50%;z-index:
15;width:
60%;padding-left:
0;margin-left:-
30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:
10px;height:
10px;margin:
1px;text-indent:-
999px;cursor:pointer;background-color:#
000 \
9;background-color:rgba(
0,
0,
0,
0);border:
1px solid #fff;border-radius:
10px}.carousel-indicators .active{width:
12px;height:
12px;margin:
0;background-color:#fff}.carousel-caption{position:absolute;right:
15%;bottom:
20px;left:
15%;z-index:
10;padding-top:
20px;padding-bottom:
20px;color:#fff;text-align:center;text-shadow:
0 1px
2px rgba(
0,
0,
0,
.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:
768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:
30px;height:
30px;margin-top:-
15px;font-size:
30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-
15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-
15px}.carousel-caption{right:
20%;left:
20%;padding-bottom:
30px}.carousel-indicators{bottom:
20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical
>.btn-group:before,.btn-group-vertical
>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical
>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:
0/
0 a;color:transparent;text-shadow:none;background-color:transparent;border:
0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(
0,
0,
0);-o-transform:translate3d(
0,
0,
0);transform:translate3d(
0,
0,
0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:
767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:
767px){.visible-xs-block{display:block!important}}@media (max-width:
767px){.visible-xs-inline{display:inline!important}}@media (max-width:
767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:
768px) and (max-width:
991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:
768px) and (max-width:
991px){.visible-sm-block{display:block!important}}@media (min-width:
768px) and (max-width:
991px){.visible-sm-inline{display:inline!important}}@media (min-width:
768px) and (max-width:
991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:
992px) and (max-width:
1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:
992px) and (max-width:
1199px){.visible-md-block{display:block!important}}@media (min-width:
992px) and (max-width:
1199px){.visible-md-inline{display:inline!important}}@media (min-width:
992px) and (max-width:
1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:
1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:
1200px){.visible-lg-block{display:block!important}}@media (min-width:
1200px){.visible-lg-inline{display:inline!important}}@media (min-width:
1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:
767px){.hidden-xs{display:none!important}}@media (min-width:
768px) and (max-width:
991px){.hidden-sm{display:none!important}}@media (min-width:
992px) and (max-width:
1199px){.hidden-md{display:none!important}}@media (min-width:
1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
</style>
11 <meta content=
"Mnemonic code for generating deterministic keys" name=
"description"/>
12 <meta content=
"width=device-width, initial-scale=1.0" name=
"viewport" />
13 <meta content=
"bitcoin mnemonic converter" name=
"description" />
14 <meta content=
"DC POS" name=
"author" />
20 .form-control[readonly] {
33 background-color: orange;
37 border:
2px solid #
555;
39 border-bottom-left-radius:
20px
20px;
40 border-bottom-right-radius:
20px
20px;
44 box-shadow: inset
0 1px
1px rgba(
0,
0,
0,
.0);
45 -webkit-box-shadow: inset
0 1px
1px rgba(
0,
0,
0,
.0);
50 <div class=
"container">
52 <h1 class=
"text-center">Mnemonic Code Converter
</h1>
55 <div class=
"col-md-12">
57 <form class=
"form-horizontal" role=
"form">
58 <div class=
"col-sm-2"></div>
59 <div class=
"col-sm-10">
60 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum)
</p>
61 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target=
"_blank">BIP39 spec
</a></p>
63 <div class=
"form-group">
64 <label for=
"phrase" class=
"col-sm-2 control-label">BIP39 Mnemonic
</label>
65 <div class=
"col-sm-10">
66 <textarea id=
"phrase" class=
"phrase form-control"></textarea>
69 <div class=
"form-group">
70 <label for=
"strength" class=
"col-sm-2 control-label">Number of words
</label>
71 <div class=
"col-sm-10">
72 <div class=
"input-group">
73 <select id=
"strength" class=
"strength form-control">
74 <option value=
"3">3</option>
75 <option value=
"6">6</option>
76 <option value=
"9">9</option>
77 <option value=
"12">12</option>
78 <option value=
"15" selected
>15</option>
79 <option value=
"18">18</option>
80 <option value=
"21">21</option>
81 <option value=
"24">24</option>
83 <span class=
"input-group-btn">
84 <button class=
"btn generate">Generate Random Mnemonic
</button>
89 <div class=
"form-group">
90 <label for=
"passphrase" class=
"col-sm-2 control-label">BIP39 Passphrase (optional)
</label>
91 <div class=
"col-sm-10">
92 <textarea id=
"passphrase" class=
"passphrase form-control"></textarea>
95 <div class=
"form-group">
96 <label for=
"seed" class=
"col-sm-2 control-label">BIP39 Seed
</label>
97 <div class=
"col-sm-10">
98 <textarea id=
"seed" class=
"seed form-control" readonly=
"readonly"></textarea>
101 <div class=
"form-group">
102 <label for=
"network-phrase" class=
"col-sm-2 control-label">Coin
</label>
103 <div class=
"col-sm-10">
104 <select id=
"network-phrase" class=
"network form-control">
105 <!-- populated by javascript -->
109 <div class=
"form-group">
110 <label for=
"root-key" class=
"col-sm-2 control-label">BIP32 Root Key
</label>
111 <div class=
"col-sm-10">
112 <textarea id=
"root-key" class=
"root-key form-control"></textarea>
122 <div class=
"col-md-12">
123 <h2>Derivation Path
</h2>
124 <ul class=
"derivation-type nav nav-tabs" role=
"tablist">
125 <li id=
"bip44-tab" class=
"active">
126 <a href=
"#bip44" role=
"tab" data-toggle=
"tab">BIP44
</a>
129 <a href=
"#bip32" role=
"tab" data-toggle=
"tab">BIP32
</a>
132 <div class=
"derivation-type tab-content">
133 <div id=
"bip44" class=
"tab-pane active">
134 <form class=
"form-horizontal" role=
"form">
136 <div class=
"col-sm-2"></div>
137 <div class=
"col-sm-10">
138 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">BIP44 spec
</a></p>
140 <div class=
"form-group">
141 <label for=
"purpose" class=
"col-sm-2 control-label">
142 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target=
"_blank">Purpose
</a>
144 <div class=
"col-sm-10">
145 <input id=
"purpose" type=
"text" class=
"purpose form-control" value=
"44">
148 <div class=
"form-group">
149 <label for=
"coin" class=
"col-sm-2 control-label">
150 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target=
"_blank">Coin
</a>
152 <div class=
"col-sm-10">
153 <input id=
"coin" type=
"text" class=
"coin form-control" value=
"0">
156 <div class=
"form-group">
157 <label for=
"account" class=
"col-sm-2 control-label">
158 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target=
"_blank">Account
</a>
160 <div class=
"col-sm-10">
161 <input id=
"account" type=
"text" class=
"account form-control" value=
"0">
164 <div class=
"form-group">
165 <label for=
"change" class=
"col-sm-2 control-label">
166 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target=
"_blank">External / Internal
</a>
168 <div class=
"col-sm-10">
169 <input id=
"change" type=
"text" class=
"change form-control" value=
"0">
172 <div class=
"form-group">
173 <label for=
"bip44-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
174 <div class=
"col-sm-10">
175 <input id=
"bip44-path" type=
"text" class=
"path form-control" value=
"m/44'/0'/0'/0" readonly=
"readonly">
180 <div id=
"bip32" class=
"tab-pane">
181 <form class=
"form-horizontal" role=
"form">
183 <div class=
"col-sm-2"></div>
184 <div class=
"col-sm-10">
185 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">BIP32 spec
</a></p>
187 <div class=
"form-group">
188 <label for=
"bip32-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
189 <div class=
"col-sm-10">
190 <input id=
"bip32-path" type=
"text" class=
"path form-control" value=
"m/0">
193 <div class=
"form-group">
194 <div class=
"col-sm-2"></div>
195 <label class=
"col-sm-10">
196 <input class=
"hardened-addresses" type=
"checkbox">
197 Use hardened addresses
200 <div class=
"form-group">
201 <label class=
"col-sm-2 control-label">Hive Wallet
</label>
202 <div class=
"col-sm-10">
203 <p class=
"form-control no-border">
204 Use path
<code>m/
0'/
0</code>.
205 For more info see the
<a href=
"https://www.hivewallet.com/" target=
"_blank">Hive Wallet homepage
</a>
209 <div class=
"form-group">
210 <label for=
"mycelium-path" class=
"col-sm-2 control-label">Mycelium Wallet
</label>
211 <div class=
"col-sm-10">
212 <p class=
"form-control no-border">
213 Use path
<code>m/
44'/
0'/
0'/
0</code>.
214 For more info see the
<a href=
"http://www.mycelium.com/" target=
"_blank">Mycelium Wallet homepage
</a>
218 <div class=
"form-group">
219 <label for=
"core-path" class=
"col-sm-2 control-label">Bitcoin Core
</label>
220 <div class=
"col-sm-10">
221 <p class=
"form-control no-border">
222 Use path
<code>m/
0'/
0'
</code> with hardened addresses.
223 For more info see the
<a href=
"https://github.com/bitcoin/bitcoin/pull/8035" target=
"_blank">Bitcoin Core BIP32 implementation
</a>
230 <form class=
"form-horizontal" role=
"form">
231 <div class=
"form-group">
232 <label for=
"extended-priv-key" class=
"col-sm-2 control-label">BIP32 Extended Key
</label>
233 <div class=
"col-sm-10">
234 <textarea id=
"extended-priv-key" class=
"extended-priv-key form-control" readonly=
"readonly"></textarea>
237 <div class=
"form-group">
238 <label for=
"extended-pub-key" class=
"col-sm-2 control-label">BIP32 Extended Key (addresses only)
</label>
239 <div class=
"col-sm-10">
240 <textarea id=
"extended-pub-key" class=
"extended-pub-key form-control" readonly=
"readonly"></textarea>
250 <div class=
"col-md-12">
251 <h2>Derived Addresses
</h2>
252 <p>Note these addreses are derived from the
<strong>BIP32 Extended Key
</strong></p>
253 <table class=
"table table-striped">
256 <div class=
"input-group">
258 <button class=
"index-toggle">Toggle
</button>
262 <div class=
"input-group">
264 <button class=
"address-toggle">Toggle
</button>
268 <div class=
"input-group">
269 Private Key
270 <button class=
"private-key-toggle">Toggle
</button>
274 <tbody class=
"addresses">
275 <tr><td> </td><td> </td><td> </td></tr>
276 <tr><td> </td><td> </td><td> </td></tr>
277 <tr><td> </td><td> </td><td> </td></tr>
278 <tr><td> </td><td> </td><td> </td></tr>
279 <tr><td> </td><td> </td><td> </td></tr>
284 <span>Show next
</button>
285 <input type=
"number" class=
"rows-to-add" value=
"20">
286 <button class=
"more">Show
</button>
291 <div class=
"col-md-12">
293 <h3>BIP39
<span class=
"small">Mnemonic code for generating deterministic keys
</span></h3>
296 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec
</a>
298 <h3>BIP32
<span class=
"small">Hierarchical Deterministic Wallets
</span></h3>
301 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">official BIP32 spec
</a>
303 <a href=
"http://bip32.org/" target=
"_blank">bip32.org
</a>
305 <h3>BIP44
<span class=
"small">Multi-Account Hierarchy for Deterministic Wallets
</span></h3>
308 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">official BIP44 spec
</a>
310 <h3>Private Keys
</h3>
313 <a href=
"https://web.archive.org/web/20150707020924/https://brainwallet.org/" target=
"_blank">brainwallet.org
</a>,
314 but be careful - it can be easy to make mistakes if you
315 don't know what you're doing
323 <div class=
"col-md-12">
325 <h2>Offline Usage
</h2>
328 You can use this tool without having to be online.
331 In your browser, select file save-as, and save this page
335 Double-click that file to open it in a browser
336 on any offline computer.
339 Alternatively, download it from
340 <a href=
"https://github.com/dcpos/bip39">
341 https://github.com/dcpos/bip39
350 <div class=
"col-md-12">
352 <h2>This project is
100% open-source code
</h2>
355 <span>Get the source code at -
</span>
356 <a href=
"https://github.com/dcpos/bip39" target=
"_blank">
357 https://github.com/dcpos/bip39
364 <span>BitcoinJS -
</span>
365 <a href=
"https://github.com/bitcoinjs/bitcoinjs-lib" target=
"_blank">
366 https://github.com/bitcoinjs/bitcoinjs-lib
371 <span>jsBIP39 -
</span>
372 <a href=
"https://github.com/iancoleman/jsbip39" target=
"_blank">
373 https://github.com/iancoleman/jsbip39
379 <a href=
"https://github.com/bitwiseshiftleft/sjcl" target=
"_blank">
380 https://github.com/bitwiseshiftleft/sjcl
385 <span>jQuery -
</span>
386 <a href=
"https://jquery.com/" target=
"_blank">
392 <span>Twitter Bootstrap -
</span>
393 <a href=
"http://getbootstrap.com/" target=
"_blank">
394 http://getbootstrap.com/
403 <div class=
"feedback-container">
404 <div class=
"feedback">Loading...
</div>
407 <script type=
"text/template" id=
"address-row-template">
409 <td class=
"index"><span></span></td>
410 <td class=
"address"><span></span></td>
411 <td class=
"privkey"><span></span></td>
414 <script>/*! jQuery v2.1
.1 | (c)
2005,
2014 jQuery Foundation, Inc. | jquery.org/license */
415 !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!
0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,
m="
2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:
0,toArray:function(){return d.call(this)},get:function(a){return null!=a?
0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(
0)},last:function(){return this.eq(-
1)},eq:function(a){var b=this.length,c=+a+(
0>a?b:
0);return this.pushStack(c
>=
0&&b
>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[
0]||{},h=
1,i=arguments.length,j=!
1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i
>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!
1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void
0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!
0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)
>=
0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!
1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!
1:!
0},isEmptyObject:function(a){var b;for(b in a)return!
1;return!
0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(
1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=
0,f=a.length,g=s(a);if(c){if(g){for(;f
>e;e++)if(d=b.apply(a[e],c),d===!
1)break}else for(e in a)if(d=b.apply(a[e],c),d===!
1)break}else if(g){for(;f
>e;e++)if(d=b.call(a[e],e,a[e]),d===!
1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!
1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-
1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=
0,e=a.length;c
>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=
0,g=a.length,h=!c;g
>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=
0,g=a.length,h=s(a),i=[];if(h)for(;g
>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:
1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,
2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void
0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!
1:
1===a.nodeType&&b?!
0:"array"===c||
0===b||"number"==typeof b&&b
>0&&b-
1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,
u=
"sizzle"+-new Date,v=a.document,w=
0,x=
0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!
0),
0},
C=
"undefined",D=
1<
<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=
0,c=this.length;c
>b;b++)if(this[b]===a)return b;return-
1},
L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
M="[\\x20\\t\\r\\n\\f]",
N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),
P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",
Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([
>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[
>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{
1,
6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var
d="
0x"+b-
65536;return d!==d||c?b:
0>d?String.fromCharCode(d+
65536):String.fromCharCode(d
>>10|
55296,
1023&d|
56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=
0;while(a[c++]=b[d++]);a.length=c-
1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||
"string"!=typeof a)return d;if(
1!==(k=b.nodeType)&&
9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[
1]){if(
9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[
2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[
3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=
9===k&&a,
1===k&&
"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute(
"id"))?s=r.replace(bb,
"\\$&"):b.setAttribute(
"id",s),
s=
"[id='"+s+
"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(
",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute(
"id")}}}return i(a.replace(R,
"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+
" ")
>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!
0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!
1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&
1===a.nodeType&&
1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-
1;return a?
1:-
1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!
1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&
9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!
1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.
className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.
innerHTML="
<div class='a'
></div><div class='a i'
></div>",a.firstChild.className="i
",2===a.getElementsByClassName("i
").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id
")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id
");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*
"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''
><option selected=''
></option></select>",a.querySelectorAll("[msallowclip^='']
").length&&q.push("[*^$]=
"+M+"*(?:''|\
"\")
"),a.querySelectorAll("[selected]
").length||q.push("\\[
"+M+"*(?:value|
"+L+")
"),a.querySelectorAll(":checked
").length||q.push(":checked
")}),ib(function(a){var b=e.createElement("input
");b.setAttribute("type
","hidden
"),a.appendChild(b).setAttribute("name
","D
"),a.querySelectorAll("[name=d]
").length&&q.push("name
"+M+"*[*^$|!~]?=
"),a.querySelectorAll(":enabled
").length||q.push(":enabled
",":disabled
"),a.querySelectorAll("*,:x
"),q.push(",.*:
")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div
"),s.call(a,"[s!='']:x
"),r.push("!=
",Q)}),q=q.length&&new RegExp(q.join("|
")),r=r.length&&new RegExp(r.join("|
")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$
1']
"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression:
"+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string
"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode
",first:!0}," ":{dir:"parentNode
"},"+
":{dir:"previousSibling
",first:!0},"~
":{dir:"previousSibling
"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~=
"===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth
"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even
"===a[3]||"odd
"===a[3])),a[5]=+(a[7]+a[8]||"odd
"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")
",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*
"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|
"+M+")
"+a+"(
"+M+"|$)
"))&&y(a,function(a){return b.test("string
"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class
")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!=
"===b:b?(e+="","=
"===b?e===c:"!=
"===b?e!==c:"^=
"===b?c&&0===e.indexOf(c):"*=
"===b?c&&e.indexOf(c)>-1:"$=
"===b?c&&e.slice(-c.length)===c:"~=
"===b?(" "+e+" ").indexOf(c)>-1:"|=
"===b?e===c||e.slice(0,c.length+1)===c+"-
":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth
"!==a.slice(0,3),g="last
"!==a.slice(-4),h="of-type
"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling
":"previousSibling
",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only
"===a&&!o&&"nextSibling
"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo:
"+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$
1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang:
"+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang
")||b.getAttribute("lang
"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-
");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input
"===b&&!!a.checked||"option
"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input
"===b&&"button
"===a.type||"button
"===b},text:function(a){var b;return"input
"===a.nodeName.toLowerCase()&&"text
"===a.type&&(null==(b=a.getAttribute("type
"))||"text
"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(
1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((
1===b.nodeType||e)&&a(b,c,g))return!
0}else while(b=b[d])if(
1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[
0]===w&&h[
1]===f)return j[
2]=h[
2];if(i[d]=j,j[
2]=a(b,c,g))return!
0}}}function sb(a){return a.length
>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!
1;return!
0}:a[
0]}function tb(a,b,c){for(var d=
0,e=b.length;e
>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=
0,i=a.length,j=null!=b;i
>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])
>-
1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[
0].type],h=g||d.relative[" "],i=g?
1:
0,k=rb(function(a){return a===b},h,!
0),l=rb(function(a){return K.call(b,a)
>-
1},h,!
0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f
>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f
>e;e++)if(d.relative[a[e].type])break;return vb(i
>1&&sb(m),i
>1&&qb(a.slice(
0,i-
1).concat({value:
" "===a[i-
2].type?
"*":
""})).replace(R,
"$1"),c,e
>i&&wb(a.slice(i,e)),f
>e&&wb(a=a.slice(e)),f
>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length
>0,e=a.length
>0,f=function(f,g,h,i,k){var l,m,o,p=
0,
q=
"0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG(
"*",k),v=w+=null==t?
1:Math.random()||
.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=
0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=
0;while(o=b[m++])o(r,s,g,h);if(f){if(p
>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length
>0&&p+b.length
>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+
" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,
n=
"function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],
1===o.length){if(j=o[
0]=o[
0].slice(
0),j.length
>2&&
"ID"===(k=j[
0]).type&&c.getById&&
9===b.nodeType&&p&&d.relative[j[
1].type]){if(b=(d.find.ID(k.matches[
0].replace(cb,db),b)||[])[
0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?
0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[
0].replace(cb,db),ab.test(j[
0].type)&&ob(b.parentNode)||b))){if(j.splice(i,
1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split(
"").sort(B).join(
"")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return
1&a.compareDocumentPosition(n.createElement(
"div"))}),ib(function(a){return a.
innerHTML=
"<a href='#'></a>",
"#"===a.firstChild.getAttribute(
"href")})||jb(
"type|href|height|width",function(a,b,c){return c?void
0:a.getAttribute(b,
"type"===b.toLowerCase()?
1:
2)}),c.attributes&&ib(function(a){return a.
innerHTML=
"<input/>",a.firstChild.setAttribute(
"value",
""),
""===a.firstChild.getAttribute(
"value")})||jb(
"value",function(a,b,c){return c||
"input"!==a.nodeName.toLowerCase()?void
0:a.defaultValue}),ib(function(a){return null==a.getAttribute(
"disabled")})||jb(L,function(a,b,c){var d;return c?void
0:a[b]===!
0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[
":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/
?>(?:<\/\
1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)
>=
0!==c})}n.filter=function(a,b,c){var d=b[
0];return c&&(
a=":not("+a+")"),
1===b.length&&
1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return
1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=
0;c
>b;b++)if(n.contains(e[b],this))return!
0}));for(b=
0;c
>b;b++)n.find(a,e[b],d);return d=this.pushStack(c
>1?n.unique(d):d),d.selector=this.selector?this.selector+
" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!
1))},not:function(a){return this.pushStack(x(this,a||[],!
0))},is:function(a){return!!x(this,
"string"==typeof a&&u.test(a)?n(a):a||[],!
1).length}});var y,z=/^(?:\s*(<[\w\W]+
>)[^
>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(
c="<"===a[
0]&&"
>"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined
"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):
0;e
>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType
<11&&(g?g.index(c)
>-
1:
1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length
>1?n.unique(f):f)},index:function(a){return a?
"string"==typeof a?g.call(n(a),this[
0]):g.call(this,a.jquery?a[
0]:a):this[
0]&&this[
0].parentNode?this.first().prevAll().length:-
1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&
1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&
11!==b.nodeType?b:null},parents:function(a){return n.dir(a,
"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,
"parentNode",c)},next:function(a){return D(a,
"nextSibling")},prev:function(a){return D(a,
"previousSibling")},nextAll:function(a){return n.dir(a,
"nextSibling")},prevAll:function(a){return n.dir(a,
"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,
"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,
"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return
"Until"!==a.slice(-
5)&&(d=c),d&&
"string"==typeof d&&(e=n.filter(d,e)),this.length
>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!
0}),b}n.Callbacks=function(a){
a=
"string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!
0,g=e||
0,e=
0,f=h.length,d=!
0;h&&f
>g;g++)if(h[g].apply(l[
0],l[
1])===!
1&&a.stopOnFalse){b=!
1;break}d=!
1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))
>-
1)h.splice(c,
1),d&&(f
>=c&&f--,g
>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)
>-
1:!(!h||!h.length)},empty:function(){return h=[],f=
0,this},disable:function(){return h=i=b=void
0,this},disabled:function(){return!h},lock:function(){return i=void
0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],
c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[
1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[
0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[
2],h=f[
3];d[f[
1]]=g.add,h&&g.add(function(){c=h},b[
1^a][
2].disable,b[
2][
2].lock),e[f[
0]]=function(){return e[f[
0]+"With"](this===e?d:this,arguments),this},e[f[
0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=
0,c=d.call(arguments),e=c.length,f=
1!==e||a&&n.isFunction(a.promise)?e:
0,g=
1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length
>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e
>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e
>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!
1,readyWait:
1,holdReady:function(a){a?n.readyWait++:n.ready(!
0)},ready:function(a){(a===!
0?--n.readyWait:n.isReady)||(n.isReady=!
0,a!==!
0&&--n.readyWait
>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler(
"ready"),n(l).off(
"ready"))))}});function I(){l.removeEventListener(
"DOMContentLoaded",I,!
1),a.removeEventListener(
"load",I,!
1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),
"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener(
"DOMContentLoaded",I,!
1),a.addEventListener(
"load",I,!
1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=
0,i=a.length,j=null==c;if(
"object"===n.type(c)){e=!
0;for(h in c)n.access(a,b,h,c[h],!
0,f,g)}else if(void
0!==d&&(e=!
0,n.isFunction(d)||(g=!
0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i
>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[
0],c):f};n.acceptData=function(a){return
1===a.nodeType||
9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},
0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=
1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return
0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void
0===b?c:c[b]},access:function(a,b,c){var d;return void
0===b||b&&"string"==typeof b&&void
0===c?(d=this.get(a,b),void
0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void
0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void
0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void
0===c&&
1===a.nodeType)if(
d="data-"+b.replace(O,"-$
1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{
c="true"===c?!
0:"false"===c?!
1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void
0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)
416 },_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[
0],g=f&&f.attributes;if(void
0===a){if(this.length&&(e=M.get(f),
1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,
0===d.indexOf("data-")&&(d=n.camelCase(d.slice(
5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!
0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void
0===b){if(c=M.get(f,a),void
0!==c)return c;if(c=M.get(f,d),void
0!==c)return c;if(c=P(f,d,void
0),void
0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-
1!==a.indexOf("-")&&void
0!==c&&M.set(this,a,b)})},null,b,arguments.length
>1,null,!
0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||
"fx")+
"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void
0},dequeue:function(a,b){b=b||
"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};
"inprogress"===e&&(e=c.shift(),d--),e&&(
"fx"===b&&c.unshift(
"inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+
"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks(
"once memory").add(function(){L.remove(a,[b+
"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=
2;return
"string"!=typeof a&&(b=a,
a=
"fx",c--),arguments.length
<c?n.queue(this[
0],a):void
0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),
"fx"===a&&
"inprogress"!==c[
0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||
"fx",[])},promise:function(a,b){var c,d=
1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};
"string"!=typeof a&&(b=a,a=void
0),a=a||
"fx";while(g--)c=L.get(f[g],a+
"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=[
"Top",
"Right",
"Bottom",
"Left"],S=function(a,b){return a=b||a,
"none"===n.css(a,
"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement(
"div")),c=l.createElement(
"input");c.setAttribute(
"type",
"radio"),c.setAttribute(
"checked",
"checked"),c.setAttribute(
"name",
"t"),b.appendChild(c),k.checkClone=b.cloneNode(!
0).cloneNode(!
0).lastChild.checked,b.
innerHTML=
"<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!
0).lastChild.defaultValue}();var
U=
"undefined";k.
focusinBubbles=
"onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!
0}function $(){return!
1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void
0}),b=(b||
"").match(E)||[
""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[
1],p=(h[
2]||
"").split(
".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(
".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=
0,l.setup&&l.setup.call(a,d,p,g)!==!
1||a.addEventListener&&a.addEventListener(o,g,!
1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,
0,k):m.push(k),n.event.global[o]=!
0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||
"").match(E)||[
""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[
1],p=(h[
2]||
"").split(
".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[
2]&&new RegExp(
"(^|\\.)"+p.join(
"\\.(?:.*\\.|)")+
"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&(
"**"!==d||!k.selector)||(m.splice(f,
1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!
1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!
0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,
"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,
"type")?b.type:b,r=j.call(b,
"namespace")?b.namespace.split(
"."):[];if(g=h=d=d||l,
3!==d.nodeType&&
8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(
".")
>=
0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")
<0&&
"on"+q,b=b[n.expando]?b:new n.Event(q,
"object"==typeof b&&b),b.isTrigger=e?
2:
3,b.namespace=r.join(
"."),b.namespace_re=b.namespace?new RegExp(
"(^|\\.)"+r.join(
"\\.(?:.*\\.|)")+
"(\\.|$)"):null,b.result=void
0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!
1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=
0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f
>1?i:o.bindType||q,m=(L.get(g,
"events")||{})[b.type]&&L.get(g,
"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!
1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!
1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void
0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,
"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[
0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!
1){h=n.event.handlers.call(this,a,j),b=
0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=
0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void
0!==e&&(a.result=e)===!
1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||
"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!
0||
"click"!==a.type){for(d=[],c=
0;h
>c;c++)f=b[c],e=f.selector+" ",void
0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)
>=
0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h
<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:
"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(
" "),fixHooks:{},keyHooks:{props:
"char charCode key keyCode".split(
" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:
"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(
" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||
0)-(d&&d.clientLeft||e&&e.clientLeft||
0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||
0)-(d&&d.clientTop||e&&e.clientTop||
0)),a.which||void
0===f||(a.which=
1&f?
1:
2&f?
3:
4&f?
2:
0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),
3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!
0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!
1):void
0},delegateType:
"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!
1):void
0},delegateType:
"focusout"},click:{trigger:function(){return
"checkbox"===this.type&&this.click&&n.nodeName(this,
"input")?(this.click(),!
1):void
0},_default:function(a){return n.nodeName(a.target,
"a")}},beforeunload:{postDispatch:function(a){void
0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!
0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!
1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void
0===a.defaultPrevented&&a.returnValue===!
1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!
0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:
"mouseover",mouseleave:
"mouseout",pointerenter:
"pointerover",pointerleave:
"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:
"focusin",blur:
"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!
0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!
0),L.access(d,b,(e||
0)+
1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-
1;e?L.access(d,b,e):(d.removeEventListener(a,c,!
0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if(
"object"==typeof a){
"string"!=typeof b&&(c=c||b,b=void
0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void
0):null==d&&(
"string"==typeof b?(d=c,c=void
0):(d=c,c=b,b=void
0)),d===!
1)d=$;else if(!d)return this;return
1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,
1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+
"."+d.namespace:d.origType,d.selector,d.handler),this;if(
"object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!
1||
"function"==typeof b)&&(c=b,b=void
0),c===!
1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[
0];return c?n.event.trigger(a,b,c,!
0):void
0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^
>]*)\
/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)
>\s*$/g,ib={option:[
1,"
<select multiple='multiple'
>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table
")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr
")?a.getElementsByTagName("tbody
")[0]||a.appendChild(a.ownerDocument.createElement("tbody
")):a}function kb(a){return a.type=(null!==a.getAttribute("type
"))+"/
"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type
"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(
1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=
0,d=j[e].length;d
>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void
0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!
0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||
1!==a.nodeType&&
11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=
0,e=f.length;e
>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=
0,e=f.length;e
>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length
>0&&mb(g,!i&&ob(a,
"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=
0,o=a.length;o
>m;m++)if(e=a[m],e||
0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[
1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[
1]+e.replace(ab,"<$
1></$
2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script
"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script
")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string
"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$
1></$
2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string
"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script
"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-
1].ownerDocument,n.map(f,lb),j=
0;g
>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-
1,h=
0;g
>=h;h++)c=h===g?this:this.clone(!
0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[
0]))?d.display:n.css(e[
0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("
<iframe frameborder='
0' width='
0' height='
0'
/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^(
"+Q+")(?!px)[a-z%]+$
","i
"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div
"),f=l.createElement("div
");if(f.style){f.style.backgroundClip="content-box
",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box
"===f.style.backgroundClip,e.style.cssText="border:
0;width:
0;height:
0;top:
0;left:-
9999px;margin-top:
1px;position:absolute
",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:
1%;top:
1%;border:
1px;padding:
1px;width:
4px;position:absolute
",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%
"!==g.top,c="4px
"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div
"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:
0;border:
0;padding:
0",c.style.marginRight=c.style.width="0",f.style.width="1px
",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^(
"+Q+")(.*)$
","i
"),Bb=new RegExp("^([+-])=(
"+Q+")
","i
"),Cb={position:"absolute
",visibility:"hidden
",display:"block
"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit
","O
","Moz
","ms
"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px
"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border
":"content
")?4:"width
"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!
0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!
0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!
0,e))):(g+=n.css(a,"padding"+R[f],!
0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!
0,e)));return g}function Ib(a,b,c){var d=!
0,
e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),
g="border-box"===n.css(a,"boxSizing",!
1,f);if(
0>=e||null==e){if(e=xb(a,b,f),(
0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||
0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=
0,h=a.length;h
>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.
display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=
0;h
>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"
1":c}}}},cssNumber:{columnCount:!
0,fillOpacity:!
0,flexGrow:!
0,flexShrink:!
0,fontWeight:!
0,lineHeight:!
0,opacity:!
0,order:!
0,orphans:!
0,widows:!
0,zIndex:!
0,zoom:!
0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&
3!==a.nodeType&&
8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void
0===c?g&&"get"in g&&void
0!==(e=g.get(a,!
1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[
1]+
1)*e[
2]+parseFloat(n.css(a,b)),
f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||
0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void
0===(c=g.set(a,c,d))||(i[b]=c)),void
0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!
0,c)),void
0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!
0||n.isNumeric(f)?f||
0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&
0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void
0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!
1,e),e):
0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void
0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=
0,e={},
f="string"==typeof c?c.split(" "):[c];
4>d;d++)e[a+R[d]+b]=f[d]||f[d-
2]||f[
0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=
0;if(n.isArray(b)){for(d=wb(a),e=b.length;e
>g;g++)f[b[g]]=n.css(a,b[g],!
1,d);return f}return void
0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length
>1)},show:function(){return Jb(this,!
0)},hide:function(){return Jb(this)},toggle:function(a){return
"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||
"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?
"":
"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,
0,
1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,
""),b&&
"auto"!==b?b:
0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return
.5-Math.cos(a*Math.PI)/
2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp(
"^(?:([+-])=|)("+Q+
")([a-z%]*)$",
"i"),Pb=/queueHooks$/,Qb=[Vb],Rb={
"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[
3]||(n.cssNumber[a]?
"":
"px"),g=(n.cssNumber[a]||
"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=
1,i=
20;if(g&&g[
3]!==f){f=f||g[
3],e=e||[],g=+d||
1;do h=h||
".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&
1!==h&&--i)}return e&&(g=c.start=+g||+d||
0,c.unit=f,c.end=e[
1]?g+(e[
1]+
1)*e[
2]:+e[
2]),c}]};function Sb(){return setTimeout(function(){Lb=void
0}),Lb=n.now()}function Tb(a,b){var c,d=
0,e={height:a};for(b=b?
1:
0;
4>d;d+=
2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=
0,g=e.length;g
>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=
0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),
1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),
k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.
display="inline-block")),c.overflow&&(o.
overflow="hidden",l.always(function(){o.overflow=c.overflow[
0],o.overflowX=c.overflow[
1],o.overflowY=c.overflow[
2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void
0===q[d])continue;p=!
0}m[d]=q&&q[d]||n.style(a,d)}else j=void
0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:
0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.
start="width"===d||"height"===d?
1:
0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[
1],f=a[c]=f[
0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=
0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!
1;for(var b=Lb||Sb(),c=Math.max(
0,j.startTime+j.duration-b),d=c/j.duration||
0,f=
1-d,g=
0,i=j.tweens.length;i
>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),
1>f&&i?c:(h.resolveWith(a,[j]),!
1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!
0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=
0,d=b?j.tweens.length:
0;if(e)return this;for(e=!
0;d
>c;c++)j.tweens[c].run(
1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g
>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=
0,e=a.length;e
>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?
0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!
0)&&(d.
queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",
0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!
0)};return g.finish=g,e||f.queue===!
1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void
0),b&&a!==!
1&&this.queue(a||"fx",[]),this.each(function(){var b=!
0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!
1,f.splice(e,
1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!
1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:
0;for(c.finish=!
0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!
0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!
0),f.splice(b,
1));for(b=
0;g
>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!
0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=
0,c=n.timers;for(Lb=n.now();b
<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,
1);c.length||n.fx.stop(),Lb=void
0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=
13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:
600,fast:
200,_default:
400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||
"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement(
"input"),b=l.createElement(
"select"),c=b.appendChild(l.createElement(
"option"));a.
type=
"checkbox",k.
checkOn=
""!==a.value,k.optSelected=c.selected,b.disabled=!
0,k.optDisabled=!c.disabled,a=l.createElement(
"input"),a.
value=
"t",a.
type=
"radio",k.
radioValue=
"t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length
>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&
3!==f&&
8!==f&&
2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(
1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void
0===c?d&&
"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void
0:e):null!==c?d&&
"set"in d&&void
0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+
""),c):void n.removeAttr(a,b))
417 },removeAttr:function(a,b){var c,d,e=
0,f=b&&b.match(E);if(f&&
1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!
1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&
"radio"===b&&n.nodeName(a,
"input")){var c=a.value;return a.setAttribute(
"type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!
1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length
>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{
"for":
"htmlFor",
"class":
"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&
3!==g&&
8!==g&&
2!==g)return f=
1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void
0!==c?e&&
"set"in e&&void
0!==(d=e.set(a,c,b))?d:a[b]=c:e&&
"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute(
"tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-
1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each([
"tabIndex",
"readOnly",
"maxLength",
"cellSpacing",
"cellPadding",
"rowSpan",
"colSpan",
"useMap",
"frameBorder",
"contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,
h=
"string"==typeof a&&a,i=
0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||
"").match(E)||[];j
>i;i++)if(c=this[i],d=
1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=
0;while(e=b[f++])d.indexOf(" "+e+" ")
<0&&(d+=e+
" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=
0===arguments.length||
"string"==typeof a&&a,i=
0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||
"").match(E)||[];j
>i;i++)if(c=this[i],d=
1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=
0;while(e=b[f++])while(d.indexOf(" "+e+" ")
>=
0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=
0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!
1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var
b=" "+a+" ",c=
0,d=this.length;d
>c;c++)if(
1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)
>=
0)return!
0;return!
1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[
0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;
1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?
e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void
0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void
0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,
f="select-one"===a.type||
0>e,g=f?null:[],h=f?e+
1:d.length,i=
0>e?h:f?e:
0;h
>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)
>=
0)&&(c=!
0);return c||(a.selectedIndex=-
1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)
>=
0:void
0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length
>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return
1===arguments.length?this.off(a,
"**"):this.off(b,a||
"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+
"")},n.parseXML=function(a){var b,c;if(!a||
"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,
"text/xml")}catch(d){b=void
0}return(!b||b.getElementsByTagName(
"parsererror").length)&&n.error(
"Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},
pc=
"*/".concat(
"*");try{fc=location.href}catch(qc){fc=l.createElement(
"a"),fc.
href=
"",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){
"string"!=typeof b&&(c=b,
b=
"*");var d,e=
0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])
"+"===d[
0]?(d=d.slice(
1)||
"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!
0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return
"string"!=typeof j||f||e[j]?f?!(i=j):void
0:(b.dataTypes.unshift(j),g(j),!
1)}),i}return g(b.dataTypes[
0])||!e[
"*"]&&g(
"*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void
0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!
0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while(
"*"===i[
0])i.shift(),void
0===d&&(d=a.mimeType||b.getResponseHeader(
"Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[
0]in c)f=i[
0];else{for(e in c){if(!i[
0]||a.converters[e+
" "+i[
0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[
0]&&i.unshift(f),c[f]):void
0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[
1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if(
"*"===f)f=i;else if(
"*"!==i&&i!==f){if(g=j[i+
" "+f]||j[
"* "+f],!g)for(e in j)if(h=e.split(
" "),h[
1]===f&&(g=j[i+
" "+h[
0]]||j[
"* "+h[
0]])){g===!
0?g=j[e]:j[e]!==!
0&&(f=h[
0],k.unshift(h[
1]));break}if(g!==!
0)if(g&&a[
"throws"])b=g(b);else try{b=g(b)}catch(l){return{state:
"parsererror",error:g?l:
"No conversion from "+i+
" to "+f}}}return{state:
"success",data:b}}n.extend({active:
0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:
"GET",isLocal:jc.test(ec[
1]),global:!
0,processData:!
0,async:!
0,contentType:
"application/x-www-form-urlencoded; charset=UTF-8",accepts:{
"*":pc,text:
"text/plain",html:
"text/html",xml:
"application/xml, text/xml",json:
"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:
"responseXML",text:
"responseText",json:
"responseJSON"},converters:{
"* text":String,
"text html":!
0,
"text json":n.parseJSON,
"text xml":n.parseXML},flatOptions:{url:!
0,context:!
0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){
"object"==typeof a&&(b=a,a=void
0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks(
"once memory"),q=k.statusCode||{},r={},s={},t=
0,
u=
"canceled",v={readyState:
0,getResponseHeader:function(a){var b;if(
2===t){if(!f){f={};while(b=ic.exec(e))f[b[
1].toLowerCase()]=b[
2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return
2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(
2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(
0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[
1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[
1]===ec[
1]&&h[
2]===ec[
2]&&(h[
3]||("http:"===h[
1]?"
80":"
443"))===(ec[
3]||("http:"===ec[
1]?"
80":"
443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),
2===t)return v;i=k.global,i&&
0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!
1&&(k.url=hc.test(d)?d.replace(hc,"$
1_="+cc++):d+(dc.test(d)?"&":"?")+"
_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!
1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[
0]&&k.accepts[k.dataTypes[
0]]?k.accepts[k.dataTypes[
0]]+("*"!==k.dataTypes[
0]?", "+pc+"; q=
0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!
1||
2===t))return v.abort();
u="abort";for(j in{success:
1,error:
1,complete:
1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=
1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout
>0&&(g=setTimeout(function(){v.abort(
"timeout")},k.timeout));try{t=
1,c.send(r,x)}catch(w){if(!(
2>t))throw w;x(-
1,w)}}else x(-
1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;
2!==t&&(t=
2,g&&clearTimeout(g),c=void
0,e=h||"",v.readyState=a
>0?
4:
0,j=a
>=
200&&
300>a||
304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),
204===a||"HEAD"===k.type?
x="nocontent":
304===a?
x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(
x="error",
0>a&&(a=
0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void
0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void
0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void
0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!
1,global:!
1,"throws":!
0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[
0]&&(b=n(a,this[
0].ownerDocument).eq(
0).clone(!
0),this[
0].parentNode&&b.insertBefore(this[
0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=
0&&a.offsetHeight<=
0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%
20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void
0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=
0,Dc={},Ec={
0:
200,
1223:
204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void
0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void
0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void
0===a.cache&&(a.cache=!
1),a.crossDomain&&(a.
type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("
<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error
",c=function(a){b.remove(),c=null,a&&e("error
"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback
",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_
"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp
",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url
":"string
"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded
")&&Hc.test(b.data)&&"data
");return h||"jsonp
"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$
1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&
":"?
")+b.jsonp+"=
"+e),b.converters["script json
"]=function(){return g||n.error(e+" was not called
"),g[0]},b.dataTypes[0]="json
",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script
"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string
"!=typeof a)return null;"boolean
"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string
"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object
"==typeof b&&(e="POST
"),g.length>0&&n.ajax({url:a,type:e,dataType:"html
",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position
"),l=n(a),m={};"static
"===k&&(a.style.position="relative
"),h=l.offset(),f=n.css(a,"top
"),i=n.css(a,"left
"),j=("absolute
"===k||"fixed
"===k)&&(f+i).indexOf("auto
")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using
"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed
"===n.css(c,"position
")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html
")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth
",!0),d.left+=n.css(a[0],"borderLeftWidth
",!0)),{top:b.top-d.top-n.css(c,"marginTop
",!0),left:b.left-d.left-n.css(c,"marginLeft
",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html
")&&"static
"===n.css(a,"position
"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset
",scrollTop:"pageYOffset
"},function(b,c){var d="pageYOffset
"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top
","left
"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px
":c):void 0})}),n.each({Height:"height
",Width:"width
"},function(a,b){n.each({padding:"inner
"+a,content:b,"":"outer
"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean
"!=typeof d),g=c||(d===!0||e===!0?"margin
":"border
");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client
"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll
"+a],e["scroll
"+a],b.body["offset
"+a],e["offset
"+a],e["client
"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function
"==typeof define&&define.amd&&define("jquery
",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});
420 * Bootstrap v3.2.0 (http://getbootstrap.com)
421 * Copyright 2011-2014 Twitter, Inc.
422 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
424 if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void
0!==a.style[c])return{end:b[c]};return!
1}a.fn.emulateTransitionEnd=function(b){var c=!
1,d=this;a(this).one("bsTransitionEnd",function(){c=!
0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void
0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[
data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.
VERSION="
3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(
150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),
f="object"==typeof b&
&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!
1};c.
VERSION="
3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var
c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!
0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!
1,d.removeClass(c).removeAttr(c))},this),
0)},c.prototype.toggle=function(){var a=!
0,b=this.$element.closest('[
data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!
1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),
g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.
VERSION="
3.2.0",c.DEFAULTS={interval:
5e3,pause:"hover",wrap:!
0},c.prototype.keydown=function(a){switch(a.which){case
37:this.prev();break;case
39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!
1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b
>this.$items.length-
1||
0>b?void
0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b
>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!
0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!
0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void
0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void
0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,
g="next"==b?"left":"right",
h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!
1;var j=e[
0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!
0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[
0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!
1,setTimeout(function(){i.$element.trigger(m)},
0)}).emulateTransitionEnd(
1e3*d.css("transition-duration").slice(
0,-
1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!
1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!
1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[
data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.
VERSION="
3.2.0",c.DEFAULTS={toggle:!
0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("
> .panel
> .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](
0),this.transitioning=
1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=
0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(
350)[f](this.$element[
0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[
0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=
1;var d=function(){this.transitioning=
0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](
0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(
350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[
data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[
data-toggle="collapse"][
data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&
3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var
e=".dropdown-backdrop",f='[
data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.
VERSION="
3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('
<div class=
"dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!
1}},g.prototype.keydown=function(b){if(/(
38|
40|
27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&
27==b.keyCode)return
27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var
h=" li:not(.divider):visible a",i=e.find('[
role="menu"]'+h+', [
role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));
38==b.keyCode&&j
>0&&j--,
40==b.keyCode&&j
<i.length-
1&&j++,~j||(j=
0),i.eq(j).trigger(
"focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on(
"click.bs.dropdown.data-api",b).on(
"click.bs.dropdown.data-api",
".dropdown form",function(a){a.stopPropagation()}).on(
"click.bs.dropdown.data-api",f,g.prototype.toggle).on(
"keydown.bs.dropdown.data-api",f+', [
role=
"menu"], [
role=
"listbox"]',g.prototype.keydown)}(jQuery),+function(a){
"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data(
"bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),
"object"==typeof b&&b);f||e.data(
"bs.modal",f=new c(this,g)),
"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=
0,this.options.remote&&this.$element.find(
".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger(
"loaded.bs.modal")},this))};c.
VERSION=
"3.2.0",c.DEFAULTS={backdrop:!
0,keyboard:!
0,show:!
0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event(
"show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!
0,this.checkScrollbar(),this.$body.addClass(
"modal-open"),this.setScrollbar(),this.escape(),this.$element.on(
"click.dismiss.bs.modal",'[
data-dismiss=
"modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass(
"fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(
0),d&&c.$element[
0].offsetWidth,c.$element.addClass(
"in").attr(
"aria-hidden",!
1),c.enforceFocus();var e=a.Event(
"shown.bs.modal",{relatedTarget:b});d?c.$element.find(
".modal-dialog").one(
"bsTransitionEnd",function(){c.$element.trigger(
"focus").trigger(e)}).emulateTransitionEnd(
300):c.$element.trigger(
"focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event(
"hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!
1,this.$body.removeClass(
"modal-open"),this.resetScrollbar(),this.escape(),a(document).off(
"focusin.bs.modal"),this.$element.removeClass(
"in").attr(
"aria-hidden",!
0).off(
"click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass(
"fade")?this.$element.one(
"bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(
300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off(
"focusin.bs.modal").on(
"focusin.bs.modal",a.proxy(function(a){this.$element[
0]===a.target||this.$element.has(a.target).length||this.$element.trigger(
"focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on(
"keyup.dismiss.bs.modal",a.proxy(function(a){
27==a.which&&this.hide()},this)):this.isShown||this.$element.off(
"keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger(
"hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass(
"fade")?
"fade":
"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&
&d;if(this.$backdrop=a('
<div class=
"modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[
0].focus.call(this.$element[
0]):this.hide.call(this))},this)),e&&this.$backdrop[
0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(
150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(
150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth
>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||
0,
10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.
className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[
0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[
data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),
f="object"==typeof b&
&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.
VERSION="
3.2.0",c.DEFAULTS={animation:!
0,placement:"top",selector:!
1,template:'
<div class=
"tooltip" role=
"tooltip"><div class=
"tooltip-arrow"></div><div class=
"tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:
0,html:!
1,container:!
1,viewport:{selector:"body",padding:
0}},c.prototype.init=function(b,c,d){this.enabled=!
0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var
h="hover"==g?"mouseenter":"focusin",
i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.
hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.
hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[
0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var
g="function"==typeof this.options.placement?this.options.placement.call(this,e[
0],this.$element[
0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:
0,left:
0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[
0].offsetWidth,l=e[
0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);
g="bottom"==g&&j.top+j.height+l-o.scroll
>o.height?"top":"top"==g&&j.top-o.scroll-l
<0?
"bottom":
"right"==g&&j.right+k
>o.width?"left":"left"==g&&j.left-k
<o.left?
"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger(
"shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass(
"fade")?e.one(
"bsTransitionEnd",q).emulateTransitionEnd(
150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[
0].offsetWidth,f=d[
0].offsetHeight,g=parseInt(d.css(
"margin-top"),
10),h=parseInt(d.css(
"margin-left"),
10);isNaN(g)&&(g=
0),isNaN(h)&&(h=
0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[
0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),
0),d.addClass(
"in");var i=d[
0].offsetWidth,j=d[
0].offsetHeight;
"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?
2*k.left-e+i:
2*k.top-f+j,m=k.left?
"left":
"top",n=k.left?
"offsetWidth":
"offsetHeight";d.offset(b),this.replaceArrow(l,d[
0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?
50*(
1-a/b)+
"%":
"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(
".tooltip-inner")[this.options.html?
"html":
"text"](b),a.removeClass(
"fade in top bottom left right")},c.prototype.hide=function(){function b(){
"in"!=c.hoverState&&d.detach(),c.$element.trigger(
"hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event(
"hide.bs."+this.type);return this.$element.removeAttr(
"aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void
0:(d.removeClass(
"in"),a.support.transition&&this.$tip.hasClass(
"fade")?d.one(
"bsTransitionEnd",b).emulateTransitionEnd(
150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr(
"title")||
"string"!=typeof a.attr(
"data-original-title"))&&a.attr(
"data-original-title",a.attr(
"title")||
"").attr(
"title",
"")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[
0],
d=
"BODY"==c.tagName;return a.extend({},
"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:
0,left:
0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return
"bottom"==a?{top:b.top+b.height,left:b.left+b.width/
2-c/
2}:
"top"==a?{top:b.top-d,left:b.left+b.width/
2-c/
2}:
"left"==a?{top:b.top+b.height/
2-d/
2,left:b.left-c}:{top:b.top+b.height/
2-d/
2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:
0,left:
0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||
0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h
<g.top?e.top=g.top-h:i
>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j
<g.left?e.left=g.left-j:k
>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[
0]):c.title)},c.prototype.getUID=function(a){do a+=~~(
1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[
0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!
0},c.prototype.disable=function(){this.enabled=!
1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),
f="object"==typeof b&
&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.
VERSION="
3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'
<div class=
"popover" role=
"tooltip"><div class=
"arrow"></div><h3 class=
"popover-title"></h3><div class=
"popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[
0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li
> a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=
0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),
f="object"==typeof c&
&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.
VERSION="
3.2.0",b.DEFAULTS={offset:
10},b.prototype.getScrollHeight=function(){return this.$scrollElement[
0].scrollHeight||Math.max(this.$body[
0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var
b="offset",c=
0;a.isWindow(this.$scrollElement[
0])||(
b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[
0]-b[
0]}).each(function(){d.offsets.push(this[
0]),d.targets.push(this[
1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b
>=d)return g!=(a=f[f.length-
1])&&this.activate(a);if(g&&b<=e[
0])return g!=(a=f[
0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b
>=e[a]&&(!e[a+
1]||b<=e[a+
1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[
data-target="'+b+'"],'+this.selector+'[
href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[
data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.
VERSION="
3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[
0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("
> .dropdown-menu
> .active").removeClass("active"),b.addClass("active"),g?(b[
0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("
> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(
150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[
data-toggle="tab"], [
data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),
f="object"==typeof b&
&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.
VERSION="
3.2.0",c.
RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:
0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),
1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!
1:null!=h&&e.top+this.$element.height()
>=b-h?"bottom":null!=g&&g
>=d?"top":!
1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var
j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.
unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[
data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
</script>
425 <script>(function() {
429 * Extend an Object with another Object's properties.
431 * The source objects are specified as additional arguments.
433 * @param dst Object the object to extend.
435 * @return Object the final object.
437 var _extend = function(dst) {
438 var sources = Array.prototype.slice.call(arguments,
1);
439 for (var i=
0; i
<sources.length; ++i) {
440 var src = sources[i];
442 if (src.hasOwnProperty(p)) dst[p] = src[p];
450 * Defer execution of given function.
451 * @param {Function} func
453 var _defer = function(func) {
454 if (typeof setImmediate === 'function') {
455 return setImmediate(func);
457 return setTimeout(func,
0);
462 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
466 * Calculate levenshtein distance of the two strings.
468 * @param str1 String the first string.
469 * @param str2 String the second string.
470 * @return Integer the levenshtein distance (
0 and above).
472 get: function(str1, str2) {
474 if (str1 === str2) return
0;
475 if (str1.length ===
0) return str2.length;
476 if (str2.length ===
0) return str1.length;
479 var prevRow = new Array(str2.length +
1),
480 curCol, nextCol, i, j, tmp;
482 // initialise previous row
483 for (i=
0; i
<prevRow.length; ++i) {
487 // calculate current row distance from previous row
488 for (i=
0; i
<str1.length; ++i) {
491 for (j=
0; j
<str2.length; ++j) {
495 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ?
0 :
1 );
502 tmp = prevRow[j +
1] +
1;
507 // copy current col value into previous (in preparation for next iteration)
511 // copy last col value into previous (in preparation for next iteration)
512 prevRow[j] = nextCol;
519 * Asynchronously calculate levenshtein distance of the two strings.
521 * @param str1 String the first string.
522 * @param str2 String the second string.
523 * @param cb Function callback function with signature: function(Error err, int distance)
524 * @param [options] Object additional options.
525 * @param [options.progress] Function progress callback with signature: function(percentComplete)
527 getAsync: function(str1, str2, cb, options) {
528 options = _extend({}, {
533 if (str1 === str2) return cb(null,
0);
534 if (str1.length ===
0) return cb(null, str2.length);
535 if (str2.length ===
0) return cb(null, str1.length);
538 var prevRow = new Array(str2.length +
1),
541 startTime, currentTime;
543 // initialise previous row
544 for (i=
0; i
<prevRow.length; ++i) {
552 var __calculate = function() {
554 startTime = new Date().valueOf();
555 currentTime = startTime;
557 // keep going until one second has elapsed
558 while (currentTime - startTime <
1000) {
559 // reached end of current row?
560 if (str2.length <= (++j)) {
561 // copy current into previous (in preparation for next iteration)
562 prevRow[j] = nextCol;
564 // if already done all chars
565 if (str1.length <= (++i)) {
566 return cb(null, nextCol);
568 // else if we have more left to do
579 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ?
0 :
1 );
586 tmp = prevRow[j +
1] +
1;
591 // copy current into previous (in preparation for next iteration)
595 currentTime = new Date().valueOf();
598 // send a progress update?
599 if (null !== options.progress) {
601 options.progress.call(null, (i *
100.0/ str1.length));
603 return cb('Progress callback: ' + err.toString());
617 if (typeof define !== "undefined" && define !== null && define.amd) {
623 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
624 module.exports = Levenshtein;
627 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
628 self.Levenshtein = Levenshtein;
630 // browser main thread
631 else if (typeof window !== "undefined" && window !== null) {
632 window.Levenshtein = Levenshtein;
637 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoin = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&
&require;if(!u&&a)return a(o,!
0);if(i)return i(o,!
0);var f=new Error("Cannot find module '"+o+"'");throw f.
code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][
0].call(l.exports,function(e){var n=t[o][
1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&
&require;for(var o=
0;o
<r.length;o++)s(r[o]);return s})({
1:[function(require,module,exports){
638 // (public) Constructor
639 function BigInteger(a, b, c) {
640 if (!(this instanceof BigInteger))
641 return new BigInteger(a, b, c)
644 if (
"number" == typeof a) this.fromNumber(a, b, c)
645 else if (b == null &&
"string" != typeof a) this.fromString(a,
256)
646 else this.fromString(a, b)
650 var proto = BigInteger.prototype
652 // duck-typed isBigInteger
653 proto.__bigi = require('../package.json').version
654 BigInteger.isBigInteger = function (obj, check_ver) {
655 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
661 // am: Compute w_j += (x*this_i), propagate carries,
662 // c is initial carry, returns final carry.
663 // c <
3*dvalue, x <
2*dvalue, this_i < dvalue
664 // We need to select the fastest one that works in this environment.
666 // am1: use a single mult and divide to get the high bits,
667 // max digit bits should be
26 because
668 // max internal value =
2*dvalue^
2-
2*dvalue (<
2^
53)
669 function am1(i, x, w, j, c, n) {
671 var v = x * this[i++] + w[j] + c
672 c = Math.floor(v /
0x4000000)
673 w[j++] = v &
0x3ffffff
677 // am2 avoids a big mult-and-extract completely.
678 // Max digit bits should be <=
30 because we do bitwise ops
679 // on values up to
2*hdvalue^
2-hdvalue-
1 (<
2^
31)
680 function am2(i, x, w, j, c, n) {
684 var l = this[i] &
0x7fff
685 var h = this[i++]
>> 15
686 var m = xh * l + h * xl
687 l = xl * l + ((m &
0x7fff) <<
15) + w[j] + (c &
0x3fffffff)
688 c = (l
>>> 30) + (m
>>> 15) + xh * h + (c
>>> 30)
689 w[j++] = l &
0x3fffffff
693 // Alternately, set max digit bits to
28 since some
694 // browsers slow down when dealing with
32-bit numbers.
695 function am3(i, x, w, j, c, n) {
699 var l = this[i] &
0x3fff
700 var h = this[i++]
>> 14
701 var m = xh * l + h * xl
702 l = xl * l + ((m &
0x3fff) <<
14) + w[j] + c
703 c = (l
>> 28) + (m
>> 14) + xh * h
704 w[j++] = l &
0xfffffff
710 BigInteger.prototype.am = am1
713 BigInteger.prototype.DB = dbits
714 BigInteger.prototype.DM = ((
1 << dbits) -
1)
715 var DV = BigInteger.prototype.DV = (
1 << dbits)
718 BigInteger.prototype.FV = Math.pow(
2, BI_FP)
719 BigInteger.prototype.F1 = BI_FP - dbits
720 BigInteger.prototype.F2 =
2 * dbits - BI_FP
723 var BI_RM =
"0123456789abcdefghijklmnopqrstuvwxyz"
724 var BI_RC = new Array()
726 rr =
"0".charCodeAt(
0)
727 for (vv =
0; vv <=
9; ++vv) BI_RC[rr++] = vv
728 rr =
"a".charCodeAt(
0)
729 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
730 rr =
"A".charCodeAt(
0)
731 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
733 function int2char(n) {
734 return BI_RM.charAt(n)
737 function intAt(s, i) {
738 var c = BI_RC[s.charCodeAt(i)]
739 return (c == null) ? -
1 : c
742 // (protected) copy this to r
743 function bnpCopyTo(r) {
744 for (var i = this.t -
1; i
>=
0; --i) r[i] = this[i]
749 // (protected) set from integer value x, -DV <= x < DV
750 function bnpFromInt(x) {
752 this.s = (x <
0) ? -
1 :
0
753 if (x
> 0) this[
0] = x
754 else if (x < -
1) this[
0] = x + DV
758 // return bigint initialized to value
760 var r = new BigInteger()
765 // (protected) set from string and radix
766 function bnpFromString(s, b) {
771 else if (b ==
8) k =
3
772 else if (b ==
256) k =
8; // byte array
773 else if (b ==
2) k =
1
774 else if (b ==
32) k =
5
775 else if (b ==
4) k =
2
786 var x = (k ==
8) ? s[i] &
0xff : intAt(s, i)
788 if (s.charAt(i) == "-") mi = true
794 else if (sh + k
> self.DB) {
795 self[self.t -
1] |= (x & ((
1 << (self.DB - sh)) -
1)) << sh
796 self[self.t++] = (x
>> (self.DB - sh))
798 self[self.t -
1] |= x << sh
800 if (sh
>= self.DB) sh -= self.DB
802 if (k ==
8 && (s[
0] &
0x80) !=
0) {
804 if (sh
> 0) self[self.t -
1] |= ((
1 << (self.DB - sh)) -
1) << sh
807 if (mi) BigInteger.ZERO.subTo(self, self)
810 // (protected) clamp off excess high words
811 function bnpClamp() {
812 var c = this.s & this.DM
813 while (this.t
> 0 && this[this.t -
1] == c)--this.t
816 // (public) return string representation in given radix
817 function bnToString(b) {
819 if (self.s <
0) return
"-" + self.negate()
823 else if (b ==
8) k =
3
824 else if (b ==
2) k =
1
825 else if (b ==
32) k =
5
826 else if (b ==
4) k =
2
827 else return self.toRadix(b)
828 var km = (
1 << k) -
1,
832 var p = self.DB - (i * self.DB) % k
834 if (p < self.DB && (d = self[i]
>> p)
> 0) {
840 d = (self[i] & ((
1 << p) -
1)) << (k - p)
841 d |= self[--i]
>> (p += self.DB - k)
843 d = (self[i]
>> (p -= k)) & km
850 if (m) r += int2char(d)
857 function bnNegate() {
858 var r = new BigInteger()
859 BigInteger.ZERO.subTo(this, r)
865 return (this.s <
0) ? this.negate() : this
868 // (public) return + if this
> a, - if this < a,
0 if equal
869 function bnCompareTo(a) {
874 if (r !=
0) return (this.s <
0) ? -r : r
876 if ((r = this[i] - a[i]) !=
0) return r
880 // returns bit length of the integer x
884 if ((t = x
>>> 16) !=
0) {
888 if ((t = x
>> 8) !=
0) {
892 if ((t = x
>> 4) !=
0) {
896 if ((t = x
>> 2) !=
0) {
900 if ((t = x
>> 1) !=
0) {
907 // (public) return the number of bits in
"this"
908 function bnBitLength() {
909 if (this.t <=
0) return
0
910 return this.DB * (this.t -
1) + nbits(this[this.t -
1] ^ (this.s & this.DM))
913 // (public) return the number of bytes in
"this"
914 function bnByteLength() {
915 return this.bitLength()
>> 3
918 // (protected) r = this << n*DB
919 function bnpDLShiftTo(n, r) {
921 for (i = this.t -
1; i
>=
0; --i) r[i + n] = this[i]
922 for (i = n -
1; i
>=
0; --i) r[i] =
0
927 // (protected) r = this
>> n*DB
928 function bnpDRShiftTo(n, r) {
929 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
930 r.t = Math.max(this.t - n,
0)
934 // (protected) r = this << n
935 function bnpLShiftTo(n, r) {
938 var cbs = self.DB - bs
939 var bm = (
1 << cbs) -
1
940 var ds = Math.floor(n / self.DB),
941 c = (self.s << bs) & self.DM,
943 for (i = self.t -
1; i
>=
0; --i) {
944 r[i + ds +
1] = (self[i]
>> cbs) | c
945 c = (self[i] & bm) << bs
947 for (i = ds -
1; i
>=
0; --i) r[i] =
0
949 r.t = self.t + ds +
1
954 // (protected) r = this
>> n
955 function bnpRShiftTo(n, r) {
958 var ds = Math.floor(n / self.DB)
964 var cbs = self.DB - bs
965 var bm = (
1 << bs) -
1
966 r[
0] = self[ds]
>> bs
967 for (var i = ds +
1; i < self.t; ++i) {
968 r[i - ds -
1] |= (self[i] & bm) << cbs
969 r[i - ds] = self[i]
>> bs
971 if (bs
> 0) r[self.t - ds -
1] |= (self.s & bm) << cbs
976 // (protected) r = this - a
977 function bnpSubTo(a, r) {
981 m = Math.min(a.t, self.t)
1004 r.s = (c <
0) ? -
1 :
0
1005 if (c < -
1) r[i++] = self.DV + c
1006 else if (c
> 0) r[i++] = c
1011 // (protected) r = this * a, r != this,a (HAC
14.12)
1012 //
"this" should be the larger one if appropriate.
1013 function bnpMultiplyTo(a, r) {
1018 while (--i
>=
0) r[i] =
0
1019 for (i =
0; i < y.t; ++i) r[i + x.t] = x.am(
0, y[i], r, i,
0, x.t)
1022 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1025 // (protected) r = this^
2, r != this (HAC
14.16)
1026 function bnpSquareTo(r) {
1028 var i = r.t =
2 * x.t
1029 while (--i
>=
0) r[i] =
0
1030 for (i =
0; i < x.t -
1; ++i) {
1031 var c = x.am(i, x[i], r,
2 * i,
0,
1)
1032 if ((r[i + x.t] += x.am(i +
1,
2 * x[i], r,
2 * i +
1, c, x.t - i -
1))
>= x.DV) {
1037 if (r.t
> 0) r[r.t -
1] += x.am(i, x[i], r,
2 * i,
0,
1)
1042 // (protected) divide this by m, quotient and remainder to q, r (HAC
14.20)
1043 // r != q, this != m. q or r may be null.
1044 function bnpDivRemTo(m, q, r) {
1047 if (pm.t <=
0) return
1050 if (q != null) q.fromInt(
0)
1051 if (r != null) self.copyTo(r)
1054 if (r == null) r = new BigInteger()
1055 var y = new BigInteger(),
1058 var nsh = self.DB - nbits(pm[pm.t -
1]); // normalize modulus
1069 var yt = y0 * (
1 << self.F1) + ((ys
> 1) ? y[ys -
2]
>> self.F2 :
0)
1070 var d1 = self.FV / yt,
1071 d2 = (
1 << self.F1) / yt,
1075 t = (q == null) ? new BigInteger() : q
1077 if (r.compareTo(t)
>=
0) {
1081 BigInteger.ONE.dlShiftTo(ys, t)
1082 t.subTo(y, y); // "negative" y so we can replace sub with am later
1083 while (y.t < ys) y[y.t++] =
0
1085 // Estimate quotient digit
1086 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i -
1] + e) * d2)
1087 if ((r[i] += y.am(
0, qd, r, j,
0, ys)) < qd) { // Try it out
1090 while (r[i] < --qd) r.subTo(t, r)
1095 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1099 if (nsh
> 0) r.rShiftTo(nsh, r); // Denormalize remainder
1100 if (ts <
0) BigInteger.ZERO.subTo(r, r)
1103 // (public) this mod a
1105 var r = new BigInteger()
1107 .divRemTo(a, null, r)
1108 if (this.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) a.subTo(r, r)
1112 // Modular reduction using
"classic" algorithm
1113 function Classic(m) {
1117 function cConvert(x) {
1118 if (x.s <
0 || x.compareTo(this.m)
>=
0) return x.mod(this.m)
1122 function cRevert(x) {
1126 function cReduce(x) {
1127 x.divRemTo(this.m, null, x)
1130 function cMulTo(x, y, r) {
1135 function cSqrTo(x, r) {
1140 Classic.prototype.convert = cConvert
1141 Classic.prototype.revert = cRevert
1142 Classic.prototype.reduce = cReduce
1143 Classic.prototype.mulTo = cMulTo
1144 Classic.prototype.sqrTo = cSqrTo
1146 // (protected) return "-
1/this %
2^DB"; useful for Mont. reduction
1150 // xy(
2-xy) = (
1+km)(
1-km)
1151 // x[y(
2-xy)] =
1-k^
2m^
2
1152 // x[y(
2-xy)] ==
1 (mod m^
2)
1153 // if y is
1/x mod m, then y(
2-xy) is
1/x mod m^
2
1154 // should reduce x and y(
2-xy) by m^
2 at each step to keep size bounded.
1155 // JS multiply "overflows" differently from C/C++, so care is needed here.
1156 function bnpInvDigit() {
1157 if (this.t <
1) return
0
1159 if ((x &
1) ==
0) return
0
1160 var y = x &
3; // y ==
1/x mod
2^
2
1161 y = (y * (
2 - (x &
0xf) * y)) &
0xf; // y ==
1/x mod
2^
4
1162 y = (y * (
2 - (x &
0xff) * y)) &
0xff; // y ==
1/x mod
2^
8
1163 y = (y * (
2 - (((x &
0xffff) * y) &
0xffff))) &
0xffff; // y ==
1/x mod
2^
16
1164 // last step - calculate inverse mod DV directly
1165 // assumes
16 < DB <=
32 and assumes ability to handle
48-bit ints
1166 y = (y * (
2 - x * y % this.DV)) % this.DV; // y ==
1/x mod
2^dbits
1167 // we really want the negative inverse, and -DV < y < DV
1168 return (y
> 0) ? this.DV - y : -y
1171 // Montgomery reduction
1172 function Montgomery(m) {
1174 this.mp = m.invDigit()
1175 this.mpl = this.mp &
0x7fff
1176 this.mph = this.mp
>> 15
1177 this.um = (
1 << (m.DB -
15)) -
1
1182 function montConvert(x) {
1183 var r = new BigInteger()
1185 .dlShiftTo(this.m.t, r)
1186 r.divRemTo(this.m, null, r)
1187 if (x.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) this.m.subTo(r, r)
1192 function montRevert(x) {
1193 var r = new BigInteger()
1199 // x = x/R mod m (HAC
14.32)
1200 function montReduce(x) {
1201 while (x.t <= this.mt2) // pad x so am has enough room later
1203 for (var i =
0; i < this.m.t; ++i) {
1204 // faster way of calculating u0 = x[i]*mp mod DV
1205 var j = x[i] &
0x7fff
1206 var u0 = (j * this.mpl + (((j * this.mph + (x[i]
>> 15) * this.mpl) & this.um) <<
15)) & x.DM
1207 // use am to combine the multiply-shift-add into one call
1209 x[j] += this.m.am(
0, u0, x, i,
0, this.m.t)
1211 while (x[j]
>= x.DV) {
1217 x.drShiftTo(this.m.t, x)
1218 if (x.compareTo(this.m)
>=
0) x.subTo(this.m, x)
1221 // r = "x^
2/R mod m"; x != r
1222 function montSqrTo(x, r) {
1227 // r = "xy/R mod m"; x,y != r
1228 function montMulTo(x, y, r) {
1233 Montgomery.prototype.convert = montConvert
1234 Montgomery.prototype.revert = montRevert
1235 Montgomery.prototype.reduce = montReduce
1236 Montgomery.prototype.mulTo = montMulTo
1237 Montgomery.prototype.sqrTo = montSqrTo
1239 // (protected) true iff this is even
1240 function bnpIsEven() {
1241 return ((this.t
> 0) ? (this[
0] &
1) : this.s) ==
0
1244 // (protected) this^e, e <
2^
32, doing sqr and mul with
"r" (HAC
14.79)
1245 function bnpExp(e, z) {
1246 if (e
> 0xffffffff || e <
1) return BigInteger.ONE
1247 var r = new BigInteger(),
1248 r2 = new BigInteger(),
1249 g = z.convert(this),
1254 if ((e & (
1 << i))
> 0) z.mulTo(r2, g, r)
1264 // (public) this^e % m,
0 <= e <
2^
32
1265 function bnModPowInt(e, m) {
1267 if (e <
256 || m.isEven()) z = new Classic(m)
1268 else z = new Montgomery(m)
1269 return this.exp(e, z)
1273 proto.copyTo = bnpCopyTo
1274 proto.fromInt = bnpFromInt
1275 proto.fromString = bnpFromString
1276 proto.clamp = bnpClamp
1277 proto.dlShiftTo = bnpDLShiftTo
1278 proto.drShiftTo = bnpDRShiftTo
1279 proto.lShiftTo = bnpLShiftTo
1280 proto.rShiftTo = bnpRShiftTo
1281 proto.subTo = bnpSubTo
1282 proto.multiplyTo = bnpMultiplyTo
1283 proto.squareTo = bnpSquareTo
1284 proto.divRemTo = bnpDivRemTo
1285 proto.invDigit = bnpInvDigit
1286 proto.isEven = bnpIsEven
1290 proto.toString = bnToString
1291 proto.negate = bnNegate
1293 proto.compareTo = bnCompareTo
1294 proto.bitLength = bnBitLength
1295 proto.byteLength = bnByteLength
1297 proto.modPowInt = bnModPowInt
1300 function bnClone() {
1301 var r = new BigInteger()
1306 // (public) return value as integer
1307 function bnIntValue() {
1309 if (this.t ==
1) return this[
0] - this.DV
1310 else if (this.t ==
0) return -
1
1311 } else if (this.t ==
1) return this[
0]
1312 else if (this.t ==
0) return
0
1313 // assumes
16 < DB <
32
1314 return ((this[
1] & ((
1 << (
32 - this.DB)) -
1)) << this.DB) | this[
0]
1317 // (public) return value as byte
1318 function bnByteValue() {
1319 return (this.t ==
0) ? this.s : (this[
0] <<
24)
>> 24
1322 // (public) return value as short (assumes DB
>=
16)
1323 function bnShortValue() {
1324 return (this.t ==
0) ? this.s : (this[
0] <<
16)
>> 16
1327 // (protected) return x s.t. r^x < DV
1328 function bnpChunkSize(r) {
1329 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1332 // (public)
0 if this ==
0,
1 if this
> 0
1333 function bnSigNum() {
1334 if (this.s <
0) return -
1
1335 else if (this.t <=
0 || (this.t ==
1 && this[
0] <=
0)) return
0
1339 // (protected) convert to radix string
1340 function bnpToRadix(b) {
1341 if (b == null) b =
10
1342 if (this.signum() ==
0 || b <
2 || b
> 36) return
"0"
1343 var cs = this.chunkSize(b)
1344 var a = Math.pow(b, cs)
1346 y = new BigInteger(),
1347 z = new BigInteger(),
1349 this.divRemTo(d, y, z)
1350 while (y.signum()
> 0) {
1351 r = (a + z.intValue())
1360 // (protected) convert from radix string
1361 function bnpFromRadix(s, b) {
1364 if (b == null) b =
10
1365 var cs = self.chunkSize(b)
1366 var d = Math.pow(b, cs),
1370 for (var i =
0; i < s.length; ++i) {
1373 if (s.charAt(i) ==
"-" && self.signum() ==
0) mi = true
1379 self.dAddOffset(w,
0)
1385 self.dMultiply(Math.pow(b, j))
1386 self.dAddOffset(w,
0)
1388 if (mi) BigInteger.ZERO.subTo(self, self)
1391 // (protected) alternate constructor
1392 function bnpFromNumber(a, b, c) {
1394 if (
"number" == typeof b) {
1395 // new BigInteger(int,int,RNG)
1396 if (a <
2) self.fromInt(
1)
1398 self.fromNumber(a, c)
1399 if (!self.testBit(a -
1)) // force MSB set
1400 self.bitwiseTo(BigInteger.ONE.shiftLeft(a -
1), op_or, self)
1401 if (self.isEven()) self.dAddOffset(
1,
0); // force odd
1402 while (!self.isProbablePrime(b)) {
1403 self.dAddOffset(
2,
0)
1404 if (self.bitLength()
> a) self.subTo(BigInteger.ONE.shiftLeft(a -
1), self)
1408 // new BigInteger(int,RNG)
1409 var x = new Array(),
1411 x.length = (a
>> 3) +
1
1413 if (t
> 0) x[
0] &= ((
1 << t) -
1)
1415 self.fromString(x,
256)
1419 // (public) convert to bigendian byte array
1420 function bnToByteArray() {
1425 var p = self.DB - (i * self.DB) %
8,
1428 if (p < self.DB && (d = self[i]
>> p) != (self.s & self.DM)
>> p)
1429 r[k++] = d | (self.s << (self.DB - p))
1432 d = (self[i] & ((
1 << p) -
1)) << (
8 - p)
1433 d |= self[--i]
>> (p += self.DB -
8)
1435 d = (self[i]
>> (p -=
8)) &
0xff
1441 if ((d &
0x80) !=
0) d |= -
256
1442 if (k ===
0 && (self.s &
0x80) != (d &
0x80))++k
1443 if (k
> 0 || d != self.s) r[k++] = d
1449 function bnEquals(a) {
1450 return (this.compareTo(a) ==
0)
1454 return (this.compareTo(a) <
0) ? this : a
1458 return (this.compareTo(a)
> 0) ? this : a
1461 // (protected) r = this op a (bitwise)
1462 function bnpBitwiseTo(a, op, r) {
1464 var i, f, m = Math.min(a.t, self.t)
1465 for (i =
0; i < m; ++i) r[i] = op(self[i], a[i])
1468 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1471 f = self.s & self.DM
1472 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1475 r.s = op(self.s, a.s)
1479 // (public) this & a
1480 function op_and(x, y) {
1485 var r = new BigInteger()
1486 this.bitwiseTo(a, op_and, r)
1490 // (public) this | a
1491 function op_or(x, y) {
1496 var r = new BigInteger()
1497 this.bitwiseTo(a, op_or, r)
1501 // (public) this ^ a
1502 function op_xor(x, y) {
1507 var r = new BigInteger()
1508 this.bitwiseTo(a, op_xor, r)
1512 // (public) this & ~a
1513 function op_andnot(x, y) {
1517 function bnAndNot(a) {
1518 var r = new BigInteger()
1519 this.bitwiseTo(a, op_andnot, r)
1525 var r = new BigInteger()
1526 for (var i =
0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1532 // (public) this << n
1533 function bnShiftLeft(n) {
1534 var r = new BigInteger()
1535 if (n <
0) this.rShiftTo(-n, r)
1536 else this.lShiftTo(n, r)
1540 // (public) this
>> n
1541 function bnShiftRight(n) {
1542 var r = new BigInteger()
1543 if (n <
0) this.lShiftTo(-n, r)
1544 else this.rShiftTo(n, r)
1548 // return index of lowest
1-bit in x, x <
2^
31
1550 if (x ==
0) return -
1
1552 if ((x &
0xffff) ==
0) {
1556 if ((x &
0xff) ==
0) {
1560 if ((x &
0xf) ==
0) {
1568 if ((x &
1) ==
0)++r
1572 // (public) returns index of lowest
1-bit (or -
1 if none)
1573 function bnGetLowestSetBit() {
1574 for (var i =
0; i < this.t; ++i)
1575 if (this[i] !=
0) return i * this.DB + lbit(this[i])
1576 if (this.s <
0) return this.t * this.DB
1580 // return number of
1 bits in x
1590 // (public) return number of set bits
1591 function bnBitCount() {
1593 x = this.s & this.DM
1594 for (var i =
0; i < this.t; ++i) r += cbit(this[i] ^ x)
1598 // (public) true iff nth bit is set
1599 function bnTestBit(n) {
1600 var j = Math.floor(n / this.DB)
1601 if (j
>= this.t) return (this.s !=
0)
1602 return ((this[j] & (
1 << (n % this.DB))) !=
0)
1605 // (protected) this op (
1<
<n)
1606 function bnpChangeBit(n, op) {
1607 var r = BigInteger.ONE.shiftLeft(n)
1608 this.bitwiseTo(r, op, r)
1612 // (public) this | (
1<
<n)
1613 function bnSetBit(n) {
1614 return this.changeBit(n, op_or)
1617 // (public) this & ~(
1<
<n)
1618 function bnClearBit(n) {
1619 return this.changeBit(n, op_andnot)
1622 // (public) this ^ (
1<
<n)
1623 function bnFlipBit(n) {
1624 return this.changeBit(n, op_xor)
1627 // (protected) r = this + a
1628 function bnpAddTo(a, r) {
1633 m = Math.min(a.t, self.t)
1636 r[i++] = c & self.DM
1641 while (i < self.t) {
1643 r[i++] = c & self.DM
1651 r[i++] = c & self.DM
1656 r.s = (c <
0) ? -
1 :
0
1657 if (c
> 0) r[i++] = c
1658 else if (c < -
1) r[i++] = self.DV + c
1663 // (public) this + a
1665 var r = new BigInteger()
1670 // (public) this - a
1671 function bnSubtract(a) {
1672 var r = new BigInteger()
1677 // (public) this * a
1678 function bnMultiply(a) {
1679 var r = new BigInteger()
1680 this.multiplyTo(a, r)
1685 function bnSquare() {
1686 var r = new BigInteger()
1691 // (public) this / a
1692 function bnDivide(a) {
1693 var r = new BigInteger()
1694 this.divRemTo(a, r, null)
1698 // (public) this % a
1699 function bnRemainder(a) {
1700 var r = new BigInteger()
1701 this.divRemTo(a, null, r)
1705 // (public) [this/a,this%a]
1706 function bnDivideAndRemainder(a) {
1707 var q = new BigInteger(),
1708 r = new BigInteger()
1709 this.divRemTo(a, q, r)
1710 return new Array(q, r)
1713 // (protected) this *= n, this
>=
0,
1 < n < DV
1714 function bnpDMultiply(n) {
1715 this[this.t] = this.am(
0, n -
1, this,
0,
0, this.t)
1720 // (protected) this += n << w words, this
>=
0
1721 function bnpDAddOffset(n, w) {
1723 while (this.t <= w) this[this.t++] =
0
1725 while (this[w]
>= this.DV) {
1727 if (++w
>= this.t) this[this.t++] =
0
1733 function NullExp() {}
1739 function nMulTo(x, y, r) {
1743 function nSqrTo(x, r) {
1747 NullExp.prototype.convert = nNop
1748 NullExp.prototype.revert = nNop
1749 NullExp.prototype.mulTo = nMulTo
1750 NullExp.prototype.sqrTo = nSqrTo
1754 return this.exp(e, new NullExp())
1757 // (protected) r = lower n words of "this * a", a.t <= n
1758 // "this" should be the larger one if appropriate.
1759 function bnpMultiplyLowerTo(a, n, r) {
1760 var i = Math.min(this.t + a.t, n)
1761 r.s =
0; // assumes a,this
>=
0
1763 while (i
> 0) r[--i] =
0
1765 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(
0, a[i], r, i,
0, this.t)
1766 for (j = Math.min(a.t, n); i < j; ++i) this.am(
0, a[i], r, i,
0, n - i)
1770 // (protected) r =
"this * a" without lower n words, n
> 0
1771 //
"this" should be the larger one if appropriate.
1772 function bnpMultiplyUpperTo(a, n, r) {
1774 var i = r.t = this.t + a.t - n
1775 r.s =
0; // assumes a,this
>=
0
1776 while (--i
>=
0) r[i] =
0
1777 for (i = Math.max(n - this.t,
0); i < a.t; ++i)
1778 r[this.t + i - n] = this.am(n - i, a[i], r,
0,
0, this.t + i - n)
1783 // Barrett modular reduction
1784 function Barrett(m) {
1786 this.r2 = new BigInteger()
1787 this.q3 = new BigInteger()
1788 BigInteger.ONE.dlShiftTo(
2 * m.t, this.r2)
1789 this.mu = this.r2.divide(m)
1793 function barrettConvert(x) {
1794 if (x.s <
0 || x.t
> 2 * this.m.t) return x.mod(this.m)
1795 else if (x.compareTo(this.m) <
0) return x
1797 var r = new BigInteger()
1804 function barrettRevert(x) {
1808 // x = x mod m (HAC
14.42)
1809 function barrettReduce(x) {
1811 x.drShiftTo(self.m.t -
1, self.r2)
1812 if (x.t
> self.m.t +
1) {
1816 self.mu.multiplyUpperTo(self.r2, self.m.t +
1, self.q3)
1817 self.m.multiplyLowerTo(self.q3, self.m.t +
1, self.r2)
1818 while (x.compareTo(self.r2) <
0) x.dAddOffset(
1, self.m.t +
1)
1820 while (x.compareTo(self.m)
>=
0) x.subTo(self.m, x)
1823 // r = x^
2 mod m; x != r
1824 function barrettSqrTo(x, r) {
1829 // r = x*y mod m; x,y != r
1830 function barrettMulTo(x, y, r) {
1835 Barrett.prototype.convert = barrettConvert
1836 Barrett.prototype.revert = barrettRevert
1837 Barrett.prototype.reduce = barrettReduce
1838 Barrett.prototype.mulTo = barrettMulTo
1839 Barrett.prototype.sqrTo = barrettSqrTo
1841 // (public) this^e % m (HAC
14.85)
1842 function bnModPow(e, m) {
1843 var i = e.bitLength(),
1846 if (i <=
0) return r
1847 else if (i <
18) k =
1
1848 else if (i <
48) k =
3
1849 else if (i <
144) k =
4
1850 else if (i <
768) k =
5
1854 else if (m.isEven())
1857 z = new Montgomery(m)
1860 var g = new Array(),
1864 g[
1] = z.convert(this)
1866 var g2 = new BigInteger()
1869 g[n] = new BigInteger()
1870 z.mulTo(g2, g[n -
2], g[n])
1877 r2 = new BigInteger(),
1881 if (i
>= k1) w = (e[j]
>> (i - k1)) & km
1883 w = (e[j] & ((
1 << (i +
1)) -
1)) << (k1 - i)
1884 if (j
> 0) w |= e[j -
1]
>> (this.DB + i - k1)
1888 while ((w &
1) ==
0) {
1896 if (is1) { // ret ==
1, don't bother squaring or multiplying it
1905 if (n
> 0) z.sqrTo(r, r2)
1911 z.mulTo(r2, g[w], r)
1914 while (j
>=
0 && (e[j] & (
1 << i)) ==
0) {
1928 // (public) gcd(this,a) (HAC
14.54)
1930 var x = (this.s <
0) ? this.negate() : this.clone()
1931 var y = (a.s <
0) ? a.negate() : a.clone()
1932 if (x.compareTo(y) <
0) {
1937 var i = x.getLowestSetBit(),
1938 g = y.getLowestSetBit()
1945 while (x.signum()
> 0) {
1946 if ((i = x.getLowestSetBit())
> 0) x.rShiftTo(i, x)
1947 if ((i = y.getLowestSetBit())
> 0) y.rShiftTo(i, y)
1948 if (x.compareTo(y)
>=
0) {
1956 if (g
> 0) y.lShiftTo(g, y)
1960 // (protected) this % n, n <
2^
26
1961 function bnpModInt(n) {
1962 if (n <=
0) return
0
1963 var d = this.DV % n,
1964 r = (this.s <
0) ? n -
1 :
0
1966 if (d ==
0) r = this[
0] % n
1968 for (var i = this.t -
1; i
>=
0; --i) r = (d * r + this[i]) % n
1972 // (public)
1/this % m (HAC
14.61)
1973 function bnModInverse(m) {
1975 if ((this.isEven() && ac) || m.signum() ==
0) return BigInteger.ZERO
1982 while (u.signum() !=
0) {
1983 while (u.isEven()) {
1986 if (!a.isEven() || !b.isEven()) {
1991 } else if (!b.isEven()) b.subTo(m, b)
1994 while (v.isEven()) {
1997 if (!c.isEven() || !d.isEven()) {
2002 } else if (!d.isEven()) d.subTo(m, d)
2005 if (u.compareTo(v)
>=
0) {
2007 if (ac) a.subTo(c, a)
2011 if (ac) c.subTo(a, c)
2015 if (v.compareTo(BigInteger.ONE) !=
0) return BigInteger.ZERO
2016 if (d.compareTo(m)
>=
0) return d.subtract(m)
2017 if (d.signum() <
0) d.addTo(m, d)
2019 if (d.signum() <
0) return d.add(m)
2024 2,
3,
5,
7,
11,
13,
17,
19,
23,
29,
31,
37,
41,
43,
47,
53,
59,
61,
67,
71,
2025 73,
79,
83,
89,
97,
101,
103,
107,
109,
113,
127,
131,
137,
139,
149,
151,
2026 157,
163,
167,
173,
179,
181,
191,
193,
197,
199,
211,
223,
227,
229,
233,
2027 239,
241,
251,
257,
263,
269,
271,
277,
281,
283,
293,
307,
311,
313,
317,
2028 331,
337,
347,
349,
353,
359,
367,
373,
379,
383,
389,
397,
401,
409,
419,
2029 421,
431,
433,
439,
443,
449,
457,
461,
463,
467,
479,
487,
491,
499,
503,
2030 509,
521,
523,
541,
547,
557,
563,
569,
571,
577,
587,
593,
599,
601,
607,
2031 613,
617,
619,
631,
641,
643,
647,
653,
659,
661,
673,
677,
683,
691,
701,
2032 709,
719,
727,
733,
739,
743,
751,
757,
761,
769,
773,
787,
797,
809,
811,
2033 821,
823,
827,
829,
839,
853,
857,
859,
863,
877,
881,
883,
887,
907,
911,
2034 919,
929,
937,
941,
947,
953,
967,
971,
977,
983,
991,
997
2037 var lplim = (
1 <<
26) / lowprimes[lowprimes.length -
1]
2039 // (public) test primality with certainty
>=
1-
.5^t
2040 function bnIsProbablePrime(t) {
2041 var i, x = this.abs()
2042 if (x.t ==
1 && x[
0] <= lowprimes[lowprimes.length -
1]) {
2043 for (i =
0; i < lowprimes.length; ++i)
2044 if (x[
0] == lowprimes[i]) return true
2047 if (x.isEven()) return false
2049 while (i < lowprimes.length) {
2050 var m = lowprimes[i],
2052 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2054 while (i < j) if (m % lowprimes[i++] ==
0) return false
2056 return x.millerRabin(t)
2059 // (protected) true if probably prime (HAC
4.24, Miller-Rabin)
2060 function bnpMillerRabin(t) {
2061 var n1 = this.subtract(BigInteger.ONE)
2062 var k = n1.getLowestSetBit()
2063 if (k <=
0) return false
2064 var r = n1.shiftRight(k)
2066 if (t
> lowprimes.length) t = lowprimes.length
2067 var a = new BigInteger(null)
2069 for (var i =
0; i < t; ++i) {
2071 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2072 if (bases.indexOf(j) == -
1) break
2076 var y = a.modPow(r, this)
2077 if (y.compareTo(BigInteger.ONE) !=
0 && y.compareTo(n1) !=
0) {
2079 while (j++ < k && y.compareTo(n1) !=
0) {
2080 y = y.modPowInt(
2, this)
2081 if (y.compareTo(BigInteger.ONE) ==
0) return false
2083 if (y.compareTo(n1) !=
0) return false
2090 proto.chunkSize = bnpChunkSize
2091 proto.toRadix = bnpToRadix
2092 proto.fromRadix = bnpFromRadix
2093 proto.fromNumber = bnpFromNumber
2094 proto.bitwiseTo = bnpBitwiseTo
2095 proto.changeBit = bnpChangeBit
2096 proto.addTo = bnpAddTo
2097 proto.dMultiply = bnpDMultiply
2098 proto.dAddOffset = bnpDAddOffset
2099 proto.multiplyLowerTo = bnpMultiplyLowerTo
2100 proto.multiplyUpperTo = bnpMultiplyUpperTo
2101 proto.modInt = bnpModInt
2102 proto.millerRabin = bnpMillerRabin
2105 proto.clone = bnClone
2106 proto.intValue = bnIntValue
2107 proto.byteValue = bnByteValue
2108 proto.shortValue = bnShortValue
2109 proto.signum = bnSigNum
2110 proto.toByteArray = bnToByteArray
2111 proto.equals = bnEquals
2117 proto.andNot = bnAndNot
2119 proto.shiftLeft = bnShiftLeft
2120 proto.shiftRight = bnShiftRight
2121 proto.getLowestSetBit = bnGetLowestSetBit
2122 proto.bitCount = bnBitCount
2123 proto.testBit = bnTestBit
2124 proto.setBit = bnSetBit
2125 proto.clearBit = bnClearBit
2126 proto.flipBit = bnFlipBit
2128 proto.subtract = bnSubtract
2129 proto.multiply = bnMultiply
2130 proto.divide = bnDivide
2131 proto.remainder = bnRemainder
2132 proto.divideAndRemainder = bnDivideAndRemainder
2133 proto.modPow = bnModPow
2134 proto.modInverse = bnModInverse
2137 proto.isProbablePrime = bnIsProbablePrime
2139 // JSBN-specific extension
2140 proto.square = bnSquare
2143 BigInteger.ZERO = nbv(
0)
2144 BigInteger.ONE = nbv(
1)
2145 BigInteger.valueOf = nbv
2147 module.exports = BigInteger
2149 },{"../package.json":
4}],
2:[function(require,module,exports){
2151 // FIXME: Kind of a weird way to throw exceptions, consider removing
2152 var assert = require('assert')
2153 var BigInteger = require('./bigi')
2156 * Turns a byte array into a big integer.
2158 * This function will interpret a byte array as a big integer in big
2161 BigInteger.fromByteArrayUnsigned = function(byteArray) {
2162 // BigInteger expects a DER integer conformant byte array
2163 if (byteArray[
0] &
0x80) {
2164 return new BigInteger([
0].concat(byteArray))
2167 return new BigInteger(byteArray)
2171 * Returns a byte array representation of the big integer.
2173 * This returns the absolute of the contained value in big endian
2174 * form. A value of zero results in an empty array.
2176 BigInteger.prototype.toByteArrayUnsigned = function() {
2177 var byteArray = this.toByteArray()
2178 return byteArray[
0] ===
0 ? byteArray.slice(
1) : byteArray
2181 BigInteger.fromDERInteger = function(byteArray) {
2182 return new BigInteger(byteArray)
2186 * Converts BigInteger to a DER integer representation.
2188 * The format for this value uses the most significant bit as a sign
2189 * bit. If the most significant bit is already set and the integer is
2190 * positive, a
0x00 is prepended.
2206 * -
62300 =
> 0xff0ca4
2208 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
2210 BigInteger.fromBuffer = function(buffer) {
2211 // BigInteger expects a DER integer conformant byte array
2212 if (buffer[
0] &
0x80) {
2213 var byteArray = Array.prototype.slice.call(buffer)
2215 return new BigInteger([
0].concat(byteArray))
2218 return new BigInteger(buffer)
2221 BigInteger.fromHex = function(hex) {
2222 if (hex === '') return BigInteger.ZERO
2224 assert.equal(hex, hex.match(/^[A-Fa-f0-
9]+/), 'Invalid hex string')
2225 assert.equal(hex.length %
2,
0, 'Incomplete hex')
2226 return new BigInteger(hex,
16)
2229 BigInteger.prototype.toBuffer = function(size) {
2230 var byteArray = this.toByteArrayUnsigned()
2233 var padding = size - byteArray.length
2234 while (zeros.length < padding) zeros.push(
0)
2236 return new Buffer(zeros.concat(byteArray))
2239 BigInteger.prototype.toHex = function(size) {
2240 return this.toBuffer(size).toString('hex')
2243 }).call(this,require(
"buffer").Buffer)
2244 },{
"./bigi":
1,
"assert":
5,
"buffer":
7}],
3:[function(require,module,exports){
2245 var BigInteger = require('./bigi')
2248 require('./convert')
2250 module.exports = BigInteger
2251 },{
"./bigi":
1,
"./convert":
2}],
4:[function(require,module,exports){
2255 "description":
"Big integers.",
2273 "devDependencies": {
2276 "coveralls":
"^2.10.0",
2277 "istanbul":
"^0.2.11"
2280 "url":
"https://github.com/cryptocoinjs/bigi",
2283 "main":
"./lib/index.js",
2285 "test":
"_mocha -- test/*.js",
2286 "jshint":
"jshint --config jshint.json lib/*.js ; true",
2288 "coverage":
"istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2289 "coveralls":
"npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2293 "files":
"test/*.js",
2299 "safari/6.0..latest",
2300 "iphone/6.0..latest",
2301 "android-browser/4.2..latest"
2305 "url":
"https://github.com/cryptocoinjs/bigi/issues"
2307 "homepage":
"https://github.com/cryptocoinjs/bigi",
2308 "_id":
"bigi@1.4.0",
2310 "shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2311 "tarball":
"http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2313 "_from":
"bigi@^1.4.0",
2314 "_npmVersion":
"1.4.3",
2317 "email":
"jprichardson@gmail.com"
2322 "email":
"jprichardson@gmail.com"
2325 "name":
"midnightlightning",
2326 "email":
"boydb@midnightdesign.ws"
2329 "name":
"sidazhang",
2330 "email":
"sidazhang89@gmail.com"
2334 "email":
"npm@shesek.info"
2338 "_shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2339 "_resolved":
"https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2342 },{}],
5:[function(require,module,exports){
2343 // http://wiki.commonjs.org/wiki/Unit_Testing/
1.0
2345 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2347 // Originally from narwhal.js (http://narwhaljs.org)
2348 // Copyright (c)
2009 Thomas Robinson
<280north.com
>
2350 // Permission is hereby granted, free of charge, to any person obtaining a copy
2351 // of this software and associated documentation files (the 'Software'), to
2352 // deal in the Software without restriction, including without limitation the
2353 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2354 // sell copies of the Software, and to permit persons to whom the Software is
2355 // furnished to do so, subject to the following conditions:
2357 // The above copyright notice and this permission notice shall be included in
2358 // all copies or substantial portions of the Software.
2360 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2361 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2362 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2363 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2364 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2365 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2367 // when used in node, this will actually load the util module we depend on
2368 // versus loading the builtin util module as happens otherwise
2369 // this is a bug in node module loading as far as I am concerned
2370 var util = require('util/');
2372 var pSlice = Array.prototype.slice;
2373 var hasOwn = Object.prototype.hasOwnProperty;
2375 //
1. The assert module provides functions that throw
2376 // AssertionError's when particular conditions are not met. The
2377 // assert module must conform to the following interface.
2379 var assert = module.exports = ok;
2381 //
2. The AssertionError is defined in assert.
2382 // new assert.AssertionError({ message: message,
2384 // expected: expected })
2386 assert.AssertionError = function AssertionError(options) {
2387 this.name = 'AssertionError';
2388 this.actual = options.actual;
2389 this.expected = options.expected;
2390 this.operator = options.operator;
2391 if (options.message) {
2392 this.message = options.message;
2393 this.generatedMessage = false;
2395 this.message = getMessage(this);
2396 this.generatedMessage = true;
2398 var stackStartFunction = options.stackStartFunction || fail;
2400 if (Error.captureStackTrace) {
2401 Error.captureStackTrace(this, stackStartFunction);
2404 // non v8 browsers so we can have a stacktrace
2405 var err = new Error();
2407 var out = err.stack;
2409 // try to strip useless frames
2410 var fn_name = stackStartFunction.name;
2411 var idx = out.indexOf('\n' + fn_name);
2413 // once we have located the function frame
2414 // we need to strip out everything before it (and its line)
2415 var next_line = out.indexOf('\n', idx +
1);
2416 out = out.substring(next_line +
1);
2424 // assert.AssertionError instanceof Error
2425 util.inherits(assert.AssertionError, Error);
2427 function replacer(key, value) {
2428 if (util.isUndefined(value)) {
2431 if (util.isNumber(value) && !isFinite(value)) {
2432 return value.toString();
2434 if (util.isFunction(value) || util.isRegExp(value)) {
2435 return value.toString();
2440 function truncate(s, n) {
2441 if (util.isString(s)) {
2442 return s.length < n ? s : s.slice(
0, n);
2448 function getMessage(self) {
2449 return truncate(JSON.stringify(self.actual, replacer),
128) + ' ' +
2450 self.operator + ' ' +
2451 truncate(JSON.stringify(self.expected, replacer),
128);
2454 // At present only the three keys mentioned above are used and
2455 // understood by the spec. Implementations or sub modules can pass
2456 // other keys to the AssertionError's constructor - they will be
2459 //
3. All of the following functions must throw an AssertionError
2460 // when a corresponding condition is not met, with a message that
2461 // may be undefined if not provided. All assertion methods provide
2462 // both the actual and expected values to the assertion error for
2463 // display purposes.
2465 function fail(actual, expected, message, operator, stackStartFunction) {
2466 throw new assert.AssertionError({
2471 stackStartFunction: stackStartFunction
2475 // EXTENSION! allows for well behaved errors defined elsewhere.
2478 //
4. Pure assertion tests whether a value is truthy, as determined
2480 // assert.ok(guard, message_opt);
2481 // This statement is equivalent to assert.equal(true, !!guard,
2482 // message_opt);. To test strictly for the value true, use
2483 // assert.strictEqual(true, guard, message_opt);.
2485 function ok(value, message) {
2486 if (!value) fail(value, true, message, '==', assert.ok);
2490 //
5. The equality assertion tests shallow, coercive equality with
2492 // assert.equal(actual, expected, message_opt);
2494 assert.equal = function equal(actual, expected, message) {
2495 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2498 //
6. The non-equality assertion tests for whether two objects are not equal
2499 // with != assert.notEqual(actual, expected, message_opt);
2501 assert.notEqual = function notEqual(actual, expected, message) {
2502 if (actual == expected) {
2503 fail(actual, expected, message, '!=', assert.notEqual);
2507 //
7. The equivalence assertion tests a deep equality relation.
2508 // assert.deepEqual(actual, expected, message_opt);
2510 assert.deepEqual = function deepEqual(actual, expected, message) {
2511 if (!_deepEqual(actual, expected)) {
2512 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2516 function _deepEqual(actual, expected) {
2517 //
7.1. All identical values are equivalent, as determined by ===.
2518 if (actual === expected) {
2521 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2522 if (actual.length != expected.length) return false;
2524 for (var i =
0; i < actual.length; i++) {
2525 if (actual[i] !== expected[i]) return false;
2530 //
7.2. If the expected value is a Date object, the actual value is
2531 // equivalent if it is also a Date object that refers to the same time.
2532 } else if (util.isDate(actual) && util.isDate(expected)) {
2533 return actual.getTime() === expected.getTime();
2535 //
7.3 If the expected value is a RegExp object, the actual value is
2536 // equivalent if it is also a RegExp object with the same source and
2537 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2538 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2539 return actual.source === expected.source &&
2540 actual.global === expected.global &&
2541 actual.multiline === expected.multiline &&
2542 actual.lastIndex === expected.lastIndex &&
2543 actual.ignoreCase === expected.ignoreCase;
2545 //
7.4. Other pairs that do not both pass typeof value == 'object',
2546 // equivalence is determined by ==.
2547 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2548 return actual == expected;
2550 //
7.5 For all other Object pairs, including Array objects, equivalence is
2551 // determined by having the same number of owned properties (as verified
2552 // with Object.prototype.hasOwnProperty.call), the same set of keys
2553 // (although not necessarily the same order), equivalent values for every
2554 // corresponding key, and an identical 'prototype' property. Note: this
2555 // accounts for both named and indexed properties on Arrays.
2557 return objEquiv(actual, expected);
2561 function isArguments(object) {
2562 return Object.prototype.toString.call(object) == '[object Arguments]';
2565 function objEquiv(a, b) {
2566 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2568 // an identical 'prototype' property.
2569 if (a.prototype !== b.prototype) return false;
2570 // if one is a primitive, the other must be same
2571 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2574 var aIsArgs = isArguments(a),
2575 bIsArgs = isArguments(b);
2576 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2581 return _deepEqual(a, b);
2583 var ka = objectKeys(a),
2586 // having the same number of owned properties (keys incorporates
2588 if (ka.length != kb.length)
2590 //the same set of keys (although not necessarily the same order),
2594 for (i = ka.length -
1; i
>=
0; i--) {
2598 //equivalent values for every corresponding key, and
2599 //~~~possibly expensive deep test
2600 for (i = ka.length -
1; i
>=
0; i--) {
2602 if (!_deepEqual(a[key], b[key])) return false;
2607 //
8. The non-equivalence assertion tests for any deep inequality.
2608 // assert.notDeepEqual(actual, expected, message_opt);
2610 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2611 if (_deepEqual(actual, expected)) {
2612 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2616 //
9. The strict equality assertion tests strict equality, as determined by ===.
2617 // assert.strictEqual(actual, expected, message_opt);
2619 assert.strictEqual = function strictEqual(actual, expected, message) {
2620 if (actual !== expected) {
2621 fail(actual, expected, message, '===', assert.strictEqual);
2625 //
10. The strict non-equality assertion tests for strict inequality, as
2626 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2628 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2629 if (actual === expected) {
2630 fail(actual, expected, message, '!==', assert.notStrictEqual);
2634 function expectedException(actual, expected) {
2635 if (!actual || !expected) {
2639 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2640 return expected.test(actual);
2641 } else if (actual instanceof expected) {
2643 } else if (expected.call({}, actual) === true) {
2650 function _throws(shouldThrow, block, expected, message) {
2653 if (util.isString(expected)) {
2664 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2665 (message ? ' ' + message : '.');
2667 if (shouldThrow && !actual) {
2668 fail(actual, expected, 'Missing expected exception' + message);
2671 if (!shouldThrow && expectedException(actual, expected)) {
2672 fail(actual, expected, 'Got unwanted exception' + message);
2675 if ((shouldThrow && actual && expected &&
2676 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2681 //
11. Expected to throw an error:
2682 // assert.throws(block, Error_opt, message_opt);
2684 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2685 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2688 // EXTENSION! This is annoying to write outside this module.
2689 assert.doesNotThrow = function(block, /*optional*/message) {
2690 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2693 assert.ifError = function(err) { if (err) {throw err;}};
2695 var objectKeys = Object.keys || function (obj) {
2697 for (var key in obj) {
2698 if (hasOwn.call(obj, key)) keys.push(key);
2703 },{"util/":
29}],
6:[function(require,module,exports){
2705 },{}],
7:[function(require,module,exports){
2707 * The buffer module from node.js, for the browser.
2709 * @author Feross Aboukhadijeh
<feross@feross.org
> <http://feross.org
>
2713 var base64 = require('base64-js')
2714 var ieee754 = require('ieee754')
2715 var isArray = require('is-array')
2717 exports.Buffer = Buffer
2718 exports.SlowBuffer = SlowBuffer
2719 exports.INSPECT_MAX_BYTES =
50
2720 Buffer.poolSize =
8192 // not used by this implementation
2725 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2726 * === true Use Uint8Array implementation (fastest)
2727 * === false Use Object implementation (most compatible, even IE6)
2729 * Browsers that support typed arrays are IE
10+, Firefox
4+, Chrome
7+, Safari
5.1+,
2730 * Opera
11.6+, iOS
4.2+.
2732 * Due to various browser bugs, sometimes the Object implementation will be used even
2733 * when the browser supports typed arrays.
2737 * - Firefox
4-
29 lacks support for adding new properties to `Uint8Array` instances,
2738 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=
695438.
2740 * - Safari
5-
7 lacks support for changing the `Object.prototype.constructor` property
2743 * - Chrome
9-
10 is missing the `TypedArray.prototype.subarray` function.
2745 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2746 * incorrect length in some situations.
2748 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2749 * get the Object implementation, which is slower but behaves correctly.
2751 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2754 var arr = new Uint8Array(
1)
2755 arr.foo = function () { return
42 }
2756 arr.constructor = Bar
2757 return arr.foo() ===
42 && // typed array instances can be augmented
2758 arr.constructor === Bar && // constructor can be set
2759 typeof arr.subarray === 'function' && // chrome
9-
10 lack `subarray`
2760 arr.subarray(
1,
1).byteLength ===
0 // ie10 has broken `subarray`
2766 function kMaxLength () {
2767 return Buffer.TYPED_ARRAY_SUPPORT
2776 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2777 * with function properties for all the node `Buffer` API functions. We use
2778 * `Uint8Array` so that square bracket notation works as expected -- it returns
2781 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2784 function Buffer (arg) {
2785 if (!(this instanceof Buffer)) {
2786 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2787 if (arguments.length
> 1) return new Buffer(arg, arguments[
1])
2788 return new Buffer(arg)
2792 this.parent = undefined
2795 if (typeof arg === 'number') {
2796 return fromNumber(this, arg)
2799 // Slightly less common case.
2800 if (typeof arg === 'string') {
2801 return fromString(this, arg, arguments.length
> 1 ? arguments[
1] : 'utf8')
2805 return fromObject(this, arg)
2808 function fromNumber (that, length) {
2809 that = allocate(that, length <
0 ?
0 : checked(length) |
0)
2810 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2811 for (var i =
0; i < length; i++) {
2818 function fromString (that, string, encoding) {
2819 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2821 // Assumption: byteLength() return value is always < kMaxLength.
2822 var length = byteLength(string, encoding) |
0
2823 that = allocate(that, length)
2825 that.write(string, encoding)
2829 function fromObject (that, object) {
2830 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2832 if (isArray(object)) return fromArray(that, object)
2834 if (object == null) {
2835 throw new TypeError('must start with number, buffer, array or string')
2838 if (typeof ArrayBuffer !== 'undefined') {
2839 if (object.buffer instanceof ArrayBuffer) {
2840 return fromTypedArray(that, object)
2842 if (object instanceof ArrayBuffer) {
2843 return fromArrayBuffer(that, object)
2847 if (object.length) return fromArrayLike(that, object)
2849 return fromJsonObject(that, object)
2852 function fromBuffer (that, buffer) {
2853 var length = checked(buffer.length) |
0
2854 that = allocate(that, length)
2855 buffer.copy(that,
0,
0, length)
2859 function fromArray (that, array) {
2860 var length = checked(array.length) |
0
2861 that = allocate(that, length)
2862 for (var i =
0; i < length; i +=
1) {
2863 that[i] = array[i] &
255
2868 // Duplicate of fromArray() to keep fromArray() monomorphic.
2869 function fromTypedArray (that, array) {
2870 var length = checked(array.length) |
0
2871 that = allocate(that, length)
2872 // Truncating the elements is probably not what people expect from typed
2873 // arrays with BYTES_PER_ELEMENT
> 1 but it's compatible with the behavior
2874 // of the old Buffer constructor.
2875 for (var i =
0; i < length; i +=
1) {
2876 that[i] = array[i] &
255
2881 function fromArrayBuffer (that, array) {
2882 if (Buffer.TYPED_ARRAY_SUPPORT) {
2883 // Return an augmented `Uint8Array` instance, for best performance
2885 that = Buffer._augment(new Uint8Array(array))
2887 // Fallback: Return an object instance of the Buffer class
2888 that = fromTypedArray(that, new Uint8Array(array))
2893 function fromArrayLike (that, array) {
2894 var length = checked(array.length) |
0
2895 that = allocate(that, length)
2896 for (var i =
0; i < length; i +=
1) {
2897 that[i] = array[i] &
255
2902 // Deserialize { type: 'Buffer', data: [
1,
2,
3,...] } into a Buffer object.
2903 // Returns a zero-length buffer for inputs that don't conform to the spec.
2904 function fromJsonObject (that, object) {
2908 if (object.type === 'Buffer' && isArray(object.data)) {
2910 length = checked(array.length) |
0
2912 that = allocate(that, length)
2914 for (var i =
0; i < length; i +=
1) {
2915 that[i] = array[i] &
255
2920 function allocate (that, length) {
2921 if (Buffer.TYPED_ARRAY_SUPPORT) {
2922 // Return an augmented `Uint8Array` instance, for best performance
2923 that = Buffer._augment(new Uint8Array(length))
2925 // Fallback: Return an object instance of the Buffer class
2926 that.length = length
2927 that._isBuffer = true
2930 var fromPool = length !==
0 && length <= Buffer.poolSize
>>> 1
2931 if (fromPool) that.parent = rootParent
2936 function checked (length) {
2937 // Note: cannot use `length < kMaxLength` here because that fails when
2938 // length is NaN (which is otherwise coerced to zero.)
2939 if (length
>= kMaxLength()) {
2940 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2941 'size:
0x' + kMaxLength().toString(
16) + ' bytes')
2946 function SlowBuffer (subject, encoding) {
2947 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2949 var buf = new Buffer(subject, encoding)
2954 Buffer.isBuffer = function isBuffer (b) {
2955 return !!(b != null && b._isBuffer)
2958 Buffer.compare = function compare (a, b) {
2959 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2960 throw new TypeError('Arguments must be Buffers')
2963 if (a === b) return
0
2969 var len = Math.min(x, y)
2971 if (a[i] !== b[i]) break
2981 if (x < y) return -
1
2986 Buffer.isEncoding = function isEncoding (encoding) {
2987 switch (String(encoding).toLowerCase()) {
3005 Buffer.concat = function concat (list, length) {
3006 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3008 if (list.length ===
0) {
3009 return new Buffer(
0)
3013 if (length === undefined) {
3015 for (i =
0; i < list.length; i++) {
3016 length += list[i].length
3020 var buf = new Buffer(length)
3022 for (i =
0; i < list.length; i++) {
3030 function byteLength (string, encoding) {
3031 if (typeof string !== 'string') string = '' + string
3033 var len = string.length
3034 if (len ===
0) return
0
3036 // Use a for loop to avoid recursion
3037 var loweredCase = false
3048 return utf8ToBytes(string).length
3057 return base64ToBytes(string).length
3059 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3060 encoding = ('' + encoding).toLowerCase()
3065 Buffer.byteLength = byteLength
3067 // pre-set for values that may exist in the future
3068 Buffer.prototype.length = undefined
3069 Buffer.prototype.parent = undefined
3071 function slowToString (encoding, start, end) {
3072 var loweredCase = false
3075 end = end === undefined || end === Infinity ? this.length : end |
0
3077 if (!encoding) encoding = 'utf8'
3078 if (start <
0) start =
0
3079 if (end
> this.length) end = this.length
3080 if (end <= start) return ''
3085 return hexSlice(this, start, end)
3089 return utf8Slice(this, start, end)
3092 return asciiSlice(this, start, end)
3095 return binarySlice(this, start, end)
3098 return base64Slice(this, start, end)
3104 return utf16leSlice(this, start, end)
3107 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3108 encoding = (encoding + '').toLowerCase()
3114 Buffer.prototype.toString = function toString () {
3115 var length = this.length |
0
3116 if (length ===
0) return ''
3117 if (arguments.length ===
0) return utf8Slice(this,
0, length)
3118 return slowToString.apply(this, arguments)
3121 Buffer.prototype.equals = function equals (b) {
3122 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3123 if (this === b) return true
3124 return Buffer.compare(this, b) ===
0
3127 Buffer.prototype.inspect = function inspect () {
3129 var max = exports.INSPECT_MAX_BYTES
3130 if (this.length
> 0) {
3131 str = this.toString('hex',
0, max).match(/.{
2}/g).join(' ')
3132 if (this.length
> max) str += ' ... '
3134 return '
<Buffer ' + str + '
>'
3137 Buffer.prototype.compare = function compare (b) {
3138 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3139 if (this === b) return
0
3140 return Buffer.compare(this, b)
3143 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3144 if (byteOffset
> 0x7fffffff) byteOffset =
0x7fffffff
3145 else if (byteOffset < -
0x80000000) byteOffset = -
0x80000000
3148 if (this.length ===
0) return -
1
3149 if (byteOffset
>= this.length) return -
1
3151 // Negative offsets start from the end of the buffer
3152 if (byteOffset <
0) byteOffset = Math.max(this.length + byteOffset,
0)
3154 if (typeof val === 'string') {
3155 if (val.length ===
0) return -
1 // special case: looking for empty string always fails
3156 return String.prototype.indexOf.call(this, val, byteOffset)
3158 if (Buffer.isBuffer(val)) {
3159 return arrayIndexOf(this, val, byteOffset)
3161 if (typeof val === 'number') {
3162 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3163 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3165 return arrayIndexOf(this, [ val ], byteOffset)
3168 function arrayIndexOf (arr, val, byteOffset) {
3170 for (var i =
0; byteOffset + i < arr.length; i++) {
3171 if (arr[byteOffset + i] === val[foundIndex === -
1 ?
0 : i - foundIndex]) {
3172 if (foundIndex === -
1) foundIndex = i
3173 if (i - foundIndex +
1 === val.length) return byteOffset + foundIndex
3181 throw new TypeError('val must be string, number or Buffer')
3184 // `get` is deprecated
3185 Buffer.prototype.get = function get (offset) {
3186 console.log('.get() is deprecated. Access using array indexes instead.')
3187 return this.readUInt8(offset)
3190 // `set` is deprecated
3191 Buffer.prototype.set = function set (v, offset) {
3192 console.log('.set() is deprecated. Access using array indexes instead.')
3193 return this.writeUInt8(v, offset)
3196 function hexWrite (buf, string, offset, length) {
3197 offset = Number(offset) ||
0
3198 var remaining = buf.length - offset
3202 length = Number(length)
3203 if (length
> remaining) {
3208 // must be an even number of digits
3209 var strLen = string.length
3210 if (strLen %
2 !==
0) throw new Error('Invalid hex string')
3212 if (length
> strLen /
2) {
3215 for (var i =
0; i < length; i++) {
3216 var parsed = parseInt(string.substr(i *
2,
2),
16)
3217 if (isNaN(parsed)) throw new Error('Invalid hex string')
3218 buf[offset + i] = parsed
3223 function utf8Write (buf, string, offset, length) {
3224 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3227 function asciiWrite (buf, string, offset, length) {
3228 return blitBuffer(asciiToBytes(string), buf, offset, length)
3231 function binaryWrite (buf, string, offset, length) {
3232 return asciiWrite(buf, string, offset, length)
3235 function base64Write (buf, string, offset, length) {
3236 return blitBuffer(base64ToBytes(string), buf, offset, length)
3239 function ucs2Write (buf, string, offset, length) {
3240 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3243 Buffer.prototype.write = function write (string, offset, length, encoding) {
3244 // Buffer#write(string)
3245 if (offset === undefined) {
3247 length = this.length
3249 // Buffer#write(string, encoding)
3250 } else if (length === undefined && typeof offset === 'string') {
3252 length = this.length
3254 // Buffer#write(string, offset[, length][, encoding])
3255 } else if (isFinite(offset)) {
3257 if (isFinite(length)) {
3259 if (encoding === undefined) encoding = 'utf8'
3264 // legacy write(string, encoding, offset, length) - remove in v0.13
3272 var remaining = this.length - offset
3273 if (length === undefined || length
> remaining) length = remaining
3275 if ((string.length
> 0 && (length <
0 || offset <
0)) || offset
> this.length) {
3276 throw new RangeError('attempt to write outside buffer bounds')
3279 if (!encoding) encoding = 'utf8'
3281 var loweredCase = false
3285 return hexWrite(this, string, offset, length)
3289 return utf8Write(this, string, offset, length)
3292 return asciiWrite(this, string, offset, length)
3295 return binaryWrite(this, string, offset, length)
3298 // Warning: maxLength not taken into account in base64Write
3299 return base64Write(this, string, offset, length)
3305 return ucs2Write(this, string, offset, length)
3308 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3309 encoding = ('' + encoding).toLowerCase()
3315 Buffer.prototype.toJSON = function toJSON () {
3318 data: Array.prototype.slice.call(this._arr || this,
0)
3322 function base64Slice (buf, start, end) {
3323 if (start ===
0 && end === buf.length) {
3324 return base64.fromByteArray(buf)
3326 return base64.fromByteArray(buf.slice(start, end))
3330 function utf8Slice (buf, start, end) {
3331 end = Math.min(buf.length, end)
3336 var bytesPerSequence
3342 for (; i < end; i += bytesPerSequence) {
3346 if (firstByte
> 0xEF) {
3347 bytesPerSequence =
4
3348 } else if (firstByte
> 0xDF) {
3349 bytesPerSequence =
3
3350 } else if (firstByte
> 0xBF) {
3351 bytesPerSequence =
2
3353 bytesPerSequence =
1
3356 if (i + bytesPerSequence <= end) {
3357 switch (bytesPerSequence) {
3359 if (firstByte <
0x80) {
3360 codePoint = firstByte
3364 secondByte = buf[i +
1]
3365 if ((secondByte &
0xC0) ===
0x80) {
3366 tempCodePoint = (firstByte &
0x1F) <<
0x6 | (secondByte &
0x3F)
3367 if (tempCodePoint
> 0x7F) {
3368 codePoint = tempCodePoint
3373 secondByte = buf[i +
1]
3374 thirdByte = buf[i +
2]
3375 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80) {
3376 tempCodePoint = (firstByte &
0xF) <<
0xC | (secondByte &
0x3F) <<
0x6 | (thirdByte &
0x3F)
3377 if (tempCodePoint
> 0x7FF && (tempCodePoint <
0xD800 || tempCodePoint
> 0xDFFF)) {
3378 codePoint = tempCodePoint
3383 secondByte = buf[i +
1]
3384 thirdByte = buf[i +
2]
3385 fourthByte = buf[i +
3]
3386 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80 && (fourthByte &
0xC0) ===
0x80) {
3387 tempCodePoint = (firstByte &
0xF) <<
0x12 | (secondByte &
0x3F) <<
0xC | (thirdByte &
0x3F) <<
0x6 | (fourthByte &
0x3F)
3388 if (tempCodePoint
> 0xFFFF && tempCodePoint <
0x110000) {
3389 codePoint = tempCodePoint
3395 if (codePoint ===
0xFFFD) {
3396 // we generated an invalid codePoint so make sure to only advance by
1 byte
3397 bytesPerSequence =
1
3398 } else if (codePoint
> 0xFFFF) {
3399 // encode to utf16 (surrogate pair dance)
3400 codePoint -=
0x10000
3401 res.push(codePoint
>>> 10 &
0x3FF |
0xD800)
3402 codePoint =
0xDC00 | codePoint &
0x3FF
3408 return String.fromCharCode.apply(String, res)
3411 function asciiSlice (buf, start, end) {
3413 end = Math.min(buf.length, end)
3415 for (var i = start; i < end; i++) {
3416 ret += String.fromCharCode(buf[i] &
0x7F)
3421 function binarySlice (buf, start, end) {
3423 end = Math.min(buf.length, end)
3425 for (var i = start; i < end; i++) {
3426 ret += String.fromCharCode(buf[i])
3431 function hexSlice (buf, start, end) {
3432 var len = buf.length
3434 if (!start || start <
0) start =
0
3435 if (!end || end <
0 || end
> len) end = len
3438 for (var i = start; i < end; i++) {
3439 out += toHex(buf[i])
3444 function utf16leSlice (buf, start, end) {
3445 var bytes = buf.slice(start, end)
3447 for (var i =
0; i < bytes.length; i +=
2) {
3448 res += String.fromCharCode(bytes[i] + bytes[i +
1] *
256)
3453 Buffer.prototype.slice = function slice (start, end) {
3454 var len = this.length
3456 end = end === undefined ? len : ~~end
3460 if (start <
0) start =
0
3461 } else if (start
> len) {
3467 if (end <
0) end =
0
3468 } else if (end
> len) {
3472 if (end < start) end = start
3475 if (Buffer.TYPED_ARRAY_SUPPORT) {
3476 newBuf = Buffer._augment(this.subarray(start, end))
3478 var sliceLen = end - start
3479 newBuf = new Buffer(sliceLen, undefined)
3480 for (var i =
0; i < sliceLen; i++) {
3481 newBuf[i] = this[i + start]
3485 if (newBuf.length) newBuf.parent = this.parent || this
3491 * Need to make sure that buffer isn't trying to write out of bounds.
3493 function checkOffset (offset, ext, length) {
3494 if ((offset %
1) !==
0 || offset <
0) throw new RangeError('offset is not uint')
3495 if (offset + ext
> length) throw new RangeError('Trying to access beyond buffer length')
3498 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3500 byteLength = byteLength |
0
3501 if (!noAssert) checkOffset(offset, byteLength, this.length)
3503 var val = this[offset]
3506 while (++i < byteLength && (mul *=
0x100)) {
3507 val += this[offset + i] * mul
3513 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3515 byteLength = byteLength |
0
3517 checkOffset(offset, byteLength, this.length)
3520 var val = this[offset + --byteLength]
3522 while (byteLength
> 0 && (mul *=
0x100)) {
3523 val += this[offset + --byteLength] * mul
3529 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3530 if (!noAssert) checkOffset(offset,
1, this.length)
3534 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3535 if (!noAssert) checkOffset(offset,
2, this.length)
3536 return this[offset] | (this[offset +
1] <<
8)
3539 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3540 if (!noAssert) checkOffset(offset,
2, this.length)
3541 return (this[offset] <<
8) | this[offset +
1]
3544 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3545 if (!noAssert) checkOffset(offset,
4, this.length)
3547 return ((this[offset]) |
3548 (this[offset +
1] <<
8) |
3549 (this[offset +
2] <<
16)) +
3550 (this[offset +
3] *
0x1000000)
3553 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3554 if (!noAssert) checkOffset(offset,
4, this.length)
3556 return (this[offset] *
0x1000000) +
3557 ((this[offset +
1] <<
16) |
3558 (this[offset +
2] <<
8) |
3562 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3564 byteLength = byteLength |
0
3565 if (!noAssert) checkOffset(offset, byteLength, this.length)
3567 var val = this[offset]
3570 while (++i < byteLength && (mul *=
0x100)) {
3571 val += this[offset + i] * mul
3575 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3580 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3582 byteLength = byteLength |
0
3583 if (!noAssert) checkOffset(offset, byteLength, this.length)
3587 var val = this[offset + --i]
3588 while (i
> 0 && (mul *=
0x100)) {
3589 val += this[offset + --i] * mul
3593 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3598 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3599 if (!noAssert) checkOffset(offset,
1, this.length)
3600 if (!(this[offset] &
0x80)) return (this[offset])
3601 return ((
0xff - this[offset] +
1) * -
1)
3604 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3605 if (!noAssert) checkOffset(offset,
2, this.length)
3606 var val = this[offset] | (this[offset +
1] <<
8)
3607 return (val &
0x8000) ? val |
0xFFFF0000 : val
3610 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3611 if (!noAssert) checkOffset(offset,
2, this.length)
3612 var val = this[offset +
1] | (this[offset] <<
8)
3613 return (val &
0x8000) ? val |
0xFFFF0000 : val
3616 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3617 if (!noAssert) checkOffset(offset,
4, this.length)
3619 return (this[offset]) |
3620 (this[offset +
1] <<
8) |
3621 (this[offset +
2] <<
16) |
3622 (this[offset +
3] <<
24)
3625 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3626 if (!noAssert) checkOffset(offset,
4, this.length)
3628 return (this[offset] <<
24) |
3629 (this[offset +
1] <<
16) |
3630 (this[offset +
2] <<
8) |
3634 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3635 if (!noAssert) checkOffset(offset,
4, this.length)
3636 return ieee754.read(this, offset, true,
23,
4)
3639 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3640 if (!noAssert) checkOffset(offset,
4, this.length)
3641 return ieee754.read(this, offset, false,
23,
4)
3644 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3645 if (!noAssert) checkOffset(offset,
8, this.length)
3646 return ieee754.read(this, offset, true,
52,
8)
3649 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3650 if (!noAssert) checkOffset(offset,
8, this.length)
3651 return ieee754.read(this, offset, false,
52,
8)
3654 function checkInt (buf, value, offset, ext, max, min) {
3655 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3656 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3657 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3660 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3663 byteLength = byteLength |
0
3664 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3668 this[offset] = value &
0xFF
3669 while (++i < byteLength && (mul *=
0x100)) {
3670 this[offset + i] = (value / mul) &
0xFF
3673 return offset + byteLength
3676 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3679 byteLength = byteLength |
0
3680 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3682 var i = byteLength -
1
3684 this[offset + i] = value &
0xFF
3685 while (--i
>=
0 && (mul *=
0x100)) {
3686 this[offset + i] = (value / mul) &
0xFF
3689 return offset + byteLength
3692 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3695 if (!noAssert) checkInt(this, value, offset,
1,
0xff,
0)
3696 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3697 this[offset] = value
3701 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3702 if (value <
0) value =
0xffff + value +
1
3703 for (var i =
0, j = Math.min(buf.length - offset,
2); i < j; i++) {
3704 buf[offset + i] = (value & (
0xff << (
8 * (littleEndian ? i :
1 - i))))
>>>
3705 (littleEndian ? i :
1 - i) *
8
3709 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3712 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3713 if (Buffer.TYPED_ARRAY_SUPPORT) {
3714 this[offset] = value
3715 this[offset +
1] = (value
>>> 8)
3717 objectWriteUInt16(this, value, offset, true)
3722 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3725 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3726 if (Buffer.TYPED_ARRAY_SUPPORT) {
3727 this[offset] = (value
>>> 8)
3728 this[offset +
1] = value
3730 objectWriteUInt16(this, value, offset, false)
3735 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3736 if (value <
0) value =
0xffffffff + value +
1
3737 for (var i =
0, j = Math.min(buf.length - offset,
4); i < j; i++) {
3738 buf[offset + i] = (value
>>> (littleEndian ? i :
3 - i) *
8) &
0xff
3742 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3745 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3746 if (Buffer.TYPED_ARRAY_SUPPORT) {
3747 this[offset +
3] = (value
>>> 24)
3748 this[offset +
2] = (value
>>> 16)
3749 this[offset +
1] = (value
>>> 8)
3750 this[offset] = value
3752 objectWriteUInt32(this, value, offset, true)
3757 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3760 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3761 if (Buffer.TYPED_ARRAY_SUPPORT) {
3762 this[offset] = (value
>>> 24)
3763 this[offset +
1] = (value
>>> 16)
3764 this[offset +
2] = (value
>>> 8)
3765 this[offset +
3] = value
3767 objectWriteUInt32(this, value, offset, false)
3772 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3776 var limit = Math.pow(
2,
8 * byteLength -
1)
3778 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3783 var sub = value <
0 ?
1 :
0
3784 this[offset] = value &
0xFF
3785 while (++i < byteLength && (mul *=
0x100)) {
3786 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3789 return offset + byteLength
3792 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3796 var limit = Math.pow(
2,
8 * byteLength -
1)
3798 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3801 var i = byteLength -
1
3803 var sub = value <
0 ?
1 :
0
3804 this[offset + i] = value &
0xFF
3805 while (--i
>=
0 && (mul *=
0x100)) {
3806 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3809 return offset + byteLength
3812 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3815 if (!noAssert) checkInt(this, value, offset,
1,
0x7f, -
0x80)
3816 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3817 if (value <
0) value =
0xff + value +
1
3818 this[offset] = value
3822 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3825 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3826 if (Buffer.TYPED_ARRAY_SUPPORT) {
3827 this[offset] = value
3828 this[offset +
1] = (value
>>> 8)
3830 objectWriteUInt16(this, value, offset, true)
3835 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3838 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3839 if (Buffer.TYPED_ARRAY_SUPPORT) {
3840 this[offset] = (value
>>> 8)
3841 this[offset +
1] = value
3843 objectWriteUInt16(this, value, offset, false)
3848 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3851 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3852 if (Buffer.TYPED_ARRAY_SUPPORT) {
3853 this[offset] = value
3854 this[offset +
1] = (value
>>> 8)
3855 this[offset +
2] = (value
>>> 16)
3856 this[offset +
3] = (value
>>> 24)
3858 objectWriteUInt32(this, value, offset, true)
3863 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3866 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3867 if (value <
0) value =
0xffffffff + value +
1
3868 if (Buffer.TYPED_ARRAY_SUPPORT) {
3869 this[offset] = (value
>>> 24)
3870 this[offset +
1] = (value
>>> 16)
3871 this[offset +
2] = (value
>>> 8)
3872 this[offset +
3] = value
3874 objectWriteUInt32(this, value, offset, false)
3879 function checkIEEE754 (buf, value, offset, ext, max, min) {
3880 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3881 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3882 if (offset <
0) throw new RangeError('index out of range')
3885 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3887 checkIEEE754(buf, value, offset,
4,
3.4028234663852886e+38, -
3.4028234663852886e+38)
3889 ieee754.write(buf, value, offset, littleEndian,
23,
4)
3893 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3894 return writeFloat(this, value, offset, true, noAssert)
3897 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3898 return writeFloat(this, value, offset, false, noAssert)
3901 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3903 checkIEEE754(buf, value, offset,
8,
1.7976931348623157E+308, -
1.7976931348623157E+308)
3905 ieee754.write(buf, value, offset, littleEndian,
52,
8)
3909 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3910 return writeDouble(this, value, offset, true, noAssert)
3913 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3914 return writeDouble(this, value, offset, false, noAssert)
3917 // copy(targetBuffer, targetStart=
0, sourceStart=
0, sourceEnd=buffer.length)
3918 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3919 if (!start) start =
0
3920 if (!end && end !==
0) end = this.length
3921 if (targetStart
>= target.length) targetStart = target.length
3922 if (!targetStart) targetStart =
0
3923 if (end
> 0 && end < start) end = start
3925 // Copy
0 bytes; we're done
3926 if (end === start) return
0
3927 if (target.length ===
0 || this.length ===
0) return
0
3929 // Fatal error conditions
3930 if (targetStart <
0) {
3931 throw new RangeError('targetStart out of bounds')
3933 if (start <
0 || start
>= this.length) throw new RangeError('sourceStart out of bounds')
3934 if (end <
0) throw new RangeError('sourceEnd out of bounds')
3937 if (end
> this.length) end = this.length
3938 if (target.length - targetStart < end - start) {
3939 end = target.length - targetStart + start
3942 var len = end - start
3945 if (this === target && start < targetStart && targetStart < end) {
3946 // descending copy from end
3947 for (i = len -
1; i
>=
0; i--) {
3948 target[i + targetStart] = this[i + start]
3950 } else if (len <
1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3951 // ascending copy from start
3952 for (i =
0; i < len; i++) {
3953 target[i + targetStart] = this[i + start]
3956 target._set(this.subarray(start, start + len), targetStart)
3962 // fill(value, start=
0, end=buffer.length)
3963 Buffer.prototype.fill = function fill (value, start, end) {
3964 if (!value) value =
0
3965 if (!start) start =
0
3966 if (!end) end = this.length
3968 if (end < start) throw new RangeError('end < start')
3970 // Fill
0 bytes; we're done
3971 if (end === start) return
3972 if (this.length ===
0) return
3974 if (start <
0 || start
>= this.length) throw new RangeError('start out of bounds')
3975 if (end <
0 || end
> this.length) throw new RangeError('end out of bounds')
3978 if (typeof value === 'number') {
3979 for (i = start; i < end; i++) {
3983 var bytes = utf8ToBytes(value.toString())
3984 var len = bytes.length
3985 for (i = start; i < end; i++) {
3986 this[i] = bytes[i % len]
3994 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3995 * Added in Node
0.12. Only available in browsers that support ArrayBuffer.
3997 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3998 if (typeof Uint8Array !== 'undefined') {
3999 if (Buffer.TYPED_ARRAY_SUPPORT) {
4000 return (new Buffer(this)).buffer
4002 var buf = new Uint8Array(this.length)
4003 for (var i =
0, len = buf.length; i < len; i +=
1) {
4009 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
4016 var BP = Buffer.prototype
4019 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4021 Buffer._augment = function _augment (arr) {
4022 arr.constructor = Buffer
4023 arr._isBuffer = true
4025 // save reference to original Uint8Array set method before overwriting
4032 arr.write = BP.write
4033 arr.toString = BP.toString
4034 arr.toLocaleString = BP.toString
4035 arr.toJSON = BP.toJSON
4036 arr.equals = BP.equals
4037 arr.compare = BP.compare
4038 arr.indexOf = BP.indexOf
4040 arr.slice = BP.slice
4041 arr.readUIntLE = BP.readUIntLE
4042 arr.readUIntBE = BP.readUIntBE
4043 arr.readUInt8 = BP.readUInt8
4044 arr.readUInt16LE = BP.readUInt16LE
4045 arr.readUInt16BE = BP.readUInt16BE
4046 arr.readUInt32LE = BP.readUInt32LE
4047 arr.readUInt32BE = BP.readUInt32BE
4048 arr.readIntLE = BP.readIntLE
4049 arr.readIntBE = BP.readIntBE
4050 arr.readInt8 = BP.readInt8
4051 arr.readInt16LE = BP.readInt16LE
4052 arr.readInt16BE = BP.readInt16BE
4053 arr.readInt32LE = BP.readInt32LE
4054 arr.readInt32BE = BP.readInt32BE
4055 arr.readFloatLE = BP.readFloatLE
4056 arr.readFloatBE = BP.readFloatBE
4057 arr.readDoubleLE = BP.readDoubleLE
4058 arr.readDoubleBE = BP.readDoubleBE
4059 arr.writeUInt8 = BP.writeUInt8
4060 arr.writeUIntLE = BP.writeUIntLE
4061 arr.writeUIntBE = BP.writeUIntBE
4062 arr.writeUInt16LE = BP.writeUInt16LE
4063 arr.writeUInt16BE = BP.writeUInt16BE
4064 arr.writeUInt32LE = BP.writeUInt32LE
4065 arr.writeUInt32BE = BP.writeUInt32BE
4066 arr.writeIntLE = BP.writeIntLE
4067 arr.writeIntBE = BP.writeIntBE
4068 arr.writeInt8 = BP.writeInt8
4069 arr.writeInt16LE = BP.writeInt16LE
4070 arr.writeInt16BE = BP.writeInt16BE
4071 arr.writeInt32LE = BP.writeInt32LE
4072 arr.writeInt32BE = BP.writeInt32BE
4073 arr.writeFloatLE = BP.writeFloatLE
4074 arr.writeFloatBE = BP.writeFloatBE
4075 arr.writeDoubleLE = BP.writeDoubleLE
4076 arr.writeDoubleBE = BP.writeDoubleBE
4078 arr.inspect = BP.inspect
4079 arr.toArrayBuffer = BP.toArrayBuffer
4084 var INVALID_BASE64_RE = /[^+\/
0-
9A-Za-z-_]/g
4086 function base64clean (str) {
4087 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4088 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4089 // Node converts strings with length <
2 to ''
4090 if (str.length <
2) return ''
4091 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4092 while (str.length %
4 !==
0) {
4098 function stringtrim (str) {
4099 if (str.trim) return str.trim()
4100 return str.replace(/^\s+|\s+$/g, '')
4103 function toHex (n) {
4104 if (n <
16) return '
0' + n.toString(
16)
4105 return n.toString(
16)
4108 function utf8ToBytes (string, units) {
4109 units = units || Infinity
4111 var length = string.length
4112 var leadSurrogate = null
4115 for (var i =
0; i < length; i++) {
4116 codePoint = string.charCodeAt(i)
4118 // is surrogate component
4119 if (codePoint
> 0xD7FF && codePoint <
0xE000) {
4120 // last char was a lead
4121 if (!leadSurrogate) {
4123 if (codePoint
> 0xDBFF) {
4125 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4128 } else if (i +
1 === length) {
4130 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4135 leadSurrogate = codePoint
4141 if (codePoint <
0xDC00) {
4142 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4143 leadSurrogate = codePoint
4147 // valid surrogate pair
4148 codePoint = leadSurrogate -
0xD800 <<
10 | codePoint -
0xDC00 |
0x10000
4150 } else if (leadSurrogate) {
4151 // valid bmp char, but last char was a lead
4152 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4155 leadSurrogate = null
4158 if (codePoint <
0x80) {
4159 if ((units -=
1) <
0) break
4160 bytes.push(codePoint)
4161 } else if (codePoint <
0x800) {
4162 if ((units -=
2) <
0) break
4164 codePoint
>> 0x6 |
0xC0,
4165 codePoint &
0x3F |
0x80
4167 } else if (codePoint <
0x10000) {
4168 if ((units -=
3) <
0) break
4170 codePoint
>> 0xC |
0xE0,
4171 codePoint
>> 0x6 &
0x3F |
0x80,
4172 codePoint &
0x3F |
0x80
4174 } else if (codePoint <
0x110000) {
4175 if ((units -=
4) <
0) break
4177 codePoint
>> 0x12 |
0xF0,
4178 codePoint
>> 0xC &
0x3F |
0x80,
4179 codePoint
>> 0x6 &
0x3F |
0x80,
4180 codePoint &
0x3F |
0x80
4183 throw new Error('Invalid code point')
4190 function asciiToBytes (str) {
4192 for (var i =
0; i < str.length; i++) {
4193 // Node's code seems to be doing this and not &
0x7F..
4194 byteArray.push(str.charCodeAt(i) &
0xFF)
4199 function utf16leToBytes (str, units) {
4202 for (var i =
0; i < str.length; i++) {
4203 if ((units -=
2) <
0) break
4205 c = str.charCodeAt(i)
4215 function base64ToBytes (str) {
4216 return base64.toByteArray(base64clean(str))
4219 function blitBuffer (src, dst, offset, length) {
4220 for (var i =
0; i < length; i++) {
4221 if ((i + offset
>= dst.length) || (i
>= src.length)) break
4222 dst[i + offset] = src[i]
4227 },{"base64-js":
8,"ieee754":
9,"is-array":
10}],
8:[function(require,module,exports){
4228 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4230 ;(function (exports) {
4233 var Arr = (typeof Uint8Array !== 'undefined')
4237 var PLUS = '+'.charCodeAt(
0)
4238 var SLASH = '/'.charCodeAt(
0)
4239 var NUMBER = '
0'.charCodeAt(
0)
4240 var LOWER = 'a'.charCodeAt(
0)
4241 var UPPER = 'A'.charCodeAt(
0)
4242 var PLUS_URL_SAFE = '-'.charCodeAt(
0)
4243 var SLASH_URL_SAFE = '_'.charCodeAt(
0)
4245 function decode (elt) {
4246 var code = elt.charCodeAt(
0)
4247 if (code === PLUS ||
4248 code === PLUS_URL_SAFE)
4250 if (code === SLASH ||
4251 code === SLASH_URL_SAFE)
4254 return -
1 //no match
4255 if (code < NUMBER +
10)
4256 return code - NUMBER +
26 +
26
4257 if (code < UPPER +
26)
4259 if (code < LOWER +
26)
4260 return code - LOWER +
26
4263 function b64ToByteArray (b64) {
4264 var i, j, l, tmp, placeHolders, arr
4266 if (b64.length %
4 > 0) {
4267 throw new Error('Invalid string. Length must be a multiple of
4')
4270 // the number of equal signs (place holders)
4271 // if there are two placeholders, than the two characters before it
4272 // represent one byte
4273 // if there is only one, then the three characters before it represent
2 bytes
4274 // this is just a cheap hack to not do indexOf twice
4275 var len = b64.length
4276 placeHolders = '=' === b64.charAt(len -
2) ?
2 : '=' === b64.charAt(len -
1) ?
1 :
0
4278 // base64 is
4/
3 + up to two characters of the original data
4279 arr = new Arr(b64.length *
3 /
4 - placeHolders)
4281 // if there are placeholders, only get up to the last complete
4 chars
4282 l = placeHolders
> 0 ? b64.length -
4 : b64.length
4290 for (i =
0, j =
0; i < l; i +=
4, j +=
3) {
4291 tmp = (decode(b64.charAt(i)) <<
18) | (decode(b64.charAt(i +
1)) <<
12) | (decode(b64.charAt(i +
2)) <<
6) | decode(b64.charAt(i +
3))
4292 push((tmp &
0xFF0000)
>> 16)
4293 push((tmp &
0xFF00)
>> 8)
4297 if (placeHolders ===
2) {
4298 tmp = (decode(b64.charAt(i)) <<
2) | (decode(b64.charAt(i +
1))
>> 4)
4300 } else if (placeHolders ===
1) {
4301 tmp = (decode(b64.charAt(i)) <<
10) | (decode(b64.charAt(i +
1)) <<
4) | (decode(b64.charAt(i +
2))
>> 2)
4302 push((tmp
>> 8) &
0xFF)
4309 function uint8ToBase64 (uint8) {
4311 extraBytes = uint8.length %
3, // if we have
1 byte left, pad
2 bytes
4315 function encode (num) {
4316 return lookup.charAt(num)
4319 function tripletToBase64 (num) {
4320 return encode(num
>> 18 &
0x3F) + encode(num
>> 12 &
0x3F) + encode(num
>> 6 &
0x3F) + encode(num &
0x3F)
4323 // go through the array every three bytes, we'll deal with trailing stuff later
4324 for (i =
0, length = uint8.length - extraBytes; i < length; i +=
3) {
4325 temp = (uint8[i] <<
16) + (uint8[i +
1] <<
8) + (uint8[i +
2])
4326 output += tripletToBase64(temp)
4329 // pad the end with zeros, but make sure to not forget the extra bytes
4330 switch (extraBytes) {
4332 temp = uint8[uint8.length -
1]
4333 output += encode(temp
>> 2)
4334 output += encode((temp <<
4) &
0x3F)
4338 temp = (uint8[uint8.length -
2] <<
8) + (uint8[uint8.length -
1])
4339 output += encode(temp
>> 10)
4340 output += encode((temp
>> 4) &
0x3F)
4341 output += encode((temp <<
2) &
0x3F)
4349 exports.toByteArray = b64ToByteArray
4350 exports.fromByteArray = uint8ToBase64
4351 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4353 },{}],
9:[function(require,module,exports){
4354 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4356 var eLen = nBytes *
8 - mLen -
1
4357 var eMax = (
1 << eLen) -
1
4358 var eBias = eMax
>> 1
4360 var i = isLE ? (nBytes -
1) :
0
4361 var d = isLE ? -
1 :
1
4362 var s = buffer[offset + i]
4366 e = s & ((
1 << (-nBits)) -
1)
4369 for (; nBits
> 0; e = e *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4371 m = e & ((
1 << (-nBits)) -
1)
4374 for (; nBits
> 0; m = m *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4378 } else if (e === eMax) {
4379 return m ? NaN : ((s ? -
1 :
1) * Infinity)
4381 m = m + Math.pow(
2, mLen)
4384 return (s ? -
1 :
1) * m * Math.pow(
2, e - mLen)
4387 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4389 var eLen = nBytes *
8 - mLen -
1
4390 var eMax = (
1 << eLen) -
1
4391 var eBias = eMax
>> 1
4392 var rt = (mLen ===
23 ? Math.pow(
2, -
24) - Math.pow(
2, -
77) :
0)
4393 var i = isLE ?
0 : (nBytes -
1)
4394 var d = isLE ?
1 : -
1
4395 var s = value <
0 || (value ===
0 &&
1 / value <
0) ?
1 :
0
4397 value = Math.abs(value)
4399 if (isNaN(value) || value === Infinity) {
4400 m = isNaN(value) ?
1 :
0
4403 e = Math.floor(Math.log(value) / Math.LN2)
4404 if (value * (c = Math.pow(
2, -e)) <
1) {
4408 if (e + eBias
>=
1) {
4411 value += rt * Math.pow(
2,
1 - eBias)
4413 if (value * c
>=
2) {
4418 if (e + eBias
>= eMax) {
4421 } else if (e + eBias
>=
1) {
4422 m = (value * c -
1) * Math.pow(
2, mLen)
4425 m = value * Math.pow(
2, eBias -
1) * Math.pow(
2, mLen)
4430 for (; mLen
>=
8; buffer[offset + i] = m &
0xff, i += d, m /=
256, mLen -=
8) {}
4434 for (; eLen
> 0; buffer[offset + i] = e &
0xff, i += d, e /=
256, eLen -=
8) {}
4436 buffer[offset + i - d] |= s *
128
4439 },{}],
10:[function(require,module,exports){
4445 var isArray = Array.isArray;
4451 var str = Object.prototype.toString;
4454 * Whether or not the given `val`
4461 * isArray(arguments);
4466 * @param {mixed} val
4470 module.exports = isArray || function (val) {
4471 return !! val && '[object Array]' == str.call(val);
4474 },{}],
11:[function(require,module,exports){
4475 // Copyright Joyent, Inc. and other Node contributors.
4477 // Permission is hereby granted, free of charge, to any person obtaining a
4478 // copy of this software and associated documentation files (the
4479 // "Software"), to deal in the Software without restriction, including
4480 // without limitation the rights to use, copy, modify, merge, publish,
4481 // distribute, sublicense, and/or sell copies of the Software, and to permit
4482 // persons to whom the Software is furnished to do so, subject to the
4483 // following conditions:
4485 // The above copyright notice and this permission notice shall be included
4486 // in all copies or substantial portions of the Software.
4488 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4489 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4490 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4491 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4492 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4493 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4494 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4496 function EventEmitter() {
4497 this._events = this._events || {};
4498 this._maxListeners = this._maxListeners || undefined;
4500 module.exports = EventEmitter;
4502 // Backwards-compat with node
0.10.x
4503 EventEmitter.EventEmitter = EventEmitter;
4505 EventEmitter.prototype._events = undefined;
4506 EventEmitter.prototype._maxListeners = undefined;
4508 // By default EventEmitters will print a warning if more than
10 listeners are
4509 // added to it. This is a useful default which helps finding memory leaks.
4510 EventEmitter.defaultMaxListeners =
10;
4512 // Obviously not all Emitters should be limited to
10. This function allows
4513 // that to be increased. Set to zero for unlimited.
4514 EventEmitter.prototype.setMaxListeners = function(n) {
4515 if (!isNumber(n) || n <
0 || isNaN(n))
4516 throw TypeError('n must be a positive number');
4517 this._maxListeners = n;
4521 EventEmitter.prototype.emit = function(type) {
4522 var er, handler, len, args, i, listeners;
4527 // If there is no 'error' event listener then throw.
4528 if (type === 'error') {
4529 if (!this._events.error ||
4530 (isObject(this._events.error) && !this._events.error.length)) {
4532 if (er instanceof Error) {
4533 throw er; // Unhandled 'error' event
4535 throw TypeError('Uncaught, unspecified "error" event.');
4539 handler = this._events[type];
4541 if (isUndefined(handler))
4544 if (isFunction(handler)) {
4545 switch (arguments.length) {
4551 handler.call(this, arguments[
1]);
4554 handler.call(this, arguments[
1], arguments[
2]);
4558 len = arguments.length;
4559 args = new Array(len -
1);
4560 for (i =
1; i < len; i++)
4561 args[i -
1] = arguments[i];
4562 handler.apply(this, args);
4564 } else if (isObject(handler)) {
4565 len = arguments.length;
4566 args = new Array(len -
1);
4567 for (i =
1; i < len; i++)
4568 args[i -
1] = arguments[i];
4570 listeners = handler.slice();
4571 len = listeners.length;
4572 for (i =
0; i < len; i++)
4573 listeners[i].apply(this, args);
4579 EventEmitter.prototype.addListener = function(type, listener) {
4582 if (!isFunction(listener))
4583 throw TypeError('listener must be a function');
4588 // To avoid recursion in the case that type === "newListener"! Before
4589 // adding it to the listeners, first emit "newListener".
4590 if (this._events.newListener)
4591 this.emit('newListener', type,
4592 isFunction(listener.listener) ?
4593 listener.listener : listener);
4595 if (!this._events[type])
4596 // Optimize the case of one listener. Don't need the extra array object.
4597 this._events[type] = listener;
4598 else if (isObject(this._events[type]))
4599 // If we've already got an array, just append.
4600 this._events[type].push(listener);
4602 // Adding the second element, need to change to array.
4603 this._events[type] = [this._events[type], listener];
4605 // Check for listener leak
4606 if (isObject(this._events[type]) && !this._events[type].warned) {
4608 if (!isUndefined(this._maxListeners)) {
4609 m = this._maxListeners;
4611 m = EventEmitter.defaultMaxListeners;
4614 if (m && m
> 0 && this._events[type].length
> m) {
4615 this._events[type].warned = true;
4616 console.error('(node) warning: possible EventEmitter memory ' +
4617 'leak detected. %d listeners added. ' +
4618 'Use emitter.setMaxListeners() to increase limit.',
4619 this._events[type].length);
4620 if (typeof console.trace === 'function') {
4621 // not supported in IE
10
4630 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4632 EventEmitter.prototype.once = function(type, listener) {
4633 if (!isFunction(listener))
4634 throw TypeError('listener must be a function');
4639 this.removeListener(type, g);
4643 listener.apply(this, arguments);
4647 g.listener = listener;
4653 // emits a 'removeListener' event iff the listener was removed
4654 EventEmitter.prototype.removeListener = function(type, listener) {
4655 var list, position, length, i;
4657 if (!isFunction(listener))
4658 throw TypeError('listener must be a function');
4660 if (!this._events || !this._events[type])
4663 list = this._events[type];
4664 length = list.length;
4667 if (list === listener ||
4668 (isFunction(list.listener) && list.listener === listener)) {
4669 delete this._events[type];
4670 if (this._events.removeListener)
4671 this.emit('removeListener', type, listener);
4673 } else if (isObject(list)) {
4674 for (i = length; i--
> 0;) {
4675 if (list[i] === listener ||
4676 (list[i].listener && list[i].listener === listener)) {
4685 if (list.length ===
1) {
4687 delete this._events[type];
4689 list.splice(position,
1);
4692 if (this._events.removeListener)
4693 this.emit('removeListener', type, listener);
4699 EventEmitter.prototype.removeAllListeners = function(type) {
4705 // not listening for removeListener, no need to emit
4706 if (!this._events.removeListener) {
4707 if (arguments.length ===
0)
4709 else if (this._events[type])
4710 delete this._events[type];
4714 // emit removeListener for all listeners on all events
4715 if (arguments.length ===
0) {
4716 for (key in this._events) {
4717 if (key === 'removeListener') continue;
4718 this.removeAllListeners(key);
4720 this.removeAllListeners('removeListener');
4725 listeners = this._events[type];
4727 if (isFunction(listeners)) {
4728 this.removeListener(type, listeners);
4731 while (listeners.length)
4732 this.removeListener(type, listeners[listeners.length -
1]);
4734 delete this._events[type];
4739 EventEmitter.prototype.listeners = function(type) {
4741 if (!this._events || !this._events[type])
4743 else if (isFunction(this._events[type]))
4744 ret = [this._events[type]];
4746 ret = this._events[type].slice();
4750 EventEmitter.listenerCount = function(emitter, type) {
4752 if (!emitter._events || !emitter._events[type])
4754 else if (isFunction(emitter._events[type]))
4757 ret = emitter._events[type].length;
4761 function isFunction(arg) {
4762 return typeof arg === 'function';
4765 function isNumber(arg) {
4766 return typeof arg === 'number';
4769 function isObject(arg) {
4770 return typeof arg === 'object' && arg !== null;
4773 function isUndefined(arg) {
4774 return arg === void
0;
4777 },{}],
12:[function(require,module,exports){
4778 if (typeof Object.create === 'function') {
4779 // implementation from standard node.js 'util' module
4780 module.exports = function inherits(ctor, superCtor) {
4781 ctor.super_ = superCtor
4782 ctor.prototype = Object.create(superCtor.prototype, {
4792 // old school shim for old browsers
4793 module.exports = function inherits(ctor, superCtor) {
4794 ctor.super_ = superCtor
4795 var TempCtor = function () {}
4796 TempCtor.prototype = superCtor.prototype
4797 ctor.prototype = new TempCtor()
4798 ctor.prototype.constructor = ctor
4802 },{}],
13:[function(require,module,exports){
4803 module.exports = Array.isArray || function (arr) {
4804 return Object.prototype.toString.call(arr) == '[object Array]';
4807 },{}],
14:[function(require,module,exports){
4808 // shim for using process in browser
4810 var process = module.exports = {};
4812 var draining = false;
4814 var queueIndex = -
1;
4816 function cleanUpNextTick() {
4818 if (currentQueue.length) {
4819 queue = currentQueue.concat(queue);
4828 function drainQueue() {
4832 var timeout = setTimeout(cleanUpNextTick);
4835 var len = queue.length;
4837 currentQueue = queue;
4839 while (++queueIndex < len) {
4840 currentQueue[queueIndex].run();
4845 currentQueue = null;
4847 clearTimeout(timeout);
4850 process.nextTick = function (fun) {
4851 var args = new Array(arguments.length -
1);
4852 if (arguments.length
> 1) {
4853 for (var i =
1; i < arguments.length; i++) {
4854 args[i -
1] = arguments[i];
4857 queue.push(new Item(fun, args));
4858 if (queue.length ===
1 && !draining) {
4859 setTimeout(drainQueue,
0);
4863 // v8 likes predictible objects
4864 function Item(fun, array) {
4868 Item.prototype.run = function () {
4869 this.fun.apply(null, this.array);
4871 process.title = 'browser';
4872 process.browser = true;
4875 process.version = ''; // empty string to avoid regexp issues
4876 process.versions = {};
4881 process.addListener = noop;
4882 process.once = noop;
4884 process.removeListener = noop;
4885 process.removeAllListeners = noop;
4886 process.emit = noop;
4888 process.binding = function (name) {
4889 throw new Error('process.binding is not supported');
4893 process.cwd = function () { return '/' };
4894 process.chdir = function (dir) {
4895 throw new Error('process.chdir is not supported');
4897 process.umask = function() { return
0; };
4899 },{}],
15:[function(require,module,exports){
4900 module.exports = require(
"./lib/_stream_duplex.js")
4902 },{
"./lib/_stream_duplex.js":
16}],
16:[function(require,module,exports){
4903 (function (process){
4904 // Copyright Joyent, Inc. and other Node contributors.
4906 // Permission is hereby granted, free of charge, to any person obtaining a
4907 // copy of this software and associated documentation files (the
4908 //
"Software"), to deal in the Software without restriction, including
4909 // without limitation the rights to use, copy, modify, merge, publish,
4910 // distribute, sublicense, and/or sell copies of the Software, and to permit
4911 // persons to whom the Software is furnished to do so, subject to the
4912 // following conditions:
4914 // The above copyright notice and this permission notice shall be included
4915 // in all copies or substantial portions of the Software.
4917 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4918 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4919 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4920 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4921 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4922 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4923 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4925 // a duplex stream is just a stream that is both readable and writable.
4926 // Since JS doesn't have multiple prototypal inheritance, this class
4927 // prototypally inherits from Readable, and then parasitically from
4930 module.exports = Duplex;
4933 var objectKeys = Object.keys || function (obj) {
4935 for (var key in obj) keys.push(key);
4942 var util = require('core-util-is');
4943 util.inherits = require('inherits');
4946 var Readable = require('./_stream_readable');
4947 var Writable = require('./_stream_writable');
4949 util.inherits(Duplex, Readable);
4951 forEach(objectKeys(Writable.prototype), function(method) {
4952 if (!Duplex.prototype[method])
4953 Duplex.prototype[method] = Writable.prototype[method];
4956 function Duplex(options) {
4957 if (!(this instanceof Duplex))
4958 return new Duplex(options);
4960 Readable.call(this, options);
4961 Writable.call(this, options);
4963 if (options && options.readable === false)
4964 this.readable = false;
4966 if (options && options.writable === false)
4967 this.writable = false;
4969 this.allowHalfOpen = true;
4970 if (options && options.allowHalfOpen === false)
4971 this.allowHalfOpen = false;
4973 this.once('end', onend);
4976 // the no-half-open enforcer
4978 // if we allow half-open state, or if the writable side ended,
4980 if (this.allowHalfOpen || this._writableState.ended)
4983 // no more data can be written.
4984 // But allow more writes to happen in this tick.
4985 process.nextTick(this.end.bind(this));
4988 function forEach (xs, f) {
4989 for (var i =
0, l = xs.length; i < l; i++) {
4994 }).call(this,require('_process'))
4995 },{"./_stream_readable":
18,"./_stream_writable":
20,"_process":
14,"core-util-is":
21,"inherits":
12}],
17:[function(require,module,exports){
4996 // Copyright Joyent, Inc. and other Node contributors.
4998 // Permission is hereby granted, free of charge, to any person obtaining a
4999 // copy of this software and associated documentation files (the
5000 // "Software"), to deal in the Software without restriction, including
5001 // without limitation the rights to use, copy, modify, merge, publish,
5002 // distribute, sublicense, and/or sell copies of the Software, and to permit
5003 // persons to whom the Software is furnished to do so, subject to the
5004 // following conditions:
5006 // The above copyright notice and this permission notice shall be included
5007 // in all copies or substantial portions of the Software.
5009 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5010 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5011 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5012 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5013 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5014 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5015 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5017 // a passthrough stream.
5018 // basically just the most minimal sort of Transform stream.
5019 // Every written chunk gets output as-is.
5021 module.exports = PassThrough;
5023 var Transform = require('./_stream_transform');
5026 var util = require('core-util-is');
5027 util.inherits = require('inherits');
5030 util.inherits(PassThrough, Transform);
5032 function PassThrough(options) {
5033 if (!(this instanceof PassThrough))
5034 return new PassThrough(options);
5036 Transform.call(this, options);
5039 PassThrough.prototype._transform = function(chunk, encoding, cb) {
5043 },{"./_stream_transform":
19,"core-util-is":
21,"inherits":
12}],
18:[function(require,module,exports){
5044 (function (process){
5045 // Copyright Joyent, Inc. and other Node contributors.
5047 // Permission is hereby granted, free of charge, to any person obtaining a
5048 // copy of this software and associated documentation files (the
5049 // "Software"), to deal in the Software without restriction, including
5050 // without limitation the rights to use, copy, modify, merge, publish,
5051 // distribute, sublicense, and/or sell copies of the Software, and to permit
5052 // persons to whom the Software is furnished to do so, subject to the
5053 // following conditions:
5055 // The above copyright notice and this permission notice shall be included
5056 // in all copies or substantial portions of the Software.
5058 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5059 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5060 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5061 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5062 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5063 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5064 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5066 module.exports = Readable;
5069 var isArray = require('isarray');
5074 var Buffer = require('buffer').Buffer;
5077 Readable.ReadableState = ReadableState;
5079 var EE = require('events').EventEmitter;
5082 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5083 return emitter.listeners(type).length;
5087 var Stream = require('stream');
5090 var util = require('core-util-is');
5091 util.inherits = require('inherits');
5098 var debug = require('util');
5099 if (debug && debug.debuglog) {
5100 debug = debug.debuglog('stream');
5102 debug = function () {};
5107 util.inherits(Readable, Stream);
5109 function ReadableState(options, stream) {
5110 var Duplex = require('./_stream_duplex');
5112 options = options || {};
5114 // the point at which it stops calling _read() to fill the buffer
5115 // Note:
0 is a valid value, means "don't call _read preemptively ever"
5116 var hwm = options.highWaterMark;
5117 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
5118 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
5121 this.highWaterMark = ~~this.highWaterMark;
5126 this.pipesCount =
0;
5127 this.flowing = null;
5129 this.endEmitted = false;
5130 this.reading = false;
5132 // a flag to be able to tell if the onwrite cb is called immediately,
5133 // or on a later tick. We set this to true at first, because any
5134 // actions that shouldn't happen until "later" should generally also
5135 // not happen before the first write call.
5138 // whenever we return null, then we set a flag to say
5139 // that we're awaiting a 'readable' event emission.
5140 this.needReadable = false;
5141 this.emittedReadable = false;
5142 this.readableListening = false;
5145 // object stream flag. Used to make read(n) ignore n and to
5146 // make all the buffer merging and length checks go away
5147 this.objectMode = !!options.objectMode;
5149 if (stream instanceof Duplex)
5150 this.objectMode = this.objectMode || !!options.readableObjectMode;
5152 // Crypto is kind of old and crusty. Historically, its default string
5153 // encoding is 'binary' so we have to make this configurable.
5154 // Everything else in the universe uses 'utf8', though.
5155 this.defaultEncoding = options.defaultEncoding || 'utf8';
5157 // when piping, we only care about 'readable' events that happen
5158 // after read()ing all the bytes and not getting any pushback.
5159 this.ranOut = false;
5161 // the number of writers that are awaiting a drain event in .pipe()s
5162 this.awaitDrain =
0;
5164 // if true, a maybeReadMore has been scheduled
5165 this.readingMore = false;
5167 this.decoder = null;
5168 this.encoding = null;
5169 if (options.encoding) {
5171 StringDecoder = require('string_decoder/').StringDecoder;
5172 this.decoder = new StringDecoder(options.encoding);
5173 this.encoding = options.encoding;
5177 function Readable(options) {
5178 var Duplex = require('./_stream_duplex');
5180 if (!(this instanceof Readable))
5181 return new Readable(options);
5183 this._readableState = new ReadableState(options, this);
5186 this.readable = true;
5191 // Manually shove something into the read() buffer.
5192 // This returns true if the highWaterMark has not been hit yet,
5193 // similar to how Writable.write() returns true if you should
5194 // write() some more.
5195 Readable.prototype.push = function(chunk, encoding) {
5196 var state = this._readableState;
5198 if (util.isString(chunk) && !state.objectMode) {
5199 encoding = encoding || state.defaultEncoding;
5200 if (encoding !== state.encoding) {
5201 chunk = new Buffer(chunk, encoding);
5206 return readableAddChunk(this, state, chunk, encoding, false);
5209 // Unshift should *always* be something directly out of read()
5210 Readable.prototype.unshift = function(chunk) {
5211 var state = this._readableState;
5212 return readableAddChunk(this, state, chunk, '', true);
5215 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5216 var er = chunkInvalid(state, chunk);
5218 stream.emit('error', er);
5219 } else if (util.isNullOrUndefined(chunk)) {
5220 state.reading = false;
5222 onEofChunk(stream, state);
5223 } else if (state.objectMode || chunk && chunk.length
> 0) {
5224 if (state.ended && !addToFront) {
5225 var e = new Error('stream.push() after EOF');
5226 stream.emit('error', e);
5227 } else if (state.endEmitted && addToFront) {
5228 var e = new Error('stream.unshift() after end event');
5229 stream.emit('error', e);
5231 if (state.decoder && !addToFront && !encoding)
5232 chunk = state.decoder.write(chunk);
5235 state.reading = false;
5237 // if we want the data now, just emit it.
5238 if (state.flowing && state.length ===
0 && !state.sync) {
5239 stream.emit('data', chunk);
5242 // update the buffer info.
5243 state.length += state.objectMode ?
1 : chunk.length;
5245 state.buffer.unshift(chunk);
5247 state.buffer.push(chunk);
5249 if (state.needReadable)
5250 emitReadable(stream);
5253 maybeReadMore(stream, state);
5255 } else if (!addToFront) {
5256 state.reading = false;
5259 return needMoreData(state);
5264 // if it's past the high water mark, we can push in some more.
5265 // Also, if we have no data yet, we can stand some
5266 // more bytes. This is to work around cases where hwm=
0,
5267 // such as the repl. Also, if the push() triggered a
5268 // readable event, and the user called read(largeNumber) such that
5269 // needReadable was set, then we ought to push more, so that another
5270 // 'readable' event will be triggered.
5271 function needMoreData(state) {
5272 return !state.ended &&
5273 (state.needReadable ||
5274 state.length < state.highWaterMark ||
5275 state.length ===
0);
5278 // backwards compatibility.
5279 Readable.prototype.setEncoding = function(enc) {
5281 StringDecoder = require('string_decoder/').StringDecoder;
5282 this._readableState.decoder = new StringDecoder(enc);
5283 this._readableState.encoding = enc;
5287 // Don't raise the hwm
> 128MB
5288 var MAX_HWM =
0x800000;
5289 function roundUpToNextPowerOf2(n) {
5293 // Get the next highest power of
2
5295 for (var p =
1; p <
32; p <<=
1) n |= n
>> p;
5301 function howMuchToRead(n, state) {
5302 if (state.length ===
0 && state.ended)
5305 if (state.objectMode)
5306 return n ===
0 ?
0 :
1;
5308 if (isNaN(n) || util.isNull(n)) {
5309 // only flow one buffer at a time
5310 if (state.flowing && state.buffer.length)
5311 return state.buffer[
0].length;
5313 return state.length;
5319 // If we're asking for more than the target buffer level,
5320 // then raise the water mark. Bump up to the next highest
5321 // power of
2, to prevent increasing it excessively in tiny
5323 if (n
> state.highWaterMark)
5324 state.highWaterMark = roundUpToNextPowerOf2(n);
5326 // don't have that much. return null, unless we've ended.
5327 if (n
> state.length) {
5329 state.needReadable = true;
5332 return state.length;
5338 // you can override either this method, or the async _read(n) below.
5339 Readable.prototype.read = function(n) {
5341 var state = this._readableState;
5344 if (!util.isNumber(n) || n
> 0)
5345 state.emittedReadable = false;
5347 // if we're doing read(
0) to trigger a readable event, but we
5348 // already have a bunch of data in the buffer, then just trigger
5349 // the 'readable' event and move on.
5351 state.needReadable &&
5352 (state.length
>= state.highWaterMark || state.ended)) {
5353 debug('read: emitReadable', state.length, state.ended);
5354 if (state.length ===
0 && state.ended)
5361 n = howMuchToRead(n, state);
5363 // if we've ended, and we're now clear, then finish it up.
5364 if (n ===
0 && state.ended) {
5365 if (state.length ===
0)
5370 // All the actual chunk generation logic needs to be
5371 // *below* the call to _read. The reason is that in certain
5372 // synthetic stream cases, such as passthrough streams, _read
5373 // may be a completely synchronous operation which may change
5374 // the state of the read buffer, providing enough data when
5375 // before there was *not* enough.
5377 // So, the steps are:
5378 //
1. Figure out what the state of things will be after we do
5379 // a read from the buffer.
5381 //
2. If that resulting state will trigger a _read, then call _read.
5382 // Note that this may be asynchronous, or synchronous. Yes, it is
5383 // deeply ugly to write APIs this way, but that still doesn't mean
5384 // that the Readable class should behave improperly, as streams are
5385 // designed to be sync/async agnostic.
5386 // Take note if the _read call is sync or async (ie, if the read call
5387 // has returned yet), so that we know whether or not it's safe to emit
5390 //
3. Actually pull the requested chunks out of the buffer and return.
5392 // if we need a readable event, then we need to do some reading.
5393 var doRead = state.needReadable;
5394 debug('need readable', doRead);
5396 // if we currently have less than the highWaterMark, then also read some
5397 if (state.length ===
0 || state.length - n < state.highWaterMark) {
5399 debug('length less than watermark', doRead);
5402 // however, if we've ended, then there's no point, and if we're already
5403 // reading, then it's unnecessary.
5404 if (state.ended || state.reading) {
5406 debug('reading or ended', doRead);
5411 state.reading = true;
5413 // if the length is currently zero, then we *need* a readable event.
5414 if (state.length ===
0)
5415 state.needReadable = true;
5416 // call internal read method
5417 this._read(state.highWaterMark);
5421 // If _read pushed data synchronously, then `reading` will be false,
5422 // and we need to re-evaluate how much data we can return to the user.
5423 if (doRead && !state.reading)
5424 n = howMuchToRead(nOrig, state);
5428 ret = fromList(n, state);
5432 if (util.isNull(ret)) {
5433 state.needReadable = true;
5439 // If we have nothing in the buffer, then we want to know
5440 // as soon as we *do* get something into the buffer.
5441 if (state.length ===
0 && !state.ended)
5442 state.needReadable = true;
5444 // If we tried to read() past the EOF, then emit end on the next tick.
5445 if (nOrig !== n && state.ended && state.length ===
0)
5448 if (!util.isNull(ret))
5449 this.emit('data', ret);
5454 function chunkInvalid(state, chunk) {
5456 if (!util.isBuffer(chunk) &&
5457 !util.isString(chunk) &&
5458 !util.isNullOrUndefined(chunk) &&
5459 !state.objectMode) {
5460 er = new TypeError('Invalid non-string/buffer chunk');
5466 function onEofChunk(stream, state) {
5467 if (state.decoder && !state.ended) {
5468 var chunk = state.decoder.end();
5469 if (chunk && chunk.length) {
5470 state.buffer.push(chunk);
5471 state.length += state.objectMode ?
1 : chunk.length;
5476 // emit 'readable' now to make sure it gets picked up.
5477 emitReadable(stream);
5480 // Don't emit readable right away in sync mode, because this can trigger
5481 // another read() call =
> stack overflow. This way, it might trigger
5482 // a nextTick recursion warning, but that's not so bad.
5483 function emitReadable(stream) {
5484 var state = stream._readableState;
5485 state.needReadable = false;
5486 if (!state.emittedReadable) {
5487 debug('emitReadable', state.flowing);
5488 state.emittedReadable = true;
5490 process.nextTick(function() {
5491 emitReadable_(stream);
5494 emitReadable_(stream);
5498 function emitReadable_(stream) {
5499 debug('emit readable');
5500 stream.emit('readable');
5505 // at this point, the user has presumably seen the 'readable' event,
5506 // and called read() to consume some data. that may have triggered
5507 // in turn another _read(n) call, in which case reading = true if
5508 // it's in progress.
5509 // However, if we're not ended, or reading, and the length < hwm,
5510 // then go ahead and try to read some more preemptively.
5511 function maybeReadMore(stream, state) {
5512 if (!state.readingMore) {
5513 state.readingMore = true;
5514 process.nextTick(function() {
5515 maybeReadMore_(stream, state);
5520 function maybeReadMore_(stream, state) {
5521 var len = state.length;
5522 while (!state.reading && !state.flowing && !state.ended &&
5523 state.length < state.highWaterMark) {
5524 debug('maybeReadMore read
0');
5526 if (len === state.length)
5527 // didn't get any data, stop spinning.
5532 state.readingMore = false;
5535 // abstract method. to be overridden in specific implementation classes.
5536 // call cb(er, data) where data is <= n in length.
5537 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5538 // arbitrary, and perhaps not very meaningful.
5539 Readable.prototype._read = function(n) {
5540 this.emit('error', new Error('not implemented'));
5543 Readable.prototype.pipe = function(dest, pipeOpts) {
5545 var state = this._readableState;
5547 switch (state.pipesCount) {
5552 state.pipes = [state.pipes, dest];
5555 state.pipes.push(dest);
5558 state.pipesCount +=
1;
5559 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5561 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5562 dest !== process.stdout &&
5563 dest !== process.stderr;
5565 var endFn = doEnd ? onend : cleanup;
5566 if (state.endEmitted)
5567 process.nextTick(endFn);
5569 src.once('end', endFn);
5571 dest.on('unpipe', onunpipe);
5572 function onunpipe(readable) {
5574 if (readable === src) {
5584 // when the dest drains, it reduces the awaitDrain counter
5585 // on the source. This would be more elegant with a .once()
5586 // handler in flow(), but adding and removing repeatedly is
5588 var ondrain = pipeOnDrain(src);
5589 dest.on('drain', ondrain);
5591 function cleanup() {
5593 // cleanup event handlers once the pipe is broken
5594 dest.removeListener('close', onclose);
5595 dest.removeListener('finish', onfinish);
5596 dest.removeListener('drain', ondrain);
5597 dest.removeListener('error', onerror);
5598 dest.removeListener('unpipe', onunpipe);
5599 src.removeListener('end', onend);
5600 src.removeListener('end', cleanup);
5601 src.removeListener('data', ondata);
5603 // if the reader is waiting for a drain event from this
5604 // specific writer, then it would cause it to never start
5606 // So, if this is awaiting a drain, then we just call it now.
5607 // If we don't know, then assume that we are waiting for one.
5608 if (state.awaitDrain &&
5609 (!dest._writableState || dest._writableState.needDrain))
5613 src.on('data', ondata);
5614 function ondata(chunk) {
5616 var ret = dest.write(chunk);
5617 if (false === ret) {
5618 debug('false write response, pause',
5619 src._readableState.awaitDrain);
5620 src._readableState.awaitDrain++;
5625 // if the dest has an error, then stop piping into it.
5626 // however, don't suppress the throwing behavior for this.
5627 function onerror(er) {
5628 debug('onerror', er);
5630 dest.removeListener('error', onerror);
5631 if (EE.listenerCount(dest, 'error') ===
0)
5632 dest.emit('error', er);
5634 // This is a brutally ugly hack to make sure that our error handler
5635 // is attached before any userland ones. NEVER DO THIS.
5636 if (!dest._events || !dest._events.error)
5637 dest.on('error', onerror);
5638 else if (isArray(dest._events.error))
5639 dest._events.error.unshift(onerror);
5641 dest._events.error = [onerror, dest._events.error];
5645 // Both close and finish should trigger unpipe, but only once.
5646 function onclose() {
5647 dest.removeListener('finish', onfinish);
5650 dest.once('close', onclose);
5651 function onfinish() {
5653 dest.removeListener('close', onclose);
5656 dest.once('finish', onfinish);
5663 // tell the dest that it's being piped to
5664 dest.emit('pipe', src);
5666 // start the flow if it hasn't been started already.
5667 if (!state.flowing) {
5668 debug('pipe resume');
5675 function pipeOnDrain(src) {
5677 var state = src._readableState;
5678 debug('pipeOnDrain', state.awaitDrain);
5679 if (state.awaitDrain)
5681 if (state.awaitDrain ===
0 && EE.listenerCount(src, 'data')) {
5682 state.flowing = true;
5689 Readable.prototype.unpipe = function(dest) {
5690 var state = this._readableState;
5692 // if we're not piping anywhere, then do nothing.
5693 if (state.pipesCount ===
0)
5696 // just one destination. most common case.
5697 if (state.pipesCount ===
1) {
5698 // passed in one, but it's not the right one.
5699 if (dest && dest !== state.pipes)
5707 state.pipesCount =
0;
5708 state.flowing = false;
5710 dest.emit('unpipe', this);
5714 // slow case. multiple pipe destinations.
5718 var dests = state.pipes;
5719 var len = state.pipesCount;
5721 state.pipesCount =
0;
5722 state.flowing = false;
5724 for (var i =
0; i < len; i++)
5725 dests[i].emit('unpipe', this);
5729 // try to find the right one.
5730 var i = indexOf(state.pipes, dest);
5734 state.pipes.splice(i,
1);
5735 state.pipesCount -=
1;
5736 if (state.pipesCount ===
1)
5737 state.pipes = state.pipes[
0];
5739 dest.emit('unpipe', this);
5744 // set up data events if they are asked for
5745 // Ensure readable listeners eventually get something
5746 Readable.prototype.on = function(ev, fn) {
5747 var res = Stream.prototype.on.call(this, ev, fn);
5749 // If listening to data, and it has not explicitly been paused,
5750 // then call resume to start the flow of data on the next tick.
5751 if (ev === 'data' && false !== this._readableState.flowing) {
5755 if (ev === 'readable' && this.readable) {
5756 var state = this._readableState;
5757 if (!state.readableListening) {
5758 state.readableListening = true;
5759 state.emittedReadable = false;
5760 state.needReadable = true;
5761 if (!state.reading) {
5763 process.nextTick(function() {
5764 debug('readable nexttick read
0');
5767 } else if (state.length) {
5768 emitReadable(this, state);
5775 Readable.prototype.addListener = Readable.prototype.on;
5777 // pause() and resume() are remnants of the legacy readable stream API
5778 // If the user uses them, then switch into old mode.
5779 Readable.prototype.resume = function() {
5780 var state = this._readableState;
5781 if (!state.flowing) {
5783 state.flowing = true;
5784 if (!state.reading) {
5785 debug('resume read
0');
5788 resume(this, state);
5793 function resume(stream, state) {
5794 if (!state.resumeScheduled) {
5795 state.resumeScheduled = true;
5796 process.nextTick(function() {
5797 resume_(stream, state);
5802 function resume_(stream, state) {
5803 state.resumeScheduled = false;
5804 stream.emit('resume');
5806 if (state.flowing && !state.reading)
5810 Readable.prototype.pause = function() {
5811 debug('call pause flowing=%j', this._readableState.flowing);
5812 if (false !== this._readableState.flowing) {
5814 this._readableState.flowing = false;
5820 function flow(stream) {
5821 var state = stream._readableState;
5822 debug('flow', state.flowing);
5823 if (state.flowing) {
5825 var chunk = stream.read();
5826 } while (null !== chunk && state.flowing);
5830 // wrap an old-style stream as the async data source.
5831 // This is *not* part of the readable stream interface.
5832 // It is an ugly unfortunate mess of history.
5833 Readable.prototype.wrap = function(stream) {
5834 var state = this._readableState;
5838 stream.on('end', function() {
5839 debug('wrapped end');
5840 if (state.decoder && !state.ended) {
5841 var chunk = state.decoder.end();
5842 if (chunk && chunk.length)
5849 stream.on('data', function(chunk) {
5850 debug('wrapped data');
5852 chunk = state.decoder.write(chunk);
5853 if (!chunk || !state.objectMode && !chunk.length)
5856 var ret = self.push(chunk);
5863 // proxy all the other methods.
5864 // important when wrapping filters and duplexes.
5865 for (var i in stream) {
5866 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5867 this[i] = function(method) { return function() {
5868 return stream[method].apply(stream, arguments);
5873 // proxy certain important events.
5874 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5875 forEach(events, function(ev) {
5876 stream.on(ev, self.emit.bind(self, ev));
5879 // when we try to consume some more bytes, simply unpause the
5880 // underlying stream.
5881 self._read = function(n) {
5882 debug('wrapped _read', n);
5894 // exposed for testing purposes only.
5895 Readable._fromList = fromList;
5897 // Pluck off n bytes from an array of buffers.
5898 // Length is the combined lengths of all the buffers in the list.
5899 function fromList(n, state) {
5900 var list = state.buffer;
5901 var length = state.length;
5902 var stringMode = !!state.decoder;
5903 var objectMode = !!state.objectMode;
5906 // nothing in the list, definitely empty.
5907 if (list.length ===
0)
5912 else if (objectMode)
5914 else if (!n || n
>= length) {
5915 // read it all, truncate the array.
5917 ret = list.join('');
5919 ret = Buffer.concat(list, length);
5922 // read just some of it.
5923 if (n < list[
0].length) {
5924 // just take a part of the first list item.
5925 // slice is the same for buffers and strings.
5927 ret = buf.slice(
0, n);
5928 list[
0] = buf.slice(n);
5929 } else if (n === list[
0].length) {
5930 // first list is a perfect match
5934 // we have enough to cover it, but it spans past the first buffer.
5938 ret = new Buffer(n);
5941 for (var i =
0, l = list.length; i < l && c < n; i++) {
5943 var cpy = Math.min(n - c, buf.length);
5946 ret += buf.slice(
0, cpy);
5948 buf.copy(ret, c,
0, cpy);
5950 if (cpy < buf.length)
5951 list[
0] = buf.slice(cpy);
5963 function endReadable(stream) {
5964 var state = stream._readableState;
5966 // If we get here before consuming all the bytes, then that is a
5967 // bug in node. Should never happen.
5968 if (state.length
> 0)
5969 throw new Error('endReadable called on non-empty stream');
5971 if (!state.endEmitted) {
5973 process.nextTick(function() {
5974 // Check that we didn't get one last unshift.
5975 if (!state.endEmitted && state.length ===
0) {
5976 state.endEmitted = true;
5977 stream.readable = false;
5984 function forEach (xs, f) {
5985 for (var i =
0, l = xs.length; i < l; i++) {
5990 function indexOf (xs, x) {
5991 for (var i =
0, l = xs.length; i < l; i++) {
5992 if (xs[i] === x) return i;
5997 }).call(this,require('_process'))
5998 },{
"./_stream_duplex":
16,
"_process":
14,
"buffer":
7,
"core-util-is":
21,
"events":
11,
"inherits":
12,
"isarray":
13,
"stream":
26,
"string_decoder/":
27,
"util":
6}],
19:[function(require,module,exports){
5999 // Copyright Joyent, Inc. and other Node contributors.
6001 // Permission is hereby granted, free of charge, to any person obtaining a
6002 // copy of this software and associated documentation files (the
6003 //
"Software"), to deal in the Software without restriction, including
6004 // without limitation the rights to use, copy, modify, merge, publish,
6005 // distribute, sublicense, and/or sell copies of the Software, and to permit
6006 // persons to whom the Software is furnished to do so, subject to the
6007 // following conditions:
6009 // The above copyright notice and this permission notice shall be included
6010 // in all copies or substantial portions of the Software.
6012 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6013 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6014 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6015 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6016 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6017 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6018 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6021 // a transform stream is a readable/writable stream where you do
6022 // something with the data. Sometimes it's called a
"filter",
6023 // but that's not a great name for it, since that implies a thing where
6024 // some bits pass through, and others are simply ignored. (That would
6025 // be a valid example of a transform, of course.)
6027 // While the output is causally related to the input, it's not a
6028 // necessarily symmetric or synchronous transformation. For example,
6029 // a zlib stream might take multiple plain-text writes(), and then
6030 // emit a single compressed chunk some time in the future.
6032 // Here's how this works:
6034 // The Transform stream has all the aspects of the readable and writable
6035 // stream classes. When you write(chunk), that calls _write(chunk,cb)
6036 // internally, and returns false if there's a lot of pending writes
6037 // buffered up. When you call read(), that calls _read(n) until
6038 // there's enough pending readable data buffered up.
6040 // In a transform stream, the written data is placed in a buffer. When
6041 // _read(n) is called, it transforms the queued up data, calling the
6042 // buffered _write cb's as it consumes chunks. If consuming a single
6043 // written chunk would result in multiple output chunks, then the first
6044 // outputted bit calls the readcb, and subsequent chunks just go into
6045 // the read buffer, and will cause it to emit 'readable' if necessary.
6047 // This way, back-pressure is actually determined by the reading side,
6048 // since _read has to be called to start processing a new chunk. However,
6049 // a pathological inflate type of transform can cause excessive buffering
6050 // here. For example, imagine a stream where every byte of input is
6051 // interpreted as an integer from
0-
255, and then results in that many
6052 // bytes of output. Writing the
4 bytes {ff,ff,ff,ff} would result in
6053 //
1kb of data being output. In this case, you could write a very small
6054 // amount of input, and end up with a very large amount of output. In
6055 // such a pathological inflating mechanism, there'd be no way to tell
6056 // the system to stop doing the transform. A single
4MB write could
6057 // cause the system to run out of memory.
6059 // However, even in such a pathological case, only a single written chunk
6060 // would be consumed, and then the rest would wait (un-transformed) until
6061 // the results of the previous transformed chunk were consumed.
6063 module.exports = Transform;
6065 var Duplex = require('./_stream_duplex');
6068 var util = require('core-util-is');
6069 util.inherits = require('inherits');
6072 util.inherits(Transform, Duplex);
6075 function TransformState(options, stream) {
6076 this.afterTransform = function(er, data) {
6077 return afterTransform(stream, er, data);
6080 this.needTransform = false;
6081 this.transforming = false;
6082 this.writecb = null;
6083 this.writechunk = null;
6086 function afterTransform(stream, er, data) {
6087 var ts = stream._transformState;
6088 ts.transforming = false;
6090 var cb = ts.writecb;
6093 return stream.emit('error', new Error('no writecb in Transform class'));
6095 ts.writechunk = null;
6098 if (!util.isNullOrUndefined(data))
6104 var rs = stream._readableState;
6106 if (rs.needReadable || rs.length < rs.highWaterMark) {
6107 stream._read(rs.highWaterMark);
6112 function Transform(options) {
6113 if (!(this instanceof Transform))
6114 return new Transform(options);
6116 Duplex.call(this, options);
6118 this._transformState = new TransformState(options, this);
6120 // when the writable side finishes, then flush out anything remaining.
6123 // start out asking for a readable event once data is transformed.
6124 this._readableState.needReadable = true;
6126 // we have implemented the _read method, and done the other things
6127 // that Readable wants before the first _read call, so unset the
6129 this._readableState.sync = false;
6131 this.once('prefinish', function() {
6132 if (util.isFunction(this._flush))
6133 this._flush(function(er) {
6141 Transform.prototype.push = function(chunk, encoding) {
6142 this._transformState.needTransform = false;
6143 return Duplex.prototype.push.call(this, chunk, encoding);
6146 // This is the part where you do stuff!
6147 // override this function in implementation classes.
6148 // 'chunk' is an input chunk.
6150 // Call `push(newChunk)` to pass along transformed output
6151 // to the readable side. You may call 'push' zero or more times.
6153 // Call `cb(err)` when you are done with this chunk. If you pass
6154 // an error, then that'll put the hurt on the whole operation. If you
6155 // never call cb(), then you'll never get another chunk.
6156 Transform.prototype._transform = function(chunk, encoding, cb) {
6157 throw new Error('not implemented');
6160 Transform.prototype._write = function(chunk, encoding, cb) {
6161 var ts = this._transformState;
6163 ts.writechunk = chunk;
6164 ts.writeencoding = encoding;
6165 if (!ts.transforming) {
6166 var rs = this._readableState;
6167 if (ts.needTransform ||
6169 rs.length < rs.highWaterMark)
6170 this._read(rs.highWaterMark);
6174 // Doesn't matter what the args are here.
6175 // _transform does all the work.
6176 // That we got here means that the readable side wants more data.
6177 Transform.prototype._read = function(n) {
6178 var ts = this._transformState;
6180 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6181 ts.transforming = true;
6182 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6184 // mark that we need a transform, so that any data that comes in
6185 // will get processed, now that we've asked for it.
6186 ts.needTransform = true;
6191 function done(stream, er) {
6193 return stream.emit('error', er);
6195 // if there's nothing in the write buffer, then that means
6196 // that nothing more will ever be provided
6197 var ws = stream._writableState;
6198 var ts = stream._transformState;
6201 throw new Error('calling transform done when ws.length !=
0');
6203 if (ts.transforming)
6204 throw new Error('calling transform done when still transforming');
6206 return stream.push(null);
6209 },{"./_stream_duplex":
16,"core-util-is":
21,"inherits":
12}],
20:[function(require,module,exports){
6210 (function (process){
6211 // Copyright Joyent, Inc. and other Node contributors.
6213 // Permission is hereby granted, free of charge, to any person obtaining a
6214 // copy of this software and associated documentation files (the
6215 // "Software"), to deal in the Software without restriction, including
6216 // without limitation the rights to use, copy, modify, merge, publish,
6217 // distribute, sublicense, and/or sell copies of the Software, and to permit
6218 // persons to whom the Software is furnished to do so, subject to the
6219 // following conditions:
6221 // The above copyright notice and this permission notice shall be included
6222 // in all copies or substantial portions of the Software.
6224 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6225 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6226 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6227 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6228 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6229 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6230 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6232 // A bit simpler than readable streams.
6233 // Implement an async ._write(chunk, cb), and it'll handle all
6234 // the drain event emission and buffering.
6236 module.exports = Writable;
6239 var Buffer = require('buffer').Buffer;
6242 Writable.WritableState = WritableState;
6246 var util = require('core-util-is');
6247 util.inherits = require('inherits');
6250 var Stream = require('stream');
6252 util.inherits(Writable, Stream);
6254 function WriteReq(chunk, encoding, cb) {
6256 this.encoding = encoding;
6260 function WritableState(options, stream) {
6261 var Duplex = require('./_stream_duplex');
6263 options = options || {};
6265 // the point at which write() starts returning false
6266 // Note:
0 is a valid value, means that we always return false if
6267 // the entire buffer is not flushed immediately on write()
6268 var hwm = options.highWaterMark;
6269 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
6270 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
6272 // object stream flag to indicate whether or not this stream
6273 // contains buffers or objects.
6274 this.objectMode = !!options.objectMode;
6276 if (stream instanceof Duplex)
6277 this.objectMode = this.objectMode || !!options.writableObjectMode;
6280 this.highWaterMark = ~~this.highWaterMark;
6282 this.needDrain = false;
6283 // at the start of calling end()
6284 this.ending = false;
6285 // when end() has been called, and returned
6287 // when 'finish' is emitted
6288 this.finished = false;
6290 // should we decode strings into buffers before passing to _write?
6291 // this is here so that some node-core streams can optimize string
6292 // handling at a lower level.
6293 var noDecode = options.decodeStrings === false;
6294 this.decodeStrings = !noDecode;
6296 // Crypto is kind of old and crusty. Historically, its default string
6297 // encoding is 'binary' so we have to make this configurable.
6298 // Everything else in the universe uses 'utf8', though.
6299 this.defaultEncoding = options.defaultEncoding || 'utf8';
6301 // not an actual buffer we keep track of, but a measurement
6302 // of how much we're waiting to get pushed to some underlying
6306 // a flag to see when we're in the middle of a write.
6307 this.writing = false;
6309 // when true all writes will be buffered until .uncork() call
6312 // a flag to be able to tell if the onwrite cb is called immediately,
6313 // or on a later tick. We set this to true at first, because any
6314 // actions that shouldn't happen until "later" should generally also
6315 // not happen before the first write call.
6318 // a flag to know if we're processing previously buffered items, which
6319 // may call the _write() callback in the same tick, so that we don't
6320 // end up in an overlapped onwrite situation.
6321 this.bufferProcessing = false;
6323 // the callback that's passed to _write(chunk,cb)
6324 this.onwrite = function(er) {
6325 onwrite(stream, er);
6328 // the callback that the user supplies to write(chunk,encoding,cb)
6329 this.writecb = null;
6331 // the amount that is being written when _write is called.
6336 // number of pending user-supplied write callbacks
6337 // this must be
0 before 'finish' can be emitted
6340 // emit prefinish if the only thing we're waiting for is _write cbs
6341 // This is relevant for synchronous Transform streams
6342 this.prefinished = false;
6344 // True if the error was already emitted and should not be thrown again
6345 this.errorEmitted = false;
6348 function Writable(options) {
6349 var Duplex = require('./_stream_duplex');
6351 // Writable ctor is applied to Duplexes, though they're not
6352 // instanceof Writable, they're instanceof Readable.
6353 if (!(this instanceof Writable) && !(this instanceof Duplex))
6354 return new Writable(options);
6356 this._writableState = new WritableState(options, this);
6359 this.writable = true;
6364 // Otherwise people can pipe Writable streams, which is just wrong.
6365 Writable.prototype.pipe = function() {
6366 this.emit('error', new Error('Cannot pipe. Not readable.'));
6370 function writeAfterEnd(stream, state, cb) {
6371 var er = new Error('write after end');
6372 // TODO: defer error events consistently everywhere, not just the cb
6373 stream.emit('error', er);
6374 process.nextTick(function() {
6379 // If we get something that is not a buffer, string, null, or undefined,
6380 // and we're not in objectMode, then that's an error.
6381 // Otherwise stream chunks are all considered to be of length=
1, and the
6382 // watermarks determine how many objects to keep in the buffer, rather than
6383 // how many bytes or characters.
6384 function validChunk(stream, state, chunk, cb) {
6386 if (!util.isBuffer(chunk) &&
6387 !util.isString(chunk) &&
6388 !util.isNullOrUndefined(chunk) &&
6389 !state.objectMode) {
6390 var er = new TypeError('Invalid non-string/buffer chunk');
6391 stream.emit('error', er);
6392 process.nextTick(function() {
6400 Writable.prototype.write = function(chunk, encoding, cb) {
6401 var state = this._writableState;
6404 if (util.isFunction(encoding)) {
6409 if (util.isBuffer(chunk))
6410 encoding = 'buffer';
6412 encoding = state.defaultEncoding;
6414 if (!util.isFunction(cb))
6418 writeAfterEnd(this, state, cb);
6419 else if (validChunk(this, state, chunk, cb)) {
6421 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6427 Writable.prototype.cork = function() {
6428 var state = this._writableState;
6433 Writable.prototype.uncork = function() {
6434 var state = this._writableState;
6439 if (!state.writing &&
6442 !state.bufferProcessing &&
6443 state.buffer.length)
6444 clearBuffer(this, state);
6448 function decodeChunk(state, chunk, encoding) {
6449 if (!state.objectMode &&
6450 state.decodeStrings !== false &&
6451 util.isString(chunk)) {
6452 chunk = new Buffer(chunk, encoding);
6457 // if we're already writing something, then just put this
6458 // in the queue, and wait our turn. Otherwise, call _write
6459 // If we return false, then we need a drain event, so set that flag.
6460 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6461 chunk = decodeChunk(state, chunk, encoding);
6462 if (util.isBuffer(chunk))
6463 encoding = 'buffer';
6464 var len = state.objectMode ?
1 : chunk.length;
6466 state.length += len;
6468 var ret = state.length < state.highWaterMark;
6469 // we must ensure that previous needDrain will not be reset to false.
6471 state.needDrain = true;
6473 if (state.writing || state.corked)
6474 state.buffer.push(new WriteReq(chunk, encoding, cb));
6476 doWrite(stream, state, false, len, chunk, encoding, cb);
6481 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6482 state.writelen = len;
6484 state.writing = true;
6487 stream._writev(chunk, state.onwrite);
6489 stream._write(chunk, encoding, state.onwrite);
6493 function onwriteError(stream, state, sync, er, cb) {
6495 process.nextTick(function() {
6504 stream._writableState.errorEmitted = true;
6505 stream.emit('error', er);
6508 function onwriteStateUpdate(state) {
6509 state.writing = false;
6510 state.writecb = null;
6511 state.length -= state.writelen;
6515 function onwrite(stream, er) {
6516 var state = stream._writableState;
6517 var sync = state.sync;
6518 var cb = state.writecb;
6520 onwriteStateUpdate(state);
6523 onwriteError(stream, state, sync, er, cb);
6525 // Check if we're actually ready to finish, but don't emit yet
6526 var finished = needFinish(stream, state);
6530 !state.bufferProcessing &&
6531 state.buffer.length) {
6532 clearBuffer(stream, state);
6536 process.nextTick(function() {
6537 afterWrite(stream, state, finished, cb);
6540 afterWrite(stream, state, finished, cb);
6545 function afterWrite(stream, state, finished, cb) {
6547 onwriteDrain(stream, state);
6550 finishMaybe(stream, state);
6553 // Must force callback to be called on nextTick, so that we don't
6554 // emit 'drain' before the write() consumer gets the 'false' return
6555 // value, and has a chance to attach a 'drain' listener.
6556 function onwriteDrain(stream, state) {
6557 if (state.length ===
0 && state.needDrain) {
6558 state.needDrain = false;
6559 stream.emit('drain');
6564 // if there's something in the buffer waiting, then process it
6565 function clearBuffer(stream, state) {
6566 state.bufferProcessing = true;
6568 if (stream._writev && state.buffer.length
> 1) {
6569 // Fast case, write everything using _writev()
6571 for (var c =
0; c < state.buffer.length; c++)
6572 cbs.push(state.buffer[c].callback);
6574 // count the one we are adding, as well.
6575 // TODO(isaacs) clean this up
6577 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6578 for (var i =
0; i < cbs.length; i++) {
6587 // Slow case, write chunks one-by-one
6588 for (var c =
0; c < state.buffer.length; c++) {
6589 var entry = state.buffer[c];
6590 var chunk = entry.chunk;
6591 var encoding = entry.encoding;
6592 var cb = entry.callback;
6593 var len = state.objectMode ?
1 : chunk.length;
6595 doWrite(stream, state, false, len, chunk, encoding, cb);
6597 // if we didn't call the onwrite immediately, then
6598 // it means that we need to wait until it does.
6599 // also, that means that the chunk and cb are currently
6600 // being processed, so move the buffer counter past them.
6601 if (state.writing) {
6607 if (c < state.buffer.length)
6608 state.buffer = state.buffer.slice(c);
6610 state.buffer.length =
0;
6613 state.bufferProcessing = false;
6616 Writable.prototype._write = function(chunk, encoding, cb) {
6617 cb(new Error('not implemented'));
6621 Writable.prototype._writev = null;
6623 Writable.prototype.end = function(chunk, encoding, cb) {
6624 var state = this._writableState;
6626 if (util.isFunction(chunk)) {
6630 } else if (util.isFunction(encoding)) {
6635 if (!util.isNullOrUndefined(chunk))
6636 this.write(chunk, encoding);
6638 // .end() fully uncorks
6644 // ignore unnecessary end() calls.
6645 if (!state.ending && !state.finished)
6646 endWritable(this, state, cb);
6650 function needFinish(stream, state) {
6651 return (state.ending &&
6652 state.length ===
0 &&
6657 function prefinish(stream, state) {
6658 if (!state.prefinished) {
6659 state.prefinished = true;
6660 stream.emit('prefinish');
6664 function finishMaybe(stream, state) {
6665 var need = needFinish(stream, state);
6667 if (state.pendingcb ===
0) {
6668 prefinish(stream, state);
6669 state.finished = true;
6670 stream.emit('finish');
6672 prefinish(stream, state);
6677 function endWritable(stream, state, cb) {
6678 state.ending = true;
6679 finishMaybe(stream, state);
6682 process.nextTick(cb);
6684 stream.once('finish', cb);
6689 }).call(this,require('_process'))
6690 },{
"./_stream_duplex":
16,
"_process":
14,
"buffer":
7,
"core-util-is":
21,
"inherits":
12,
"stream":
26}],
21:[function(require,module,exports){
6692 // Copyright Joyent, Inc. and other Node contributors.
6694 // Permission is hereby granted, free of charge, to any person obtaining a
6695 // copy of this software and associated documentation files (the
6696 //
"Software"), to deal in the Software without restriction, including
6697 // without limitation the rights to use, copy, modify, merge, publish,
6698 // distribute, sublicense, and/or sell copies of the Software, and to permit
6699 // persons to whom the Software is furnished to do so, subject to the
6700 // following conditions:
6702 // The above copyright notice and this permission notice shall be included
6703 // in all copies or substantial portions of the Software.
6705 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6706 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6707 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6708 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6709 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6710 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6711 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6713 // NOTE: These type checking functions intentionally don't use `instanceof`
6714 // because it is fragile and can be easily faked with `Object.create()`.
6715 function isArray(ar) {
6716 return Array.isArray(ar);
6718 exports.isArray = isArray;
6720 function isBoolean(arg) {
6721 return typeof arg === 'boolean';
6723 exports.isBoolean = isBoolean;
6725 function isNull(arg) {
6726 return arg === null;
6728 exports.isNull = isNull;
6730 function isNullOrUndefined(arg) {
6733 exports.isNullOrUndefined = isNullOrUndefined;
6735 function isNumber(arg) {
6736 return typeof arg === 'number';
6738 exports.isNumber = isNumber;
6740 function isString(arg) {
6741 return typeof arg === 'string';
6743 exports.isString = isString;
6745 function isSymbol(arg) {
6746 return typeof arg === 'symbol';
6748 exports.isSymbol = isSymbol;
6750 function isUndefined(arg) {
6751 return arg === void
0;
6753 exports.isUndefined = isUndefined;
6755 function isRegExp(re) {
6756 return isObject(re) && objectToString(re) === '[object RegExp]';
6758 exports.isRegExp = isRegExp;
6760 function isObject(arg) {
6761 return typeof arg === 'object' && arg !== null;
6763 exports.isObject = isObject;
6765 function isDate(d) {
6766 return isObject(d) && objectToString(d) === '[object Date]';
6768 exports.isDate = isDate;
6770 function isError(e) {
6771 return isObject(e) &&
6772 (objectToString(e) === '[object Error]' || e instanceof Error);
6774 exports.isError = isError;
6776 function isFunction(arg) {
6777 return typeof arg === 'function';
6779 exports.isFunction = isFunction;
6781 function isPrimitive(arg) {
6782 return arg === null ||
6783 typeof arg === 'boolean' ||
6784 typeof arg === 'number' ||
6785 typeof arg === 'string' ||
6786 typeof arg === 'symbol' || // ES6 symbol
6787 typeof arg === 'undefined';
6789 exports.isPrimitive = isPrimitive;
6791 function isBuffer(arg) {
6792 return Buffer.isBuffer(arg);
6794 exports.isBuffer = isBuffer;
6796 function objectToString(o) {
6797 return Object.prototype.toString.call(o);
6799 }).call(this,require(
"buffer").Buffer)
6800 },{
"buffer":
7}],
22:[function(require,module,exports){
6801 module.exports = require(
"./lib/_stream_passthrough.js")
6803 },{
"./lib/_stream_passthrough.js":
17}],
23:[function(require,module,exports){
6804 exports = module.exports = require('./lib/_stream_readable.js');
6805 exports.Stream = require('stream');
6806 exports.Readable = exports;
6807 exports.Writable = require('./lib/_stream_writable.js');
6808 exports.Duplex = require('./lib/_stream_duplex.js');
6809 exports.Transform = require('./lib/_stream_transform.js');
6810 exports.PassThrough = require('./lib/_stream_passthrough.js');
6812 },{
"./lib/_stream_duplex.js":
16,
"./lib/_stream_passthrough.js":
17,
"./lib/_stream_readable.js":
18,
"./lib/_stream_transform.js":
19,
"./lib/_stream_writable.js":
20,
"stream":
26}],
24:[function(require,module,exports){
6813 module.exports = require(
"./lib/_stream_transform.js")
6815 },{
"./lib/_stream_transform.js":
19}],
25:[function(require,module,exports){
6816 module.exports = require(
"./lib/_stream_writable.js")
6818 },{
"./lib/_stream_writable.js":
20}],
26:[function(require,module,exports){
6819 // Copyright Joyent, Inc. and other Node contributors.
6821 // Permission is hereby granted, free of charge, to any person obtaining a
6822 // copy of this software and associated documentation files (the
6823 //
"Software"), to deal in the Software without restriction, including
6824 // without limitation the rights to use, copy, modify, merge, publish,
6825 // distribute, sublicense, and/or sell copies of the Software, and to permit
6826 // persons to whom the Software is furnished to do so, subject to the
6827 // following conditions:
6829 // The above copyright notice and this permission notice shall be included
6830 // in all copies or substantial portions of the Software.
6832 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6833 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6834 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6835 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6836 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6837 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6838 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6840 module.exports = Stream;
6842 var EE = require('events').EventEmitter;
6843 var inherits = require('inherits');
6845 inherits(Stream, EE);
6846 Stream.Readable = require('readable-stream/readable.js');
6847 Stream.Writable = require('readable-stream/writable.js');
6848 Stream.Duplex = require('readable-stream/duplex.js');
6849 Stream.Transform = require('readable-stream/transform.js');
6850 Stream.PassThrough = require('readable-stream/passthrough.js');
6852 // Backwards-compat with node
0.4.x
6853 Stream.Stream = Stream;
6857 // old-style streams. Note that the pipe method (the only relevant
6858 // part of this class) is overridden in the Readable class.
6864 Stream.prototype.pipe = function(dest, options) {
6867 function ondata(chunk) {
6868 if (dest.writable) {
6869 if (false === dest.write(chunk) && source.pause) {
6875 source.on('data', ondata);
6877 function ondrain() {
6878 if (source.readable && source.resume) {
6883 dest.on('drain', ondrain);
6885 // If the 'end' option is not supplied, dest.end() will be called when
6886 // source gets the 'end' or 'close' events. Only dest.end() once.
6887 if (!dest._isStdio && (!options || options.end !== false)) {
6888 source.on('end', onend);
6889 source.on('close', onclose);
6892 var didOnEnd = false;
6894 if (didOnEnd) return;
6901 function onclose() {
6902 if (didOnEnd) return;
6905 if (typeof dest.destroy === 'function') dest.destroy();
6908 // don't leave dangling pipes when there are errors.
6909 function onerror(er) {
6911 if (EE.listenerCount(this, 'error') ===
0) {
6912 throw er; // Unhandled stream error in pipe.
6916 source.on('error', onerror);
6917 dest.on('error', onerror);
6919 // remove all the event listeners that were added.
6920 function cleanup() {
6921 source.removeListener('data', ondata);
6922 dest.removeListener('drain', ondrain);
6924 source.removeListener('end', onend);
6925 source.removeListener('close', onclose);
6927 source.removeListener('error', onerror);
6928 dest.removeListener('error', onerror);
6930 source.removeListener('end', cleanup);
6931 source.removeListener('close', cleanup);
6933 dest.removeListener('close', cleanup);
6936 source.on('end', cleanup);
6937 source.on('close', cleanup);
6939 dest.on('close', cleanup);
6941 dest.emit('pipe', source);
6943 // Allow for unix-like usage: A.pipe(B).pipe(C)
6947 },{
"events":
11,
"inherits":
12,
"readable-stream/duplex.js":
15,
"readable-stream/passthrough.js":
22,
"readable-stream/readable.js":
23,
"readable-stream/transform.js":
24,
"readable-stream/writable.js":
25}],
27:[function(require,module,exports){
6948 // Copyright Joyent, Inc. and other Node contributors.
6950 // Permission is hereby granted, free of charge, to any person obtaining a
6951 // copy of this software and associated documentation files (the
6952 //
"Software"), to deal in the Software without restriction, including
6953 // without limitation the rights to use, copy, modify, merge, publish,
6954 // distribute, sublicense, and/or sell copies of the Software, and to permit
6955 // persons to whom the Software is furnished to do so, subject to the
6956 // following conditions:
6958 // The above copyright notice and this permission notice shall be included
6959 // in all copies or substantial portions of the Software.
6961 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6962 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6963 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6964 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6965 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6966 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6967 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6969 var Buffer = require('buffer').Buffer;
6971 var isBufferEncoding = Buffer.isEncoding
6972 || function(encoding) {
6973 switch (encoding && encoding.toLowerCase()) {
6974 case 'hex': case 'utf8': case 'utf-
8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-
2': case 'utf16le': case 'utf-
16le': case 'raw': return true;
6975 default: return false;
6980 function assertEncoding(encoding) {
6981 if (encoding && !isBufferEncoding(encoding)) {
6982 throw new Error('Unknown encoding: ' + encoding);
6986 // StringDecoder provides an interface for efficiently splitting a series of
6987 // buffers into a series of JS strings without breaking apart multi-byte
6988 // characters. CESU-
8 is handled as part of the UTF-
8 encoding.
6990 // @TODO Handling all encodings inside a single object makes it very difficult
6991 // to reason about this code, so it should be split up in the future.
6992 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-
8 code
6993 // points as used by CESU-
8.
6994 var StringDecoder = exports.StringDecoder = function(encoding) {
6995 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6996 assertEncoding(encoding);
6997 switch (this.encoding) {
6999 // CESU-
8 represents each of Surrogate Pair by
3-bytes
7000 this.surrogateSize =
3;
7004 // UTF-
16 represents each of Surrogate Pair by
2-bytes
7005 this.surrogateSize =
2;
7006 this.detectIncompleteChar = utf16DetectIncompleteChar;
7009 // Base-
64 stores
3 bytes in
4 chars, and pads the remainder.
7010 this.surrogateSize =
3;
7011 this.detectIncompleteChar = base64DetectIncompleteChar;
7014 this.write = passThroughWrite;
7018 // Enough space to store all bytes of a single character. UTF-
8 needs
4
7019 // bytes, but CESU-
8 may require up to
6 (
3 bytes per surrogate).
7020 this.charBuffer = new Buffer(
6);
7021 // Number of bytes received for the current incomplete multi-byte character.
7022 this.charReceived =
0;
7023 // Number of bytes expected for the current incomplete multi-byte character.
7024 this.charLength =
0;
7028 // write decodes the given buffer and returns it as JS string that is
7029 // guaranteed to not contain any partial multi-byte characters. Any partial
7030 // character found at the end of the buffer is buffered up, and will be
7031 // returned when calling write again with the remaining bytes.
7033 // Note: Converting a Buffer containing an orphan surrogate to a String
7034 // currently works, but converting a String to a Buffer (via `new Buffer`, or
7035 // Buffer#write) will replace incomplete surrogates with the unicode
7036 // replacement character. See https://codereview.chromium.org/
121173009/ .
7037 StringDecoder.prototype.write = function(buffer) {
7039 // if our last write ended with an incomplete multibyte character
7040 while (this.charLength) {
7041 // determine how many remaining bytes this buffer has to offer for this char
7042 var available = (buffer.length
>= this.charLength - this.charReceived) ?
7043 this.charLength - this.charReceived :
7046 // add the new bytes to the char buffer
7047 buffer.copy(this.charBuffer, this.charReceived,
0, available);
7048 this.charReceived += available;
7050 if (this.charReceived < this.charLength) {
7051 // still not enough chars in this buffer? wait for more ...
7055 // remove bytes belonging to the current character from the buffer
7056 buffer = buffer.slice(available, buffer.length);
7058 // get the character that was split
7059 charStr = this.charBuffer.slice(
0, this.charLength).toString(this.encoding);
7061 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
7062 var charCode = charStr.charCodeAt(charStr.length -
1);
7063 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
7064 this.charLength += this.surrogateSize;
7068 this.charReceived = this.charLength =
0;
7070 // if there are no more bytes in this buffer, just emit our char
7071 if (buffer.length ===
0) {
7077 // determine and set charLength / charReceived
7078 this.detectIncompleteChar(buffer);
7080 var end = buffer.length;
7081 if (this.charLength) {
7082 // buffer the incomplete character bytes we got
7083 buffer.copy(this.charBuffer,
0, buffer.length - this.charReceived, end);
7084 end -= this.charReceived;
7087 charStr += buffer.toString(this.encoding,
0, end);
7089 var end = charStr.length -
1;
7090 var charCode = charStr.charCodeAt(end);
7091 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
7092 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
7093 var size = this.surrogateSize;
7094 this.charLength += size;
7095 this.charReceived += size;
7096 this.charBuffer.copy(this.charBuffer, size,
0, size);
7097 buffer.copy(this.charBuffer,
0,
0, size);
7098 return charStr.substring(
0, end);
7101 // or just emit the charStr
7105 // detectIncompleteChar determines if there is an incomplete UTF-
8 character at
7106 // the end of the given buffer. If so, it sets this.charLength to the byte
7107 // length that character, and sets this.charReceived to the number of bytes
7108 // that are available for this character.
7109 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7110 // determine how many bytes we have to check at the end of this buffer
7111 var i = (buffer.length
>=
3) ?
3 : buffer.length;
7113 // Figure out if one of the last i bytes of our buffer announces an
7115 for (; i
> 0; i--) {
7116 var c = buffer[buffer.length - i];
7118 // See http://en.wikipedia.org/wiki/UTF-
8#Description
7121 if (i ==
1 && c
>> 5 ==
0x06) {
7122 this.charLength =
2;
7127 if (i <=
2 && c
>> 4 ==
0x0E) {
7128 this.charLength =
3;
7133 if (i <=
3 && c
>> 3 ==
0x1E) {
7134 this.charLength =
4;
7138 this.charReceived = i;
7141 StringDecoder.prototype.end = function(buffer) {
7143 if (buffer && buffer.length)
7144 res = this.write(buffer);
7146 if (this.charReceived) {
7147 var cr = this.charReceived;
7148 var buf = this.charBuffer;
7149 var enc = this.encoding;
7150 res += buf.slice(
0, cr).toString(enc);
7156 function passThroughWrite(buffer) {
7157 return buffer.toString(this.encoding);
7160 function utf16DetectIncompleteChar(buffer) {
7161 this.charReceived = buffer.length %
2;
7162 this.charLength = this.charReceived ?
2 :
0;
7165 function base64DetectIncompleteChar(buffer) {
7166 this.charReceived = buffer.length %
3;
7167 this.charLength = this.charReceived ?
3 :
0;
7170 },{
"buffer":
7}],
28:[function(require,module,exports){
7171 module.exports = function isBuffer(arg) {
7172 return arg && typeof arg === 'object'
7173 && typeof arg.copy === 'function'
7174 && typeof arg.fill === 'function'
7175 && typeof arg.readUInt8 === 'function';
7177 },{}],
29:[function(require,module,exports){
7178 (function (process,global){
7179 // Copyright Joyent, Inc. and other Node contributors.
7181 // Permission is hereby granted, free of charge, to any person obtaining a
7182 // copy of this software and associated documentation files (the
7183 //
"Software"), to deal in the Software without restriction, including
7184 // without limitation the rights to use, copy, modify, merge, publish,
7185 // distribute, sublicense, and/or sell copies of the Software, and to permit
7186 // persons to whom the Software is furnished to do so, subject to the
7187 // following conditions:
7189 // The above copyright notice and this permission notice shall be included
7190 // in all copies or substantial portions of the Software.
7192 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7193 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7194 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7195 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7196 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7197 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7198 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7200 var formatRegExp = /%[sdj%]/g;
7201 exports.format = function(f) {
7204 for (var i =
0; i < arguments.length; i++) {
7205 objects.push(inspect(arguments[i]));
7207 return objects.join(' ');
7211 var args = arguments;
7212 var len = args.length;
7213 var str = String(f).replace(formatRegExp, function(x) {
7214 if (x === '%%') return '%';
7215 if (i
>= len) return x;
7217 case '%s': return String(args[i++]);
7218 case '%d': return Number(args[i++]);
7221 return JSON.stringify(args[i++]);
7223 return '[Circular]';
7229 for (var x = args[i]; i < len; x = args[++i]) {
7230 if (isNull(x) || !isObject(x)) {
7233 str += ' ' + inspect(x);
7240 // Mark that a method should not be used.
7241 // Returns a modified function which warns once by default.
7242 // If --no-deprecation is set, then it is a no-op.
7243 exports.deprecate = function(fn, msg) {
7244 // Allow for deprecating things in the process of starting up.
7245 if (isUndefined(global.process)) {
7247 return exports.deprecate(fn, msg).apply(this, arguments);
7251 if (process.noDeprecation === true) {
7256 function deprecated() {
7258 if (process.throwDeprecation) {
7259 throw new Error(msg);
7260 } else if (process.traceDeprecation) {
7267 return fn.apply(this, arguments);
7276 exports.debuglog = function(set) {
7277 if (isUndefined(debugEnviron))
7278 debugEnviron = process.env.NODE_DEBUG || '';
7279 set = set.toUpperCase();
7281 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7282 var pid = process.pid;
7283 debugs[set] = function() {
7284 var msg = exports.format.apply(exports, arguments);
7285 console.error('%s %d: %s', set, pid, msg);
7288 debugs[set] = function() {};
7296 * Echos the value of a value. Trys to print the value out
7297 * in the best way possible given the different types.
7299 * @param {Object} obj The object to print out.
7300 * @param {Object} opts Optional options object that alters the output.
7302 /* legacy: obj, showHidden, depth, colors*/
7303 function inspect(obj, opts) {
7307 stylize: stylizeNoColor
7310 if (arguments.length
>=
3) ctx.depth = arguments[
2];
7311 if (arguments.length
>=
4) ctx.colors = arguments[
3];
7312 if (isBoolean(opts)) {
7314 ctx.showHidden = opts;
7316 // got an "options" object
7317 exports._extend(ctx, opts);
7319 // set default options
7320 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7321 if (isUndefined(ctx.depth)) ctx.depth =
2;
7322 if (isUndefined(ctx.colors)) ctx.colors = false;
7323 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7324 if (ctx.colors) ctx.stylize = stylizeWithColor;
7325 return formatValue(ctx, obj, ctx.depth);
7327 exports.inspect = inspect;
7330 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7334 'underline' : [
4,
24],
7335 'inverse' : [
7,
27],
7342 'magenta' : [
35,
39],
7347 // Don't use 'blue' not visible on cmd.exe
7351 'boolean': 'yellow',
7352 'undefined': 'grey',
7356 // "name": intentionally not styling
7361 function stylizeWithColor(str, styleType) {
7362 var style = inspect.styles[styleType];
7365 return '\u001b[' + inspect.colors[style][
0] + 'm' + str +
7366 '\u001b[' + inspect.colors[style][
1] + 'm';
7373 function stylizeNoColor(str, styleType) {
7378 function arrayToHash(array) {
7381 array.forEach(function(val, idx) {
7389 function formatValue(ctx, value, recurseTimes) {
7390 // Provide a hook for user-specified inspect functions.
7391 // Check that value is an object with an inspect function on it
7392 if (ctx.customInspect &&
7394 isFunction(value.inspect) &&
7395 // Filter out the util module, it's inspect function is special
7396 value.inspect !== exports.inspect &&
7397 // Also filter out any prototype objects using the circular check.
7398 !(value.constructor && value.constructor.prototype === value)) {
7399 var ret = value.inspect(recurseTimes, ctx);
7400 if (!isString(ret)) {
7401 ret = formatValue(ctx, ret, recurseTimes);
7406 // Primitive types cannot have properties
7407 var primitive = formatPrimitive(ctx, value);
7412 // Look up the keys of the object.
7413 var keys = Object.keys(value);
7414 var visibleKeys = arrayToHash(keys);
7416 if (ctx.showHidden) {
7417 keys = Object.getOwnPropertyNames(value);
7420 // IE doesn't make error fields non-enumerable
7421 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs
.94).aspx
7423 && (keys.indexOf('message')
>=
0 || keys.indexOf('description')
>=
0)) {
7424 return formatError(value);
7427 // Some type of object without properties can be shortcutted.
7428 if (keys.length ===
0) {
7429 if (isFunction(value)) {
7430 var name = value.name ? ': ' + value.name : '';
7431 return ctx.stylize('[Function' + name + ']', 'special');
7433 if (isRegExp(value)) {
7434 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7436 if (isDate(value)) {
7437 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7439 if (isError(value)) {
7440 return formatError(value);
7444 var base = '', array = false, braces = ['{', '}'];
7446 // Make Array say that they are Array
7447 if (isArray(value)) {
7449 braces = ['[', ']'];
7452 // Make functions say that they are functions
7453 if (isFunction(value)) {
7454 var n = value.name ? ': ' + value.name : '';
7455 base = ' [Function' + n + ']';
7458 // Make RegExps say that they are RegExps
7459 if (isRegExp(value)) {
7460 base = ' ' + RegExp.prototype.toString.call(value);
7463 // Make dates with properties first say the date
7464 if (isDate(value)) {
7465 base = ' ' + Date.prototype.toUTCString.call(value);
7468 // Make error with message first say the error
7469 if (isError(value)) {
7470 base = ' ' + formatError(value);
7473 if (keys.length ===
0 && (!array || value.length ==
0)) {
7474 return braces[
0] + base + braces[
1];
7477 if (recurseTimes <
0) {
7478 if (isRegExp(value)) {
7479 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7481 return ctx.stylize('[Object]', 'special');
7485 ctx.seen.push(value);
7489 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7491 output = keys.map(function(key) {
7492 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7498 return reduceToSingleString(output, base, braces);
7502 function formatPrimitive(ctx, value) {
7503 if (isUndefined(value))
7504 return ctx.stylize('undefined', 'undefined');
7505 if (isString(value)) {
7506 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7507 .replace(/'/g, "\\'")
7508 .replace(/\\"/g, '"') + '\'';
7509 return ctx.stylize(simple, 'string');
7511 if (isNumber(value))
7512 return ctx.stylize('' + value, 'number');
7513 if (isBoolean(value))
7514 return ctx.stylize('' + value, 'boolean');
7515 // For some reason typeof null is "object", so special case here.
7517 return ctx.stylize('null', 'null');
7521 function formatError(value) {
7522 return '[' + Error.prototype.toString.call(value) + ']';
7526 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7528 for (var i =
0, l = value.length; i < l; ++i) {
7529 if (hasOwnProperty(value, String(i))) {
7530 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7536 keys.forEach(function(key) {
7537 if (!key.match(/^\d+$/)) {
7538 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7546 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7547 var name, str, desc;
7548 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7551 str = ctx.stylize('[Getter/Setter]', 'special');
7553 str = ctx.stylize('[Getter]', 'special');
7557 str = ctx.stylize('[Setter]', 'special');
7560 if (!hasOwnProperty(visibleKeys, key)) {
7561 name = '[' + key + ']';
7564 if (ctx.seen.indexOf(desc.value) <
0) {
7565 if (isNull(recurseTimes)) {
7566 str = formatValue(ctx, desc.value, null);
7568 str = formatValue(ctx, desc.value, recurseTimes -
1);
7570 if (str.indexOf('\n')
> -
1) {
7572 str = str.split('\n').map(function(line) {
7574 }).join('\n').substr(
2);
7576 str = '\n' + str.split('\n').map(function(line) {
7582 str = ctx.stylize('[Circular]', 'special');
7585 if (isUndefined(name)) {
7586 if (array && key.match(/^\d+$/)) {
7589 name = JSON.stringify('' + key);
7590 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-
9]*)"$/)) {
7591 name = name.substr(
1, name.length -
2);
7592 name = ctx.stylize(name, 'name');
7594 name = name.replace(/'/g, "\\'")
7595 .replace(/\\"/g, '"')
7596 .replace(/(^"|"$)/g, "'");
7597 name = ctx.stylize(name, 'string');
7601 return name + ': ' + str;
7605 function reduceToSingleString(output, base, braces) {
7606 var numLinesEst =
0;
7607 var length = output.reduce(function(prev, cur) {
7609 if (cur.indexOf('\n')
>=
0) numLinesEst++;
7610 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length +
1;
7615 (base === '' ? '' : base + '\n ') +
7617 output.join(',\n ') +
7622 return braces[
0] + base + ' ' + output.join(', ') + ' ' + braces[
1];
7626 // NOTE: These type checking functions intentionally don't use `instanceof`
7627 // because it is fragile and can be easily faked with `Object.create()`.
7628 function isArray(ar) {
7629 return Array.isArray(ar);
7631 exports.isArray = isArray;
7633 function isBoolean(arg) {
7634 return typeof arg === 'boolean';
7636 exports.isBoolean = isBoolean;
7638 function isNull(arg) {
7639 return arg === null;
7641 exports.isNull = isNull;
7643 function isNullOrUndefined(arg) {
7646 exports.isNullOrUndefined = isNullOrUndefined;
7648 function isNumber(arg) {
7649 return typeof arg === 'number';
7651 exports.isNumber = isNumber;
7653 function isString(arg) {
7654 return typeof arg === 'string';
7656 exports.isString = isString;
7658 function isSymbol(arg) {
7659 return typeof arg === 'symbol';
7661 exports.isSymbol = isSymbol;
7663 function isUndefined(arg) {
7664 return arg === void
0;
7666 exports.isUndefined = isUndefined;
7668 function isRegExp(re) {
7669 return isObject(re) && objectToString(re) === '[object RegExp]';
7671 exports.isRegExp = isRegExp;
7673 function isObject(arg) {
7674 return typeof arg === 'object' && arg !== null;
7676 exports.isObject = isObject;
7678 function isDate(d) {
7679 return isObject(d) && objectToString(d) === '[object Date]';
7681 exports.isDate = isDate;
7683 function isError(e) {
7684 return isObject(e) &&
7685 (objectToString(e) === '[object Error]' || e instanceof Error);
7687 exports.isError = isError;
7689 function isFunction(arg) {
7690 return typeof arg === 'function';
7692 exports.isFunction = isFunction;
7694 function isPrimitive(arg) {
7695 return arg === null ||
7696 typeof arg === 'boolean' ||
7697 typeof arg === 'number' ||
7698 typeof arg === 'string' ||
7699 typeof arg === 'symbol' || // ES6 symbol
7700 typeof arg === 'undefined';
7702 exports.isPrimitive = isPrimitive;
7704 exports.isBuffer = require('./support/isBuffer');
7706 function objectToString(o) {
7707 return Object.prototype.toString.call(o);
7712 return n <
10 ? '
0' + n.toString(
10) : n.toString(
10);
7716 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7717 'Oct', 'Nov', 'Dec'];
7720 function timestamp() {
7722 var time = [pad(d.getHours()),
7723 pad(d.getMinutes()),
7724 pad(d.getSeconds())].join(':');
7725 return [d.getDate(), months[d.getMonth()], time].join(' ');
7729 // log is just a thin wrapper to console.log that prepends a timestamp
7730 exports.log = function() {
7731 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7736 * Inherit the prototype methods from one constructor into another.
7738 * The Function.prototype.inherits from lang.js rewritten as a standalone
7739 * function (not on Function.prototype). NOTE: If this file is to be loaded
7740 * during bootstrapping this function needs to be rewritten using some native
7741 * functions as prototype setup using normal JavaScript does not work as
7742 * expected during bootstrapping (see mirror.js in r114903).
7744 * @param {function} ctor Constructor function which needs to inherit the
7746 * @param {function} superCtor Constructor function to inherit prototype from.
7748 exports.inherits = require('inherits');
7750 exports._extend = function(origin, add) {
7751 // Don't do anything if add isn't an object
7752 if (!add || !isObject(add)) return origin;
7754 var keys = Object.keys(add);
7755 var i = keys.length;
7757 origin[keys[i]] = add[keys[i]];
7762 function hasOwnProperty(obj, prop) {
7763 return Object.prototype.hasOwnProperty.call(obj, prop);
7766 }).call(this,require('_process'),typeof global !==
"undefined" ? global : typeof self !==
"undefined" ? self : typeof window !==
"undefined" ? window : {})
7767 },{
"./support/isBuffer":
28,
"_process":
14,
"inherits":
12}],
30:[function(require,module,exports){
7768 // Base58 encoding/decoding
7769 // Originally written by Mike Hearn for BitcoinJ
7770 // Copyright (c)
2011 Google Inc
7771 // Ported to JavaScript by Stefan Thomas
7772 // Merged Buffer refactorings from base58-native by Stephen Pair
7773 // Copyright (c)
2013 BitPay Inc
7775 var ALPHABET = '
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7776 var ALPHABET_MAP = {}
7777 for(var i =
0; i < ALPHABET.length; i++) {
7778 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7782 function encode(buffer) {
7783 if (buffer.length ===
0) return ''
7785 var i, j, digits = [
0]
7786 for (i =
0; i < buffer.length; i++) {
7787 for (j =
0; j < digits.length; j++) digits[j] <<=
8
7789 digits[
0] += buffer[i]
7792 for (j =
0; j < digits.length; ++j) {
7795 carry = (digits[j] / BASE) |
0
7800 digits.push(carry % BASE)
7802 carry = (carry / BASE) |
0
7806 // deal with leading zeros
7807 for (i =
0; buffer[i] ===
0 && i < buffer.length -
1; i++) digits.push(
0)
7809 // convert digits to a string
7810 var stringOutput =
""
7811 for (var i = digits.length -
1; i
>=
0; i--) {
7812 stringOutput = stringOutput + ALPHABET[digits[i]]
7817 function decode(string) {
7818 if (string.length ===
0) return []
7820 var i, j, bytes = [
0]
7821 for (i =
0; i < string.length; i++) {
7823 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7825 for (j =
0; j < bytes.length; j++) bytes[j] *= BASE
7826 bytes[
0] += ALPHABET_MAP[c]
7829 for (j =
0; j < bytes.length; ++j) {
7832 carry = bytes[j]
>> 8
7837 bytes.push(carry &
0xff)
7843 // deal with leading zeros
7844 for (i =
0; string[i] === '
1' && i < string.length -
1; i++) bytes.push(
0)
7846 return bytes.reverse()
7854 },{}],
31:[function(require,module,exports){
7858 var base58 = require('bs58')
7859 var createHash = require('create-hash')
7861 // SHA256(SHA256(buffer))
7862 function sha256x2 (buffer) {
7863 buffer = createHash('sha256').update(buffer).digest()
7864 return createHash('sha256').update(buffer).digest()
7867 // Encode a buffer as a base58-check encoded string
7868 function encode (payload) {
7869 var checksum = sha256x2(payload).slice(
0,
4)
7871 return base58.encode(Buffer.concat([
7877 // Decode a base58-check encoded string to a buffer
7878 function decode (string) {
7879 var buffer = new Buffer(base58.decode(string))
7881 var payload = buffer.slice(
0, -
4)
7882 var checksum = buffer.slice(-
4)
7883 var newChecksum = sha256x2(payload).slice(
0,
4)
7885 for (var i =
0; i < newChecksum.length; ++i) {
7886 if (newChecksum[i] === checksum[i]) continue
7888 throw new Error('Invalid checksum')
7899 }).call(this,require("buffer").Buffer)
7900 },{"bs58":
30,"buffer":
7,"create-hash":
32}],
32:[function(require,module,exports){
7903 var inherits = require('inherits')
7904 var md5 = require('./md5')
7905 var rmd160 = require('ripemd160')
7906 var sha = require('sha.js')
7908 var Transform = require('stream').Transform
7910 function HashNoConstructor(hash) {
7911 Transform.call(this)
7917 inherits(HashNoConstructor, Transform)
7919 HashNoConstructor.prototype._transform = function (data, _, next) {
7920 this.buffers.push(data)
7925 HashNoConstructor.prototype._flush = function (next) {
7926 this.push(this.digest())
7930 HashNoConstructor.prototype.update = function (data, enc) {
7931 if (typeof data === 'string') {
7932 data = new Buffer(data, enc)
7935 this.buffers.push(data)
7939 HashNoConstructor.prototype.digest = function (enc) {
7940 var buf = Buffer.concat(this.buffers)
7941 var r = this._hash(buf)
7944 return enc ? r.toString(enc) : r
7947 function Hash(hash) {
7948 Transform.call(this)
7953 inherits(Hash, Transform)
7955 Hash.prototype._transform = function (data, enc, next) {
7956 if (enc) data = new Buffer(data, enc)
7958 this._hash.update(data)
7963 Hash.prototype._flush = function (next) {
7964 this.push(this._hash.digest())
7970 Hash.prototype.update = function (data, enc) {
7971 if (typeof data === 'string') {
7972 data = new Buffer(data, enc)
7975 this._hash.update(data)
7979 Hash.prototype.digest = function (enc) {
7980 var outData = this._hash.digest()
7982 return enc ? outData.toString(enc) : outData
7985 module.exports = function createHash (alg) {
7986 if ('md5' === alg) return new HashNoConstructor(md5)
7987 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7989 return new Hash(sha(alg))
7992 }).call(this,require("buffer").Buffer)
7993 },{"./md5":
34,"buffer":
7,"inherits":
35,"ripemd160":
36,"sha.js":
38,"stream":
26}],
33:[function(require,module,exports){
7997 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(
0);
8000 function toArray(buf, bigEndian) {
8001 if ((buf.length % intSize) !==
0) {
8002 var len = buf.length + (intSize - (buf.length % intSize));
8003 buf = Buffer.concat([buf, zeroBuffer], len);
8007 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8008 for (var i =
0; i < buf.length; i += intSize) {
8009 arr.push(fn.call(buf, i));
8014 function toBuffer(arr, size, bigEndian) {
8015 var buf = new Buffer(size);
8016 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8017 for (var i =
0; i < arr.length; i++) {
8018 fn.call(buf, arr[i], i *
4, true);
8023 function hash(buf, fn, hashSize, bigEndian) {
8024 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8025 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8026 return toBuffer(arr, hashSize, bigEndian);
8028 exports.hash = hash;
8029 }).call(this,require("buffer").Buffer)
8030 },{"buffer":
7}],
34:[function(require,module,exports){
8033 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8034 * Digest Algorithm, as defined in RFC
1321.
8035 * Version
2.1 Copyright (C) Paul Johnston
1999 -
2002.
8036 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8037 * Distributed under the BSD License
8038 * See http://pajhome.org.uk/crypt/md5 for more info.
8041 var helpers = require('./helpers');
8044 * Calculate the MD5 of an array of little-endian words, and a bit length
8046 function core_md5(x, len)
8048 /* append padding */
8049 x[len
>> 5] |=
0x80 << ((len) %
32);
8050 x[(((len +
64)
>>> 9) <<
4) +
14] = len;
8054 var c = -
1732584194;
8057 for(var i =
0; i < x.length; i +=
16)
8064 a = md5_ff(a, b, c, d, x[i+
0],
7 , -
680876936);
8065 d = md5_ff(d, a, b, c, x[i+
1],
12, -
389564586);
8066 c = md5_ff(c, d, a, b, x[i+
2],
17,
606105819);
8067 b = md5_ff(b, c, d, a, x[i+
3],
22, -
1044525330);
8068 a = md5_ff(a, b, c, d, x[i+
4],
7 , -
176418897);
8069 d = md5_ff(d, a, b, c, x[i+
5],
12,
1200080426);
8070 c = md5_ff(c, d, a, b, x[i+
6],
17, -
1473231341);
8071 b = md5_ff(b, c, d, a, x[i+
7],
22, -
45705983);
8072 a = md5_ff(a, b, c, d, x[i+
8],
7 ,
1770035416);
8073 d = md5_ff(d, a, b, c, x[i+
9],
12, -
1958414417);
8074 c = md5_ff(c, d, a, b, x[i+
10],
17, -
42063);
8075 b = md5_ff(b, c, d, a, x[i+
11],
22, -
1990404162);
8076 a = md5_ff(a, b, c, d, x[i+
12],
7 ,
1804603682);
8077 d = md5_ff(d, a, b, c, x[i+
13],
12, -
40341101);
8078 c = md5_ff(c, d, a, b, x[i+
14],
17, -
1502002290);
8079 b = md5_ff(b, c, d, a, x[i+
15],
22,
1236535329);
8081 a = md5_gg(a, b, c, d, x[i+
1],
5 , -
165796510);
8082 d = md5_gg(d, a, b, c, x[i+
6],
9 , -
1069501632);
8083 c = md5_gg(c, d, a, b, x[i+
11],
14,
643717713);
8084 b = md5_gg(b, c, d, a, x[i+
0],
20, -
373897302);
8085 a = md5_gg(a, b, c, d, x[i+
5],
5 , -
701558691);
8086 d = md5_gg(d, a, b, c, x[i+
10],
9 ,
38016083);
8087 c = md5_gg(c, d, a, b, x[i+
15],
14, -
660478335);
8088 b = md5_gg(b, c, d, a, x[i+
4],
20, -
405537848);
8089 a = md5_gg(a, b, c, d, x[i+
9],
5 ,
568446438);
8090 d = md5_gg(d, a, b, c, x[i+
14],
9 , -
1019803690);
8091 c = md5_gg(c, d, a, b, x[i+
3],
14, -
187363961);
8092 b = md5_gg(b, c, d, a, x[i+
8],
20,
1163531501);
8093 a = md5_gg(a, b, c, d, x[i+
13],
5 , -
1444681467);
8094 d = md5_gg(d, a, b, c, x[i+
2],
9 , -
51403784);
8095 c = md5_gg(c, d, a, b, x[i+
7],
14,
1735328473);
8096 b = md5_gg(b, c, d, a, x[i+
12],
20, -
1926607734);
8098 a = md5_hh(a, b, c, d, x[i+
5],
4 , -
378558);
8099 d = md5_hh(d, a, b, c, x[i+
8],
11, -
2022574463);
8100 c = md5_hh(c, d, a, b, x[i+
11],
16,
1839030562);
8101 b = md5_hh(b, c, d, a, x[i+
14],
23, -
35309556);
8102 a = md5_hh(a, b, c, d, x[i+
1],
4 , -
1530992060);
8103 d = md5_hh(d, a, b, c, x[i+
4],
11,
1272893353);
8104 c = md5_hh(c, d, a, b, x[i+
7],
16, -
155497632);
8105 b = md5_hh(b, c, d, a, x[i+
10],
23, -
1094730640);
8106 a = md5_hh(a, b, c, d, x[i+
13],
4 ,
681279174);
8107 d = md5_hh(d, a, b, c, x[i+
0],
11, -
358537222);
8108 c = md5_hh(c, d, a, b, x[i+
3],
16, -
722521979);
8109 b = md5_hh(b, c, d, a, x[i+
6],
23,
76029189);
8110 a = md5_hh(a, b, c, d, x[i+
9],
4 , -
640364487);
8111 d = md5_hh(d, a, b, c, x[i+
12],
11, -
421815835);
8112 c = md5_hh(c, d, a, b, x[i+
15],
16,
530742520);
8113 b = md5_hh(b, c, d, a, x[i+
2],
23, -
995338651);
8115 a = md5_ii(a, b, c, d, x[i+
0],
6 , -
198630844);
8116 d = md5_ii(d, a, b, c, x[i+
7],
10,
1126891415);
8117 c = md5_ii(c, d, a, b, x[i+
14],
15, -
1416354905);
8118 b = md5_ii(b, c, d, a, x[i+
5],
21, -
57434055);
8119 a = md5_ii(a, b, c, d, x[i+
12],
6 ,
1700485571);
8120 d = md5_ii(d, a, b, c, x[i+
3],
10, -
1894986606);
8121 c = md5_ii(c, d, a, b, x[i+
10],
15, -
1051523);
8122 b = md5_ii(b, c, d, a, x[i+
1],
21, -
2054922799);
8123 a = md5_ii(a, b, c, d, x[i+
8],
6 ,
1873313359);
8124 d = md5_ii(d, a, b, c, x[i+
15],
10, -
30611744);
8125 c = md5_ii(c, d, a, b, x[i+
6],
15, -
1560198380);
8126 b = md5_ii(b, c, d, a, x[i+
13],
21,
1309151649);
8127 a = md5_ii(a, b, c, d, x[i+
4],
6 , -
145523070);
8128 d = md5_ii(d, a, b, c, x[i+
11],
10, -
1120210379);
8129 c = md5_ii(c, d, a, b, x[i+
2],
15,
718787259);
8130 b = md5_ii(b, c, d, a, x[i+
9],
21, -
343485551);
8132 a = safe_add(a, olda);
8133 b = safe_add(b, oldb);
8134 c = safe_add(c, oldc);
8135 d = safe_add(d, oldd);
8137 return Array(a, b, c, d);
8142 * These functions implement the four basic operations the algorithm uses.
8144 function md5_cmn(q, a, b, x, s, t)
8146 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8148 function md5_ff(a, b, c, d, x, s, t)
8150 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8152 function md5_gg(a, b, c, d, x, s, t)
8154 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8156 function md5_hh(a, b, c, d, x, s, t)
8158 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8160 function md5_ii(a, b, c, d, x, s, t)
8162 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8166 * Add integers, wrapping at
2^
32. This uses
16-bit operations internally
8167 * to work around bugs in some JS interpreters.
8169 function safe_add(x, y)
8171 var lsw = (x &
0xFFFF) + (y &
0xFFFF);
8172 var msw = (x
>> 16) + (y
>> 16) + (lsw
>> 16);
8173 return (msw <<
16) | (lsw &
0xFFFF);
8177 * Bitwise rotate a
32-bit number to the left.
8179 function bit_rol(num, cnt)
8181 return (num << cnt) | (num
>>> (
32 - cnt));
8184 module.exports = function md5(buf) {
8185 return helpers.hash(buf, core_md5,
16);
8187 },{"./helpers":
33}],
35:[function(require,module,exports){
8188 arguments[
4][
12][
0].apply(exports,arguments)
8189 },{"dup":
12}],
36:[function(require,module,exports){
8193 code.google.com/p/crypto-js
8194 (c)
2009-
2013 by Jeff Mott. All rights reserved.
8195 code.google.com/p/crypto-js/wiki/License
8198 (c)
2012 by Cédric Mesnil. All rights reserved.
8200 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8202 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8203 - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8205 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8210 0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
8211 7,
4,
13,
1,
10,
6,
15,
3,
12,
0,
9,
5,
2,
14,
11,
8,
8212 3,
10,
14,
4,
9,
15,
8,
1,
2,
7,
0,
6,
13,
11,
5,
12,
8213 1,
9,
11,
10,
0,
8,
12,
4,
13,
3,
7,
15,
14,
5,
6,
2,
8214 4,
0,
5,
9,
7,
12,
2,
10,
14,
1,
3,
8,
11,
6,
15,
13
8218 5,
14,
7,
0,
9,
2,
11,
4,
13,
6,
15,
8,
1,
10,
3,
12,
8219 6,
11,
3,
7,
0,
13,
5,
10,
14,
15,
8,
12,
4,
9,
1,
2,
8220 15,
5,
1,
3,
7,
14,
6,
9,
11,
8,
12,
2,
10,
0,
4,
13,
8221 8,
6,
4,
1,
3,
11,
15,
0,
5,
12,
2,
13,
9,
7,
10,
14,
8222 12,
15,
10,
4,
1,
5,
8,
7,
6,
2,
13,
14,
0,
3,
9,
11
8226 11,
14,
15,
12,
5,
8,
7,
9,
11,
13,
14,
15,
6,
7,
9,
8,
8227 7,
6,
8,
13,
11,
9,
7,
15,
7,
12,
15,
9,
11,
7,
13,
12,
8228 11,
13,
6,
7,
14,
9,
13,
15,
14,
8,
13,
6,
5,
12,
7,
5,
8229 11,
12,
14,
15,
14,
15,
9,
8,
9,
14,
5,
6,
8,
6,
5,
12,
8230 9,
15,
5,
11,
6,
8,
13,
12,
5,
12,
13,
14,
11,
8,
5,
6
8234 8,
9,
9,
11,
13,
15,
15,
5,
7,
7,
8,
11,
14,
14,
12,
6,
8235 9,
13,
15,
7,
12,
8,
9,
11,
7,
7,
12,
7,
6,
15,
13,
11,
8236 9,
7,
15,
11,
8,
6,
6,
14,
12,
13,
5,
14,
13,
13,
7,
5,
8237 15,
5,
8,
11,
14,
14,
6,
14,
6,
9,
12,
9,
12,
5,
15,
8,
8238 8,
5,
12,
9,
12,
5,
14,
6,
8,
13,
6,
5,
15,
13,
11,
11
8241 var hl = [
0x00000000,
0x5A827999,
0x6ED9EBA1,
0x8F1BBCDC,
0xA953FD4E]
8242 var hr = [
0x50A28BE6,
0x5C4DD124,
0x6D703EF3,
0x7A6D76E9,
0x00000000]
8244 function bytesToWords (bytes) {
8246 for (var i =
0, b =
0; i < bytes.length; i++, b +=
8) {
8247 words[b
>>> 5] |= bytes[i] << (
24 - b %
32)
8252 function wordsToBytes (words) {
8254 for (var b =
0; b < words.length *
32; b +=
8) {
8255 bytes.push((words[b
>>> 5]
>>> (
24 - b %
32)) &
0xFF)
8260 function processBlock (H, M, offset) {
8262 for (var i =
0; i <
16; i++) {
8263 var offset_i = offset + i
8264 var M_offset_i = M[offset_i]
8268 (((M_offset_i <<
8) | (M_offset_i
>>> 24)) &
0x00ff00ff) |
8269 (((M_offset_i <<
24) | (M_offset_i
>>> 8)) &
0xff00ff00)
8273 // Working variables
8274 var al, bl, cl, dl, el
8275 var ar, br, cr, dr, er
8285 for (i =
0; i <
80; i +=
1) {
8286 t = (al + M[offset + zl[i]]) |
0
8288 t += f1(bl, cl, dl) + hl[
0]
8289 } else if (i <
32) {
8290 t += f2(bl, cl, dl) + hl[
1]
8291 } else if (i <
48) {
8292 t += f3(bl, cl, dl) + hl[
2]
8293 } else if (i <
64) {
8294 t += f4(bl, cl, dl) + hl[
3]
8295 } else {// if (i
<80) {
8296 t += f5(bl, cl, dl) + hl[
4]
8307 t = (ar + M[offset + zr[i]]) |
0
8309 t += f5(br, cr, dr) + hr[
0]
8310 } else if (i <
32) {
8311 t += f4(br, cr, dr) + hr[
1]
8312 } else if (i <
48) {
8313 t += f3(br, cr, dr) + hr[
2]
8314 } else if (i <
64) {
8315 t += f2(br, cr, dr) + hr[
3]
8316 } else {// if (i
<80) {
8317 t += f1(br, cr, dr) + hr[
4]
8330 // intermediate hash value
8331 t = (H[
1] + cl + dr) |
0
8332 H[
1] = (H[
2] + dl + er) |
0
8333 H[
2] = (H[
3] + el + ar) |
0
8334 H[
3] = (H[
4] + al + br) |
0
8335 H[
4] = (H[
0] + bl + cr) |
0
8339 function f1 (x, y, z) {
8340 return ((x) ^ (y) ^ (z))
8343 function f2 (x, y, z) {
8344 return (((x) & (y)) | ((~x) & (z)))
8347 function f3 (x, y, z) {
8348 return (((x) | (~(y))) ^ (z))
8351 function f4 (x, y, z) {
8352 return (((x) & (z)) | ((y) & (~(z))))
8355 function f5 (x, y, z) {
8356 return ((x) ^ ((y) | (~(z))))
8359 function rotl (x, n) {
8360 return (x << n) | (x
>>> (
32 - n))
8363 function ripemd160 (message) {
8364 var H = [
0x67452301,
0xEFCDAB89,
0x98BADCFE,
0x10325476,
0xC3D2E1F0]
8366 if (typeof message === 'string') {
8367 message = new Buffer(message, 'utf8')
8370 var m = bytesToWords(message)
8372 var nBitsLeft = message.length *
8
8373 var nBitsTotal = message.length *
8
8376 m[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32)
8377 m[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = (
8378 (((nBitsTotal <<
8) | (nBitsTotal
>>> 24)) &
0x00ff00ff) |
8379 (((nBitsTotal <<
24) | (nBitsTotal
>>> 8)) &
0xff00ff00)
8382 for (var i =
0; i < m.length; i +=
16) {
8383 processBlock(H, m, i)
8387 for (i =
0; i <
5; i++) {
8392 H[i] = (((H_i <<
8) | (H_i
>>> 24)) &
0x00ff00ff) |
8393 (((H_i <<
24) | (H_i
>>> 8)) &
0xff00ff00)
8396 var digestbytes = wordsToBytes(H)
8397 return new Buffer(digestbytes)
8400 module.exports = ripemd160
8402 }).call(this,require(
"buffer").Buffer)
8403 },{
"buffer":
7}],
37:[function(require,module,exports){
8405 // prototype class for hash functions
8406 function Hash (blockSize, finalSize) {
8407 this._block = new Buffer(blockSize)
8408 this._finalSize = finalSize
8409 this._blockSize = blockSize
8414 Hash.prototype.update = function (data, enc) {
8415 if (typeof data === 'string') {
8417 data = new Buffer(data, enc)
8420 var l = this._len += data.length
8421 var s = this._s ||
0
8423 var buffer = this._block
8426 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8429 for (var i =
0; i < ch; i++) {
8430 buffer[(s % this._blockSize) + i] = data[i + f]
8436 if ((s % this._blockSize) ===
0) {
8437 this._update(buffer)
8445 Hash.prototype.digest = function (enc) {
8446 // Suppose the length of the message M, in bits, is l
8447 var l = this._len *
8
8449 // Append the bit
1 to the end of the message
8450 this._block[this._len % this._blockSize] =
0x80
8452 // and then k zero bits, where k is the smallest non-negative solution to the equation (l +
1 + k) === finalSize mod blockSize
8453 this._block.fill(
0, this._len % this._blockSize +
1)
8455 if (l % (this._blockSize *
8)
>= this._finalSize *
8) {
8456 this._update(this._block)
8460 // to this append the block which is equal to the number l written in binary
8461 // TODO: handle case where l is
> Math.pow(
2,
29)
8462 this._block.writeInt32BE(l, this._blockSize -
4)
8464 var hash = this._update(this._block) || this._hash()
8466 return enc ? hash.toString(enc) : hash
8469 Hash.prototype._update = function () {
8470 throw new Error('_update must be implemented by subclass')
8473 module.exports = Hash
8475 }).call(this,require("buffer").Buffer)
8476 },{"buffer":
7}],
38:[function(require,module,exports){
8477 var exports = module.exports = function SHA (algorithm) {
8478 algorithm = algorithm.toLowerCase()
8480 var Algorithm = exports[algorithm]
8481 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8483 return new Algorithm()
8486 exports.sha = require('./sha')
8487 exports.sha1 = require('./sha1')
8488 exports.sha224 = require('./sha224')
8489 exports.sha256 = require('./sha256')
8490 exports.sha384 = require('./sha384')
8491 exports.sha512 = require('./sha512')
8493 },{"./sha":
39,"./sha1":
40,"./sha224":
41,"./sha256":
42,"./sha384":
43,"./sha512":
44}],
39:[function(require,module,exports){
8496 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
0, as defined
8498 * This source code is derived from sha1.js of the same repository.
8499 * The difference between SHA-
0 and SHA-
1 is just a bitwise rotate left
8500 * operation was added.
8503 var inherits = require('inherits')
8504 var Hash = require('./hash')
8506 var W = new Array(
80)
8512 Hash.call(this,
64,
56)
8517 Sha.prototype.init = function () {
8518 this._a =
0x67452301 |
0
8519 this._b =
0xefcdab89 |
0
8520 this._c =
0x98badcfe |
0
8521 this._d =
0x10325476 |
0
8522 this._e =
0xc3d2e1f0 |
0
8528 * Bitwise rotate a
32-bit number to the left.
8530 function rol (num, cnt) {
8531 return (num << cnt) | (num
>>> (
32 - cnt))
8534 Sha.prototype._update = function (M) {
8546 * SHA-
1 has a bitwise rotate left operation. But, SHA is not
8547 * function calcW() { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8549 function calcW () { return W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16] }
8550 function loop (w, f) {
8553 var t = rol(a,
5) + f + e + w + k
8564 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8565 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8567 while (j <
40) loop(calcW(), b ^ c ^ d)
8569 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8571 while (j <
80) loop(calcW(), b ^ c ^ d)
8573 this._a = (a + this._a) |
0
8574 this._b = (b + this._b) |
0
8575 this._c = (c + this._c) |
0
8576 this._d = (d + this._d) |
0
8577 this._e = (e + this._e) |
0
8580 Sha.prototype._hash = function () {
8581 var H = new Buffer(
20)
8583 H.writeInt32BE(this._a |
0,
0)
8584 H.writeInt32BE(this._b |
0,
4)
8585 H.writeInt32BE(this._c |
0,
8)
8586 H.writeInt32BE(this._d |
0,
12)
8587 H.writeInt32BE(this._e |
0,
16)
8592 module.exports = Sha
8595 }).call(this,require("buffer").Buffer)
8596 },{"./hash":
37,"buffer":
7,"inherits":
35}],
40:[function(require,module,exports){
8599 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
1, as defined
8601 * Version
2.1a Copyright Paul Johnston
2000 -
2002.
8602 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8603 * Distributed under the BSD License
8604 * See http://pajhome.org.uk/crypt/md5 for details.
8607 var inherits = require('inherits')
8608 var Hash = require('./hash')
8610 var W = new Array(
80)
8616 Hash.call(this,
64,
56)
8619 inherits(Sha1, Hash)
8621 Sha1.prototype.init = function () {
8622 this._a =
0x67452301 |
0
8623 this._b =
0xefcdab89 |
0
8624 this._c =
0x98badcfe |
0
8625 this._d =
0x10325476 |
0
8626 this._e =
0xc3d2e1f0 |
0
8632 * Bitwise rotate a
32-bit number to the left.
8634 function rol (num, cnt) {
8635 return (num << cnt) | (num
>>> (
32 - cnt))
8638 Sha1.prototype._update = function (M) {
8649 function calcW () { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8650 function loop (w, f) {
8653 var t = rol(a,
5) + f + e + w + k
8664 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8665 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8667 while (j <
40) loop(calcW(), b ^ c ^ d)
8669 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8671 while (j <
80) loop(calcW(), b ^ c ^ d)
8673 this._a = (a + this._a) |
0
8674 this._b = (b + this._b) |
0
8675 this._c = (c + this._c) |
0
8676 this._d = (d + this._d) |
0
8677 this._e = (e + this._e) |
0
8680 Sha1.prototype._hash = function () {
8681 var H = new Buffer(
20)
8683 H.writeInt32BE(this._a |
0,
0)
8684 H.writeInt32BE(this._b |
0,
4)
8685 H.writeInt32BE(this._c |
0,
8)
8686 H.writeInt32BE(this._d |
0,
12)
8687 H.writeInt32BE(this._e |
0,
16)
8692 module.exports = Sha1
8694 }).call(this,require("buffer").Buffer)
8695 },{"./hash":
37,"buffer":
7,"inherits":
35}],
41:[function(require,module,exports){
8698 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8700 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8701 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8705 var inherits = require('inherits')
8706 var Sha256 = require('./sha256')
8707 var Hash = require('./hash')
8709 var W = new Array(
64)
8711 function Sha224 () {
8714 this._w = W // new Array(
64)
8716 Hash.call(this,
64,
56)
8719 inherits(Sha224, Sha256)
8721 Sha224.prototype.init = function () {
8722 this._a =
0xc1059ed8 |
0
8723 this._b =
0x367cd507 |
0
8724 this._c =
0x3070dd17 |
0
8725 this._d =
0xf70e5939 |
0
8726 this._e =
0xffc00b31 |
0
8727 this._f =
0x68581511 |
0
8728 this._g =
0x64f98fa7 |
0
8729 this._h =
0xbefa4fa4 |
0
8734 Sha224.prototype._hash = function () {
8735 var H = new Buffer(
28)
8737 H.writeInt32BE(this._a,
0)
8738 H.writeInt32BE(this._b,
4)
8739 H.writeInt32BE(this._c,
8)
8740 H.writeInt32BE(this._d,
12)
8741 H.writeInt32BE(this._e,
16)
8742 H.writeInt32BE(this._f,
20)
8743 H.writeInt32BE(this._g,
24)
8748 module.exports = Sha224
8750 }).call(this,require("buffer").Buffer)
8751 },{"./hash":
37,"./sha256":
42,"buffer":
7,"inherits":
35}],
42:[function(require,module,exports){
8754 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8756 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8757 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8761 var inherits = require('inherits')
8762 var Hash = require('./hash')
8765 0x428A2F98,
0x71374491,
0xB5C0FBCF,
0xE9B5DBA5,
8766 0x3956C25B,
0x59F111F1,
0x923F82A4,
0xAB1C5ED5,
8767 0xD807AA98,
0x12835B01,
0x243185BE,
0x550C7DC3,
8768 0x72BE5D74,
0x80DEB1FE,
0x9BDC06A7,
0xC19BF174,
8769 0xE49B69C1,
0xEFBE4786,
0x0FC19DC6,
0x240CA1CC,
8770 0x2DE92C6F,
0x4A7484AA,
0x5CB0A9DC,
0x76F988DA,
8771 0x983E5152,
0xA831C66D,
0xB00327C8,
0xBF597FC7,
8772 0xC6E00BF3,
0xD5A79147,
0x06CA6351,
0x14292967,
8773 0x27B70A85,
0x2E1B2138,
0x4D2C6DFC,
0x53380D13,
8774 0x650A7354,
0x766A0ABB,
0x81C2C92E,
0x92722C85,
8775 0xA2BFE8A1,
0xA81A664B,
0xC24B8B70,
0xC76C51A3,
8776 0xD192E819,
0xD6990624,
0xF40E3585,
0x106AA070,
8777 0x19A4C116,
0x1E376C08,
0x2748774C,
0x34B0BCB5,
8778 0x391C0CB3,
0x4ED8AA4A,
0x5B9CCA4F,
0x682E6FF3,
8779 0x748F82EE,
0x78A5636F,
0x84C87814,
0x8CC70208,
8780 0x90BEFFFA,
0xA4506CEB,
0xBEF9A3F7,
0xC67178F2
8783 var W = new Array(
64)
8785 function Sha256 () {
8788 this._w = W // new Array(
64)
8790 Hash.call(this,
64,
56)
8793 inherits(Sha256, Hash)
8795 Sha256.prototype.init = function () {
8796 this._a =
0x6a09e667 |
0
8797 this._b =
0xbb67ae85 |
0
8798 this._c =
0x3c6ef372 |
0
8799 this._d =
0xa54ff53a |
0
8800 this._e =
0x510e527f |
0
8801 this._f =
0x9b05688c |
0
8802 this._g =
0x1f83d9ab |
0
8803 this._h =
0x5be0cd19 |
0
8809 return (X
>>> n) | (X << (
32 - n))
8816 function Ch (x, y, z) {
8817 return ((x & y) ^ ((~x) & z))
8820 function Maj (x, y, z) {
8821 return ((x & y) ^ (x & z) ^ (y & z))
8824 function Sigma0256 (x) {
8825 return (S(x,
2) ^ S(x,
13) ^ S(x,
22))
8828 function Sigma1256 (x) {
8829 return (S(x,
6) ^ S(x,
11) ^ S(x,
25))
8832 function Gamma0256 (x) {
8833 return (S(x,
7) ^ S(x,
18) ^ R(x,
3))
8836 function Gamma1256 (x) {
8837 return (S(x,
17) ^ S(x,
19) ^ R(x,
10))
8840 Sha256.prototype._update = function (M) {
8854 function calcW () { return Gamma1256(W[j -
2]) + W[j -
7] + Gamma0256(W[j -
15]) + W[j -
16] }
8858 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8859 var T2 = Sigma0256(a) + Maj(a, b, c)
8873 while (j <
16) loop(M.readInt32BE(j *
4))
8874 while (j <
64) loop(calcW())
8876 this._a = (a + this._a) |
0
8877 this._b = (b + this._b) |
0
8878 this._c = (c + this._c) |
0
8879 this._d = (d + this._d) |
0
8880 this._e = (e + this._e) |
0
8881 this._f = (f + this._f) |
0
8882 this._g = (g + this._g) |
0
8883 this._h = (h + this._h) |
0
8886 Sha256.prototype._hash = function () {
8887 var H = new Buffer(
32)
8889 H.writeInt32BE(this._a,
0)
8890 H.writeInt32BE(this._b,
4)
8891 H.writeInt32BE(this._c,
8)
8892 H.writeInt32BE(this._d,
12)
8893 H.writeInt32BE(this._e,
16)
8894 H.writeInt32BE(this._f,
20)
8895 H.writeInt32BE(this._g,
24)
8896 H.writeInt32BE(this._h,
28)
8901 module.exports = Sha256
8903 }).call(this,require("buffer").Buffer)
8904 },{"./hash":
37,"buffer":
7,"inherits":
35}],
43:[function(require,module,exports){
8906 var inherits = require('inherits')
8907 var SHA512 = require('./sha512')
8908 var Hash = require('./hash')
8910 var W = new Array(
160)
8912 function Sha384 () {
8916 Hash.call(this,
128,
112)
8919 inherits(Sha384, SHA512)
8921 Sha384.prototype.init = function () {
8922 this._a =
0xcbbb9d5d |
0
8923 this._b =
0x629a292a |
0
8924 this._c =
0x9159015a |
0
8925 this._d =
0x152fecd8 |
0
8926 this._e =
0x67332667 |
0
8927 this._f =
0x8eb44a87 |
0
8928 this._g =
0xdb0c2e0d |
0
8929 this._h =
0x47b5481d |
0
8931 this._al =
0xc1059ed8 |
0
8932 this._bl =
0x367cd507 |
0
8933 this._cl =
0x3070dd17 |
0
8934 this._dl =
0xf70e5939 |
0
8935 this._el =
0xffc00b31 |
0
8936 this._fl =
0x68581511 |
0
8937 this._gl =
0x64f98fa7 |
0
8938 this._hl =
0xbefa4fa4 |
0
8943 Sha384.prototype._hash = function () {
8944 var H = new Buffer(
48)
8946 function writeInt64BE (h, l, offset) {
8947 H.writeInt32BE(h, offset)
8948 H.writeInt32BE(l, offset +
4)
8951 writeInt64BE(this._a, this._al,
0)
8952 writeInt64BE(this._b, this._bl,
8)
8953 writeInt64BE(this._c, this._cl,
16)
8954 writeInt64BE(this._d, this._dl,
24)
8955 writeInt64BE(this._e, this._el,
32)
8956 writeInt64BE(this._f, this._fl,
40)
8961 module.exports = Sha384
8963 }).call(this,require("buffer").Buffer)
8964 },{"./hash":
37,"./sha512":
44,"buffer":
7,"inherits":
35}],
44:[function(require,module,exports){
8966 var inherits = require('inherits')
8967 var Hash = require('./hash')
8970 0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
8971 0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
8972 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
8973 0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
8974 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
8975 0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
8976 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
8977 0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
8978 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
8979 0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
8980 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
8981 0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
8982 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
8983 0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
8984 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
8985 0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
8986 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
8987 0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
8988 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
8989 0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
8990 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
8991 0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
8992 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
8993 0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
8994 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
8995 0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
8996 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
8997 0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
8998 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
8999 0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
9000 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
9001 0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
9002 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
9003 0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
9004 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
9005 0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
9006 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
9007 0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
9008 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
9009 0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817
9012 var W = new Array(
160)
9014 function Sha512 () {
9018 Hash.call(this,
128,
112)
9021 inherits(Sha512, Hash)
9023 Sha512.prototype.init = function () {
9024 this._a =
0x6a09e667 |
0
9025 this._b =
0xbb67ae85 |
0
9026 this._c =
0x3c6ef372 |
0
9027 this._d =
0xa54ff53a |
0
9028 this._e =
0x510e527f |
0
9029 this._f =
0x9b05688c |
0
9030 this._g =
0x1f83d9ab |
0
9031 this._h =
0x5be0cd19 |
0
9033 this._al =
0xf3bcc908 |
0
9034 this._bl =
0x84caa73b |
0
9035 this._cl =
0xfe94f82b |
0
9036 this._dl =
0x5f1d36f1 |
0
9037 this._el =
0xade682d1 |
0
9038 this._fl =
0x2b3e6c1f |
0
9039 this._gl =
0xfb41bd6b |
0
9040 this._hl =
0x137e2179 |
0
9045 function S (X, Xl, n) {
9046 return (X
>>> n) | (Xl << (
32 - n))
9049 function Ch (x, y, z) {
9050 return ((x & y) ^ ((~x) & z))
9053 function Maj (x, y, z) {
9054 return ((x & y) ^ (x & z) ^ (y & z))
9057 Sha512.prototype._update = function (M) {
9069 var al = this._al |
0
9070 var bl = this._bl |
0
9071 var cl = this._cl |
0
9072 var dl = this._dl |
0
9073 var el = this._el |
0
9074 var fl = this._fl |
0
9075 var gl = this._gl |
0
9076 var hl = this._hl |
0
9081 var x = W[j -
15 *
2]
9082 var xl = W[j -
15 *
2 +
1]
9083 var gamma0 = S(x, xl,
1) ^ S(x, xl,
8) ^ (x
>>> 7)
9084 var gamma0l = S(xl, x,
1) ^ S(xl, x,
8) ^ S(xl, x,
7)
9087 xl = W[j -
2 *
2 +
1]
9088 var gamma1 = S(x, xl,
19) ^ S(xl, x,
29) ^ (x
>>> 6)
9089 var gamma1l = S(xl, x,
19) ^ S(x, xl,
29) ^ S(xl, x,
6)
9091 // W[i] = gamma0 + W[i -
7] + gamma1 + W[i -
16]
9092 var Wi7 = W[j -
7 *
2]
9093 var Wi7l = W[j -
7 *
2 +
1]
9095 var Wi16 = W[j -
16 *
2]
9096 var Wi16l = W[j -
16 *
2 +
1]
9098 Wil = gamma0l + Wi7l
9099 Wi = gamma0 + Wi7 + ((Wil
>>> 0) < (gamma0l
>>> 0) ?
1 :
0)
9101 Wi = Wi + gamma1 + ((Wil
>>> 0) < (gamma1l
>>> 0) ?
1 :
0)
9103 Wi = Wi + Wi16 + ((Wil
>>> 0) < (Wi16l
>>> 0) ?
1 :
0)
9110 var maj = Maj(a, b, c)
9111 var majl = Maj(al, bl, cl)
9113 var sigma0h = S(a, al,
28) ^ S(al, a,
2) ^ S(al, a,
7)
9114 var sigma0l = S(al, a,
28) ^ S(a, al,
2) ^ S(a, al,
7)
9115 var sigma1h = S(e, el,
14) ^ S(e, el,
18) ^ S(el, e,
9)
9116 var sigma1l = S(el, e,
14) ^ S(el, e,
18) ^ S(e, el,
9)
9118 // t1 = h + sigma1 + ch + K[i] + W[i]
9122 var ch = Ch(e, f, g)
9123 var chl = Ch(el, fl, gl)
9125 var t1l = hl + sigma1l
9126 var t1 = h + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0)
9128 t1 = t1 + ch + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0)
9130 t1 = t1 + Ki + ((t1l
>>> 0) < (Kil
>>> 0) ?
1 :
0)
9132 t1 = t1 + Wi + ((t1l
>>> 0) < (Wil
>>> 0) ?
1 :
0)
9134 // t2 = sigma0 + maj
9135 var t2l = sigma0l + majl
9136 var t2 = sigma0h + maj + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0)
9145 e = (d + t1 + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
9152 al = (t1l + t2l) |
0
9153 a = (t1 + t2 + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0
9160 Wi = M.readInt32BE(j *
4)
9161 Wil = M.readInt32BE(j *
4 +
4)
9171 this._al = (this._al + al) |
0
9172 this._bl = (this._bl + bl) |
0
9173 this._cl = (this._cl + cl) |
0
9174 this._dl = (this._dl + dl) |
0
9175 this._el = (this._el + el) |
0
9176 this._fl = (this._fl + fl) |
0
9177 this._gl = (this._gl + gl) |
0
9178 this._hl = (this._hl + hl) |
0
9180 this._a = (this._a + a + ((this._al
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0
9181 this._b = (this._b + b + ((this._bl
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0
9182 this._c = (this._c + c + ((this._cl
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0
9183 this._d = (this._d + d + ((this._dl
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
9184 this._e = (this._e + e + ((this._el
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0
9185 this._f = (this._f + f + ((this._fl
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0
9186 this._g = (this._g + g + ((this._gl
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0
9187 this._h = (this._h + h + ((this._hl
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0
9190 Sha512.prototype._hash = function () {
9191 var H = new Buffer(
64)
9193 function writeInt64BE (h, l, offset) {
9194 H.writeInt32BE(h, offset)
9195 H.writeInt32BE(l, offset +
4)
9198 writeInt64BE(this._a, this._al,
0)
9199 writeInt64BE(this._b, this._bl,
8)
9200 writeInt64BE(this._c, this._cl,
16)
9201 writeInt64BE(this._d, this._dl,
24)
9202 writeInt64BE(this._e, this._el,
32)
9203 writeInt64BE(this._f, this._fl,
40)
9204 writeInt64BE(this._g, this._gl,
48)
9205 writeInt64BE(this._h, this._hl,
56)
9210 module.exports = Sha512
9212 }).call(this,require(
"buffer").Buffer)
9213 },{
"./hash":
37,
"buffer":
7,
"inherits":
35}],
45:[function(require,module,exports){
9216 var createHash = require('create-hash/browser');
9217 var inherits = require('inherits')
9219 var Transform = require('stream').Transform
9221 var ZEROS = new Buffer(
128)
9224 function Hmac(alg, key) {
9225 Transform.call(this)
9227 if (typeof key === 'string') {
9228 key = new Buffer(key)
9231 var blocksize = (alg === 'sha512' || alg === 'sha384') ?
128 :
64
9236 if (key.length
> blocksize) {
9237 key = createHash(alg).update(key).digest()
9239 } else if (key.length < blocksize) {
9240 key = Buffer.concat([key, ZEROS], blocksize)
9243 var ipad = this._ipad = new Buffer(blocksize)
9244 var opad = this._opad = new Buffer(blocksize)
9246 for (var i =
0; i < blocksize; i++) {
9247 ipad[i] = key[i] ^
0x36
9248 opad[i] = key[i] ^
0x5C
9251 this._hash = createHash(alg).update(ipad)
9254 inherits(Hmac, Transform)
9256 Hmac.prototype.update = function (data, enc) {
9257 this._hash.update(data, enc)
9262 Hmac.prototype._transform = function (data, _, next) {
9263 this._hash.update(data)
9268 Hmac.prototype._flush = function (next) {
9269 this.push(this.digest())
9274 Hmac.prototype.digest = function (enc) {
9275 var h = this._hash.digest()
9277 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9280 module.exports = function createHmac(alg, key) {
9281 return new Hmac(alg, key)
9284 }).call(this,require("buffer").Buffer)
9285 },{"buffer":
7,"create-hash/browser":
32,"inherits":
46,"stream":
26}],
46:[function(require,module,exports){
9286 arguments[
4][
12][
0].apply(exports,arguments)
9287 },{"dup":
12}],
47:[function(require,module,exports){
9288 var assert = require('assert')
9289 var BigInteger = require('bigi')
9291 var Point = require('./point')
9293 function Curve(p, a, b, Gx, Gy, n, h) {
9297 this.G = Point.fromAffine(this, Gx, Gy)
9301 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9304 this.pOverFour = p.add(BigInteger.ONE).shiftRight(
2)
9307 Curve.prototype.pointFromX = function(isOdd, x) {
9308 var alpha = x.pow(
3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9309 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9312 if (beta.isEven() ^ !isOdd) {
9313 y = this.p.subtract(y) // -y % p
9316 return Point.fromAffine(this, x, y)
9319 Curve.prototype.isInfinity = function(Q) {
9320 if (Q === this.infinity) return true
9322 return Q.z.signum() ===
0 && Q.y.signum() !==
0
9325 Curve.prototype.isOnCurve = function(Q) {
9326 if (this.isInfinity(Q)) return true
9334 // Check that xQ and yQ are integers in the interval [
0, p -
1]
9335 if (x.signum() <
0 || x.compareTo(p)
>=
0) return false
9336 if (y.signum() <
0 || y.compareTo(p)
>=
0) return false
9338 // and check that y^
2 = x^
3 + ax + b (mod p)
9339 var lhs = y.square().mod(p)
9340 var rhs = x.pow(
3).add(a.multiply(x)).add(b).mod(p)
9341 return lhs.equals(rhs)
9345 * Validate an elliptic curve point.
9347 * See SEC
1, section
3.2.2.1: Elliptic Curve Public Key Validation Primitive
9349 Curve.prototype.validate = function(Q) {
9351 assert(!this.isInfinity(Q), 'Point is at infinity')
9352 assert(this.isOnCurve(Q), 'Point is not on the curve')
9354 // Check nQ = O (where Q is a scalar multiple of G)
9355 var nQ = Q.multiply(this.n)
9356 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9361 module.exports = Curve
9363 },{"./point":
51,"assert":
5,"bigi":
3}],
48:[function(require,module,exports){
9366 "p": "fffffffdffffffffffffffffffffffff",
9367 "a": "fffffffdfffffffffffffffffffffffc",
9368 "b": "e87579c11079f43dd824993c2cee5ed3",
9369 "n": "fffffffe0000000075a30d1b9038a115",
9371 "Gx": "
161ff7528b899b2d0c28607ca52c5b86",
9372 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9375 "p": "fffffffffffffffffffffffffffffffeffffac73",
9378 "n": "
0100000000000000000001b8fa16dfab9aca16b6b3",
9380 "Gx": "
3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9381 "Gy": "
938cf935318fdced6bc28286531733c3f03c4fee"
9384 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9385 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9386 "b": "
1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9387 "n": "
0100000000000000000001f4c8f927aed3ca752257",
9389 "Gx": "
4a96b5688ef573284664698968c38bb913cbfc82",
9390 "Gy": "
23a628553168947d59dcc912042351377ac5fb32"
9393 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9396 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9398 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9399 "Gy": "
9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9402 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9403 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9404 "b": "
64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9405 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9407 "Gx": "
188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9408 "Gy": "
07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9411 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9414 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9416 "Gx": "
79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9417 "Gy": "
483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9420 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9421 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9422 "b": "
5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9423 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9425 "Gx": "
6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9426 "Gy": "
4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9430 },{}],
49:[function(require,module,exports){
9431 var Point = require('./point')
9432 var Curve = require('./curve')
9434 var getCurveByName = require('./names')
9439 getCurveByName: getCurveByName
9442 },{"./curve":
47,"./names":
50,"./point":
51}],
50:[function(require,module,exports){
9443 var BigInteger = require('bigi')
9445 var curves = require('./curves')
9446 var Curve = require('./curve')
9448 function getCurveByName(name) {
9449 var curve = curves[name]
9450 if (!curve) return null
9452 var p = new BigInteger(curve.p,
16)
9453 var a = new BigInteger(curve.a,
16)
9454 var b = new BigInteger(curve.b,
16)
9455 var n = new BigInteger(curve.n,
16)
9456 var h = new BigInteger(curve.h,
16)
9457 var Gx = new BigInteger(curve.Gx,
16)
9458 var Gy = new BigInteger(curve.Gy,
16)
9460 return new Curve(p, a, b, Gx, Gy, n, h)
9463 module.exports = getCurveByName
9465 },{"./curve":
47,"./curves":
48,"bigi":
3}],
51:[function(require,module,exports){
9467 var assert = require('assert')
9468 var BigInteger = require('bigi')
9470 var THREE = BigInteger.valueOf(
3)
9472 function Point(curve, x, y, z) {
9473 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9481 this.compressed = true
9484 Object.defineProperty(Point.prototype, 'zInv', {
9486 if (this._zInv === null) {
9487 this._zInv = this.z.modInverse(this.curve.p)
9494 Object.defineProperty(Point.prototype, 'affineX', {
9496 return this.x.multiply(this.zInv).mod(this.curve.p)
9500 Object.defineProperty(Point.prototype, 'affineY', {
9502 return this.y.multiply(this.zInv).mod(this.curve.p)
9506 Point.fromAffine = function(curve, x, y) {
9507 return new Point(curve, x, y, BigInteger.ONE)
9510 Point.prototype.equals = function(other) {
9511 if (other === this) return true
9512 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9513 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9515 // u = Y2 * Z1 - Y1 * Z2
9516 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9518 if (u.signum() !==
0) return false
9520 // v = X2 * Z1 - X1 * Z2
9521 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9523 return v.signum() ===
0
9526 Point.prototype.negate = function() {
9527 var y = this.curve.p.subtract(this.y)
9529 return new Point(this.curve, this.x, y, this.z)
9532 Point.prototype.add = function(b) {
9533 if (this.curve.isInfinity(this)) return b
9534 if (this.curve.isInfinity(b)) return this
9541 // u = Y2 * Z1 - Y1 * Z2
9542 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9543 // v = X2 * Z1 - X1 * Z2
9544 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9546 if (v.signum() ===
0) {
9547 if (u.signum() ===
0) {
9548 return this.twice() // this == b, so double
9551 return this.curve.infinity // this = -b, so infinity
9555 var v3 = v2.multiply(v)
9556 var x1v2 = x1.multiply(v2)
9557 var zu2 = u.square().multiply(this.z)
9559 // x3 = v * (z2 * (z1 * u^
2 -
2 * x1 * v^
2) - v^
3)
9560 var x3 = zu2.subtract(x1v2.shiftLeft(
1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9561 // y3 = z2 * (
3 * x1 * u * v^
2 - y1 * v^
3 - z1 * u^
3) + u * v^
3
9562 var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.p)
9563 // z3 = v^
3 * z1 * z2
9564 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9566 return new Point(this.curve, x3, y3, z3)
9569 Point.prototype.twice = function() {
9570 if (this.curve.isInfinity(this)) return this
9571 if (this.y.signum() ===
0) return this.curve.infinity
9576 var y1z1 = y1.multiply(this.z)
9577 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9578 var a = this.curve.a
9580 // w =
3 * x1^
2 + a * z1^
2
9581 var w = x1.square().multiply(THREE)
9583 if (a.signum() !==
0) {
9584 w = w.add(this.z.square().multiply(a))
9587 w = w.mod(this.curve.p)
9588 // x3 =
2 * y1 * z1 * (w^
2 -
8 * x1 * y1^
2 * z1)
9589 var x3 = w.square().subtract(x1.shiftLeft(
3).multiply(y1sqz1)).shiftLeft(
1).multiply(y1z1).mod(this.curve.p)
9590 // y3 =
4 * y1^
2 * z1 * (
3 * w * x1 -
2 * y1^
2 * z1) - w^
3
9591 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(
1)).shiftLeft(
2).multiply(y1sqz1).subtract(w.pow(
3)).mod(this.curve.p)
9592 // z3 =
8 * (y1 * z1)^
3
9593 var z3 = y1z1.pow(
3).shiftLeft(
3).mod(this.curve.p)
9595 return new Point(this.curve, x3, y3, z3)
9598 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9599 // TODO: modularize the multiplication algorithm
9600 Point.prototype.multiply = function(k) {
9601 if (this.curve.isInfinity(this)) return this
9602 if (k.signum() ===
0) return this.curve.infinity
9605 var h = e.multiply(THREE)
9607 var neg = this.negate()
9610 for (var i = h.bitLength() -
2; i
> 0; --i) {
9613 var hBit = h.testBit(i)
9614 var eBit = e.testBit(i)
9617 R = R.add(hBit ? this : neg)
9624 // Compute this*j + x*k (simultaneous multiplication)
9625 Point.prototype.multiplyTwo = function(j, x, k) {
9628 if (j.bitLength()
> k.bitLength())
9629 i = j.bitLength() -
1
9631 i = k.bitLength() -
1
9633 var R = this.curve.infinity
9634 var both = this.add(x)
9639 var jBit = j.testBit(i)
9640 var kBit = k.testBit(i)
9661 Point.prototype.getEncoded = function(compressed) {
9662 if (compressed == undefined) compressed = this.compressed
9663 if (this.curve.isInfinity(this)) return new Buffer('
00', 'hex') // Infinity point encoded is simply '
00'
9665 var x = this.affineX
9666 var y = this.affineY
9670 // Determine size of q in bytes
9671 var byteLength = Math.floor((this.curve.p.bitLength() +
7) /
8)
9675 buffer = new Buffer(
1 + byteLength)
9676 buffer.writeUInt8(y.isEven() ?
0x02 :
0x03,
0)
9680 buffer = new Buffer(
1 + byteLength + byteLength)
9681 buffer.writeUInt8(
0x04,
0)
9683 y.toBuffer(byteLength).copy(buffer,
1 + byteLength)
9686 x.toBuffer(byteLength).copy(buffer,
1)
9691 Point.decodeFrom = function(curve, buffer) {
9692 var type = buffer.readUInt8(
0)
9693 var compressed = (type !==
4)
9695 var byteLength = Math.floor((curve.p.bitLength() +
7) /
8)
9696 var x = BigInteger.fromBuffer(buffer.slice(
1,
1 + byteLength))
9700 assert.equal(buffer.length, byteLength +
1, 'Invalid sequence length')
9701 assert(type ===
0x02 || type ===
0x03, 'Invalid sequence tag')
9703 var isOdd = (type ===
0x03)
9704 Q = curve.pointFromX(isOdd, x)
9707 assert.equal(buffer.length,
1 + byteLength + byteLength, 'Invalid sequence length')
9709 var y = BigInteger.fromBuffer(buffer.slice(
1 + byteLength))
9710 Q = Point.fromAffine(curve, x, y)
9713 Q.compressed = compressed
9717 Point.prototype.toString = function () {
9718 if (this.curve.isInfinity(this)) return '(INFINITY)'
9720 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9723 module.exports = Point
9725 }).call(this,require("buffer").Buffer)
9726 },{"assert":
5,"bigi":
3,"buffer":
7}],
52:[function(require,module,exports){
9727 (function (process,global,Buffer){
9730 var crypto = global.crypto || global.msCrypto
9731 if(crypto && crypto.getRandomValues) {
9732 module.exports = randomBytes;
9734 module.exports = oldBrowser;
9736 function randomBytes(size, cb) {
9737 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9738 /* This will not work in older browsers.
9739 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9742 crypto.getRandomValues(bytes);
9743 if (typeof cb === 'function') {
9744 return process.nextTick(function () {
9750 function oldBrowser() {
9752 'secure random number generation not supported by this browser\n'+
9753 'use chrome, FireFox or Internet Explorer
11'
9757 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9758 },{"_process":
14,"buffer":
7}],
53:[function(require,module,exports){
9762 function getFunctionName(fn) {
9763 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[
1];
9766 function getTypeTypeName(type) {
9767 if (nativeTypes.Function(type)) {
9768 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9770 if (nativeTypes.Object(type)) return JSON.stringify(type);
9775 function getValueTypeName(value) {
9776 if (nativeTypes.Null(value)) return '';
9778 return getFunctionName(value.constructor);
9781 function tfErrorString(type, value) {
9782 var typeTypeName = getTypeTypeName(type);
9783 var valueTypeName = getValueTypeName(value);
9785 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9788 function tfPropertyErrorString(type, name, value) {
9789 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9793 Array: (function (_Array) {
9794 function Array(_x) {
9795 return _Array.apply(this, arguments);
9798 Array.toString = function () {
9799 return _Array.toString();
9803 })(function (value) {
9804 return value !== null && value !== undefined && value.constructor === Array;
9806 Boolean: function Boolean(value) {
9807 return typeof value === 'boolean';
9809 Buffer: (function (_Buffer) {
9810 function Buffer(_x2) {
9811 return _Buffer.apply(this, arguments);
9814 Buffer.toString = function () {
9815 return _Buffer.toString();
9819 })(function (value) {
9820 return Buffer.isBuffer(value);
9822 Function: function Function(value) {
9823 return typeof value === 'function';
9825 Null: function Null(value) {
9826 return value === undefined || value === null;
9828 Number: function Number(value) {
9829 return typeof value === 'number';
9831 Object: function Object(value) {
9832 return typeof value === 'object';
9834 String: function String(value) {
9835 return typeof value === 'string';
9842 function tJSON(type) {
9843 return type && type.toJSON ? type.toJSON() : type;
9846 function sJSON(type) {
9847 var json = tJSON(type);
9848 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9852 arrayOf: function arrayOf(type) {
9853 function arrayOf(value, strict) {
9855 return nativeTypes.Array(value) && value.every(function (x) {
9856 return typeforce(type, x, strict);
9862 arrayOf.toJSON = function () {
9863 return [tJSON(type)];
9869 maybe: function maybe(type) {
9870 function maybe(value, strict) {
9871 return nativeTypes.Null(value) || typeforce(type, value, strict);
9873 maybe.toJSON = function () {
9874 return '?' + sJSON(type);
9880 object: function object(type) {
9881 function object(value, strict) {
9882 typeforce(nativeTypes.Object, value, strict);
9884 var propertyName, propertyType, propertyValue;
9887 for (propertyName in type) {
9888 propertyType = type[propertyName];
9889 propertyValue = value[propertyName];
9891 typeforce(propertyType, propertyValue, strict);
9894 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9898 for (propertyName in value) {
9899 if (type[propertyName]) continue;
9901 throw new TypeError('Unexpected property "' + propertyName + '"');
9907 object.toJSON = function () {
9914 oneOf: function oneOf() {
9915 for (var _len = arguments.length, types = Array(_len), _key =
0; _key < _len; _key++) {
9916 types[_key] = arguments[_key];
9919 function oneOf(value, strict) {
9920 return types.some(function (type) {
9922 return typeforce(type, value, strict);
9928 oneOf.toJSON = function () {
9929 return types.map(sJSON).join('|');
9935 quacksLike: function quacksLike(type) {
9936 function quacksLike(value, strict) {
9937 return type === getValueTypeName(value);
9939 quacksLike.toJSON = function () {
9946 tuple: function tuple() {
9947 for (var _len2 = arguments.length, types = Array(_len2), _key2 =
0; _key2 < _len2; _key2++) {
9948 types[_key2] = arguments[_key2];
9951 function tuple(value, strict) {
9952 return types.every(function (type, i) {
9953 return typeforce(type, value[i], strict);
9956 tuple.toJSON = function () {
9957 return '(' + types.map(sJSON).join(', ') + ')';
9963 value: function value(expected) {
9964 function value(actual) {
9965 return actual === expected;
9967 value.toJSON = function () {
9975 function compile(type) {
9976 if (nativeTypes.String(type)) {
9977 if (type[
0] === '?') return otherTypes.maybe(compile(type.slice(
1)));
9979 return nativeTypes[type] || otherTypes.quacksLike(type);
9980 } else if (type && nativeTypes.Object(type)) {
9981 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[
0]));
9985 for (var propertyName in type) {
9986 compiled[propertyName] = compile(type[propertyName]);
9989 return otherTypes.object(compiled);
9990 } else if (nativeTypes.Function(type)) {
9994 return otherTypes.value(type);
9997 function typeforce(_x3, _x4, _x5) {
10000 _function: while (_again) {
10006 if (nativeTypes.Function(type)) {
10007 if (type(value, strict)) return true;
10009 throw new TypeError(tfErrorString(type, value));
10013 _x3 = compile(type);
10017 continue _function;
10021 // assign all types to typeforce function
10023 Object.keys(nativeTypes).forEach(function (typeName) {
10024 var nativeType = nativeTypes[typeName];
10025 nativeType.toJSON = function () {
10029 typeforce[typeName] = nativeType;
10032 for (typeName in otherTypes) {
10033 typeforce[typeName] = otherTypes[typeName];
10036 module.exports = typeforce;
10037 module.exports.compile = compile;
10038 }).call(this,require("buffer").Buffer)
10039 },{"buffer":
7}],
54:[function(require,module,exports){
10040 (function (Buffer){
10041 var assert = require('assert')
10042 var base58check = require('bs58check')
10043 var typeForce = require('typeforce')
10044 var networks = require('./networks')
10045 var scripts = require('./scripts')
10047 function findScriptTypeByVersion (version) {
10048 for (var networkName in networks) {
10049 var network = networks[networkName]
10051 if (version === network.pubKeyHash) return 'pubkeyhash'
10052 if (version === network.scriptHash) return 'scripthash'
10056 function Address (hash, version) {
10057 typeForce('Buffer', hash)
10059 assert.strictEqual(hash.length,
20, 'Invalid hash length')
10060 assert.strictEqual(version &
0xff, version, 'Invalid version byte')
10063 this.version = version
10066 Address.fromBase58Check = function (string) {
10067 var payload = base58check.decode(string)
10068 var version = payload.readUInt8(
0)
10069 var hash = payload.slice(
1)
10071 return new Address(hash, version)
10074 Address.fromOutputScript = function (script, network) {
10075 network = network || networks.bitcoin
10077 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[
2], network.pubKeyHash)
10078 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[
1], network.scriptHash)
10080 assert(false, script.toASM() + ' has no matching Address')
10083 Address.prototype.toBase58Check = function () {
10084 var payload = new Buffer(
21)
10085 payload.writeUInt8(this.version,
0)
10086 this.hash.copy(payload,
1)
10088 return base58check.encode(payload)
10091 Address.prototype.toOutputScript = function () {
10092 var scriptType = findScriptTypeByVersion(this.version)
10094 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10095 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10097 assert(false, this.toString() + ' has no matching Script')
10100 Address.prototype.toString = Address.prototype.toBase58Check
10102 module.exports = Address
10104 }).call(this,require("buffer").Buffer)
10105 },{"./networks":
66,"./scripts":
69,"assert":
5,"bs58check":
31,"buffer":
7,"typeforce":
53}],
55:[function(require,module,exports){
10106 var bs58check = require('bs58check')
10108 function decode () {
10109 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
10111 return bs58check.decode.apply(undefined, arguments)
10114 function encode () {
10115 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
10117 return bs58check.encode.apply(undefined, arguments)
10125 },{"bs58check":
31}],
56:[function(require,module,exports){
10126 (function (Buffer){
10127 var assert = require('assert')
10128 var bufferutils = require('./bufferutils')
10129 var crypto = require('./crypto')
10131 var Transaction = require('./transaction')
10133 function Block () {
10135 this.prevHash = null
10136 this.merkleRoot = null
10142 Block.fromBuffer = function (buffer) {
10143 assert(buffer.length
>=
80, 'Buffer too small (<
80 bytes)')
10146 function readSlice (n) {
10148 return buffer.slice(offset - n, offset)
10151 function readUInt32 () {
10152 var i = buffer.readUInt32LE(offset)
10157 var block = new Block()
10158 block.version = readUInt32()
10159 block.prevHash = readSlice(
32)
10160 block.merkleRoot = readSlice(
32)
10161 block.timestamp = readUInt32()
10162 block.bits = readUInt32()
10163 block.nonce = readUInt32()
10165 if (buffer.length ===
80) return block
10167 function readVarInt () {
10168 var vi = bufferutils.readVarInt(buffer, offset)
10173 // FIXME: poor performance
10174 function readTransaction () {
10175 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10177 offset += tx.toBuffer().length
10181 var nTransactions = readVarInt()
10182 block.transactions = []
10184 for (var i =
0; i < nTransactions; ++i) {
10185 var tx = readTransaction()
10186 block.transactions.push(tx)
10192 Block.fromHex = function (hex) {
10193 return Block.fromBuffer(new Buffer(hex, 'hex'))
10196 Block.prototype.getHash = function () {
10197 return crypto.hash256(this.toBuffer(true))
10200 Block.prototype.getId = function () {
10201 return bufferutils.reverse(this.getHash()).toString('hex')
10204 Block.prototype.getUTCDate = function () {
10205 var date = new Date(
0) // epoch
10206 date.setUTCSeconds(this.timestamp)
10211 Block.prototype.toBuffer = function (headersOnly) {
10212 var buffer = new Buffer(
80)
10215 function writeSlice (slice) {
10216 slice.copy(buffer, offset)
10217 offset += slice.length
10220 function writeUInt32 (i) {
10221 buffer.writeUInt32LE(i, offset)
10225 writeUInt32(this.version)
10226 writeSlice(this.prevHash)
10227 writeSlice(this.merkleRoot)
10228 writeUInt32(this.timestamp)
10229 writeUInt32(this.bits)
10230 writeUInt32(this.nonce)
10232 if (headersOnly || !this.transactions) return buffer
10234 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10235 var txBuffers = this.transactions.map(function (tx) {
10236 return tx.toBuffer()
10239 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10242 Block.prototype.toHex = function (headersOnly) {
10243 return this.toBuffer(headersOnly).toString('hex')
10246 module.exports = Block
10248 }).call(this,require("buffer").Buffer)
10249 },{"./bufferutils":
57,"./crypto":
58,"./transaction":
70,"assert":
5,"buffer":
7}],
57:[function(require,module,exports){
10250 (function (Buffer){
10251 var assert = require('assert')
10252 var opcodes = require('./opcodes')
10254 // https://github.com/feross/buffer/blob/master/index.js#L1127
10255 function verifuint (value, max) {
10256 assert(typeof value === 'number', 'cannot write a non-number as a number')
10257 assert(value
>=
0, 'specified a negative value for writing an unsigned value')
10258 assert(value <= max, 'value is larger than maximum value for type')
10259 assert(Math.floor(value) === value, 'value has a fractional component')
10262 function pushDataSize (i) {
10263 return i < opcodes.OP_PUSHDATA1 ?
1
10269 function readPushDataInt (buffer, offset) {
10270 var opcode = buffer.readUInt8(offset)
10274 if (opcode < opcodes.OP_PUSHDATA1) {
10279 } else if (opcode === opcodes.OP_PUSHDATA1) {
10280 if (offset +
2 > buffer.length) return null
10281 number = buffer.readUInt8(offset +
1)
10285 } else if (opcode === opcodes.OP_PUSHDATA2) {
10286 if (offset +
3 > buffer.length) return null
10287 number = buffer.readUInt16LE(offset +
1)
10292 if (offset +
5 > buffer.length) return null
10293 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10295 number = buffer.readUInt32LE(offset +
1)
10306 function readUInt64LE (buffer, offset) {
10307 var a = buffer.readUInt32LE(offset)
10308 var b = buffer.readUInt32LE(offset +
4)
10311 verifuint(b + a,
0x001fffffffffffff)
10316 function readVarInt (buffer, offset) {
10317 var t = buffer.readUInt8(offset)
10326 } else if (t <
254) {
10327 number = buffer.readUInt16LE(offset +
1)
10331 } else if (t <
255) {
10332 number = buffer.readUInt32LE(offset +
1)
10337 number = readUInt64LE(buffer, offset +
1)
10347 function writePushDataInt (buffer, number, offset) {
10348 var size = pushDataSize(number)
10352 buffer.writeUInt8(number, offset)
10355 } else if (size ===
2) {
10356 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10357 buffer.writeUInt8(number, offset +
1)
10360 } else if (size ===
3) {
10361 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10362 buffer.writeUInt16LE(number, offset +
1)
10366 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10367 buffer.writeUInt32LE(number, offset +
1)
10373 function writeUInt64LE (buffer, value, offset) {
10374 verifuint(value,
0x001fffffffffffff)
10376 buffer.writeInt32LE(value & -
1, offset)
10377 buffer.writeUInt32LE(Math.floor(value /
0x100000000), offset +
4)
10380 function varIntSize (i) {
10383 : i <
0x100000000 ?
5
10387 function writeVarInt (buffer, number, offset) {
10388 var size = varIntSize(number)
10392 buffer.writeUInt8(number, offset)
10395 } else if (size ===
3) {
10396 buffer.writeUInt8(
253, offset)
10397 buffer.writeUInt16LE(number, offset +
1)
10400 } else if (size ===
5) {
10401 buffer.writeUInt8(
254, offset)
10402 buffer.writeUInt32LE(number, offset +
1)
10406 buffer.writeUInt8(
255, offset)
10407 writeUInt64LE(buffer, number, offset +
1)
10413 function varIntBuffer (i) {
10414 var size = varIntSize(i)
10415 var buffer = new Buffer(size)
10416 writeVarInt(buffer, i,
0)
10421 function reverse (buffer) {
10422 var buffer2 = new Buffer(buffer)
10423 Array.prototype.reverse.call(buffer2)
10428 pushDataSize: pushDataSize,
10429 readPushDataInt: readPushDataInt,
10430 readUInt64LE: readUInt64LE,
10431 readVarInt: readVarInt,
10433 varIntBuffer: varIntBuffer,
10434 varIntSize: varIntSize,
10435 writePushDataInt: writePushDataInt,
10436 writeUInt64LE: writeUInt64LE,
10437 writeVarInt: writeVarInt
10440 }).call(this,require("buffer").Buffer)
10441 },{"./opcodes":
67,"assert":
5,"buffer":
7}],
58:[function(require,module,exports){
10442 var createHash = require('create-hash')
10444 function hash160 (buffer) {
10445 return ripemd160(sha256(buffer))
10448 function hash256 (buffer) {
10449 return sha256(sha256(buffer))
10452 function ripemd160 (buffer) {
10453 return createHash('rmd160').update(buffer).digest()
10456 function sha1 (buffer) {
10457 return createHash('sha1').update(buffer).digest()
10460 function sha256 (buffer) {
10461 return createHash('sha256').update(buffer).digest()
10464 // FIXME: Name not consistent with others
10465 var createHmac = require('create-hmac')
10467 function HmacSHA256 (buffer, secret) {
10468 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10469 return createHmac('sha256', secret).update(buffer).digest()
10472 function HmacSHA512 (buffer, secret) {
10473 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10474 return createHmac('sha512', secret).update(buffer).digest()
10478 ripemd160: ripemd160,
10483 HmacSHA256: HmacSHA256,
10484 HmacSHA512: HmacSHA512
10487 },{"create-hash":
32,"create-hmac":
45}],
59:[function(require,module,exports){
10488 (function (Buffer){
10489 var assert = require('assert')
10490 var createHmac = require('create-hmac')
10491 var typeForce = require('typeforce')
10493 var BigInteger = require('bigi')
10494 var ECSignature = require('./ecsignature')
10496 var ZERO = new Buffer([
0])
10497 var ONE = new Buffer([
1])
10499 // https://tools.ietf.org/html/rfc6979#section-
3.2
10500 function deterministicGenerateK (curve, hash, d, checkSig) {
10501 typeForce('Buffer', hash)
10502 typeForce('BigInteger', d)
10504 // FIXME: remove/uncomment for
2.0.0
10505 // typeForce('Function', checkSig)
10507 if (typeof checkSig !== 'function') {
10508 console.warn('deterministicGenerateK requires a checkSig callback in
2.0.0, see #
337 for more information')
10510 checkSig = function (k) {
10513 var e = BigInteger.fromBuffer(hash)
10515 var Q = G.multiply(k)
10517 if (curve.isInfinity(Q))
10520 var r = Q.affineX.mod(n)
10521 if (r.signum() ===
0)
10524 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10525 if (s.signum() ===
0)
10533 assert.equal(hash.length,
32, 'Hash must be
256 bit')
10535 var x = d.toBuffer(
32)
10536 var k = new Buffer(
32)
10537 var v = new Buffer(
32)
10539 // Step A, ignored as hash already provided
10547 k = createHmac('sha256', k)
10555 v = createHmac('sha256', k).update(v).digest()
10558 k = createHmac('sha256', k)
10566 v = createHmac('sha256', k).update(v).digest()
10568 // Step H1/H2a, ignored as tlen === qlen (
256 bit)
10570 v = createHmac('sha256', k).update(v).digest()
10572 var T = BigInteger.fromBuffer(v)
10574 // Step H3, repeat until T is within the interval [
1, n -
1] and is suitable for ECDSA
10575 while ((T.signum() <=
0) || (T.compareTo(curve.n)
>=
0) || !checkSig(T)) {
10576 k = createHmac('sha256', k)
10581 v = createHmac('sha256', k).update(v).digest()
10583 // Step H1/H2a, again, ignored as tlen === qlen (
256 bit)
10585 v = createHmac('sha256', k).update(v).digest()
10586 T = BigInteger.fromBuffer(v)
10592 function sign (curve, hash, d) {
10595 var e = BigInteger.fromBuffer(hash)
10599 deterministicGenerateK(curve, hash, d, function (k) {
10600 var Q = G.multiply(k)
10602 if (curve.isInfinity(Q))
10605 r = Q.affineX.mod(n)
10606 if (r.signum() ===
0)
10609 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10610 if (s.signum() ===
0)
10616 var N_OVER_TWO = n.shiftRight(
1)
10618 // enforce low S values, see bip62: 'low s values in signatures'
10619 if (s.compareTo(N_OVER_TWO)
> 0) {
10623 return new ECSignature(r, s)
10626 function verifyRaw (curve, e, signature, Q) {
10630 var r = signature.r
10631 var s = signature.s
10633 //
1.4.1 Enforce r and s are both integers in the interval [
1, n −
1]
10634 if (r.signum() <=
0 || r.compareTo(n)
>=
0) return false
10635 if (s.signum() <=
0 || s.compareTo(n)
>=
0) return false
10638 var c = s.modInverse(n)
10640 //
1.4.4 Compute u1 = es^−
1 mod n
10641 // u2 = rs^−
1 mod n
10642 var u1 = e.multiply(c).mod(n)
10643 var u2 = r.multiply(c).mod(n)
10645 //
1.4.5 Compute R = (xR, yR) = u1G + u2Q
10646 var R = G.multiplyTwo(u1, Q, u2)
10647 var v = R.affineX.mod(n)
10649 //
1.4.5 (cont.) Enforce R is not at infinity
10650 if (curve.isInfinity(R)) return false
10652 //
1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10656 function verify (curve, hash, signature, Q) {
10657 //
1.4.2 H = Hash(M), already done by the user
10659 var e = BigInteger.fromBuffer(hash)
10661 return verifyRaw(curve, e, signature, Q)
10665 * Recover a public key from a signature.
10667 * See SEC
1: Elliptic Curve Cryptography, section
4.1.6, "Public
10668 * Key Recovery Operation".
10670 * http://www.secg.org/download/aid-
780/sec1-v2.pdf
10672 function recoverPubKey (curve, e, signature, i) {
10673 assert.strictEqual(i &
3, i, 'Recovery param is more than two bits')
10678 var r = signature.r
10679 var s = signature.s
10681 assert(r.signum()
> 0 && r.compareTo(n) <
0, 'Invalid r value')
10682 assert(s.signum()
> 0 && s.compareTo(n) <
0, 'Invalid s value')
10684 // A set LSB signifies that the y-coordinate is odd
10687 // The more significant bit specifies whether we should use the
10688 // first or second candidate key.
10689 var isSecondKey = i
>> 1
10691 //
1.1 Let x = r + jn
10692 var x = isSecondKey ? r.add(n) : r
10693 var R = curve.pointFromX(isYOdd, x)
10695 //
1.4 Check that nR is at infinity
10696 var nR = R.multiply(n)
10697 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10699 // Compute -e from e
10700 var eNeg = e.negate().mod(n)
10702 //
1.6.1 Compute Q = r^-
1 (sR - eG)
10703 // Q = r^-
1 (sR + -eG)
10704 var rInv = r.modInverse(n)
10706 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10713 * Calculate pubkey extraction parameter.
10715 * When extracting a pubkey from a signature, we have to
10716 * distinguish four different cases. Rather than putting this
10717 * burden on the verifier, Bitcoin includes a
2-bit value with the
10720 * This function simply tries all four cases and returns the value
10721 * that resulted in a successful pubkey recovery.
10723 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10724 for (var i =
0; i <
4; i++) {
10725 var Qprime = recoverPubKey(curve, e, signature, i)
10728 if (Qprime.equals(Q)) {
10733 throw new Error('Unable to find valid recovery factor')
10737 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10738 deterministicGenerateK: deterministicGenerateK,
10739 recoverPubKey: recoverPubKey,
10742 verifyRaw: verifyRaw
10745 }).call(this,require(
"buffer").Buffer)
10746 },{
"./ecsignature":
62,
"assert":
5,
"bigi":
3,
"buffer":
7,
"create-hmac":
45,
"typeforce":
53}],
60:[function(require,module,exports){
10747 (function (Buffer){
10748 var assert = require('assert')
10749 var base58check = require('bs58check')
10750 var ecdsa = require('./ecdsa')
10751 var networks = require('./networks')
10752 var randomBytes = require('randombytes')
10753 var typeForce = require('typeforce')
10755 var BigInteger = require('bigi')
10756 var ECPubKey = require('./ecpubkey')
10758 var ecurve = require('ecurve')
10759 var secp256k1 = ecurve.getCurveByName('secp256k1')
10761 function ECKey (d, compressed) {
10762 assert(d.signum()
> 0, 'Private key must be greater than
0')
10763 assert(d.compareTo(ECKey.curve.n) <
0, 'Private key must be less than the curve order')
10765 var Q = ECKey.curve.G.multiply(d)
10768 this.pub = new ECPubKey(Q, compressed)
10772 ECKey.curve = secp256k1
10774 // Static constructors
10775 ECKey.fromWIF = function (string) {
10776 var payload = base58check.decode(string)
10777 var compressed = false
10779 // Ignore the version byte
10780 payload = payload.slice(
1)
10782 if (payload.length ===
33) {
10783 assert.strictEqual(payload[
32],
0x01, 'Invalid compression flag')
10785 // Truncate the compression flag
10786 payload = payload.slice(
0, -
1)
10790 assert.equal(payload.length,
32, 'Invalid WIF payload length')
10792 var d = BigInteger.fromBuffer(payload)
10793 return new ECKey(d, compressed)
10796 ECKey.makeRandom = function (compressed, rng) {
10797 rng = rng || randomBytes
10799 var buffer = rng(
32)
10800 typeForce('Buffer', buffer)
10801 assert.equal(buffer.length,
32, 'Expected
256-bit Buffer from RNG')
10803 var d = BigInteger.fromBuffer(buffer)
10804 d = d.mod(ECKey.curve.n)
10806 return new ECKey(d, compressed)
10809 // Export functions
10810 ECKey.prototype.toWIF = function (network) {
10811 network = network || networks.bitcoin
10813 var bufferLen = this.pub.compressed ?
34 :
33
10814 var buffer = new Buffer(bufferLen)
10816 buffer.writeUInt8(network.wif,
0)
10817 this.d.toBuffer(
32).copy(buffer,
1)
10819 if (this.pub.compressed) {
10820 buffer.writeUInt8(
0x01,
33)
10823 return base58check.encode(buffer)
10827 ECKey.prototype.sign = function (hash) {
10828 return ecdsa.sign(ECKey.curve, hash, this.d)
10831 module.exports = ECKey
10833 }).call(this,require(
"buffer").Buffer)
10834 },{
"./ecdsa":
59,
"./ecpubkey":
61,
"./networks":
66,
"assert":
5,
"bigi":
3,
"bs58check":
31,
"buffer":
7,
"ecurve":
49,
"randombytes":
52,
"typeforce":
53}],
61:[function(require,module,exports){
10835 (function (Buffer){
10836 var crypto = require('./crypto')
10837 var ecdsa = require('./ecdsa')
10838 var typeForce = require('typeforce')
10839 var networks = require('./networks')
10841 var Address = require('./address')
10843 var ecurve = require('ecurve')
10844 var secp256k1 = ecurve.getCurveByName('secp256k1')
10846 function ECPubKey (Q, compressed) {
10847 if (compressed === undefined) {
10851 typeForce('Point', Q)
10852 typeForce('Boolean', compressed)
10854 this.compressed = compressed
10859 ECPubKey.curve = secp256k1
10861 // Static constructors
10862 ECPubKey.fromBuffer = function (buffer) {
10863 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10864 return new ECPubKey(Q, Q.compressed)
10867 ECPubKey.fromHex = function (hex) {
10868 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10872 ECPubKey.prototype.getAddress = function (network) {
10873 network = network || networks.bitcoin
10875 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10878 ECPubKey.prototype.verify = function (hash, signature) {
10879 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10882 // Export functions
10883 ECPubKey.prototype.toBuffer = function () {
10884 return this.Q.getEncoded(this.compressed)
10887 ECPubKey.prototype.toHex = function () {
10888 return this.toBuffer().toString('hex')
10891 module.exports = ECPubKey
10893 }).call(this,require(
"buffer").Buffer)
10894 },{
"./address":
54,
"./crypto":
58,
"./ecdsa":
59,
"./networks":
66,
"buffer":
7,
"ecurve":
49,
"typeforce":
53}],
62:[function(require,module,exports){
10895 (function (Buffer){
10896 var assert = require('assert')
10897 var typeForce = require('typeforce')
10899 var BigInteger = require('bigi')
10901 function ECSignature (r, s) {
10902 typeForce('BigInteger', r)
10903 typeForce('BigInteger', s)
10909 ECSignature.parseCompact = function (buffer) {
10910 assert.equal(buffer.length,
65, 'Invalid signature length')
10911 var i = buffer.readUInt8(
0) -
27
10914 assert.equal(i, i &
7, 'Invalid signature parameter')
10915 var compressed = !!(i &
4)
10917 // Recovery param only
10920 var r = BigInteger.fromBuffer(buffer.slice(
1,
33))
10921 var s = BigInteger.fromBuffer(buffer.slice(
33))
10924 compressed: compressed,
10926 signature: new ECSignature(r, s)
10930 ECSignature.fromDER = function (buffer) {
10931 assert.equal(buffer.readUInt8(
0),
0x30, 'Not a DER sequence')
10932 assert.equal(buffer.readUInt8(
1), buffer.length -
2, 'Invalid sequence length')
10933 assert.equal(buffer.readUInt8(
2),
0x02, 'Expected a DER integer')
10935 var rLen = buffer.readUInt8(
3)
10936 assert(rLen
> 0, 'R length is zero')
10938 var offset =
4 + rLen
10939 assert.equal(buffer.readUInt8(offset),
0x02, 'Expected a DER integer (
2)')
10941 var sLen = buffer.readUInt8(offset +
1)
10942 assert(sLen
> 0, 'S length is zero')
10944 var rB = buffer.slice(
4, offset)
10945 var sB = buffer.slice(offset +
2)
10948 if (rLen
> 1 && rB.readUInt8(
0) ===
0x00) {
10949 assert(rB.readUInt8(
1) &
0x80, 'R value excessively padded')
10952 if (sLen
> 1 && sB.readUInt8(
0) ===
0x00) {
10953 assert(sB.readUInt8(
1) &
0x80, 'S value excessively padded')
10956 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10957 var r = BigInteger.fromDERInteger(rB)
10958 var s = BigInteger.fromDERInteger(sB)
10960 assert(r.signum()
>=
0, 'R value is negative')
10961 assert(s.signum()
>=
0, 'S value is negative')
10963 return new ECSignature(r, s)
10966 // BIP62:
1 byte hashType flag (only
0x01,
0x02,
0x03,
0x81,
0x82 and
0x83 are allowed)
10967 ECSignature.parseScriptSignature = function (buffer) {
10968 var hashType = buffer.readUInt8(buffer.length -
1)
10969 var hashTypeMod = hashType & ~
0x80
10971 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
10974 signature: ECSignature.fromDER(buffer.slice(
0, -
1)),
10979 ECSignature.prototype.toCompact = function (i, compressed) {
10986 var buffer = new Buffer(
65)
10987 buffer.writeUInt8(i,
0)
10989 this.r.toBuffer(
32).copy(buffer,
1)
10990 this.s.toBuffer(
32).copy(buffer,
33)
10995 ECSignature.prototype.toDER = function () {
10996 var rBa = this.r.toDERInteger()
10997 var sBa = this.s.toDERInteger()
11002 sequence.push(
0x02, rBa.length)
11003 sequence = sequence.concat(rBa)
11006 sequence.push(
0x02, sBa.length)
11007 sequence = sequence.concat(sBa)
11010 sequence.unshift(
0x30, sequence.length)
11012 return new Buffer(sequence)
11015 ECSignature.prototype.toScriptSignature = function (hashType) {
11016 var hashTypeMod = hashType & ~
0x80
11017 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
11019 var hashTypeBuffer = new Buffer(
1)
11020 hashTypeBuffer.writeUInt8(hashType,
0)
11022 return Buffer.concat([this.toDER(), hashTypeBuffer])
11025 module.exports = ECSignature
11027 }).call(this,require(
"buffer").Buffer)
11028 },{
"assert":
5,
"bigi":
3,
"buffer":
7,
"typeforce":
53}],
63:[function(require,module,exports){
11029 (function (Buffer){
11030 var assert = require('assert')
11031 var base58check = require('bs58check')
11032 var bcrypto = require('./crypto')
11033 var createHmac = require('create-hmac')
11034 var typeForce = require('typeforce')
11035 var networks = require('./networks')
11037 var BigInteger = require('bigi')
11038 var ECKey = require('./eckey')
11039 var ECPubKey = require('./ecpubkey')
11041 var ecurve = require('ecurve')
11042 var curve = ecurve.getCurveByName('secp256k1')
11044 function findBIP32NetworkByVersion (version) {
11045 for (var name in networks) {
11046 var network = networks[name]
11048 if (version === network.bip32.private || version === network.bip32.public) {
11053 assert(false, 'Could not find network for ' + version.toString(
16))
11056 function HDNode (K, chainCode, network) {
11057 network = network || networks.bitcoin
11059 typeForce('Buffer', chainCode)
11061 assert.equal(chainCode.length,
32, 'Expected chainCode length of
32, got ' + chainCode.length)
11062 assert(network.bip32, 'Unknown BIP32 constants for network')
11064 this.chainCode = chainCode
11067 this.parentFingerprint =
0x00000000
11068 this.network = network
11070 if (K instanceof BigInteger) {
11071 this.privKey = new ECKey(K, true)
11072 this.pubKey = this.privKey.pub
11073 } else if (K instanceof ECKey) {
11074 assert(K.pub.compressed, 'ECKey must be compressed')
11076 this.pubKey = K.pub
11077 } else if (K instanceof ECPubKey) {
11078 assert(K.compressed, 'ECPubKey must be compressed')
11081 this.pubKey = new ECPubKey(K, true)
11085 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11086 HDNode.HIGHEST_BIT =
0x80000000
11089 HDNode.fromSeedBuffer = function (seed, network) {
11090 typeForce('Buffer', seed)
11092 assert(seed.length
>=
16, 'Seed should be at least
128 bits')
11093 assert(seed.length <=
64, 'Seed should be at most
512 bits')
11095 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
11096 var IL = I.slice(
0,
32)
11097 var IR = I.slice(
32)
11099 // In case IL is
0 or
>= n, the master key is invalid
11100 // This is handled by `new ECKey` in the HDNode constructor
11101 var pIL = BigInteger.fromBuffer(IL)
11103 return new HDNode(pIL, IR, network)
11106 HDNode.fromSeedHex = function (hex, network) {
11107 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11110 HDNode.fromBase58 = function (string, network) {
11111 return HDNode.fromBuffer(base58check.decode(string), network, true)
11114 // FIXME: remove in
2.x.y
11115 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11116 if (!__ignoreDeprecation) {
11117 console.warn('HDNode.fromBuffer() is deprecated for removal in
2.x.y, use fromBase58 instead')
11120 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11122 //
4 byte: version bytes
11123 var version = buffer.readUInt32BE(
0)
11126 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11130 network = findBIP32NetworkByVersion(version)
11133 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ...
11134 var depth = buffer.readUInt8(
4)
11136 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11137 var parentFingerprint = buffer.readUInt32BE(
5)
11139 assert.strictEqual(parentFingerprint,
0x00000000, 'Invalid parent fingerprint')
11142 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11143 // This is encoded in MSB order. (
0x00000000 if master key)
11144 var index = buffer.readUInt32BE(
9)
11145 assert(depth
> 0 || index ===
0, 'Invalid index')
11147 //
32 bytes: the chain code
11148 var chainCode = buffer.slice(
13,
45)
11151 //
33 bytes: private key data (
0x00 + k)
11152 if (version === network.bip32.private) {
11153 assert.strictEqual(buffer.readUInt8(
45),
0x00, 'Invalid private key')
11154 data = buffer.slice(
46,
78)
11155 var d = BigInteger.fromBuffer(data)
11156 hd = new HDNode(d, chainCode, network)
11158 //
33 bytes: public key data (
0x02 + X or
0x03 + X)
11160 data = buffer.slice(
45,
78)
11161 var Q = ecurve.Point.decodeFrom(curve, data)
11162 assert.equal(Q.compressed, true, 'Invalid public key')
11164 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11165 // If not, the extended public key is invalid.
11168 hd = new HDNode(Q, chainCode, network)
11173 hd.parentFingerprint = parentFingerprint
11178 // FIXME: remove in
2.x.y
11179 HDNode.fromHex = function (hex, network) {
11180 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
11183 HDNode.prototype.getIdentifier = function () {
11184 return bcrypto.hash160(this.pubKey.toBuffer())
11187 HDNode.prototype.getFingerprint = function () {
11188 return this.getIdentifier().slice(
0,
4)
11191 HDNode.prototype.getAddress = function () {
11192 return this.pubKey.getAddress(this.network)
11195 HDNode.prototype.neutered = function () {
11196 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11197 neutered.depth = this.depth
11198 neutered.index = this.index
11199 neutered.parentFingerprint = this.parentFingerprint
11204 HDNode.prototype.toBase58 = function (isPrivate) {
11205 return base58check.encode(this.toBuffer(isPrivate, true))
11208 // FIXME: remove in
2.x.y
11209 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11210 if (isPrivate === undefined) {
11211 isPrivate = !!this.privKey
11213 // FIXME: remove in
2.x.y
11215 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11218 if (!__ignoreDeprecation) {
11219 console.warn('HDNode.toBuffer() is deprecated for removal in
2.x.y, use toBase58 instead')
11223 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11224 var buffer = new Buffer(HDNode.LENGTH)
11226 //
4 bytes: version bytes
11227 buffer.writeUInt32BE(version,
0)
11230 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ....
11231 buffer.writeUInt8(this.depth,
4)
11233 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11234 buffer.writeUInt32BE(this.parentFingerprint,
5)
11236 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11237 // This is encoded in Big endian. (
0x00000000 if master key)
11238 buffer.writeUInt32BE(this.index,
9)
11240 //
32 bytes: the chain code
11241 this.chainCode.copy(buffer,
13)
11243 //
33 bytes: the public key or private key data
11245 // FIXME: remove in
2.x.y
11246 assert(this.privKey, 'Missing private key')
11248 //
0x00 + k for private keys
11249 buffer.writeUInt8(
0,
45)
11250 this.privKey.d.toBuffer(
32).copy(buffer,
46)
11252 // X9.62 encoding for public keys
11253 this.pubKey.toBuffer().copy(buffer,
45)
11259 // FIXME: remove in
2.x.y
11260 HDNode.prototype.toHex = function (isPrivate) {
11261 return this.toBuffer(isPrivate).toString('hex')
11264 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#child-key-derivation-ckd-functions
11265 HDNode.prototype.derive = function (index) {
11266 var isHardened = index
>= HDNode.HIGHEST_BIT
11267 var indexBuffer = new Buffer(
4)
11268 indexBuffer.writeUInt32BE(index,
0)
11274 assert(this.privKey, 'Could not derive hardened child key')
11276 // data =
0x00 || ser256(kpar) || ser32(index)
11277 data = Buffer.concat([
11278 this.privKey.d.toBuffer(
33),
11284 // data = serP(point(kpar)) || ser32(index)
11285 // = serP(Kpar) || ser32(index)
11286 data = Buffer.concat([
11287 this.pubKey.toBuffer(),
11292 var I = createHmac('sha512', this.chainCode).update(data).digest()
11293 var IL = I.slice(
0,
32)
11294 var IR = I.slice(
32)
11296 var pIL = BigInteger.fromBuffer(IL)
11298 // In case parse256(IL)
>= n, proceed with the next value for i
11299 if (pIL.compareTo(curve.n)
>=
0) {
11300 return this.derive(index +
1)
11303 // Private parent key -
> private child key
11305 if (this.privKey) {
11306 // ki = parse256(IL) + kpar (mod n)
11307 var ki = pIL.add(this.privKey.d).mod(curve.n)
11309 // In case ki ==
0, proceed with the next value for i
11310 if (ki.signum() ===
0) {
11311 return this.derive(index +
1)
11314 hd = new HDNode(ki, IR, this.network)
11316 // Public parent key -
> public child key
11318 // Ki = point(parse256(IL)) + Kpar
11320 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11322 // In case Ki is the point at infinity, proceed with the next value for i
11323 if (curve.isInfinity(Ki)) {
11324 return this.derive(index +
1)
11327 hd = new HDNode(Ki, IR, this.network)
11330 hd.depth = this.depth +
1
11332 hd.parentFingerprint = this.getFingerprint().readUInt32BE(
0)
11337 HDNode.prototype.deriveHardened = function (index) {
11338 // Only derives hardened private keys by default
11339 return this.derive(index + HDNode.HIGHEST_BIT)
11342 HDNode.prototype.toString = HDNode.prototype.toBase58
11344 module.exports = HDNode
11346 }).call(this,require("buffer").Buffer)
11347 },{"./crypto":
58,"./eckey":
60,"./ecpubkey":
61,"./networks":
66,"assert":
5,"bigi":
3,"bs58check":
31,"buffer":
7,"create-hmac":
45,"ecurve":
49,"typeforce":
53}],
64:[function(require,module,exports){
11349 Address: require('./address'),
11350 base58check: require('./base58check'),
11351 Block: require('./block'),
11352 bufferutils: require('./bufferutils'),
11353 crypto: require('./crypto'),
11354 ecdsa: require('./ecdsa'),
11355 ECKey: require('./eckey'),
11356 ECPubKey: require('./ecpubkey'),
11357 ECSignature: require('./ecsignature'),
11358 Message: require('./message'),
11359 opcodes: require('./opcodes'),
11360 HDNode: require('./hdnode'),
11361 Script: require('./script'),
11362 scripts: require('./scripts'),
11363 Transaction: require('./transaction'),
11364 TransactionBuilder: require('./transaction_builder'),
11365 networks: require('./networks'),
11366 Wallet: require('./wallet')
11369 },{"./address":
54,"./base58check":
55,"./block":
56,"./bufferutils":
57,"./crypto":
58,"./ecdsa":
59,"./eckey":
60,"./ecpubkey":
61,"./ecsignature":
62,"./hdnode":
63,"./message":
65,"./networks":
66,"./opcodes":
67,"./script":
68,"./scripts":
69,"./transaction":
70,"./transaction_builder":
71,"./wallet":
72}],
65:[function(require,module,exports){
11370 (function (Buffer){
11371 var bufferutils = require('./bufferutils')
11372 var crypto = require('./crypto')
11373 var ecdsa = require('./ecdsa')
11374 var networks = require('./networks')
11376 var BigInteger = require('bigi')
11377 var ECPubKey = require('./ecpubkey')
11378 var ECSignature = require('./ecsignature')
11380 var ecurve = require('ecurve')
11381 var ecparams = ecurve.getCurveByName('secp256k1')
11383 function magicHash (message, network) {
11384 var magicPrefix = new Buffer(network.magicPrefix)
11385 var messageBuffer = new Buffer(message)
11386 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11388 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11389 return crypto.hash256(buffer)
11392 function sign (privKey, message, network) {
11393 network = network || networks.bitcoin
11395 var hash = magicHash(message, network)
11396 var signature = privKey.sign(hash)
11397 var e = BigInteger.fromBuffer(hash)
11398 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11400 return signature.toCompact(i, privKey.pub.compressed)
11403 // TODO: network could be implied from address
11404 function verify (address, signature, message, network) {
11405 if (!Buffer.isBuffer(signature)) {
11406 signature = new Buffer(signature, 'base64')
11409 network = network || networks.bitcoin
11411 var hash = magicHash(message, network)
11412 var parsed = ECSignature.parseCompact(signature)
11413 var e = BigInteger.fromBuffer(hash)
11414 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11416 var pubKey = new ECPubKey(Q, parsed.compressed)
11417 return pubKey.getAddress(network).toString() === address.toString()
11421 magicHash: magicHash,
11426 }).call(this,require("buffer").Buffer)
11427 },{"./bufferutils":
57,"./crypto":
58,"./ecdsa":
59,"./ecpubkey":
61,"./ecsignature":
62,"./networks":
66,"bigi":
3,"buffer":
7,"ecurve":
49}],
66:[function(require,module,exports){
11428 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11429 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=
409731
11433 magicPrefix: '\x18Bitcoin Signed Message:\n',
11435 public:
0x0488b21e,
11436 private:
0x0488ade4
11441 dustThreshold:
546, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/core.h#L151-L162
11442 feePerKb:
10000, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/main.cpp#L53
11443 estimateFee: estimateFee('bitcoin')
11446 magicPrefix: '\x18Bitcoin Signed Message:\n',
11448 public:
0x043587cf,
11449 private:
0x04358394
11454 dustThreshold:
546,
11456 estimateFee: estimateFee('testnet')
11459 magicPrefix: '\x19Litecoin Signed Message:\n',
11461 public:
0x019da462,
11462 private:
0x019d9cfe
11467 dustThreshold:
0, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L360-L365
11468 dustSoftThreshold:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.h#L53
11469 feePerKb:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L56
11470 estimateFee: estimateFee('litecoin')
11473 magicPrefix: '\x19Dogecoin Signed Message:\n',
11475 public:
0x02facafd,
11476 private:
0x02fac398
11481 dustThreshold:
0, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/core.h#L155-L160
11482 dustSoftThreshold:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.h#L62
11483 feePerKb:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.cpp#L58
11484 estimateFee: estimateFee('dogecoin')
11487 magicPrefix: '\x18Viacoin Signed Message:\n',
11489 public:
0x0488b21e,
11490 private:
0x0488ade4
11495 dustThreshold:
560,
11496 dustSoftThreshold:
100000,
11497 feePerKb:
100000, //
11498 estimateFee: estimateFee('viacoin')
11501 magicPrefix: '\x18Viacoin Signed Message:\n',
11503 public:
0x043587cf,
11504 private:
0x04358394
11509 dustThreshold:
560,
11510 dustSoftThreshold:
100000,
11512 estimateFee: estimateFee('viacointestnet')
11515 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11517 public:
0x019da462,
11518 private:
0x019d9cfe
11523 dustThreshold:
0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11524 dustSoftThreshold:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11525 feePerKb:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11526 estimateFee: estimateFee('gamerscoin')
11529 magicPrefix: '\x19Jumbucks Signed Message:\n',
11531 public:
0x037a689a,
11532 private:
0x037a6460
11538 dustSoftThreshold:
10000,
11540 estimateFee: estimateFee('jumbucks')
11543 magicPrefix: '\x18Zetacoin Signed Message:\n',
11545 public:
0x0488b21e,
11546 private:
0x0488ade4
11551 dustThreshold:
546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11552 feePerKb:
10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11553 estimateFee: estimateFee('zetacoin')
11557 function estimateFee (type) {
11558 return function (tx) {
11559 var network = networks[type]
11560 var baseFee = network.feePerKb
11561 var byteSize = tx.toBuffer().length
11563 var fee = baseFee * Math.ceil(byteSize /
1000)
11564 if (network.dustSoftThreshold === undefined) return fee
11566 tx.outs.forEach(function (e) {
11567 if (e.value < network.dustSoftThreshold) {
11576 module.exports = networks
11578 },{}],
67:[function(require,module,exports){
11619 OP_TOALTSTACK:
107,
11620 OP_FROMALTSTACK:
108,
11652 OP_EQUALVERIFY:
136,
11677 OP_NUMEQUALVERIFY:
157,
11678 OP_NUMNOTEQUAL:
158,
11680 OP_GREATERTHAN:
160,
11681 OP_LESSTHANOREQUAL:
161,
11682 OP_GREATERTHANOREQUAL:
162,
11694 OP_CODESEPARATOR:
171,
11696 OP_CHECKSIGVERIFY:
173,
11697 OP_CHECKMULTISIG:
174,
11698 OP_CHECKMULTISIGVERIFY:
175,
11712 // template matching params
11713 OP_PUBKEYHASH:
253,
11715 OP_INVALIDOPCODE:
255
11718 },{}],
68:[function(require,module,exports){
11719 (function (Buffer){
11720 var assert = require('assert')
11721 var bufferutils = require('./bufferutils')
11722 var crypto = require('./crypto')
11723 var typeForce = require('typeforce')
11724 var opcodes = require('./opcodes')
11726 function Script (buffer, chunks) {
11727 typeForce('Buffer', buffer)
11728 typeForce('Array', chunks)
11730 this.buffer = buffer
11731 this.chunks = chunks
11734 Script.fromASM = function (asm) {
11735 var strChunks = asm.split(' ')
11736 var chunks = strChunks.map(function (strChunk) {
11738 if (strChunk in opcodes) {
11739 return opcodes[strChunk]
11743 return new Buffer(strChunk, 'hex')
11747 return Script.fromChunks(chunks)
11750 Script.fromBuffer = function (buffer) {
11754 while (i < buffer.length) {
11755 var opcode = buffer.readUInt8(i)
11758 if ((opcode
> opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11759 var d = bufferutils.readPushDataInt(buffer, i)
11761 // did reading a pushDataInt fail? return non-chunked script
11762 if (d === null) return new Script(buffer, [])
11765 // attempt to read too much data?
11766 if (i + d.number
> buffer.length) return new Script(buffer, [])
11768 var data = buffer.slice(i, i + d.number)
11775 chunks.push(opcode)
11781 return new Script(buffer, chunks)
11784 Script.fromChunks = function (chunks) {
11785 typeForce('Array', chunks)
11787 var bufferSize = chunks.reduce(function (accum, chunk) {
11789 if (Buffer.isBuffer(chunk)) {
11790 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11797 var buffer = new Buffer(bufferSize)
11800 chunks.forEach(function (chunk) {
11802 if (Buffer.isBuffer(chunk)) {
11803 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11805 chunk.copy(buffer, offset)
11806 offset += chunk.length
11810 buffer.writeUInt8(chunk, offset)
11815 assert.equal(offset, buffer.length, 'Could not decode chunks')
11816 return new Script(buffer, chunks)
11819 Script.fromHex = function (hex) {
11820 return Script.fromBuffer(new Buffer(hex, 'hex'))
11823 Script.EMPTY = Script.fromChunks([])
11825 Script.prototype.getHash = function () {
11826 return crypto.hash160(this.buffer)
11829 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11830 Script.prototype.without = function (needle) {
11831 return Script.fromChunks(this.chunks.filter(function (op) {
11832 return op !== needle
11836 var reverseOps = []
11837 for (var op in opcodes) {
11838 var code = opcodes[op]
11839 reverseOps[code] = op
11842 Script.prototype.toASM = function () {
11843 return this.chunks.map(function (chunk) {
11845 if (Buffer.isBuffer(chunk)) {
11846 return chunk.toString('hex')
11850 return reverseOps[chunk]
11855 Script.prototype.toBuffer = function () {
11859 Script.prototype.toHex = function () {
11860 return this.toBuffer().toString('hex')
11863 module.exports = Script
11865 }).call(this,require("buffer").Buffer)
11866 },{"./bufferutils":
57,"./crypto":
58,"./opcodes":
67,"assert":
5,"buffer":
7,"typeforce":
53}],
69:[function(require,module,exports){
11867 (function (Buffer){
11868 var assert = require('assert')
11869 var ops = require('./opcodes')
11870 var typeForce = require('typeforce')
11872 var ecurve = require('ecurve')
11873 var curve = ecurve.getCurveByName('secp256k1')
11875 var ECSignature = require('./ecsignature')
11876 var Script = require('./script')
11878 function isCanonicalPubKey (buffer) {
11879 if (!Buffer.isBuffer(buffer)) return false
11882 ecurve.Point.decodeFrom(curve, buffer)
11884 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11893 function isCanonicalSignature (buffer) {
11894 if (!Buffer.isBuffer(buffer)) return false
11897 ECSignature.parseScriptSignature(buffer)
11899 if (!(e.message.match(/Not a DER sequence|Invalid sequence length|Expected a DER integer|R length is zero|S length is zero|R value excessively padded|S value excessively padded|R value is negative|S value is negative|Invalid hashType/))) {
11909 function isPubKeyHashInput (script) {
11910 return script.chunks.length ===
2 &&
11911 isCanonicalSignature(script.chunks[
0]) &&
11912 isCanonicalPubKey(script.chunks[
1])
11915 function isPubKeyHashOutput (script) {
11916 return script.chunks.length ===
5 &&
11917 script.chunks[
0] === ops.OP_DUP &&
11918 script.chunks[
1] === ops.OP_HASH160 &&
11919 Buffer.isBuffer(script.chunks[
2]) &&
11920 script.chunks[
2].length ===
20 &&
11921 script.chunks[
3] === ops.OP_EQUALVERIFY &&
11922 script.chunks[
4] === ops.OP_CHECKSIG
11925 function isPubKeyInput (script) {
11926 return script.chunks.length ===
1 &&
11927 isCanonicalSignature(script.chunks[
0])
11930 function isPubKeyOutput (script) {
11931 return script.chunks.length ===
2 &&
11932 isCanonicalPubKey(script.chunks[
0]) &&
11933 script.chunks[
1] === ops.OP_CHECKSIG
11936 function isScriptHashInput (script, allowIncomplete) {
11937 if (script.chunks.length <
2) return false
11939 var lastChunk = script.chunks[script.chunks.length -
1]
11940 if (!Buffer.isBuffer(lastChunk)) return false
11942 var scriptSig = Script.fromChunks(script.chunks.slice(
0, -
1))
11943 var redeemScript = Script.fromBuffer(lastChunk)
11945 // is redeemScript a valid script?
11946 if (redeemScript.chunks.length ===
0) return false
11948 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11951 function isScriptHashOutput (script) {
11952 return script.chunks.length ===
3 &&
11953 script.chunks[
0] === ops.OP_HASH160 &&
11954 Buffer.isBuffer(script.chunks[
1]) &&
11955 script.chunks[
1].length ===
20 &&
11956 script.chunks[
2] === ops.OP_EQUAL
11959 // allowIncomplete is to account for combining signatures
11960 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11961 function isMultisigInput (script, allowIncomplete) {
11962 if (script.chunks.length <
2) return false
11963 if (script.chunks[
0] !== ops.OP_0) return false
11965 if (allowIncomplete) {
11966 return script.chunks.slice(
1).every(function (chunk) {
11967 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11971 return script.chunks.slice(
1).every(isCanonicalSignature)
11974 function isMultisigOutput (script) {
11975 if (script.chunks.length <
4) return false
11976 if (script.chunks[script.chunks.length -
1] !== ops.OP_CHECKMULTISIG) return false
11978 var mOp = script.chunks[
0]
11979 if (mOp === ops.OP_0) return false
11980 if (mOp < ops.OP_1) return false
11981 if (mOp
> ops.OP_16) return false
11983 var nOp = script.chunks[script.chunks.length -
2]
11984 if (nOp === ops.OP_0) return false
11985 if (nOp < ops.OP_1) return false
11986 if (nOp
> ops.OP_16) return false
11988 var m = mOp - (ops.OP_1 -
1)
11989 var n = nOp - (ops.OP_1 -
1)
11990 if (n < m) return false
11992 var pubKeys = script.chunks.slice(
1, -
2)
11993 if (n < pubKeys.length) return false
11995 return pubKeys.every(isCanonicalPubKey)
11998 function isNullDataOutput (script) {
11999 return script.chunks[
0] === ops.OP_RETURN
12002 function classifyOutput (script) {
12003 typeForce('Script', script)
12005 if (isPubKeyHashOutput(script)) {
12006 return 'pubkeyhash'
12007 } else if (isScriptHashOutput(script)) {
12008 return 'scripthash'
12009 } else if (isMultisigOutput(script)) {
12011 } else if (isPubKeyOutput(script)) {
12013 } else if (isNullDataOutput(script)) {
12017 return 'nonstandard'
12020 function classifyInput (script, allowIncomplete) {
12021 typeForce('Script', script)
12023 if (isPubKeyHashInput(script)) {
12024 return 'pubkeyhash'
12025 } else if (isMultisigInput(script, allowIncomplete)) {
12027 } else if (isScriptHashInput(script, allowIncomplete)) {
12028 return 'scripthash'
12029 } else if (isPubKeyInput(script)) {
12033 return 'nonstandard'
12036 // Standard Script Templates
12037 // {pubKey} OP_CHECKSIG
12038 function pubKeyOutput (pubKey) {
12039 return Script.fromChunks([
12045 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
12046 function pubKeyHashOutput (hash) {
12047 typeForce('Buffer', hash)
12049 return Script.fromChunks([
12053 ops.OP_EQUALVERIFY,
12058 // OP_HASH160 {scriptHash} OP_EQUAL
12059 function scriptHashOutput (hash) {
12060 typeForce('Buffer', hash)
12062 return Script.fromChunks([
12069 // m [pubKeys ...] n OP_CHECKMULTISIG
12070 function multisigOutput (m, pubKeys) {
12071 typeForce(['ECPubKey'], pubKeys)
12073 assert(pubKeys.length
>= m, 'Not enough pubKeys provided')
12075 var pubKeyBuffers = pubKeys.map(function (pubKey) {
12076 return pubKey.toBuffer()
12078 var n = pubKeys.length
12080 return Script.fromChunks([].concat(
12081 (ops.OP_1 -
1) + m,
12083 (ops.OP_1 -
1) + n,
12084 ops.OP_CHECKMULTISIG
12089 function pubKeyInput (signature) {
12090 typeForce('Buffer', signature)
12092 return Script.fromChunks([signature])
12095 // {signature} {pubKey}
12096 function pubKeyHashInput (signature, pubKey) {
12097 typeForce('Buffer', signature)
12099 return Script.fromChunks([signature, pubKey.toBuffer()])
12102 //
<scriptSig> {serialized scriptPubKey script}
12103 function scriptHashInput (scriptSig, scriptPubKey) {
12104 return Script.fromChunks([].concat(
12106 scriptPubKey.toBuffer()
12110 // OP_0 [signatures ...]
12111 function multisigInput (signatures, scriptPubKey) {
12112 if (scriptPubKey) {
12113 assert(isMultisigOutput(scriptPubKey))
12115 var mOp = scriptPubKey.chunks[
0]
12116 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length -
2]
12117 var m = mOp - (ops.OP_1 -
1)
12118 var n = nOp - (ops.OP_1 -
1)
12120 assert(signatures.length
>= m, 'Not enough signatures provided')
12121 assert(signatures.length <= n, 'Too many signatures provided')
12124 return Script.fromChunks([].concat(ops.OP_0, signatures))
12127 function nullDataOutput (data) {
12128 return Script.fromChunks([ops.OP_RETURN, data])
12132 isCanonicalPubKey: isCanonicalPubKey,
12133 isCanonicalSignature: isCanonicalSignature,
12134 isPubKeyHashInput: isPubKeyHashInput,
12135 isPubKeyHashOutput: isPubKeyHashOutput,
12136 isPubKeyInput: isPubKeyInput,
12137 isPubKeyOutput: isPubKeyOutput,
12138 isScriptHashInput: isScriptHashInput,
12139 isScriptHashOutput: isScriptHashOutput,
12140 isMultisigInput: isMultisigInput,
12141 isMultisigOutput: isMultisigOutput,
12142 isNullDataOutput: isNullDataOutput,
12143 classifyOutput: classifyOutput,
12144 classifyInput: classifyInput,
12145 pubKeyOutput: pubKeyOutput,
12146 pubKeyHashOutput: pubKeyHashOutput,
12147 scriptHashOutput: scriptHashOutput,
12148 multisigOutput: multisigOutput,
12149 pubKeyInput: pubKeyInput,
12150 pubKeyHashInput: pubKeyHashInput,
12151 scriptHashInput: scriptHashInput,
12152 multisigInput: multisigInput,
12153 dataOutput: function (data) {
12154 console.warn('dataOutput is deprecated, use nullDataOutput by
2.0.0')
12155 return nullDataOutput(data)
12157 nullDataOutput: nullDataOutput
12160 }).call(this,require("buffer").Buffer)
12161 },{"./ecsignature":
62,"./opcodes":
67,"./script":
68,"assert":
5,"buffer":
7,"ecurve":
49,"typeforce":
53}],
70:[function(require,module,exports){
12162 (function (Buffer){
12163 var assert = require('assert')
12164 var bufferutils = require('./bufferutils')
12165 var crypto = require('./crypto')
12166 var typeForce = require('typeforce')
12167 var opcodes = require('./opcodes')
12168 var scripts = require('./scripts')
12170 var Address = require('./address')
12171 var ECSignature = require('./ecsignature')
12172 var Script = require('./script')
12174 function Transaction () {
12181 Transaction.DEFAULT_SEQUENCE =
0xffffffff
12182 Transaction.SIGHASH_ALL =
0x01
12183 Transaction.SIGHASH_NONE =
0x02
12184 Transaction.SIGHASH_SINGLE =
0x03
12185 Transaction.SIGHASH_ANYONECANPAY =
0x80
12187 Transaction.fromBuffer = function (buffer, __disableAssert) {
12189 function readSlice (n) {
12191 return buffer.slice(offset - n, offset)
12194 function readUInt32 () {
12195 var i = buffer.readUInt32LE(offset)
12200 function readUInt64 () {
12201 var i = bufferutils.readUInt64LE(buffer, offset)
12206 function readVarInt () {
12207 var vi = bufferutils.readVarInt(buffer, offset)
12212 function readScript () {
12213 return Script.fromBuffer(readSlice(readVarInt()))
12216 function readGenerationScript () {
12217 return new Script(readSlice(readVarInt()), [])
12220 var tx = new Transaction()
12221 tx.version = readUInt32()
12223 var vinLen = readVarInt()
12224 for (var i =
0; i < vinLen; ++i) {
12225 var hash = readSlice(
32)
12227 if (Transaction.isCoinbaseHash(hash)) {
12230 index: readUInt32(),
12231 script: readGenerationScript(),
12232 sequence: readUInt32()
12237 index: readUInt32(),
12238 script: readScript(),
12239 sequence: readUInt32()
12244 var voutLen = readVarInt()
12245 for (i =
0; i < voutLen; ++i) {
12247 value: readUInt64(),
12248 script: readScript()
12252 tx.locktime = readUInt32()
12254 if (!__disableAssert) {
12255 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12261 Transaction.fromHex = function (hex) {
12262 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12265 Transaction.isCoinbaseHash = function (buffer) {
12266 return Array.prototype.every.call(buffer, function (x) {
12272 * Create a new txIn.
12274 * Can be called with any of:
12276 * - A transaction and an index
12277 * - A transaction hash and an index
12279 * Note that this method does not sign the created input.
12281 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12282 if (sequence === undefined || sequence === null) {
12283 sequence = Transaction.DEFAULT_SEQUENCE
12286 script = script || Script.EMPTY
12288 if (typeof hash === 'string') {
12289 // TxId hex is big-endian, we need little-endian
12290 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12291 } else if (hash instanceof Transaction) {
12292 hash = hash.getHash()
12295 typeForce('Buffer', hash)
12296 typeForce('Number', index)
12297 typeForce('Number', sequence)
12298 typeForce('Script', script)
12300 assert.equal(hash.length,
32, 'Expected hash length of
32, got ' + hash.length)
12302 // Add the input and return the input's index
12303 return (this.ins.push({
12312 * Create a new txOut.
12314 * Can be called with:
12316 * - A base58 address string and a value
12317 * - An Address object and a value
12318 * - A scriptPubKey Script and a value
12320 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12321 // Attempt to get a valid address if it's a base58 address string
12322 if (typeof scriptPubKey === 'string') {
12323 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12326 // Attempt to get a valid script if it's an Address object
12327 if (scriptPubKey instanceof Address) {
12328 scriptPubKey = scriptPubKey.toOutputScript()
12331 typeForce('Script', scriptPubKey)
12332 typeForce('Number', value)
12334 // Add the output and return the output's index
12335 return (this.outs.push({
12336 script: scriptPubKey,
12341 Transaction.prototype.clone = function () {
12342 var newTx = new Transaction()
12343 newTx.version = this.version
12344 newTx.locktime = this.locktime
12346 newTx.ins = this.ins.map(function (txIn) {
12350 script: txIn.script,
12351 sequence: txIn.sequence
12355 newTx.outs = this.outs.map(function (txOut) {
12357 script: txOut.script,
12366 * Hash transaction for signing a specific input.
12368 * Bitcoin uses a different hash for each signed transaction input. This
12369 * method copies the transaction, makes the necessary changes based on the
12370 * hashType, serializes and finally hashes the result. This hash can then be
12371 * used to sign the transaction input in question.
12373 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12374 // FIXME: remove in
2.x.y
12375 if (arguments[
0] instanceof Script) {
12376 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12378 // swap the arguments (must be stored in tmp, arguments is special)
12379 var tmp = arguments[
0]
12380 inIndex = arguments[
1]
12381 prevOutScript = tmp
12384 typeForce('Number', inIndex)
12385 typeForce('Script', prevOutScript)
12386 typeForce('Number', hashType)
12388 assert(inIndex
>=
0, 'Invalid vin index')
12389 assert(inIndex < this.ins.length, 'Invalid vin index')
12391 var txTmp = this.clone()
12392 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12394 // Blank out other inputs' signatures
12395 txTmp.ins.forEach(function (txIn) {
12396 txIn.script = Script.EMPTY
12398 txTmp.ins[inIndex].script = hashScript
12400 var hashTypeModifier = hashType &
0x1f
12402 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12403 assert(false, 'SIGHASH_NONE not yet supported')
12404 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12405 assert(false, 'SIGHASH_SINGLE not yet supported')
12408 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12409 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12412 var hashTypeBuffer = new Buffer(
4)
12413 hashTypeBuffer.writeInt32LE(hashType,
0)
12415 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12416 return crypto.hash256(buffer)
12419 Transaction.prototype.getHash = function () {
12420 return crypto.hash256(this.toBuffer())
12423 Transaction.prototype.getId = function () {
12424 // TxHash is little-endian, we need big-endian
12425 return bufferutils.reverse(this.getHash()).toString('hex')
12428 Transaction.prototype.toBuffer = function () {
12429 function scriptSize (script) {
12430 var length = script.buffer.length
12432 return bufferutils.varIntSize(length) + length
12435 var buffer = new Buffer(
12437 bufferutils.varIntSize(this.ins.length) +
12438 bufferutils.varIntSize(this.outs.length) +
12439 this.ins.reduce(function (sum, input) { return sum +
40 + scriptSize(input.script) },
0) +
12440 this.outs.reduce(function (sum, output) { return sum +
8 + scriptSize(output.script) },
0)
12444 function writeSlice (slice) {
12445 slice.copy(buffer, offset)
12446 offset += slice.length
12449 function writeUInt32 (i) {
12450 buffer.writeUInt32LE(i, offset)
12454 function writeUInt64 (i) {
12455 bufferutils.writeUInt64LE(buffer, i, offset)
12459 function writeVarInt (i) {
12460 var n = bufferutils.writeVarInt(buffer, i, offset)
12464 writeUInt32(this.version)
12465 writeVarInt(this.ins.length)
12467 this.ins.forEach(function (txIn) {
12468 writeSlice(txIn.hash)
12469 writeUInt32(txIn.index)
12470 writeVarInt(txIn.script.buffer.length)
12471 writeSlice(txIn.script.buffer)
12472 writeUInt32(txIn.sequence)
12475 writeVarInt(this.outs.length)
12476 this.outs.forEach(function (txOut) {
12477 writeUInt64(txOut.value)
12478 writeVarInt(txOut.script.buffer.length)
12479 writeSlice(txOut.script.buffer)
12482 writeUInt32(this.locktime)
12487 Transaction.prototype.toHex = function () {
12488 return this.toBuffer().toString('hex')
12491 Transaction.prototype.setInputScript = function (index, script) {
12492 typeForce('Number', index)
12493 typeForce('Script', script)
12495 this.ins[index].script = script
12498 // FIXME: remove in
2.x.y
12499 Transaction.prototype.sign = function (index, privKey, hashType) {
12500 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12502 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12503 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12505 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12506 this.setInputScript(index, scriptSig)
12509 // FIXME: remove in
2.x.y
12510 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12511 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12513 hashType = hashType || Transaction.SIGHASH_ALL
12515 var hash = this.hashForSignature(index, prevOutScript, hashType)
12516 var signature = privKey.sign(hash)
12518 return signature.toScriptSignature(hashType)
12521 // FIXME: remove in
2.x.y
12522 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12523 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12525 var parsed = ECSignature.parseScriptSignature(buffer)
12526 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12528 return pubKey.verify(hash, parsed.signature)
12531 module.exports = Transaction
12533 }).call(this,require("buffer").Buffer)
12534 },{"./address":
54,"./bufferutils":
57,"./crypto":
58,"./ecsignature":
62,"./opcodes":
67,"./script":
68,"./scripts":
69,"assert":
5,"buffer":
7,"typeforce":
53}],
71:[function(require,module,exports){
12535 (function (Buffer){
12536 var assert = require('assert')
12537 var ops = require('./opcodes')
12538 var scripts = require('./scripts')
12540 var ECPubKey = require('./ecpubkey')
12541 var ECSignature = require('./ecsignature')
12542 var Script = require('./script')
12543 var Transaction = require('./transaction')
12545 function extractInput (txIn) {
12547 var scriptSig = txIn.script
12549 var prevOutType = scripts.classifyInput(scriptSig, true)
12552 // Re-classify if scriptHash
12553 if (prevOutType === 'scripthash') {
12554 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-
1)[
0])
12555 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12557 scriptSig = Script.fromChunks(scriptSig.chunks.slice(
0, -
1))
12558 scriptType = scripts.classifyInput(scriptSig, true)
12560 scriptType = prevOutType
12563 // Extract hashType, pubKeys and signatures
12564 var hashType, parsed, pubKeys, signatures
12566 switch (scriptType) {
12567 case 'pubkeyhash': {
12568 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12569 hashType = parsed.hashType
12570 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[
1])]
12571 signatures = [parsed.signature]
12572 prevOutScript = pubKeys[
0].getAddress().toOutputScript()
12578 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12579 hashType = parsed.hashType
12580 signatures = [parsed.signature]
12582 if (redeemScript) {
12583 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[
0])]
12590 signatures = scriptSig.chunks.slice(
1).map(function (chunk) {
12591 if (chunk === ops.OP_0) return chunk
12593 var parsed = ECSignature.parseScriptSignature(chunk)
12594 hashType = parsed.hashType
12596 return parsed.signature
12599 if (redeemScript) {
12600 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12608 hashType: hashType,
12609 prevOutScript: prevOutScript,
12610 prevOutType: prevOutType,
12612 redeemScript: redeemScript,
12613 scriptType: scriptType,
12614 signatures: signatures
12618 function TransactionBuilder () {
12619 this.prevTxMap = {}
12620 this.prevOutScripts = {}
12621 this.prevOutTypes = {}
12624 this.tx = new Transaction()
12627 TransactionBuilder.fromTransaction = function (transaction) {
12628 var txb = new TransactionBuilder()
12630 // Copy other transaction fields
12631 txb.tx.version = transaction.version
12632 txb.tx.locktime = transaction.locktime
12634 // Extract/add inputs
12635 transaction.ins.forEach(function (txIn) {
12636 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12639 // Extract/add outputs
12640 transaction.outs.forEach(function (txOut) {
12641 txb.addOutput(txOut.script, txOut.value)
12644 // Extract/add signatures
12645 txb.inputs = transaction.ins.map(function (txIn) {
12646 // TODO: remove me after testcase added
12647 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12649 // Ignore empty scripts
12650 if (txIn.script.buffer.length ===
0) return {}
12652 return extractInput(txIn)
12658 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12662 if (typeof prevTx === 'string') {
12663 prevOutHash = new Buffer(prevTx, 'hex')
12665 // TxId hex is big-endian, we want little-endian hash
12666 Array.prototype.reverse.call(prevOutHash)
12669 } else if (prevTx instanceof Transaction) {
12670 prevOutHash = prevTx.getHash()
12671 prevOutScript = prevTx.outs[index].script
12675 prevOutHash = prevTx
12679 if (prevOutScript) {
12680 var prevOutType = scripts.classifyOutput(prevOutScript)
12682 // if we can, extract pubKey information
12683 switch (prevOutType) {
12685 input.pubKeys = prevOutScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12690 input.pubKeys = prevOutScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12695 if (prevOutType !== 'scripthash') {
12696 input.scriptType = prevOutType
12699 input.prevOutScript = prevOutScript
12700 input.prevOutType = prevOutType
12703 assert(this.inputs.every(function (input2) {
12704 if (input2.hashType === undefined) return true
12706 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12707 }), 'No, this would invalidate signatures')
12709 var prevOut = prevOutHash.toString('hex') + ':' + index
12710 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12712 var vin = this.tx.addInput(prevOutHash, index, sequence)
12713 this.inputs[vin] = input
12714 this.prevTxMap[prevOut] = vin
12719 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12720 assert(this.inputs.every(function (input) {
12721 if (input.hashType === undefined) return true
12723 return (input.hashType &
0x1f) === Transaction.SIGHASH_SINGLE
12724 }), 'No, this would invalidate signatures')
12726 return this.tx.addOutput(scriptPubKey, value)
12729 TransactionBuilder.prototype.build = function () {
12730 return this.__build(false)
12732 TransactionBuilder.prototype.buildIncomplete = function () {
12733 return this.__build(true)
12736 var canSignTypes = {
12737 'pubkeyhash': true,
12742 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12743 if (!allowIncomplete) {
12744 assert(this.tx.ins.length
> 0, 'Transaction has no inputs')
12745 assert(this.tx.outs.length
> 0, 'Transaction has no outputs')
12748 var tx = this.tx.clone()
12750 // Create script signatures from signature meta-data
12751 this.inputs.forEach(function (input, index) {
12752 var scriptType = input.scriptType
12755 if (!allowIncomplete) {
12756 assert(!!scriptType, 'Transaction is not complete')
12757 assert(scriptType in canSignTypes, scriptType + ' not supported')
12758 assert(input.signatures, 'Transaction is missing signatures')
12761 if (input.signatures) {
12762 switch (scriptType) {
12763 case 'pubkeyhash': {
12764 var pkhSignature = input.signatures[
0].toScriptSignature(input.hashType)
12765 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[
0])
12770 // Array.prototype.map is sparse-compatible
12771 var msSignatures = input.signatures.map(function (signature) {
12772 return signature && signature.toScriptSignature(input.hashType)
12775 // fill in blanks with OP_0
12776 if (allowIncomplete) {
12777 for (var i =
0; i < msSignatures.length; ++i) {
12778 if (msSignatures[i]) continue
12780 msSignatures[i] = ops.OP_0
12783 // Array.prototype.filter returns non-sparse array
12784 msSignatures = msSignatures.filter(function (x) { return x })
12787 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12788 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12793 var pkSignature = input.signatures[
0].toScriptSignature(input.hashType)
12794 scriptSig = scripts.pubKeyInput(pkSignature)
12800 // did we build a scriptSig?
12802 // wrap as scriptHash if necessary
12803 if (input.prevOutType === 'scripthash') {
12804 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12807 tx.setInputScript(index, scriptSig)
12814 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12815 assert(index in this.inputs, 'No input at index: ' + index)
12816 hashType = hashType || Transaction.SIGHASH_ALL
12818 var input = this.inputs[index]
12819 var canSign = input.hashType &&
12820 input.prevOutScript &&
12821 input.prevOutType &&
12823 input.scriptType &&
12826 // are we almost ready to sign?
12828 // if redeemScript was provided, enforce consistency
12829 if (redeemScript) {
12830 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12833 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12837 // must be pay-to-scriptHash?
12838 if (redeemScript) {
12839 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12840 if (input.prevOutScript) {
12841 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12843 var scriptHash = input.prevOutScript.chunks[
1]
12844 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12847 var scriptType = scripts.classifyOutput(redeemScript)
12848 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12851 switch (scriptType) {
12853 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12857 case 'pubkeyhash': {
12858 var pkh1 = redeemScript.chunks[
2]
12859 var pkh2 = privKey.pub.getAddress().hash
12861 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12862 pubKeys = [privKey.pub]
12867 pubKeys = redeemScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12872 if (!input.prevOutScript) {
12873 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12874 input.prevOutType = 'scripthash'
12877 input.pubKeys = pubKeys
12878 input.redeemScript = redeemScript
12879 input.scriptType = scriptType
12881 // cannot be pay-to-scriptHash
12883 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12885 // can we otherwise sign this?
12886 if (input.scriptType) {
12887 assert(input.pubKeys, input.scriptType + ' not supported')
12889 // we know nothin' Jon Snow, assume pubKeyHash
12891 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12892 input.prevOutType = 'pubkeyhash'
12893 input.pubKeys = [privKey.pub]
12894 input.scriptType = input.prevOutType
12898 input.hashType = hashType
12899 input.signatures = input.signatures || []
12902 var signatureScript = input.redeemScript || input.prevOutScript
12903 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12905 // enforce signature order matches public keys
12906 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12907 // maintain a local copy of unmatched signatures
12908 var unmatched = input.signatures.slice()
12910 input.signatures = input.pubKeys.map(function (pubKey) {
12913 // check for any matching signatures
12914 unmatched.some(function (signature, i) {
12915 if (!pubKey.verify(signatureHash, signature)) return false
12918 // remove matched signature from unmatched
12919 unmatched.splice(i,
1)
12924 return match || undefined
12928 // enforce in order signing of public keys
12929 assert(input.pubKeys.some(function (pubKey, i) {
12930 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12932 assert(!input.signatures[i], 'Signature already exists')
12933 var signature = privKey.sign(signatureHash)
12934 input.signatures[i] = signature
12937 }, this), 'privateKey cannot sign for this input')
12940 module.exports = TransactionBuilder
12942 }).call(this,require(
"buffer").Buffer)
12943 },{
"./ecpubkey":
61,
"./ecsignature":
62,
"./opcodes":
67,
"./script":
68,
"./scripts":
69,
"./transaction":
70,
"assert":
5,
"buffer":
7}],
72:[function(require,module,exports){
12944 (function (Buffer){
12945 var assert = require('assert')
12946 var bufferutils = require('./bufferutils')
12947 var typeForce = require('typeforce')
12948 var networks = require('./networks')
12949 var randomBytes = require('randombytes')
12951 var Address = require('./address')
12952 var HDNode = require('./hdnode')
12953 var TransactionBuilder = require('./transaction_builder')
12954 var Script = require('./script')
12956 function Wallet (seed, network) {
12957 console.warn('Wallet is deprecated and will be removed in
2.0.0, see #
296')
12959 seed = seed || randomBytes(
32)
12960 network = network || networks.bitcoin
12962 // Stored in a closure to make accidental serialization less likely
12963 var masterKey = HDNode.fromSeedBuffer(seed, network)
12965 // HD first-level child derivation method should be hardened
12966 // See https://bitcointalk.org/index.php?topic=
405179.msg4415254#msg4415254
12967 var accountZero = masterKey.deriveHardened(
0)
12968 var externalAccount = accountZero.derive(
0)
12969 var internalAccount = accountZero.derive(
1)
12971 this.addresses = []
12972 this.changeAddresses = []
12973 this.network = network
12976 // FIXME: remove in
2.0.0
12977 this.unspentMap = {}
12979 // FIXME: remove in
2.0.0
12981 this.newMasterKey = function (seed) {
12982 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12984 seed = seed || randomBytes(
32)
12985 masterKey = HDNode.fromSeedBuffer(seed, network)
12987 accountZero = masterKey.deriveHardened(
0)
12988 externalAccount = accountZero.derive(
0)
12989 internalAccount = accountZero.derive(
1)
12992 me.changeAddresses = []
12998 this.getMasterKey = function () {
13001 this.getAccountZero = function () {
13004 this.getExternalAccount = function () {
13005 return externalAccount
13007 this.getInternalAccount = function () {
13008 return internalAccount
13012 Wallet.prototype.createTransaction = function (to, value, options) {
13013 // FIXME: remove in
2.0.0
13014 if (typeof options !== 'object') {
13015 if (options !== undefined) {
13016 console.warn('Non options object parameters are deprecated, use options object instead')
13019 fixedFee: arguments[
2],
13020 changeAddress: arguments[
3]
13025 options = options || {}
13027 assert(value
> this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
13029 var changeAddress = options.changeAddress
13030 var fixedFee = options.fixedFee
13031 var minConf = options.minConf === undefined ?
0 : options.minConf // FIXME: change minConf:
1 by default in
2.0.0
13033 // filter by minConf, then pending and sort by descending value
13034 var unspents = this.unspents.filter(function (unspent) {
13035 return unspent.confirmations
>= minConf
13036 }).filter(function (unspent) {
13037 return !unspent.pending
13038 }).sort(function (o1, o2) {
13039 return o2.value - o1.value
13044 var subTotal = value
13046 var txb = new TransactionBuilder()
13047 txb.addOutput(to, value)
13049 for (var i =
0; i < unspents.length; ++i) {
13050 var unspent = unspents[i]
13051 addresses.push(unspent.address)
13053 txb.addInput(unspent.txHash, unspent.index)
13055 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
13057 accum += unspent.value
13058 subTotal = value + fee
13060 if (accum
>= subTotal) {
13061 var change = accum - subTotal
13063 if (change
> this.network.dustThreshold) {
13064 txb.addOutput(changeAddress || this.getChangeAddress(), change)
13071 assert(accum
>= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
13073 return this.signWith(txb, addresses).build()
13076 // FIXME: remove in
2.0.0
13077 Wallet.prototype.processPendingTx = function (tx) {
13078 this.__processTx(tx, true)
13081 // FIXME: remove in
2.0.0
13082 Wallet.prototype.processConfirmedTx = function (tx) {
13083 this.__processTx(tx, false)
13086 // FIXME: remove in
2.0.0
13087 Wallet.prototype.__processTx = function (tx, isPending) {
13088 console.warn('processTransaction is considered harmful, see issue #
260 for more information')
13090 var txId = tx.getId()
13091 var txHash = tx.getHash()
13093 tx.outs.forEach(function (txOut, i) {
13097 address = Address.fromOutputScript(txOut.script, this.network).toString()
13099 if (!(e.message.match(/has no matching Address/)))
13103 var myAddresses = this.addresses.concat(this.changeAddresses)
13104 if (myAddresses.indexOf(address)
> -
1) {
13105 var lookup = txId + ':' + i
13106 if (lookup in this.unspentMap) return
13108 // its unique, add it
13111 confirmations:
0, // no way to determine this without more information
13115 value: txOut.value,
13119 this.unspentMap[lookup] = unspent
13120 this.unspents.push(unspent)
13124 tx.ins.forEach(function (txIn) {
13125 // copy and convert to big-endian hex
13126 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
13128 var lookup = txInId + ':' + txIn.index
13129 if (!(lookup in this.unspentMap)) return
13131 var unspent = this.unspentMap[lookup]
13134 unspent.pending = true
13135 unspent.spent = true
13137 delete this.unspentMap[lookup]
13139 this.unspents = this.unspents.filter(function (unspent2) {
13140 return unspent !== unspent2
13146 Wallet.prototype.generateAddress = function () {
13147 var k = this.addresses.length
13148 var address = this.getExternalAccount().derive(k).getAddress()
13150 this.addresses.push(address.toString())
13152 return this.getReceiveAddress()
13155 Wallet.prototype.generateChangeAddress = function () {
13156 var k = this.changeAddresses.length
13157 var address = this.getInternalAccount().derive(k).getAddress()
13159 this.changeAddresses.push(address.toString())
13161 return this.getChangeAddress()
13164 Wallet.prototype.getAddress = function () {
13165 if (this.addresses.length ===
0) {
13166 this.generateAddress()
13169 return this.addresses[this.addresses.length -
1]
13172 Wallet.prototype.getBalance = function (minConf) {
13173 minConf = minConf ||
0
13175 return this.unspents.filter(function (unspent) {
13176 return unspent.confirmations
>= minConf
13178 // FIXME: remove spent filter in
2.0.0
13179 }).filter(function (unspent) {
13180 return !unspent.spent
13181 }).reduce(function (accum, unspent) {
13182 return accum + unspent.value
13186 Wallet.prototype.getChangeAddress = function () {
13187 if (this.changeAddresses.length ===
0) {
13188 this.generateChangeAddress()
13191 return this.changeAddresses[this.changeAddresses.length -
1]
13194 Wallet.prototype.getInternalPrivateKey = function (index) {
13195 return this.getInternalAccount().derive(index).privKey
13198 Wallet.prototype.getPrivateKey = function (index) {
13199 return this.getExternalAccount().derive(index).privKey
13202 Wallet.prototype.getPrivateKeyForAddress = function (address) {
13205 if ((index = this.addresses.indexOf(address))
> -
1) {
13206 return this.getPrivateKey(index)
13209 if ((index = this.changeAddresses.indexOf(address))
> -
1) {
13210 return this.getInternalPrivateKey(index)
13213 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13216 Wallet.prototype.getUnspentOutputs = function (minConf) {
13217 minConf = minConf ||
0
13219 return this.unspents.filter(function (unspent) {
13220 return unspent.confirmations
>= minConf
13222 // FIXME: remove spent filter in
2.0.0
13223 }).filter(function (unspent) {
13224 return !unspent.spent
13225 }).map(function (unspent) {
13227 address: unspent.address,
13228 confirmations: unspent.confirmations,
13229 index: unspent.index,
13230 txId: unspent.txId,
13231 value: unspent.value,
13233 // FIXME: remove in
2.0.0
13234 hash: unspent.txId,
13235 pending: unspent.pending
13240 Wallet.prototype.setUnspentOutputs = function (unspents) {
13241 this.unspentMap = {}
13242 this.unspents = unspents.map(function (unspent) {
13243 // FIXME: remove unspent.hash in
2.0.0
13244 var txId = unspent.txId || unspent.hash
13245 var index = unspent.index
13247 // FIXME: remove in
2.0.0
13248 if (unspent.hash !== undefined) {
13249 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13252 // FIXME: remove in
2.0.0
13253 if (index === undefined) {
13254 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13255 index = unspent.outputIndex
13258 typeForce('String', txId)
13259 typeForce('Number', index)
13260 typeForce('Number', unspent.value)
13262 assert.equal(txId.length,
64, 'Expected valid txId, got ' + txId)
13263 assert.doesNotThrow(function () {
13264 Address.fromBase58Check(unspent.address)
13265 }, 'Expected Base58 Address, got ' + unspent.address)
13266 assert(isFinite(index), 'Expected finite index, got ' + index)
13268 // FIXME: remove branch in
2.0.0
13269 if (unspent.confirmations !== undefined) {
13270 typeForce('Number', unspent.confirmations)
13273 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13276 address: unspent.address,
13277 confirmations: unspent.confirmations ||
0,
13281 value: unspent.value,
13283 // FIXME: remove in
2.0.0
13284 pending: unspent.pending || false
13287 // FIXME: remove in
2.0.0
13288 this.unspentMap[txId + ':' + index] = unspent
13294 Wallet.prototype.signWith = function (tx, addresses) {
13295 addresses.forEach(function (address, i) {
13296 var privKey = this.getPrivateKeyForAddress(address)
13298 tx.sign(i, privKey)
13304 function estimatePaddedFee (tx, network) {
13305 var tmpTx = tx.clone()
13306 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold ||
0)
13308 return network.estimateFee(tmpTx)
13311 // FIXME:
1.0.0 shims, remove in
2.0.0
13312 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13313 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13315 module.exports = Wallet
13317 }).call(this,require("buffer").Buffer)
13318 },{"./address":
54,"./bufferutils":
57,"./hdnode":
63,"./networks":
66,"./script":
68,"./transaction_builder":
71,"assert":
5,"buffer":
7,"randombytes":
52,"typeforce":
53}]},{},[
64])(
64)
13320 <script>bitcoin.networks.shadow = {
13321 magicPrefix: '\x19ShadowCash Signed Message:\n',
13323 public:
0xEE80286A,
13324 private:
0xEE8031E8
13331 estimateFee: function() { return "unused in this app" },
13334 bitcoin.networks.shadowtn = {
13335 magicPrefix: '\x19ShadowCash Signed Message:\n',
13337 public:
0x76C0FDFB,
13338 private:
0x76C1077A
13345 estimateFee: function() { return "unused in this app" },
13348 bitcoin.networks.clam = {
13350 public:
0xa8c26d64,
13351 private:
0xa8c17826
13357 bitcoin.networks.dash = {
13359 public:
0x0488b21e,
13360 private:
0x0488ade4
13368 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13372 /** @fileOverview Javascript cryptography implementation.
13374 * Crush to remove comments, shorten variable names and
13375 * generally reduce transmission size.
13377 * @author Emily Stark
13378 * @author Mike Hamburg
13379 * @author Dan Boneh
13383 /*jslint indent:
2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13384 /*global document, window, escape, unescape, module, require, Uint32Array */
13386 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13388 /** @namespace Symmetric ciphers. */
13391 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13394 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13397 /** @namespace Block cipher modes of operation. */
13400 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13404 * @namespace Bit array encoders and decoders.
13407 * The members of this namespace are functions which translate between
13408 * SJCL's bitArrays and other objects (usually strings). Because it
13409 * isn't always clear which direction is encoding and which is decoding,
13410 * the method names are "fromBits" and "toBits".
13414 /** @namespace Exceptions. */
13416 /** @constructor Ciphertext is corrupt. */
13417 corrupt: function(message) {
13418 this.toString = function() { return "CORRUPT: "+this.message; };
13419 this.message = message;
13422 /** @constructor Invalid parameter. */
13423 invalid: function(message) {
13424 this.toString = function() { return "INVALID: "+this.message; };
13425 this.message = message;
13428 /** @constructor Bug or missing feature in SJCL. @constructor */
13429 bug: function(message) {
13430 this.toString = function() { return "BUG: "+this.message; };
13431 this.message = message;
13434 /** @constructor Something isn't ready. */
13435 notReady: function(message) {
13436 this.toString = function() { return "NOT READY: "+this.message; };
13437 this.message = message;
13442 if(typeof module !== 'undefined' && module.exports){
13443 module.exports = sjcl;
13445 if (typeof define === "function") {
13446 define([], function () {
13454 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13456 * @author Emily Stark
13457 * @author Mike Hamburg
13458 * @author Dan Boneh
13461 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13465 * These objects are the currency accepted by SJCL's crypto functions.
13469 * Most of our crypto primitives operate on arrays of
4-byte words internally,
13470 * but many of them can take arguments that are not a multiple of
4 bytes.
13471 * This library encodes arrays of bits (whose size need not be a multiple of
8
13472 * bits) as arrays of
32-bit words. The bits are packed, big-endian, into an
13473 * array of words,
32 bits at a time. Since the words are double-precision
13474 * floating point numbers, they fit some extra data. We use this (in a private,
13475 * possibly-changing manner) to encode the number of bits actually present
13476 * in the last word of the array.
13480 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13481 * to ciphers like AES which want arrays of words.
13486 * Array slices in units of bits.
13487 * @param {bitArray} a The array to slice.
13488 * @param {Number} bstart The offset to the start of the slice, in bits.
13489 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13490 * slice until the end of the array.
13491 * @return {bitArray} The requested slice.
13493 bitSlice: function (a, bstart, bend) {
13494 a = sjcl.bitArray._shiftRight(a.slice(bstart/
32),
32 - (bstart &
31)).slice(
1);
13495 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13499 * Extract a number packed into a bit array.
13500 * @param {bitArray} a The array to slice.
13501 * @param {Number} bstart The offset to the start of the slice, in bits.
13502 * @param {Number} length The length of the number to extract.
13503 * @return {Number} The requested slice.
13505 extract: function(a, bstart, blength) {
13506 // FIXME: this Math.floor is not necessary at all, but for some reason
13507 // seems to suppress a bug in the Chromium JIT.
13508 var x, sh = Math.floor((-bstart-blength) &
31);
13509 if ((bstart + blength -
1 ^ bstart) & -
32) {
13510 // it crosses a boundary
13511 x = (a[bstart/
32|
0] << (
32 - sh)) ^ (a[bstart/
32+
1|
0]
>>> sh);
13513 // within a single word
13514 x = a[bstart/
32|
0]
>>> sh;
13516 return x & ((
1<
<blength) -
1);
13520 * Concatenate two bit arrays.
13521 * @param {bitArray} a1 The first array.
13522 * @param {bitArray} a2 The second array.
13523 * @return {bitArray} The concatenation of a1 and a2.
13525 concat: function (a1, a2) {
13526 if (a1.length ===
0 || a2.length ===
0) {
13527 return a1.concat(a2);
13530 var last = a1[a1.length-
1], shift = sjcl.bitArray.getPartial(last);
13531 if (shift ===
32) {
13532 return a1.concat(a2);
13534 return sjcl.bitArray._shiftRight(a2, shift, last|
0, a1.slice(
0,a1.length-
1));
13539 * Find the length of an array of bits.
13540 * @param {bitArray} a The array.
13541 * @return {Number} The length of a, in bits.
13543 bitLength: function (a) {
13544 var l = a.length, x;
13545 if (l ===
0) { return
0; }
13547 return (l-
1) *
32 + sjcl.bitArray.getPartial(x);
13551 * Truncate an array.
13552 * @param {bitArray} a The array.
13553 * @param {Number} len The length to truncate to, in bits.
13554 * @return {bitArray} A new array, truncated to len bits.
13556 clamp: function (a, len) {
13557 if (a.length *
32 < len) { return a; }
13558 a = a.slice(
0, Math.ceil(len /
32));
13561 if (l
> 0 && len) {
13562 a[l-
1] = sjcl.bitArray.partial(len, a[l-
1] &
0x80000000 >> (len-
1),
1);
13568 * Make a partial word for a bit array.
13569 * @param {Number} len The number of bits in the word.
13570 * @param {Number} x The bits.
13571 * @param {Number} [
0] _end Pass
1 if x has already been shifted to the high side.
13572 * @return {Number} The partial word.
13574 partial: function (len, x, _end) {
13575 if (len ===
32) { return x; }
13576 return (_end ? x|
0 : x << (
32-len)) + len *
0x10000000000;
13580 * Get the number of bits used by a partial word.
13581 * @param {Number} x The partial word.
13582 * @return {Number} The number of bits used by the partial word.
13584 getPartial: function (x) {
13585 return Math.round(x/
0x10000000000) ||
32;
13589 * Compare two arrays for equality in a predictable amount of time.
13590 * @param {bitArray} a The first array.
13591 * @param {bitArray} b The second array.
13592 * @return {boolean} true if a == b; false otherwise.
13594 equal: function (a, b) {
13595 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13599 for (i=
0; i
<a.length; i++) {
13605 /** Shift an array right.
13606 * @param {bitArray} a The array to shift.
13607 * @param {Number} shift The number of bits to shift.
13608 * @param {Number} [carry=
0] A byte to carry in
13609 * @param {bitArray} [out=[]] An array to prepend to the output.
13612 _shiftRight: function (a, shift, carry, out) {
13613 var i, last2=
0, shift2;
13614 if (out === undefined) { out = []; }
13616 for (; shift
>=
32; shift -=
32) {
13621 return out.concat(a);
13624 for (i=
0; i
<a.length; i++) {
13625 out.push(carry | a[i]
>>>shift);
13626 carry = a[i] << (
32-shift);
13628 last2 = a.length ? a[a.length-
1] :
0;
13629 shift2 = sjcl.bitArray.getPartial(last2);
13630 out.push(sjcl.bitArray.partial(shift+shift2 &
31, (shift + shift2
> 32) ? carry : out.pop(),
1));
13634 /** xor a block of
4 words together.
13637 _xor4: function(x,y) {
13638 return [x[
0]^y[
0],x[
1]^y[
1],x[
2]^y[
2],x[
3]^y[
3]];
13641 /** byteswap a word array inplace.
13642 * (does not handle partial words)
13643 * @param {sjcl.bitArray} a word array
13644 * @return {sjcl.bitArray} byteswapped array
13646 byteswapM: function(a) {
13647 var i, v, m =
0xff00;
13648 for (i =
0; i < a.length; ++i) {
13650 a[i] = (v
>>> 24) | ((v
>>> 8) & m) | ((v & m) <<
8) | (v <<
24);
13657 //// codecString.js
13659 /** @fileOverview Bit array codec implementations.
13661 * @author Emily Stark
13662 * @author Mike Hamburg
13663 * @author Dan Boneh
13666 /** @namespace UTF-
8 strings */
13667 sjcl.codec.utf8String = {
13668 /** Convert from a bitArray to a UTF-
8 string. */
13669 fromBits: function (arr) {
13670 var out =
"", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13671 for (i=
0; i
<bl/
8; i++) {
13675 out += String.fromCharCode(tmp
>>> 24);
13678 return decodeURIComponent(escape(out));
13681 /** Convert from a UTF-
8 string to a bitArray. */
13682 toBits: function (str) {
13683 str = unescape(encodeURIComponent(str));
13684 var out = [], i, tmp=
0;
13685 for (i=
0; i
<str.length; i++) {
13686 tmp = tmp <<
8 | str.charCodeAt(i);
13693 out.push(sjcl.bitArray.partial(
8*(i&
3), tmp));
13702 /** @fileOverview Bit array codec implementations.
13704 * @author Emily Stark
13705 * @author Mike Hamburg
13706 * @author Dan Boneh
13709 /** @namespace Hexadecimal */
13711 /** Convert from a bitArray to a hex string. */
13712 fromBits: function (arr) {
13714 for (i=
0; i
<arr.length; i++) {
13715 out += ((arr[i]|
0)+
0xF00000000000).toString(
16).substr(
4);
13717 return out.substr(
0, sjcl.bitArray.bitLength(arr)/
4);//.replace(/(.{
8})/g,
"$1 ");
13719 /** Convert from a hex string to a bitArray. */
13720 toBits: function (str) {
13721 var i, out=[], len;
13722 str = str.replace(/\s|
0x/g,
"");
13724 str = str +
"00000000";
13725 for (i=
0; i
<str.length; i+=
8) {
13726 out.push(parseInt(str.substr(i,
8),
16)^
0);
13728 return sjcl.bitArray.clamp(out, len*
4);
13735 /** @fileOverview Javascript SHA-
512 implementation.
13737 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13738 * SJCL by Stefan Thomas.
13740 * CryptoJS (c)
2009–
2012 by Jeff Mott. All rights reserved.
13741 * Released with New BSD License
13743 * @author Emily Stark
13744 * @author Mike Hamburg
13745 * @author Dan Boneh
13746 * @author Jeff Mott
13747 * @author Stefan Thomas
13751 * Context for a SHA-
512 operation in progress.
13753 * @class Secure Hash Algorithm,
512 bits.
13755 sjcl.hash.sha512 = function (hash) {
13756 if (!this._key[
0]) { this._precompute(); }
13758 this._h = hash._h.slice(
0);
13759 this._buffer = hash._buffer.slice(
0);
13760 this._length = hash._length;
13767 * Hash a string or an array of words.
13769 * @param {bitArray|String} data the data to hash.
13770 * @return {bitArray} The hash value, an array of
16 big-endian words.
13772 sjcl.hash.sha512.hash = function (data) {
13773 return (new sjcl.hash.sha512()).update(data).finalize();
13776 sjcl.hash.sha512.prototype = {
13778 * The hash's block size, in bits.
13784 * Reset the hash state.
13787 reset:function () {
13788 this._h = this._init.slice(
0);
13795 * Input several words to the hash.
13796 * @param {bitArray|String} data the data to hash.
13799 update: function (data) {
13800 if (typeof data ===
"string") {
13801 data = sjcl.codec.utf8String.toBits(data);
13803 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13805 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13806 for (i =
1024+ol & -
1024; i <= nl; i+=
1024) {
13807 this._block(b.splice(
0,
32));
13813 * Complete hashing and output the hash value.
13814 * @return {bitArray} The hash value, an array of
16 big-endian words.
13816 finalize:function () {
13817 var i, b = this._buffer, h = this._h;
13819 // Round out and push the buffer
13820 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
13822 // Round out the buffer to a multiple of
32 words, less the
4 length words.
13823 for (i = b.length +
4; i &
31; i++) {
13827 // append the length
13830 b.push(Math.floor(this._length /
0x100000000));
13831 b.push(this._length |
0);
13834 this._block(b.splice(
0,
32));
13842 * The SHA-
512 initialization vector, to be precomputed.
13848 * Least significant
24 bits of SHA512 initialization values.
13850 * Javascript only has
53 bits of precision, so we compute the
40 most
13851 * significant bits and add the remaining
24 bits as constants.
13855 _initr: [
0xbcc908,
0xcaa73b,
0x94f82b,
0x1d36f1,
0xe682d1,
0x3e6c1f,
0x41bd6b,
0x7e2179 ],
13859 [
0x6a09e667,
0xf3bcc908,
0xbb67ae85,
0x84caa73b,
0x3c6ef372,
0xfe94f82b,
0xa54ff53a,
0x5f1d36f1,
13860 0x510e527f,
0xade682d1,
0x9b05688c,
0x2b3e6c1f,
0x1f83d9ab,
0xfb41bd6b,
0x5be0cd19,
0x137e2179],
13864 * The SHA-
512 hash key, to be precomputed.
13870 * Least significant
24 bits of SHA512 key values.
13874 [
0x28ae22,
0xef65cd,
0x4d3b2f,
0x89dbbc,
0x48b538,
0x05d019,
0x194f9b,
0x6d8118,
13875 0x030242,
0x706fbe,
0xe4b28c,
0xffb4e2,
0x7b896f,
0x1696b1,
0xc71235,
0x692694,
13876 0xf14ad2,
0x4f25e3,
0x8cd5b5,
0xac9c65,
0x2b0275,
0xa6e483,
0x41fbd4,
0x1153b5,
13877 0x66dfab,
0xb43210,
0xfb213f,
0xef0ee4,
0xa88fc2,
0x0aa725,
0x03826f,
0x0e6e70,
13878 0xd22ffc,
0x26c926,
0xc42aed,
0x95b3df,
0xaf63de,
0x77b2a8,
0xedaee6,
0x82353b,
13879 0xf10364,
0x423001,
0xf89791,
0x54be30,
0xef5218,
0x65a910,
0x71202a,
0xbbd1b8,
13880 0xd2d0c8,
0x41ab53,
0x8eeb99,
0x9b48a8,
0xc95a63,
0x418acb,
0x63e373,
0xb2b8a3,
13881 0xefb2fc,
0x172f60,
0xf0ab72,
0x6439ec,
0x631e28,
0x82bde9,
0xc67915,
0x72532b,
13882 0x26619c,
0xc0c207,
0xe0eb1e,
0x6ed178,
0x176fba,
0xc898a6,
0xf90dae,
0x1c471b,
13883 0x047d84,
0xc72493,
0xc9bebc,
0x100d4c,
0x3e42b6,
0x657e2a,
0xd6faec,
0x475817],
13887 [
0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
13888 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
13889 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
13890 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
13891 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
13892 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
13893 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
13894 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
13895 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
13896 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
13897 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
13898 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
13899 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
13900 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
13901 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
13902 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
13903 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
13904 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
13905 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
13906 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817],
13910 * Function to precompute _init and _key.
13913 _precompute: function () {
13914 // XXX: This code is for precomputing the SHA256 constants, change for
13915 // SHA512 and re-enable.
13916 var i =
0, prime =
2, factor;
13918 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
13919 function frac2(x) { return (x-Math.floor(x)) *
0x10000000000 &
0xff; }
13921 outer: for (; i
<80; prime++) {
13922 for (factor=
2; factor*factor <= prime; factor++) {
13923 if (prime % factor ===
0) {
13930 this._init[i*
2] = frac(Math.pow(prime,
1/
2));
13931 this._init[i*
2+
1] = (frac2(Math.pow(prime,
1/
2)) <<
24) | this._initr[i];
13933 this._key[i*
2] = frac(Math.pow(prime,
1/
3));
13934 this._key[i*
2+
1] = (frac2(Math.pow(prime,
1/
3)) <<
24) | this._keyr[i];
13940 * Perform one cycle of SHA-
512.
13941 * @param {bitArray} words one block of words.
13944 _block:function (words) {
13946 w = words.slice(
0),
13949 h0h = h[
0], h0l = h[
1], h1h = h[
2], h1l = h[
3],
13950 h2h = h[
4], h2l = h[
5], h3h = h[
6], h3l = h[
7],
13951 h4h = h[
8], h4l = h[
9], h5h = h[
10], h5l = h[
11],
13952 h6h = h[
12], h6l = h[
13], h7h = h[
14], h7l = h[
15];
13954 // Working variables
13955 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13956 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13957 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13958 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13960 for (i=
0; i
<80; i++) {
13961 // load up the input word for this round
13964 wrl = w[i *
2 +
1];
13967 var gamma0xh = w[(i-
15) *
2];
13968 var gamma0xl = w[(i-
15) *
2 +
1];
13970 ((gamma0xl <<
31) | (gamma0xh
>>> 1)) ^
13971 ((gamma0xl <<
24) | (gamma0xh
>>> 8)) ^
13974 ((gamma0xh <<
31) | (gamma0xl
>>> 1)) ^
13975 ((gamma0xh <<
24) | (gamma0xl
>>> 8)) ^
13976 ((gamma0xh <<
25) | (gamma0xl
>>> 7));
13979 var gamma1xh = w[(i-
2) *
2];
13980 var gamma1xl = w[(i-
2) *
2 +
1];
13982 ((gamma1xl <<
13) | (gamma1xh
>>> 19)) ^
13983 ((gamma1xh <<
3) | (gamma1xl
>>> 29)) ^
13986 ((gamma1xh <<
13) | (gamma1xl
>>> 19)) ^
13987 ((gamma1xl <<
3) | (gamma1xh
>>> 29)) ^
13988 ((gamma1xh <<
26) | (gamma1xl
>>> 6));
13991 var wr7h = w[(i-
7) *
2];
13992 var wr7l = w[(i-
7) *
2 +
1];
13994 var wr16h = w[(i-
16) *
2];
13995 var wr16l = w[(i-
16) *
2 +
1];
13997 // W(round) = gamma0 + W(round -
7) + gamma1 + W(round -
16)
13998 wrl = gamma0l + wr7l;
13999 wrh = gamma0h + wr7h + ((wrl
>>> 0) < (gamma0l
>>> 0) ?
1 :
0);
14001 wrh += gamma1h + ((wrl
>>> 0) < (gamma1l
>>> 0) ?
1 :
0);
14003 wrh += wr16h + ((wrl
>>> 0) < (wr16l
>>> 0) ?
1 :
0);
14007 w[i*
2 +
1] = wrl |=
0;
14010 var chh = (eh & fh) ^ (~eh & gh);
14011 var chl = (el & fl) ^ (~el & gl);
14014 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14015 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14018 var sigma0h = ((al <<
4) | (ah
>>> 28)) ^ ((ah <<
30) | (al
>>> 2)) ^ ((ah <<
25) | (al
>>> 7));
14019 var sigma0l = ((ah <<
4) | (al
>>> 28)) ^ ((al <<
30) | (ah
>>> 2)) ^ ((al <<
25) | (ah
>>> 7));
14022 var sigma1h = ((el <<
18) | (eh
>>> 14)) ^ ((el <<
14) | (eh
>>> 18)) ^ ((eh <<
23) | (el
>>> 9));
14023 var sigma1l = ((eh <<
18) | (el
>>> 14)) ^ ((eh <<
14) | (el
>>> 18)) ^ ((el <<
23) | (eh
>>> 9));
14027 var krl = k[i*
2+
1];
14029 // t1 = h + sigma1 + ch + K(round) + W(round)
14030 var t1l = hl + sigma1l;
14031 var t1h = hh + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0);
14033 t1h += chh + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0);
14035 t1h += krh + ((t1l
>>> 0) < (krl
>>> 0) ?
1 :
0);
14036 t1l = t1l + wrl|
0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=
1054972
14037 t1h += wrh + ((t1l
>>> 0) < (wrl
>>> 0) ?
1 :
0);
14039 // t2 = sigma0 + maj
14040 var t2l = sigma0l + majl;
14041 var t2h = sigma0h + majh + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0);
14043 // Update working variables
14050 el = (dl + t1l) |
0;
14051 eh = (dh + t1h + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
14058 al = (t1l + t2l) |
0;
14059 ah = (t1h + t2h + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0;
14062 // Intermediate hash
14063 h0l = h[
1] = (h0l + al) |
0;
14064 h[
0] = (h0h + ah + ((h0l
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0;
14065 h1l = h[
3] = (h1l + bl) |
0;
14066 h[
2] = (h1h + bh + ((h1l
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0;
14067 h2l = h[
5] = (h2l + cl) |
0;
14068 h[
4] = (h2h + ch + ((h2l
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0;
14069 h3l = h[
7] = (h3l + dl) |
0;
14070 h[
6] = (h3h + dh + ((h3l
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
14071 h4l = h[
9] = (h4l + el) |
0;
14072 h[
8] = (h4h + eh + ((h4l
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0;
14073 h5l = h[
11] = (h5l + fl) |
0;
14074 h[
10] = (h5h + fh + ((h5l
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0;
14075 h6l = h[
13] = (h6l + gl) |
0;
14076 h[
12] = (h6h + gh + ((h6l
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0;
14077 h7l = h[
15] = (h7l + hl) |
0;
14078 h[
14] = (h7h + hh + ((h7l
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0;
14085 /** @fileOverview HMAC implementation.
14087 * @author Emily Stark
14088 * @author Mike Hamburg
14089 * @author Dan Boneh
14092 /** HMAC with the specified hash function.
14094 * @param {bitArray} key the key for HMAC.
14095 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14097 sjcl.misc.hmac = function (key, Hash) {
14098 this._hash = Hash = Hash || sjcl.hash.sha256;
14099 var exKey = [[],[]], i,
14100 bs = Hash.prototype.blockSize /
32;
14101 this._baseHash = [new Hash(), new Hash()];
14103 if (key.length
> bs) {
14104 key = Hash.hash(key);
14107 for (i=
0; i
<bs; i++) {
14108 exKey[
0][i] = key[i]^
0x36363636;
14109 exKey[
1][i] = key[i]^
0x5C5C5C5C;
14112 this._baseHash[
0].update(exKey[
0]);
14113 this._baseHash[
1].update(exKey[
1]);
14114 this._resultHash = new Hash(this._baseHash[
0]);
14117 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
14118 * @param {bitArray|String} data The data to mac.
14120 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14121 if (!this._updated) {
14123 return this.digest(data);
14125 throw new sjcl.exception.invalid(
"encrypt on already updated hmac called!");
14129 sjcl.misc.hmac.prototype.reset = function () {
14130 this._resultHash = new this._hash(this._baseHash[
0]);
14131 this._updated = false;
14134 sjcl.misc.hmac.prototype.update = function (data) {
14135 this._updated = true;
14136 this._resultHash.update(data);
14139 sjcl.misc.hmac.prototype.digest = function () {
14140 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[
1]).update(w).finalize();
14151 /** @fileOverview Password-based key-derivation function, version
2.0.
14153 * @author Emily Stark
14154 * @author Mike Hamburg
14155 * @author Dan Boneh
14158 /** Password-Based Key-Derivation Function, version
2.0.
14160 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14162 * This is the method specified by RSA's PKCS #
5 standard.
14164 * @param {bitArray|String} password The password.
14165 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14166 * @param {Number} [count=
1000] The number of iterations. Higher numbers make the function slower but more secure.
14167 * @param {Number} [length] The length of the derived key. Defaults to the
14168 output size of the hash function.
14169 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14170 * @return {bitArray} the derived key.
14172 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14173 count = count ||
1000;
14175 if (length <
0 || count <
0) {
14176 throw sjcl.exception.invalid(
"invalid params to pbkdf2");
14179 if (typeof password ===
"string") {
14180 password = sjcl.codec.utf8String.toBits(password);
14183 if (typeof salt ===
"string") {
14184 salt = sjcl.codec.utf8String.toBits(salt);
14187 Prff = Prff || sjcl.misc.hmac;
14189 var prf = new Prff(password),
14190 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14192 for (k =
1;
32 * out.length < (length ||
1); k++) {
14193 u = ui = prf.encrypt(b.concat(salt,[k]));
14195 for (i=
1; i
<count; i++) {
14196 ui = prf.encrypt(ui);
14197 for (j=
0; j
<ui.length; j++) {
14202 out = out.concat(u);
14205 if (length) { out = b.clamp(out, length); }
14213 /** @fileOverview Javascript SHA-
256 implementation.
14215 * An older version of this implementation is available in the public
14216 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14217 * Stanford University
2008-
2010 and BSD-licensed for liability
14220 * Special thanks to Aldo Cortesi for pointing out several bugs in
14223 * @author Emily Stark
14224 * @author Mike Hamburg
14225 * @author Dan Boneh
14229 * Context for a SHA-
256 operation in progress.
14231 * @class Secure Hash Algorithm,
256 bits.
14233 sjcl.hash.sha256 = function (hash) {
14234 if (!this._key[
0]) { this._precompute(); }
14236 this._h = hash._h.slice(
0);
14237 this._buffer = hash._buffer.slice(
0);
14238 this._length = hash._length;
14245 * Hash a string or an array of words.
14247 * @param {bitArray|String} data the data to hash.
14248 * @return {bitArray} The hash value, an array of
16 big-endian words.
14250 sjcl.hash.sha256.hash = function (data) {
14251 return (new sjcl.hash.sha256()).update(data).finalize();
14254 sjcl.hash.sha256.prototype = {
14256 * The hash's block size, in bits.
14262 * Reset the hash state.
14265 reset:function () {
14266 this._h = this._init.slice(
0);
14273 * Input several words to the hash.
14274 * @param {bitArray|String} data the data to hash.
14277 update: function (data) {
14278 if (typeof data ===
"string") {
14279 data = sjcl.codec.utf8String.toBits(data);
14281 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14283 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14284 for (i =
512+ol & -
512; i <= nl; i+=
512) {
14285 this._block(b.splice(
0,
16));
14291 * Complete hashing and output the hash value.
14292 * @return {bitArray} The hash value, an array of
8 big-endian words.
14294 finalize:function () {
14295 var i, b = this._buffer, h = this._h;
14297 // Round out and push the buffer
14298 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
14300 // Round out the buffer to a multiple of
16 words, less the
2 length words.
14301 for (i = b.length +
2; i &
15; i++) {
14305 // append the length
14306 b.push(Math.floor(this._length /
0x100000000));
14307 b.push(this._length |
0);
14310 this._block(b.splice(
0,
16));
14318 * The SHA-
256 initialization vector, to be precomputed.
14323 _init:[
0x6a09e667,
0xbb67ae85,
0x3c6ef372,
0xa54ff53a,
0x510e527f,
0x9b05688c,
0x1f83d9ab,
0x5be0cd19],
14327 * The SHA-
256 hash key, to be precomputed.
14333 [
0x428a2f98,
0x71374491,
0xb5c0fbcf,
0xe9b5dba5,
0x3956c25b,
0x59f111f1,
0x923f82a4,
0xab1c5ed5,
14334 0xd807aa98,
0x12835b01,
0x243185be,
0x550c7dc3,
0x72be5d74,
0x80deb1fe,
0x9bdc06a7,
0xc19bf174,
14335 0xe49b69c1,
0xefbe4786,
0x0fc19dc6,
0x240ca1cc,
0x2de92c6f,
0x4a7484aa,
0x5cb0a9dc,
0x76f988da,
14336 0x983e5152,
0xa831c66d,
0xb00327c8,
0xbf597fc7,
0xc6e00bf3,
0xd5a79147,
0x06ca6351,
0x14292967,
14337 0x27b70a85,
0x2e1b2138,
0x4d2c6dfc,
0x53380d13,
0x650a7354,
0x766a0abb,
0x81c2c92e,
0x92722c85,
14338 0xa2bfe8a1,
0xa81a664b,
0xc24b8b70,
0xc76c51a3,
0xd192e819,
0xd6990624,
0xf40e3585,
0x106aa070,
14339 0x19a4c116,
0x1e376c08,
0x2748774c,
0x34b0bcb5,
0x391c0cb3,
0x4ed8aa4a,
0x5b9cca4f,
0x682e6ff3,
14340 0x748f82ee,
0x78a5636f,
0x84c87814,
0x8cc70208,
0x90befffa,
0xa4506ceb,
0xbef9a3f7,
0xc67178f2],
14345 * Function to precompute _init and _key.
14348 _precompute: function () {
14349 var i =
0, prime =
2, factor;
14351 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
14353 outer: for (; i
<64; prime++) {
14354 for (factor=
2; factor*factor <= prime; factor++) {
14355 if (prime % factor ===
0) {
14362 this._init[i] = frac(Math.pow(prime,
1/
2));
14364 this._key[i] = frac(Math.pow(prime,
1/
3));
14370 * Perform one cycle of SHA-
256.
14371 * @param {bitArray} words one block of words.
14374 _block:function (words) {
14376 w = words.slice(
0),
14379 h0 = h[
0], h1 = h[
1], h2 = h[
2], h3 = h[
3],
14380 h4 = h[
4], h5 = h[
5], h6 = h[
6], h7 = h[
7];
14382 /* Rationale for placement of |
0 :
14383 * If a value can overflow is original
32 bits by a factor of more than a few
14384 * million (
2^
23 ish), there is a possibility that it might overflow the
14385 *
53-bit mantissa and lose precision.
14387 * To avoid this, we clamp back to
32 bits by |'ing with
0 on any value that
14388 * propagates around the loop, and on the hash state h[]. I don't believe
14389 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14390 * (for h4 anyway), and better safe than sorry.
14392 * The clamps on h[] are necessary for the output to be correct even in the
14393 * common case and for short inputs.
14395 for (i=
0; i
<64; i++) {
14396 // load up the input word for this round
14400 a = w[(i+
1 ) &
15];
14401 b = w[(i+
14) &
15];
14402 tmp = w[i&
15] = ((a
>>>7 ^ a
>>>18 ^ a
>>>3 ^ a<
<25 ^ a<
<14) +
14403 (b
>>>17 ^ b
>>>19 ^ b
>>>10 ^ b<
<15 ^ b<
<13) +
14404 w[i&
15] + w[(i+
9) &
15]) |
0;
14407 tmp = (tmp + h7 + (h4
>>>6 ^ h4
>>>11 ^ h4
>>>25 ^ h4<
<26 ^ h4<
<21 ^ h4<
<7) + (h6 ^ h4&(h5^h6)) + k[i]); // |
0;
14410 h7 = h6; h6 = h5; h5 = h4;
14412 h3 = h2; h2 = h1; h1 = h0;
14414 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1
>>>2 ^ h1
>>>13 ^ h1
>>>22 ^ h1<
<30 ^ h1<
<19 ^ h1<
<10)) |
0;
14417 h[
0] = h[
0]+h0 |
0;
14418 h[
1] = h[
1]+h1 |
0;
14419 h[
2] = h[
2]+h2 |
0;
14420 h[
3] = h[
3]+h3 |
0;
14421 h[
4] = h[
4]+h4 |
0;
14422 h[
5] = h[
5]+h5 |
0;
14423 h[
6] = h[
6]+h6 |
0;
14424 h[
7] = h[
7]+h7 |
0;
14428 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14429 WORDLISTS["english"] = [
14430 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14431 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14432 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14433 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14434 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14435 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14436 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14437 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14438 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14439 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14440 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14441 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14442 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14443 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14444 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14445 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14446 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14447 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14448 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14449 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14450 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14451 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14452 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14453 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14454 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14455 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14456 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14457 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14458 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14459 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14460 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14461 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14462 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14463 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14464 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14465 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14466 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14467 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14468 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14469 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14470 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14471 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14472 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14473 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14474 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14475 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14476 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14477 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14478 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14479 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14480 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14481 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14482 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14483 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14484 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14485 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14486 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14487 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14488 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14489 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14490 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14491 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14492 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14493 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14494 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14495 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14496 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14497 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14498 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14499 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14500 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14501 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14502 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14503 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14504 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14505 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14506 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14507 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14508 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14509 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14510 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14511 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14512 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14513 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14514 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14515 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14516 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14517 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14518 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14519 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14520 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14521 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14522 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14523 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14524 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14525 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14526 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14527 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14528 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14529 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14530 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14531 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14532 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14533 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14534 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14535 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14536 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14537 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14538 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14539 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14540 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14541 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14542 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14543 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14544 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14545 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14546 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14547 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14548 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14549 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14550 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14551 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14552 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14553 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14554 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14555 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14556 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14557 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14558 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14559 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14560 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14561 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14562 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14563 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14564 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14565 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14566 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14567 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14568 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14569 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14570 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14571 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14572 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14573 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14574 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14575 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14576 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14577 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14578 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14579 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14580 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14581 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14582 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14583 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14584 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14585 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14586 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14587 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14588 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14589 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14590 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14591 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14592 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14593 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14594 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14595 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14596 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14597 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14598 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14599 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14600 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14601 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14602 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14603 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14604 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14605 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14606 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14607 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14608 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14609 "thank","that","theme","then","theory","there","they","thing","this","thought",
14610 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14611 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14612 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14613 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14614 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14615 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14616 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14617 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14618 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14619 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14620 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14621 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14622 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14623 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14624 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14625 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14626 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14627 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14628 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14629 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14630 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14631 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14632 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14633 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14634 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14637 * Copyright (c)
2013 Pavol Rusnak
14639 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14640 * this software and associated documentation files (the "Software"), to deal in
14641 * the Software without restriction, including without limitation the rights to
14642 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14643 * of the Software, and to permit persons to whom the Software is furnished to do
14644 * so, subject to the following conditions:
14646 * The above copyright notice and this permission notice shall be included in all
14647 * copies or substantial portions of the Software.
14649 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14650 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14651 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14652 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14653 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14654 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14658 * Javascript port from python by Ian Coleman
14660 * Requires code from sjcl
14661 * https://github.com/bitwiseshiftleft/sjcl
14664 var Mnemonic = function(language) {
14666 var PBKDF2_ROUNDS =
2048;
14672 var hmacSHA512 = function(key) {
14673 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14674 this.encrypt = function() {
14675 return hasher.encrypt.apply(hasher, arguments);
14680 wordlist = WORDLISTS[language];
14681 if (wordlist.length != RADIX) {
14682 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14687 self.generate = function(strength) {
14688 strength = strength ||
128;
14689 var r = strength %
32;
14691 throw 'Strength should be divisible by
32, but it is not (' + r + ').';
14693 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14694 if (!hasStrongCrypto) {
14695 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14697 var buffer = new Uint8Array(strength /
8);
14698 var data = crypto.getRandomValues(buffer);
14699 return self.toMnemonic(data);
14702 self.toMnemonic = function(byteArray) {
14703 if (byteArray.length %
4 > 0) {
14704 throw 'Data length in bits should be divisible by
32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*
8 + ' bits).'
14707 //h = hashlib.sha256(data).hexdigest()
14708 var data = byteArrayToWordArray(byteArray);
14709 var hash = sjcl.hash.sha256.hash(data);
14710 var h = sjcl.codec.hex.fromBits(hash);
14712 // b is a binary string, eg '
00111010101100...'
14713 //b = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8) + \
14714 // bin(int(h,
16))[
2:].zfill(
256)[:len(data) *
8 /
32]
14716 // a = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8)
14717 // c = bin(int(h,
16))[
2:].zfill(
256)
14718 // d = c[:len(data) *
8 /
32]
14719 var a = byteArrayToBinaryString(byteArray);
14720 var c = zfill(hexStringToBinaryString(h),
256);
14721 var d = c.substring(
0, byteArray.length *
8 /
32);
14722 // b = line1 + line2
14726 var blen = b.length /
11;
14727 for (var i=
0; i
<blen; i++) {
14728 var idx = parseInt(b.substring(i *
11, (i +
1) *
11),
2);
14729 result.push(wordlist[idx]);
14731 return result.join(' ');
14734 self.check = function(mnemonic) {
14735 var mnemonic = mnemonic.split(' ')
14736 if (mnemonic.length %
3 > 0) {
14739 // idx = map(lambda x: bin(self.wordlist.index(x))[
2:].zfill(
11), mnemonic)
14741 for (var i=
0; i
<mnemonic.length; i++) {
14742 var word = mnemonic[i];
14743 var wordIndex = wordlist.indexOf(word);
14744 if (wordIndex == -
1) {
14747 var binaryIndex = zfill(wordIndex.toString(
2),
11);
14748 idx.push(binaryIndex);
14750 var b = idx.join('');
14752 //d = b[:l /
33 *
32]
14754 var d = b.substring(
0, l /
33 *
32);
14755 var h = b.substring(l - l /
33, l);
14756 //nd = binascii.unhexlify(hex(int(d,
2))[
2:].rstrip('L').zfill(l /
33 *
8))
14757 var nd = binaryStringToWordArray(d);
14758 //nh = bin(int(hashlib.sha256(nd).hexdigest(),
16))[
2:].zfill(
256)[:l /
33]
14759 var ndHash = sjcl.hash.sha256.hash(nd);
14760 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14761 var ndBstr = zfill(hexStringToBinaryString(ndHex),
256);
14762 var nh = ndBstr.substring(
0,l/
33);
14766 self.toSeed = function(mnemonic, passphrase) {
14767 passphrase = passphrase || '';
14768 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
14769 passphrase = self.normalizeString(passphrase)
14770 passphrase =
"mnemonic" + passphrase;
14771 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14772 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14773 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS,
512, hmacSHA512);
14774 var hashHex = sjcl.codec.hex.fromBits(result);
14778 self.normalizeString = function(str) {
14779 if (typeof str.normalize ==
"function") {
14780 return str.normalize(
"NFKD");
14783 // TODO decide how to handle this in the future.
14784 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14789 function byteArrayToWordArray(data) {
14791 for (var i=
0; i
<data.length/
4; i++) {
14793 v += data[i*
4 +
0] <<
8 *
3;
14794 v += data[i*
4 +
1] <<
8 *
2;
14795 v += data[i*
4 +
2] <<
8 *
1;
14796 v += data[i*
4 +
3] <<
8 *
0;
14802 function byteArrayToBinaryString(data) {
14804 for (var i=
0; i
<data.length; i++) {
14805 bin += zfill(data[i].toString(
2),
8);
14810 function hexStringToBinaryString(hexString) {
14812 for (var i=
0; i
<hexString.length; i++) {
14813 binaryString += zfill(parseInt(hexString[i],
16).toString(
2),
4);
14815 return binaryString;
14818 function binaryStringToWordArray(binary) {
14819 var aLen = binary.length /
32;
14821 for (var i=
0; i
<aLen; i++) {
14822 var valueStr = binary.substring(
0,
32);
14823 var value = parseInt(valueStr,
2);
14825 binary = binary.slice(
32);
14830 // Pad a numeric string on the left with zero digits until the given width
14832 // Note this differs to the python implementation because it does not
14833 // handle numbers starting with a sign.
14834 function zfill(source, length) {
14835 source = source.toString();
14836 while (source.length < length) {
14837 source = '
0' + source;
14846 <script>(function() {
14848 var mnemonic = new Mnemonic("english");
14850 var bip32RootKey = null;
14851 var bip32ExtendedKey = null;
14852 var network = bitcoin.networks.bitcoin;
14853 var addressRowTemplate = $("#address-row-template");
14855 var showIndex = true;
14856 var showAddress = true;
14857 var showPrivKey = true;
14859 var phraseChangeTimeoutEvent = null;
14860 var rootKeyChangedTimeoutEvent = null;
14863 DOM.network = $(".network");
14864 DOM.phraseNetwork = $("#network-phrase");
14865 DOM.phrase = $(".phrase");
14866 DOM.passphrase = $(".passphrase");
14867 DOM.generate = $(".generate");
14868 DOM.seed = $(".seed");
14869 DOM.rootKey = $(".root-key");
14870 DOM.extendedPrivKey = $(".extended-priv-key");
14871 DOM.extendedPubKey = $(".extended-pub-key");
14872 DOM.bip32tab = $("#bip32-tab");
14873 DOM.bip44tab = $("#bip44-tab");
14874 DOM.bip32panel = $("#bip32");
14875 DOM.bip44panel = $("#bip44");
14876 DOM.bip32path = $("#bip32-path");
14877 DOM.bip44path = $("#bip44-path");
14878 DOM.bip44purpose = $("#bip44 .purpose");
14879 DOM.bip44coin = $("#bip44 .coin");
14880 DOM.bip44account = $("#bip44 .account");
14881 DOM.bip44change = $("#bip44 .change");
14882 DOM.strength = $(".strength");
14883 DOM.hardenedAddresses = $(".hardened-addresses");
14884 DOM.addresses = $(".addresses");
14885 DOM.rowsToAdd = $(".rows-to-add");
14886 DOM.more = $(".more");
14887 DOM.feedback = $(".feedback");
14888 DOM.tab = $(".derivation-type a");
14889 DOM.indexToggle = $(".index-toggle");
14890 DOM.addressToggle = $(".address-toggle");
14891 DOM.privateKeyToggle = $(".private-key-toggle");
14895 DOM.network.on("change", networkChanged);
14896 DOM.phrase.on("input", delayedPhraseChanged);
14897 DOM.passphrase.on("input", delayedPhraseChanged);
14898 DOM.generate.on("click", generateClicked);
14899 DOM.more.on("click", showMore);
14900 DOM.rootKey.on("input", delayedRootKeyChanged);
14901 DOM.bip32path.on("input", calcForDerivationPath);
14902 DOM.bip44purpose.on("input", calcForDerivationPath);
14903 DOM.bip44coin.on("input", calcForDerivationPath);
14904 DOM.bip44account.on("input", calcForDerivationPath);
14905 DOM.bip44change.on("input", calcForDerivationPath);
14906 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
14907 DOM.hardenedAddresses.on("change", calcForDerivationPath);
14908 DOM.indexToggle.on("click", toggleIndexes);
14909 DOM.addressToggle.on("click", toggleAddresses);
14910 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14913 hideValidationError();
14914 populateNetworkSelect();
14919 function networkChanged(e) {
14920 var networkIndex = e.target.value;
14921 networks[networkIndex].onSelect();
14922 if (seed != null) {
14930 function delayedPhraseChanged() {
14931 hideValidationError();
14933 if (phraseChangeTimeoutEvent != null) {
14934 clearTimeout(phraseChangeTimeoutEvent);
14936 phraseChangeTimeoutEvent = setTimeout(phraseChanged,
400);
14939 function phraseChanged() {
14941 hideValidationError();
14942 // Get the mnemonic phrase
14943 var phrase = DOM.phrase.val();
14944 var errorText = findPhraseErrors(phrase);
14946 showValidationError(errorText);
14949 // Calculate and display
14950 var passphrase = DOM.passphrase.val();
14951 calcBip32RootKeyFromSeed(phrase, passphrase);
14952 calcForDerivationPath();
14956 function delayedRootKeyChanged() {
14957 // Warn if there is an existing mnemonic or passphrase.
14958 if (DOM.phrase.val().length
> 0 || DOM.passphrase.val().length
> 0) {
14959 if (!confirm(
"This will clear existing mnemonic and passphrase")) {
14960 DOM.rootKey.val(bip32RootKey);
14964 hideValidationError();
14966 // Clear existing mnemonic and passphrase
14967 DOM.phrase.val(
"");
14968 DOM.passphrase.val(
"");
14970 if (rootKeyChangedTimeoutEvent != null) {
14971 clearTimeout(rootKeyChangedTimeoutEvent);
14973 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged,
400);
14976 function rootKeyChanged() {
14978 hideValidationError();
14979 // Validate the root key TODO
14980 var rootKeyBase58 = DOM.rootKey.val();
14981 var errorText = validateRootKey(rootKeyBase58);
14983 showValidationError(errorText);
14986 // Calculate and display
14987 calcBip32RootKeyFromBase58(rootKeyBase58);
14988 calcForDerivationPath();
14992 function calcForDerivationPath() {
14994 hideValidationError();
14995 // Get the derivation path
14996 var derivationPath = getDerivationPath();
14997 var errorText = findDerivationPathErrors(derivationPath);
14999 showValidationError(errorText);
15002 calcBip32ExtendedKey(derivationPath);
15003 displayBip32Info();
15007 function generateClicked() {
15010 setTimeout(function() {
15011 var phrase = generateRandomPhrase();
15019 function toggleIndexes() {
15020 showIndex = !showIndex;
15021 $(
"td.index span").toggleClass(
"invisible");
15024 function toggleAddresses() {
15025 showAddress = !showAddress;
15026 $(
"td.address span").toggleClass(
"invisible");
15029 function togglePrivateKeys() {
15030 showPrivKey = !showPrivKey;
15031 $(
"td.privkey span").toggleClass(
"invisible");
15036 function generateRandomPhrase() {
15037 if (!hasStrongRandom()) {
15038 var errorText =
"This browser does not support strong randomness";
15039 showValidationError(errorText);
15042 var numWords = parseInt(DOM.strength.val());
15043 var strength = numWords /
3 *
32;
15044 var words = mnemonic.generate(strength);
15045 DOM.phrase.val(words);
15049 function calcBip32RootKeyFromSeed(phrase, passphrase) {
15050 seed = mnemonic.toSeed(phrase, passphrase);
15051 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
15054 function calcBip32RootKeyFromBase58(rootKeyBase58) {
15055 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58);
15058 function calcBip32ExtendedKey(path) {
15059 bip32ExtendedKey = bip32RootKey;
15060 // Derive the key from the path
15061 var pathBits = path.split(
"/");
15062 for (var i=
0; i
<pathBits.length; i++) {
15063 var bit = pathBits[i];
15064 var index = parseInt(bit);
15065 if (isNaN(index)) {
15068 var hardened = bit[bit.length-
1] ==
"'";
15070 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
15073 bip32ExtendedKey = bip32ExtendedKey.derive(index);
15078 function showValidationError(errorText) {
15084 function hideValidationError() {
15090 function findPhraseErrors(phrase) {
15091 // TODO make this right
15092 // Preprocess the words
15093 phrase = mnemonic.normalizeString(phrase);
15094 var parts = phrase.split(
" ");
15096 for (var i=
0; i
<parts.length; i++) {
15097 var part = parts[i];
15098 if (part.length
> 0) {
15099 // TODO check that lowercasing is always valid to do
15100 proper.push(part.toLowerCase());
15103 var properPhrase = proper.join(' ');
15105 for (var i=
0; i
<proper.length; i++) {
15106 var word = proper[i];
15107 if (WORDLISTS[
"english"].indexOf(word) == -
1) {
15108 console.log(
"Finding closest match to " + word);
15109 var nearestWord = findNearestWord(word);
15110 return word +
" not in wordlist, did you mean " + nearestWord +
"?";
15113 // Check the words are valid
15114 var isValid = mnemonic.check(properPhrase);
15116 return
"Invalid mnemonic";
15121 function validateRootKey(rootKeyBase58) {
15123 bitcoin.HDNode.fromBase58(rootKeyBase58);
15126 return
"Invalid root key";
15131 function getDerivationPath() {
15132 if (DOM.bip44tab.hasClass(
"active")) {
15133 var purpose = parseIntNoNaN(DOM.bip44purpose.val(),
44);
15134 var coin = parseIntNoNaN(DOM.bip44coin.val(),
0);
15135 var account = parseIntNoNaN(DOM.bip44account.val(),
0);
15136 var change = parseIntNoNaN(DOM.bip44change.val(),
0);
15138 path += purpose +
"'/";
15139 path += coin +
"'/";
15140 path += account +
"'/";
15142 DOM.bip44path.val(path);
15143 var derivationPath = DOM.bip44path.val();
15144 console.log(
"Using derivation path from BIP44 tab: " + derivationPath);
15145 return derivationPath;
15147 else if (DOM.bip32tab.hasClass(
"active")) {
15148 var derivationPath = DOM.bip32path.val();
15149 console.log(
"Using derivation path from BIP32 tab: " + derivationPath);
15150 return derivationPath;
15153 console.log(
"Unknown derivation path");
15157 function findDerivationPathErrors(path) {
15158 // TODO is not perfect but is better than nothing
15160 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#test-vectors
15162 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#extended-keys
15163 var maxDepth =
255; // TODO verify this!!
15164 var maxIndexValue = Math.pow(
2,
31); // TODO verify this!!
15165 if (path[
0] !=
"m") {
15166 return
"First character must be 'm'";
15168 if (path.length
> 1) {
15169 if (path[
1] !=
"/") {
15170 return
"Separator must be '/'";
15172 var indexes = path.split(
"/");
15173 if (indexes.length
> maxDepth) {
15174 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
15176 for (var depth =
1; depth
<indexes.length; depth++) {
15177 var index = indexes[depth];
15178 var invalidChars = index.replace(/^[
0-
9]+'?$/g,
"")
15179 if (invalidChars.length
> 0) {
15180 return
"Invalid characters " + invalidChars +
" found at depth " + depth;
15182 var indexValue = parseInt(index.replace(
"'",
""));
15183 if (isNaN(depth)) {
15184 return
"Invalid number at depth " + depth;
15186 if (indexValue
> maxIndexValue) {
15187 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
15194 function displayBip32Info() {
15196 DOM.seed.val(seed);
15197 var rootKey = bip32RootKey.toBase58();
15198 DOM.rootKey.val(rootKey);
15199 var extendedPrivKey = bip32ExtendedKey.toBase58();
15200 DOM.extendedPrivKey.val(extendedPrivKey);
15201 var extendedPubKey = bip32ExtendedKey.toBase58(false);
15202 DOM.extendedPubKey.val(extendedPubKey);
15203 // Display the addresses and privkeys
15204 clearAddressesList();
15205 displayAddresses(
0,
20);
15208 function displayAddresses(start, total) {
15209 for (var i=
0; i
<total; i++) {
15210 var index = i + start;
15211 new TableRow(index);
15215 function TableRow(index) {
15217 var useHardenedAddresses = DOM.hardenedAddresses.prop(
"checked");
15223 function calculateValues() {
15224 setTimeout(function() {
15226 if (useHardenedAddresses) {
15227 key = bip32ExtendedKey.deriveHardened(index);
15230 key = bip32ExtendedKey.derive(index);
15232 var address = key.getAddress().toString();
15233 var privkey = key.privKey.toWIF(network);
15234 var indexText = getDerivationPath() +
"/" + index;
15235 if (useHardenedAddresses) {
15236 indexText = indexText +
"'";
15238 addAddressToList(indexText, address, privkey);
15246 function showMore() {
15247 var start = DOM.addresses.children().length;
15248 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
15249 if (isNaN(rowsToAdd)) {
15251 DOM.rowsToAdd.val(
"20");
15253 if (rowsToAdd
> 200) {
15254 var msg =
"Generating " + rowsToAdd +
" rows could take a while. ";
15255 msg +=
"Do you want to continue?";
15256 if (!confirm(msg)) {
15260 displayAddresses(start, rowsToAdd);
15263 function clearDisplay() {
15264 clearAddressesList();
15266 hideValidationError();
15269 function clearAddressesList() {
15270 DOM.addresses.empty();
15273 function clearKey() {
15274 DOM.rootKey.val(
"");
15275 DOM.extendedPrivKey.val(
"");
15276 DOM.extendedPubKey.val(
"");
15279 function addAddressToList(indexText, address, privkey) {
15280 var row = $(addressRowTemplate.html());
15282 var indexCell = row.find(
".index span");
15283 var addressCell = row.find(
".address span");
15284 var privkeyCell = row.find(
".privkey span");
15286 indexCell.text(indexText);
15287 addressCell.text(address);
15288 privkeyCell.text(privkey);
15291 indexCell.addClass(
"invisible");
15293 if (!showAddress) {
15294 addressCell.addClass(
"invisible");
15296 if (!showPrivKey) {
15297 privkeyCell.addClass(
"invisible");
15299 DOM.addresses.append(row);
15302 function hasStrongRandom() {
15303 return 'crypto' in window && window['crypto'] !== null;
15306 function disableForms() {
15307 $(
"form").on(
"submit", function(e) {
15308 e.preventDefault();
15312 function parseIntNoNaN(val, defaultVal) {
15313 var v = parseInt(val);
15320 function showPending() {
15322 .text(
"Calculating...")
15326 function findNearestWord(word) {
15327 var words = WORDLISTS[
"english"];
15328 var minDistance =
99;
15329 var closestWord = words[
0];
15330 for (var i=
0; i
<words.length; i++) {
15331 var comparedTo = words[i];
15332 var distance = Levenshtein.get(word, comparedTo);
15333 if (distance < minDistance) {
15334 closestWord = comparedTo;
15335 minDistance = distance;
15338 return closestWord;
15341 function hidePending() {
15347 function populateNetworkSelect() {
15348 for (var i=
0; i
<networks.length; i++) {
15349 var network = networks[i];
15350 var option = $(
"<option>");
15351 option.attr(
"value", i);
15352 option.text(network.name);
15353 DOM.phraseNetwork.append(option);
15360 onSelect: function() {
15361 network = bitcoin.networks.bitcoin;
15362 DOM.bip44coin.val(
0);
15366 name:
"Bitcoin Testnet",
15367 onSelect: function() {
15368 network = bitcoin.networks.testnet;
15369 DOM.bip44coin.val(
1);
15374 onSelect: function() {
15375 network = bitcoin.networks.litecoin;
15376 DOM.bip44coin.val(
2);
15381 onSelect: function() {
15382 network = bitcoin.networks.dogecoin;
15383 DOM.bip44coin.val(
3);
15387 name:
"ShadowCash",
15388 onSelect: function() {
15389 network = bitcoin.networks.shadow;
15390 DOM.bip44coin.val(
35);
15394 name:
"ShadowCash Testnet",
15395 onSelect: function() {
15396 network = bitcoin.networks.shadowtn;
15397 DOM.bip44coin.val(
1);
15402 onSelect: function() {
15403 network = bitcoin.networks.viacoin;
15404 DOM.bip44coin.val(
14);
15408 name:
"Viacoin Testnet",
15409 onSelect: function() {
15410 network = bitcoin.networks.viacointestnet;
15411 DOM.bip44coin.val(
1);
15416 onSelect: function() {
15417 network = bitcoin.networks.jumbucks;
15418 DOM.bip44coin.val(
26);
15423 onSelect: function() {
15424 network = bitcoin.networks.clam;
15425 DOM.bip44coin.val(
23);
15430 onSelect: function() {
15431 network = bitcoin.networks.dash;
15432 DOM.bip44coin.val(
5);