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 val=
"3">3</option>
75 <option val=
"6">6</option>
76 <option val=
"9">9</option>
77 <option val=
"12">12</option>
78 <option val=
"15" selected
>15</option>
79 <option val=
"18">18</option>
80 <option val=
"21">21</option>
81 <option val=
"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=
"network-phrase" class=
"col-sm-2 control-label">Coin
</label>
97 <div class=
"col-sm-10">
98 <select id=
"network-phrase" class=
"network form-control">
99 <!-- populated by javascript -->
103 <div class=
"form-group">
104 <label for=
"root-key" class=
"col-sm-2 control-label">BIP32 Root Key
</label>
105 <div class=
"col-sm-10">
106 <textarea id=
"root-key" class=
"root-key form-control" readonly=
"readonly"></textarea>
116 <div class=
"col-md-12">
117 <h2>Derivation Path
</h2>
118 <ul class=
"derivation-type nav nav-tabs" role=
"tablist">
119 <li id=
"bip44-tab" class=
"active">
120 <a href=
"#bip44" role=
"tab" data-toggle=
"tab">BIP44
</a>
123 <a href=
"#bip32" role=
"tab" data-toggle=
"tab">BIP32
</a>
126 <div class=
"derivation-type tab-content">
127 <div id=
"bip44" class=
"tab-pane active">
128 <form class=
"form-horizontal" role=
"form">
130 <div class=
"col-sm-2"></div>
131 <div class=
"col-sm-10">
132 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">BIP44 spec
</a></p>
134 <div class=
"form-group">
135 <label for=
"purpose" class=
"col-sm-2 control-label">
136 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target=
"_blank">Purpose
</a>
138 <div class=
"col-sm-10">
139 <input id=
"purpose" type=
"text" class=
"purpose form-control" value=
"44">
142 <div class=
"form-group">
143 <label for=
"coin" class=
"col-sm-2 control-label">
144 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target=
"_blank">Coin
</a>
146 <div class=
"col-sm-10">
147 <input id=
"coin" type=
"text" class=
"coin form-control" value=
"0">
150 <div class=
"form-group">
151 <label for=
"account" class=
"col-sm-2 control-label">
152 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target=
"_blank">Account
</a>
154 <div class=
"col-sm-10">
155 <input id=
"account" type=
"text" class=
"account form-control" value=
"0">
158 <div class=
"form-group">
159 <label for=
"change" class=
"col-sm-2 control-label">
160 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target=
"_blank">External / Internal
</a>
162 <div class=
"col-sm-10">
163 <input id=
"change" type=
"text" class=
"change form-control" value=
"0">
166 <div class=
"form-group">
167 <label for=
"bip44-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
168 <div class=
"col-sm-10">
169 <input id=
"bip44-path" type=
"text" class=
"path form-control" value=
"m/44'/0'/0'/0" readonly=
"readonly">
174 <div id=
"bip32" class=
"tab-pane">
175 <form class=
"form-horizontal" role=
"form">
177 <div class=
"col-sm-2"></div>
178 <div class=
"col-sm-10">
179 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">BIP32 spec
</a></p>
181 <div class=
"form-group">
182 <label for=
"bip32-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
183 <div class=
"col-sm-10">
184 <input id=
"bip32-path" type=
"text" class=
"path form-control" value=
"m/0">
187 <div class=
"form-group">
188 <label class=
"col-sm-2 control-label">Hive Wallet
</label>
189 <div class=
"col-sm-10">
190 <p class=
"form-control no-border">
191 Use path
<code>m/
0'/
0</code>.
192 For more info see the
<a href=
"https://www.hivewallet.com/" target=
"_blank">Hive Wallet homepage
</a>
196 <div class=
"form-group">
197 <label for=
"mycelium-path" class=
"col-sm-2 control-label">Mycelium Wallet
</label>
198 <div class=
"col-sm-10">
199 <p class=
"form-control no-border">
200 Use path
<code>m/
44'/
0'/
0'/
0</code>.
201 For more info see the
<a href=
"http://www.mycelium.com/" target=
"_blank">Mycelium Wallet homepage
</a>
208 <form class=
"form-horizontal" role=
"form">
209 <div class=
"form-group">
210 <label for=
"extended-priv-key" class=
"col-sm-2 control-label">BIP32 Extended Key
</label>
211 <div class=
"col-sm-10">
212 <textarea id=
"extended-priv-key" class=
"extended-priv-key form-control" readonly=
"readonly"></textarea>
215 <div class=
"form-group">
216 <label for=
"extended-pub-key" class=
"col-sm-2 control-label">BIP32 Extended Key (addresses only)
</label>
217 <div class=
"col-sm-10">
218 <textarea id=
"extended-pub-key" class=
"extended-pub-key form-control" readonly=
"readonly"></textarea>
228 <div class=
"col-md-12">
229 <h2>Derived Addresses
</h2>
230 <p>Note these addreses are derived from the
<strong>BIP32 Extended Key
</strong></p>
231 <table class=
"table table-striped">
234 <div class=
"input-group">
236 <button class=
"index-toggle">Toggle
</button>
240 <div class=
"input-group">
242 <button class=
"address-toggle">Toggle
</button>
246 <div class=
"input-group">
247 Private Key
248 <button class=
"private-key-toggle">Toggle
</button>
252 <tbody class=
"addresses">
253 <tr><td> </td><td> </td><td> </td></tr>
254 <tr><td> </td><td> </td><td> </td></tr>
255 <tr><td> </td><td> </td><td> </td></tr>
256 <tr><td> </td><td> </td><td> </td></tr>
257 <tr><td> </td><td> </td><td> </td></tr>
262 <span>Show next
</button>
263 <input type=
"number" class=
"rows-to-add" value=
"20">
264 <button class=
"more">Show
</button>
269 <div class=
"col-md-12">
271 <h3>BIP39
<span class=
"small">Mnemonic code for generating deterministic keys
</span></h3>
274 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec
</a>
276 <h3>BIP32
<span class=
"small">Hierarchical Deterministic Wallets
</span></h3>
279 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">official BIP32 spec
</a>
281 <a href=
"http://bip32.org/" target=
"_blank">bip32.org
</a>
283 <h3>BIP44
<span class=
"small">Multi-Account Hierarchy for Deterministic Wallets
</span></h3>
286 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">official BIP44 spec
</a>
288 <h3>Private Keys
</h3>
291 <a href=
"https://web.archive.org/web/20150707020924/https://brainwallet.org/" target=
"_blank">brainwallet.org
</a>,
292 but be careful - it can be easy to make mistakes if you
293 don't know what you're doing
301 <div class=
"col-md-12">
303 <h2>Offline Usage
</h2>
306 You can use this tool without having to be online.
309 In your browser, select file save-as, and save this page
313 Double-click that file to open it in a browser
314 on any offline computer.
317 Alternatively, download it from
318 <a href=
"https://github.com/dcpos/bip39">
319 https://github.com/dcpos/bip39
328 <div class=
"col-md-12">
330 <h2>This project is
100% open-source code
</h2>
333 <span>Get the source code at -
</span>
334 <a href=
"https://github.com/dcpos/bip39" target=
"_blank">
335 https://github.com/dcpos/bip39
342 <span>BitcoinJS -
</span>
343 <a href=
"https://github.com/bitcoinjs/bitcoinjs-lib" target=
"_blank">
344 https://github.com/bitcoinjs/bitcoinjs-lib
349 <span>jsBIP39 -
</span>
350 <a href=
"https://github.com/iancoleman/jsbip39" target=
"_blank">
351 https://github.com/iancoleman/jsbip39
357 <a href=
"https://github.com/bitwiseshiftleft/sjcl" target=
"_blank">
358 https://github.com/bitwiseshiftleft/sjcl
363 <span>jQuery -
</span>
364 <a href=
"https://jquery.com/" target=
"_blank">
370 <span>Twitter Bootstrap -
</span>
371 <a href=
"http://getbootstrap.com/" target=
"_blank">
372 http://getbootstrap.com/
381 <div class=
"feedback-container">
382 <div class=
"feedback">Loading...
</div>
385 <script type=
"text/template" id=
"address-row-template">
387 <td class=
"index"><span></span></td>
388 <td class=
"address"><span></span></td>
389 <td class=
"privkey"><span></span></td>
392 <script>/*! jQuery v2.1
.1 | (c)
2005,
2014 jQuery Foundation, Inc. | jquery.org/license */
393 !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)
394 },_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))
395 },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});
398 * Bootstrap v3.2.0 (http://getbootstrap.com)
399 * Copyright 2011-2014 Twitter, Inc.
400 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
402 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>
403 <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){
404 // (public) Constructor
405 function BigInteger(a, b, c) {
406 if (!(this instanceof BigInteger))
407 return new BigInteger(a, b, c)
410 if (
"number" == typeof a) this.fromNumber(a, b, c)
411 else if (b == null &&
"string" != typeof a) this.fromString(a,
256)
412 else this.fromString(a, b)
416 var proto = BigInteger.prototype
418 // duck-typed isBigInteger
419 proto.__bigi = require('../package.json').version
420 BigInteger.isBigInteger = function (obj, check_ver) {
421 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
427 // am: Compute w_j += (x*this_i), propagate carries,
428 // c is initial carry, returns final carry.
429 // c <
3*dvalue, x <
2*dvalue, this_i < dvalue
430 // We need to select the fastest one that works in this environment.
432 // am1: use a single mult and divide to get the high bits,
433 // max digit bits should be
26 because
434 // max internal value =
2*dvalue^
2-
2*dvalue (<
2^
53)
435 function am1(i, x, w, j, c, n) {
437 var v = x * this[i++] + w[j] + c
438 c = Math.floor(v /
0x4000000)
439 w[j++] = v &
0x3ffffff
443 // am2 avoids a big mult-and-extract completely.
444 // Max digit bits should be <=
30 because we do bitwise ops
445 // on values up to
2*hdvalue^
2-hdvalue-
1 (<
2^
31)
446 function am2(i, x, w, j, c, n) {
450 var l = this[i] &
0x7fff
451 var h = this[i++]
>> 15
452 var m = xh * l + h * xl
453 l = xl * l + ((m &
0x7fff) <<
15) + w[j] + (c &
0x3fffffff)
454 c = (l
>>> 30) + (m
>>> 15) + xh * h + (c
>>> 30)
455 w[j++] = l &
0x3fffffff
459 // Alternately, set max digit bits to
28 since some
460 // browsers slow down when dealing with
32-bit numbers.
461 function am3(i, x, w, j, c, n) {
465 var l = this[i] &
0x3fff
466 var h = this[i++]
>> 14
467 var m = xh * l + h * xl
468 l = xl * l + ((m &
0x3fff) <<
14) + w[j] + c
469 c = (l
>> 28) + (m
>> 14) + xh * h
470 w[j++] = l &
0xfffffff
476 BigInteger.prototype.am = am1
479 BigInteger.prototype.DB = dbits
480 BigInteger.prototype.DM = ((
1 << dbits) -
1)
481 var DV = BigInteger.prototype.DV = (
1 << dbits)
484 BigInteger.prototype.FV = Math.pow(
2, BI_FP)
485 BigInteger.prototype.F1 = BI_FP - dbits
486 BigInteger.prototype.F2 =
2 * dbits - BI_FP
489 var BI_RM =
"0123456789abcdefghijklmnopqrstuvwxyz"
490 var BI_RC = new Array()
492 rr =
"0".charCodeAt(
0)
493 for (vv =
0; vv <=
9; ++vv) BI_RC[rr++] = vv
494 rr =
"a".charCodeAt(
0)
495 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
496 rr =
"A".charCodeAt(
0)
497 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
499 function int2char(n) {
500 return BI_RM.charAt(n)
503 function intAt(s, i) {
504 var c = BI_RC[s.charCodeAt(i)]
505 return (c == null) ? -
1 : c
508 // (protected) copy this to r
509 function bnpCopyTo(r) {
510 for (var i = this.t -
1; i
>=
0; --i) r[i] = this[i]
515 // (protected) set from integer value x, -DV <= x < DV
516 function bnpFromInt(x) {
518 this.s = (x <
0) ? -
1 :
0
519 if (x
> 0) this[
0] = x
520 else if (x < -
1) this[
0] = x + DV
524 // return bigint initialized to value
526 var r = new BigInteger()
531 // (protected) set from string and radix
532 function bnpFromString(s, b) {
537 else if (b ==
8) k =
3
538 else if (b ==
256) k =
8; // byte array
539 else if (b ==
2) k =
1
540 else if (b ==
32) k =
5
541 else if (b ==
4) k =
2
552 var x = (k ==
8) ? s[i] &
0xff : intAt(s, i)
554 if (s.charAt(i) == "-") mi = true
560 else if (sh + k
> self.DB) {
561 self[self.t -
1] |= (x & ((
1 << (self.DB - sh)) -
1)) << sh
562 self[self.t++] = (x
>> (self.DB - sh))
564 self[self.t -
1] |= x << sh
566 if (sh
>= self.DB) sh -= self.DB
568 if (k ==
8 && (s[
0] &
0x80) !=
0) {
570 if (sh
> 0) self[self.t -
1] |= ((
1 << (self.DB - sh)) -
1) << sh
573 if (mi) BigInteger.ZERO.subTo(self, self)
576 // (protected) clamp off excess high words
577 function bnpClamp() {
578 var c = this.s & this.DM
579 while (this.t
> 0 && this[this.t -
1] == c)--this.t
582 // (public) return string representation in given radix
583 function bnToString(b) {
585 if (self.s <
0) return
"-" + self.negate()
589 else if (b ==
8) k =
3
590 else if (b ==
2) k =
1
591 else if (b ==
32) k =
5
592 else if (b ==
4) k =
2
593 else return self.toRadix(b)
594 var km = (
1 << k) -
1,
598 var p = self.DB - (i * self.DB) % k
600 if (p < self.DB && (d = self[i]
>> p)
> 0) {
606 d = (self[i] & ((
1 << p) -
1)) << (k - p)
607 d |= self[--i]
>> (p += self.DB - k)
609 d = (self[i]
>> (p -= k)) & km
616 if (m) r += int2char(d)
623 function bnNegate() {
624 var r = new BigInteger()
625 BigInteger.ZERO.subTo(this, r)
631 return (this.s <
0) ? this.negate() : this
634 // (public) return + if this
> a, - if this < a,
0 if equal
635 function bnCompareTo(a) {
640 if (r !=
0) return (this.s <
0) ? -r : r
642 if ((r = this[i] - a[i]) !=
0) return r
646 // returns bit length of the integer x
650 if ((t = x
>>> 16) !=
0) {
654 if ((t = x
>> 8) !=
0) {
658 if ((t = x
>> 4) !=
0) {
662 if ((t = x
>> 2) !=
0) {
666 if ((t = x
>> 1) !=
0) {
673 // (public) return the number of bits in
"this"
674 function bnBitLength() {
675 if (this.t <=
0) return
0
676 return this.DB * (this.t -
1) + nbits(this[this.t -
1] ^ (this.s & this.DM))
679 // (public) return the number of bytes in
"this"
680 function bnByteLength() {
681 return this.bitLength()
>> 3
684 // (protected) r = this << n*DB
685 function bnpDLShiftTo(n, r) {
687 for (i = this.t -
1; i
>=
0; --i) r[i + n] = this[i]
688 for (i = n -
1; i
>=
0; --i) r[i] =
0
693 // (protected) r = this
>> n*DB
694 function bnpDRShiftTo(n, r) {
695 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
696 r.t = Math.max(this.t - n,
0)
700 // (protected) r = this << n
701 function bnpLShiftTo(n, r) {
704 var cbs = self.DB - bs
705 var bm = (
1 << cbs) -
1
706 var ds = Math.floor(n / self.DB),
707 c = (self.s << bs) & self.DM,
709 for (i = self.t -
1; i
>=
0; --i) {
710 r[i + ds +
1] = (self[i]
>> cbs) | c
711 c = (self[i] & bm) << bs
713 for (i = ds -
1; i
>=
0; --i) r[i] =
0
715 r.t = self.t + ds +
1
720 // (protected) r = this
>> n
721 function bnpRShiftTo(n, r) {
724 var ds = Math.floor(n / self.DB)
730 var cbs = self.DB - bs
731 var bm = (
1 << bs) -
1
732 r[
0] = self[ds]
>> bs
733 for (var i = ds +
1; i < self.t; ++i) {
734 r[i - ds -
1] |= (self[i] & bm) << cbs
735 r[i - ds] = self[i]
>> bs
737 if (bs
> 0) r[self.t - ds -
1] |= (self.s & bm) << cbs
742 // (protected) r = this - a
743 function bnpSubTo(a, r) {
747 m = Math.min(a.t, self.t)
770 r.s = (c <
0) ? -
1 :
0
771 if (c < -
1) r[i++] = self.DV + c
772 else if (c
> 0) r[i++] = c
777 // (protected) r = this * a, r != this,a (HAC
14.12)
778 //
"this" should be the larger one if appropriate.
779 function bnpMultiplyTo(a, r) {
784 while (--i
>=
0) r[i] =
0
785 for (i =
0; i < y.t; ++i) r[i + x.t] = x.am(
0, y[i], r, i,
0, x.t)
788 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
791 // (protected) r = this^
2, r != this (HAC
14.16)
792 function bnpSquareTo(r) {
794 var i = r.t =
2 * x.t
795 while (--i
>=
0) r[i] =
0
796 for (i =
0; i < x.t -
1; ++i) {
797 var c = x.am(i, x[i], r,
2 * i,
0,
1)
798 if ((r[i + x.t] += x.am(i +
1,
2 * x[i], r,
2 * i +
1, c, x.t - i -
1))
>= x.DV) {
803 if (r.t
> 0) r[r.t -
1] += x.am(i, x[i], r,
2 * i,
0,
1)
808 // (protected) divide this by m, quotient and remainder to q, r (HAC
14.20)
809 // r != q, this != m. q or r may be null.
810 function bnpDivRemTo(m, q, r) {
813 if (pm.t <=
0) return
816 if (q != null) q.fromInt(
0)
817 if (r != null) self.copyTo(r)
820 if (r == null) r = new BigInteger()
821 var y = new BigInteger(),
824 var nsh = self.DB - nbits(pm[pm.t -
1]); // normalize modulus
835 var yt = y0 * (
1 << self.F1) + ((ys
> 1) ? y[ys -
2]
>> self.F2 :
0)
836 var d1 = self.FV / yt,
837 d2 = (
1 << self.F1) / yt,
841 t = (q == null) ? new BigInteger() : q
843 if (r.compareTo(t)
>=
0) {
847 BigInteger.ONE.dlShiftTo(ys, t)
848 t.subTo(y, y); // "negative" y so we can replace sub with am later
849 while (y.t < ys) y[y.t++] =
0
851 // Estimate quotient digit
852 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i -
1] + e) * d2)
853 if ((r[i] += y.am(
0, qd, r, j,
0, ys)) < qd) { // Try it out
856 while (r[i] < --qd) r.subTo(t, r)
861 if (ts != ms) BigInteger.ZERO.subTo(q, q)
865 if (nsh
> 0) r.rShiftTo(nsh, r); // Denormalize remainder
866 if (ts <
0) BigInteger.ZERO.subTo(r, r)
869 // (public) this mod a
871 var r = new BigInteger()
873 .divRemTo(a, null, r)
874 if (this.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) a.subTo(r, r)
878 // Modular reduction using
"classic" algorithm
879 function Classic(m) {
883 function cConvert(x) {
884 if (x.s <
0 || x.compareTo(this.m)
>=
0) return x.mod(this.m)
888 function cRevert(x) {
892 function cReduce(x) {
893 x.divRemTo(this.m, null, x)
896 function cMulTo(x, y, r) {
901 function cSqrTo(x, r) {
906 Classic.prototype.convert = cConvert
907 Classic.prototype.revert = cRevert
908 Classic.prototype.reduce = cReduce
909 Classic.prototype.mulTo = cMulTo
910 Classic.prototype.sqrTo = cSqrTo
912 // (protected) return "-
1/this %
2^DB"; useful for Mont. reduction
916 // xy(
2-xy) = (
1+km)(
1-km)
917 // x[y(
2-xy)] =
1-k^
2m^
2
918 // x[y(
2-xy)] ==
1 (mod m^
2)
919 // if y is
1/x mod m, then y(
2-xy) is
1/x mod m^
2
920 // should reduce x and y(
2-xy) by m^
2 at each step to keep size bounded.
921 // JS multiply "overflows" differently from C/C++, so care is needed here.
922 function bnpInvDigit() {
923 if (this.t <
1) return
0
925 if ((x &
1) ==
0) return
0
926 var y = x &
3; // y ==
1/x mod
2^
2
927 y = (y * (
2 - (x &
0xf) * y)) &
0xf; // y ==
1/x mod
2^
4
928 y = (y * (
2 - (x &
0xff) * y)) &
0xff; // y ==
1/x mod
2^
8
929 y = (y * (
2 - (((x &
0xffff) * y) &
0xffff))) &
0xffff; // y ==
1/x mod
2^
16
930 // last step - calculate inverse mod DV directly
931 // assumes
16 < DB <=
32 and assumes ability to handle
48-bit ints
932 y = (y * (
2 - x * y % this.DV)) % this.DV; // y ==
1/x mod
2^dbits
933 // we really want the negative inverse, and -DV < y < DV
934 return (y
> 0) ? this.DV - y : -y
937 // Montgomery reduction
938 function Montgomery(m) {
940 this.mp = m.invDigit()
941 this.mpl = this.mp &
0x7fff
942 this.mph = this.mp
>> 15
943 this.um = (
1 << (m.DB -
15)) -
1
948 function montConvert(x) {
949 var r = new BigInteger()
951 .dlShiftTo(this.m.t, r)
952 r.divRemTo(this.m, null, r)
953 if (x.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) this.m.subTo(r, r)
958 function montRevert(x) {
959 var r = new BigInteger()
965 // x = x/R mod m (HAC
14.32)
966 function montReduce(x) {
967 while (x.t <= this.mt2) // pad x so am has enough room later
969 for (var i =
0; i < this.m.t; ++i) {
970 // faster way of calculating u0 = x[i]*mp mod DV
971 var j = x[i] &
0x7fff
972 var u0 = (j * this.mpl + (((j * this.mph + (x[i]
>> 15) * this.mpl) & this.um) <<
15)) & x.DM
973 // use am to combine the multiply-shift-add into one call
975 x[j] += this.m.am(
0, u0, x, i,
0, this.m.t)
977 while (x[j]
>= x.DV) {
983 x.drShiftTo(this.m.t, x)
984 if (x.compareTo(this.m)
>=
0) x.subTo(this.m, x)
987 // r = "x^
2/R mod m"; x != r
988 function montSqrTo(x, r) {
993 // r = "xy/R mod m"; x,y != r
994 function montMulTo(x, y, r) {
999 Montgomery.prototype.convert = montConvert
1000 Montgomery.prototype.revert = montRevert
1001 Montgomery.prototype.reduce = montReduce
1002 Montgomery.prototype.mulTo = montMulTo
1003 Montgomery.prototype.sqrTo = montSqrTo
1005 // (protected) true iff this is even
1006 function bnpIsEven() {
1007 return ((this.t
> 0) ? (this[
0] &
1) : this.s) ==
0
1010 // (protected) this^e, e <
2^
32, doing sqr and mul with
"r" (HAC
14.79)
1011 function bnpExp(e, z) {
1012 if (e
> 0xffffffff || e <
1) return BigInteger.ONE
1013 var r = new BigInteger(),
1014 r2 = new BigInteger(),
1015 g = z.convert(this),
1020 if ((e & (
1 << i))
> 0) z.mulTo(r2, g, r)
1030 // (public) this^e % m,
0 <= e <
2^
32
1031 function bnModPowInt(e, m) {
1033 if (e <
256 || m.isEven()) z = new Classic(m)
1034 else z = new Montgomery(m)
1035 return this.exp(e, z)
1039 proto.copyTo = bnpCopyTo
1040 proto.fromInt = bnpFromInt
1041 proto.fromString = bnpFromString
1042 proto.clamp = bnpClamp
1043 proto.dlShiftTo = bnpDLShiftTo
1044 proto.drShiftTo = bnpDRShiftTo
1045 proto.lShiftTo = bnpLShiftTo
1046 proto.rShiftTo = bnpRShiftTo
1047 proto.subTo = bnpSubTo
1048 proto.multiplyTo = bnpMultiplyTo
1049 proto.squareTo = bnpSquareTo
1050 proto.divRemTo = bnpDivRemTo
1051 proto.invDigit = bnpInvDigit
1052 proto.isEven = bnpIsEven
1056 proto.toString = bnToString
1057 proto.negate = bnNegate
1059 proto.compareTo = bnCompareTo
1060 proto.bitLength = bnBitLength
1061 proto.byteLength = bnByteLength
1063 proto.modPowInt = bnModPowInt
1066 function bnClone() {
1067 var r = new BigInteger()
1072 // (public) return value as integer
1073 function bnIntValue() {
1075 if (this.t ==
1) return this[
0] - this.DV
1076 else if (this.t ==
0) return -
1
1077 } else if (this.t ==
1) return this[
0]
1078 else if (this.t ==
0) return
0
1079 // assumes
16 < DB <
32
1080 return ((this[
1] & ((
1 << (
32 - this.DB)) -
1)) << this.DB) | this[
0]
1083 // (public) return value as byte
1084 function bnByteValue() {
1085 return (this.t ==
0) ? this.s : (this[
0] <<
24)
>> 24
1088 // (public) return value as short (assumes DB
>=
16)
1089 function bnShortValue() {
1090 return (this.t ==
0) ? this.s : (this[
0] <<
16)
>> 16
1093 // (protected) return x s.t. r^x < DV
1094 function bnpChunkSize(r) {
1095 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1098 // (public)
0 if this ==
0,
1 if this
> 0
1099 function bnSigNum() {
1100 if (this.s <
0) return -
1
1101 else if (this.t <=
0 || (this.t ==
1 && this[
0] <=
0)) return
0
1105 // (protected) convert to radix string
1106 function bnpToRadix(b) {
1107 if (b == null) b =
10
1108 if (this.signum() ==
0 || b <
2 || b
> 36) return
"0"
1109 var cs = this.chunkSize(b)
1110 var a = Math.pow(b, cs)
1112 y = new BigInteger(),
1113 z = new BigInteger(),
1115 this.divRemTo(d, y, z)
1116 while (y.signum()
> 0) {
1117 r = (a + z.intValue())
1126 // (protected) convert from radix string
1127 function bnpFromRadix(s, b) {
1130 if (b == null) b =
10
1131 var cs = self.chunkSize(b)
1132 var d = Math.pow(b, cs),
1136 for (var i =
0; i < s.length; ++i) {
1139 if (s.charAt(i) ==
"-" && self.signum() ==
0) mi = true
1145 self.dAddOffset(w,
0)
1151 self.dMultiply(Math.pow(b, j))
1152 self.dAddOffset(w,
0)
1154 if (mi) BigInteger.ZERO.subTo(self, self)
1157 // (protected) alternate constructor
1158 function bnpFromNumber(a, b, c) {
1160 if (
"number" == typeof b) {
1161 // new BigInteger(int,int,RNG)
1162 if (a <
2) self.fromInt(
1)
1164 self.fromNumber(a, c)
1165 if (!self.testBit(a -
1)) // force MSB set
1166 self.bitwiseTo(BigInteger.ONE.shiftLeft(a -
1), op_or, self)
1167 if (self.isEven()) self.dAddOffset(
1,
0); // force odd
1168 while (!self.isProbablePrime(b)) {
1169 self.dAddOffset(
2,
0)
1170 if (self.bitLength()
> a) self.subTo(BigInteger.ONE.shiftLeft(a -
1), self)
1174 // new BigInteger(int,RNG)
1175 var x = new Array(),
1177 x.length = (a
>> 3) +
1
1179 if (t
> 0) x[
0] &= ((
1 << t) -
1)
1181 self.fromString(x,
256)
1185 // (public) convert to bigendian byte array
1186 function bnToByteArray() {
1191 var p = self.DB - (i * self.DB) %
8,
1194 if (p < self.DB && (d = self[i]
>> p) != (self.s & self.DM)
>> p)
1195 r[k++] = d | (self.s << (self.DB - p))
1198 d = (self[i] & ((
1 << p) -
1)) << (
8 - p)
1199 d |= self[--i]
>> (p += self.DB -
8)
1201 d = (self[i]
>> (p -=
8)) &
0xff
1207 if ((d &
0x80) !=
0) d |= -
256
1208 if (k ===
0 && (self.s &
0x80) != (d &
0x80))++k
1209 if (k
> 0 || d != self.s) r[k++] = d
1215 function bnEquals(a) {
1216 return (this.compareTo(a) ==
0)
1220 return (this.compareTo(a) <
0) ? this : a
1224 return (this.compareTo(a)
> 0) ? this : a
1227 // (protected) r = this op a (bitwise)
1228 function bnpBitwiseTo(a, op, r) {
1230 var i, f, m = Math.min(a.t, self.t)
1231 for (i =
0; i < m; ++i) r[i] = op(self[i], a[i])
1234 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1237 f = self.s & self.DM
1238 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1241 r.s = op(self.s, a.s)
1245 // (public) this & a
1246 function op_and(x, y) {
1251 var r = new BigInteger()
1252 this.bitwiseTo(a, op_and, r)
1256 // (public) this | a
1257 function op_or(x, y) {
1262 var r = new BigInteger()
1263 this.bitwiseTo(a, op_or, r)
1267 // (public) this ^ a
1268 function op_xor(x, y) {
1273 var r = new BigInteger()
1274 this.bitwiseTo(a, op_xor, r)
1278 // (public) this & ~a
1279 function op_andnot(x, y) {
1283 function bnAndNot(a) {
1284 var r = new BigInteger()
1285 this.bitwiseTo(a, op_andnot, r)
1291 var r = new BigInteger()
1292 for (var i =
0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1298 // (public) this << n
1299 function bnShiftLeft(n) {
1300 var r = new BigInteger()
1301 if (n <
0) this.rShiftTo(-n, r)
1302 else this.lShiftTo(n, r)
1306 // (public) this
>> n
1307 function bnShiftRight(n) {
1308 var r = new BigInteger()
1309 if (n <
0) this.lShiftTo(-n, r)
1310 else this.rShiftTo(n, r)
1314 // return index of lowest
1-bit in x, x <
2^
31
1316 if (x ==
0) return -
1
1318 if ((x &
0xffff) ==
0) {
1322 if ((x &
0xff) ==
0) {
1326 if ((x &
0xf) ==
0) {
1334 if ((x &
1) ==
0)++r
1338 // (public) returns index of lowest
1-bit (or -
1 if none)
1339 function bnGetLowestSetBit() {
1340 for (var i =
0; i < this.t; ++i)
1341 if (this[i] !=
0) return i * this.DB + lbit(this[i])
1342 if (this.s <
0) return this.t * this.DB
1346 // return number of
1 bits in x
1356 // (public) return number of set bits
1357 function bnBitCount() {
1359 x = this.s & this.DM
1360 for (var i =
0; i < this.t; ++i) r += cbit(this[i] ^ x)
1364 // (public) true iff nth bit is set
1365 function bnTestBit(n) {
1366 var j = Math.floor(n / this.DB)
1367 if (j
>= this.t) return (this.s !=
0)
1368 return ((this[j] & (
1 << (n % this.DB))) !=
0)
1371 // (protected) this op (
1<
<n)
1372 function bnpChangeBit(n, op) {
1373 var r = BigInteger.ONE.shiftLeft(n)
1374 this.bitwiseTo(r, op, r)
1378 // (public) this | (
1<
<n)
1379 function bnSetBit(n) {
1380 return this.changeBit(n, op_or)
1383 // (public) this & ~(
1<
<n)
1384 function bnClearBit(n) {
1385 return this.changeBit(n, op_andnot)
1388 // (public) this ^ (
1<
<n)
1389 function bnFlipBit(n) {
1390 return this.changeBit(n, op_xor)
1393 // (protected) r = this + a
1394 function bnpAddTo(a, r) {
1399 m = Math.min(a.t, self.t)
1402 r[i++] = c & self.DM
1407 while (i < self.t) {
1409 r[i++] = c & self.DM
1417 r[i++] = c & self.DM
1422 r.s = (c <
0) ? -
1 :
0
1423 if (c
> 0) r[i++] = c
1424 else if (c < -
1) r[i++] = self.DV + c
1429 // (public) this + a
1431 var r = new BigInteger()
1436 // (public) this - a
1437 function bnSubtract(a) {
1438 var r = new BigInteger()
1443 // (public) this * a
1444 function bnMultiply(a) {
1445 var r = new BigInteger()
1446 this.multiplyTo(a, r)
1451 function bnSquare() {
1452 var r = new BigInteger()
1457 // (public) this / a
1458 function bnDivide(a) {
1459 var r = new BigInteger()
1460 this.divRemTo(a, r, null)
1464 // (public) this % a
1465 function bnRemainder(a) {
1466 var r = new BigInteger()
1467 this.divRemTo(a, null, r)
1471 // (public) [this/a,this%a]
1472 function bnDivideAndRemainder(a) {
1473 var q = new BigInteger(),
1474 r = new BigInteger()
1475 this.divRemTo(a, q, r)
1476 return new Array(q, r)
1479 // (protected) this *= n, this
>=
0,
1 < n < DV
1480 function bnpDMultiply(n) {
1481 this[this.t] = this.am(
0, n -
1, this,
0,
0, this.t)
1486 // (protected) this += n << w words, this
>=
0
1487 function bnpDAddOffset(n, w) {
1489 while (this.t <= w) this[this.t++] =
0
1491 while (this[w]
>= this.DV) {
1493 if (++w
>= this.t) this[this.t++] =
0
1499 function NullExp() {}
1505 function nMulTo(x, y, r) {
1509 function nSqrTo(x, r) {
1513 NullExp.prototype.convert = nNop
1514 NullExp.prototype.revert = nNop
1515 NullExp.prototype.mulTo = nMulTo
1516 NullExp.prototype.sqrTo = nSqrTo
1520 return this.exp(e, new NullExp())
1523 // (protected) r = lower n words of "this * a", a.t <= n
1524 // "this" should be the larger one if appropriate.
1525 function bnpMultiplyLowerTo(a, n, r) {
1526 var i = Math.min(this.t + a.t, n)
1527 r.s =
0; // assumes a,this
>=
0
1529 while (i
> 0) r[--i] =
0
1531 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(
0, a[i], r, i,
0, this.t)
1532 for (j = Math.min(a.t, n); i < j; ++i) this.am(
0, a[i], r, i,
0, n - i)
1536 // (protected) r =
"this * a" without lower n words, n
> 0
1537 //
"this" should be the larger one if appropriate.
1538 function bnpMultiplyUpperTo(a, n, r) {
1540 var i = r.t = this.t + a.t - n
1541 r.s =
0; // assumes a,this
>=
0
1542 while (--i
>=
0) r[i] =
0
1543 for (i = Math.max(n - this.t,
0); i < a.t; ++i)
1544 r[this.t + i - n] = this.am(n - i, a[i], r,
0,
0, this.t + i - n)
1549 // Barrett modular reduction
1550 function Barrett(m) {
1552 this.r2 = new BigInteger()
1553 this.q3 = new BigInteger()
1554 BigInteger.ONE.dlShiftTo(
2 * m.t, this.r2)
1555 this.mu = this.r2.divide(m)
1559 function barrettConvert(x) {
1560 if (x.s <
0 || x.t
> 2 * this.m.t) return x.mod(this.m)
1561 else if (x.compareTo(this.m) <
0) return x
1563 var r = new BigInteger()
1570 function barrettRevert(x) {
1574 // x = x mod m (HAC
14.42)
1575 function barrettReduce(x) {
1577 x.drShiftTo(self.m.t -
1, self.r2)
1578 if (x.t
> self.m.t +
1) {
1582 self.mu.multiplyUpperTo(self.r2, self.m.t +
1, self.q3)
1583 self.m.multiplyLowerTo(self.q3, self.m.t +
1, self.r2)
1584 while (x.compareTo(self.r2) <
0) x.dAddOffset(
1, self.m.t +
1)
1586 while (x.compareTo(self.m)
>=
0) x.subTo(self.m, x)
1589 // r = x^
2 mod m; x != r
1590 function barrettSqrTo(x, r) {
1595 // r = x*y mod m; x,y != r
1596 function barrettMulTo(x, y, r) {
1601 Barrett.prototype.convert = barrettConvert
1602 Barrett.prototype.revert = barrettRevert
1603 Barrett.prototype.reduce = barrettReduce
1604 Barrett.prototype.mulTo = barrettMulTo
1605 Barrett.prototype.sqrTo = barrettSqrTo
1607 // (public) this^e % m (HAC
14.85)
1608 function bnModPow(e, m) {
1609 var i = e.bitLength(),
1612 if (i <=
0) return r
1613 else if (i <
18) k =
1
1614 else if (i <
48) k =
3
1615 else if (i <
144) k =
4
1616 else if (i <
768) k =
5
1620 else if (m.isEven())
1623 z = new Montgomery(m)
1626 var g = new Array(),
1630 g[
1] = z.convert(this)
1632 var g2 = new BigInteger()
1635 g[n] = new BigInteger()
1636 z.mulTo(g2, g[n -
2], g[n])
1643 r2 = new BigInteger(),
1647 if (i
>= k1) w = (e[j]
>> (i - k1)) & km
1649 w = (e[j] & ((
1 << (i +
1)) -
1)) << (k1 - i)
1650 if (j
> 0) w |= e[j -
1]
>> (this.DB + i - k1)
1654 while ((w &
1) ==
0) {
1662 if (is1) { // ret ==
1, don't bother squaring or multiplying it
1671 if (n
> 0) z.sqrTo(r, r2)
1677 z.mulTo(r2, g[w], r)
1680 while (j
>=
0 && (e[j] & (
1 << i)) ==
0) {
1694 // (public) gcd(this,a) (HAC
14.54)
1696 var x = (this.s <
0) ? this.negate() : this.clone()
1697 var y = (a.s <
0) ? a.negate() : a.clone()
1698 if (x.compareTo(y) <
0) {
1703 var i = x.getLowestSetBit(),
1704 g = y.getLowestSetBit()
1711 while (x.signum()
> 0) {
1712 if ((i = x.getLowestSetBit())
> 0) x.rShiftTo(i, x)
1713 if ((i = y.getLowestSetBit())
> 0) y.rShiftTo(i, y)
1714 if (x.compareTo(y)
>=
0) {
1722 if (g
> 0) y.lShiftTo(g, y)
1726 // (protected) this % n, n <
2^
26
1727 function bnpModInt(n) {
1728 if (n <=
0) return
0
1729 var d = this.DV % n,
1730 r = (this.s <
0) ? n -
1 :
0
1732 if (d ==
0) r = this[
0] % n
1734 for (var i = this.t -
1; i
>=
0; --i) r = (d * r + this[i]) % n
1738 // (public)
1/this % m (HAC
14.61)
1739 function bnModInverse(m) {
1741 if ((this.isEven() && ac) || m.signum() ==
0) return BigInteger.ZERO
1748 while (u.signum() !=
0) {
1749 while (u.isEven()) {
1752 if (!a.isEven() || !b.isEven()) {
1757 } else if (!b.isEven()) b.subTo(m, b)
1760 while (v.isEven()) {
1763 if (!c.isEven() || !d.isEven()) {
1768 } else if (!d.isEven()) d.subTo(m, d)
1771 if (u.compareTo(v)
>=
0) {
1773 if (ac) a.subTo(c, a)
1777 if (ac) c.subTo(a, c)
1781 if (v.compareTo(BigInteger.ONE) !=
0) return BigInteger.ZERO
1782 if (d.compareTo(m)
>=
0) return d.subtract(m)
1783 if (d.signum() <
0) d.addTo(m, d)
1785 if (d.signum() <
0) return d.add(m)
1790 2,
3,
5,
7,
11,
13,
17,
19,
23,
29,
31,
37,
41,
43,
47,
53,
59,
61,
67,
71,
1791 73,
79,
83,
89,
97,
101,
103,
107,
109,
113,
127,
131,
137,
139,
149,
151,
1792 157,
163,
167,
173,
179,
181,
191,
193,
197,
199,
211,
223,
227,
229,
233,
1793 239,
241,
251,
257,
263,
269,
271,
277,
281,
283,
293,
307,
311,
313,
317,
1794 331,
337,
347,
349,
353,
359,
367,
373,
379,
383,
389,
397,
401,
409,
419,
1795 421,
431,
433,
439,
443,
449,
457,
461,
463,
467,
479,
487,
491,
499,
503,
1796 509,
521,
523,
541,
547,
557,
563,
569,
571,
577,
587,
593,
599,
601,
607,
1797 613,
617,
619,
631,
641,
643,
647,
653,
659,
661,
673,
677,
683,
691,
701,
1798 709,
719,
727,
733,
739,
743,
751,
757,
761,
769,
773,
787,
797,
809,
811,
1799 821,
823,
827,
829,
839,
853,
857,
859,
863,
877,
881,
883,
887,
907,
911,
1800 919,
929,
937,
941,
947,
953,
967,
971,
977,
983,
991,
997
1803 var lplim = (
1 <<
26) / lowprimes[lowprimes.length -
1]
1805 // (public) test primality with certainty
>=
1-
.5^t
1806 function bnIsProbablePrime(t) {
1807 var i, x = this.abs()
1808 if (x.t ==
1 && x[
0] <= lowprimes[lowprimes.length -
1]) {
1809 for (i =
0; i < lowprimes.length; ++i)
1810 if (x[
0] == lowprimes[i]) return true
1813 if (x.isEven()) return false
1815 while (i < lowprimes.length) {
1816 var m = lowprimes[i],
1818 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
1820 while (i < j) if (m % lowprimes[i++] ==
0) return false
1822 return x.millerRabin(t)
1825 // (protected) true if probably prime (HAC
4.24, Miller-Rabin)
1826 function bnpMillerRabin(t) {
1827 var n1 = this.subtract(BigInteger.ONE)
1828 var k = n1.getLowestSetBit()
1829 if (k <=
0) return false
1830 var r = n1.shiftRight(k)
1832 if (t
> lowprimes.length) t = lowprimes.length
1833 var a = new BigInteger(null)
1835 for (var i =
0; i < t; ++i) {
1837 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
1838 if (bases.indexOf(j) == -
1) break
1842 var y = a.modPow(r, this)
1843 if (y.compareTo(BigInteger.ONE) !=
0 && y.compareTo(n1) !=
0) {
1845 while (j++ < k && y.compareTo(n1) !=
0) {
1846 y = y.modPowInt(
2, this)
1847 if (y.compareTo(BigInteger.ONE) ==
0) return false
1849 if (y.compareTo(n1) !=
0) return false
1856 proto.chunkSize = bnpChunkSize
1857 proto.toRadix = bnpToRadix
1858 proto.fromRadix = bnpFromRadix
1859 proto.fromNumber = bnpFromNumber
1860 proto.bitwiseTo = bnpBitwiseTo
1861 proto.changeBit = bnpChangeBit
1862 proto.addTo = bnpAddTo
1863 proto.dMultiply = bnpDMultiply
1864 proto.dAddOffset = bnpDAddOffset
1865 proto.multiplyLowerTo = bnpMultiplyLowerTo
1866 proto.multiplyUpperTo = bnpMultiplyUpperTo
1867 proto.modInt = bnpModInt
1868 proto.millerRabin = bnpMillerRabin
1871 proto.clone = bnClone
1872 proto.intValue = bnIntValue
1873 proto.byteValue = bnByteValue
1874 proto.shortValue = bnShortValue
1875 proto.signum = bnSigNum
1876 proto.toByteArray = bnToByteArray
1877 proto.equals = bnEquals
1883 proto.andNot = bnAndNot
1885 proto.shiftLeft = bnShiftLeft
1886 proto.shiftRight = bnShiftRight
1887 proto.getLowestSetBit = bnGetLowestSetBit
1888 proto.bitCount = bnBitCount
1889 proto.testBit = bnTestBit
1890 proto.setBit = bnSetBit
1891 proto.clearBit = bnClearBit
1892 proto.flipBit = bnFlipBit
1894 proto.subtract = bnSubtract
1895 proto.multiply = bnMultiply
1896 proto.divide = bnDivide
1897 proto.remainder = bnRemainder
1898 proto.divideAndRemainder = bnDivideAndRemainder
1899 proto.modPow = bnModPow
1900 proto.modInverse = bnModInverse
1903 proto.isProbablePrime = bnIsProbablePrime
1905 // JSBN-specific extension
1906 proto.square = bnSquare
1909 BigInteger.ZERO = nbv(
0)
1910 BigInteger.ONE = nbv(
1)
1911 BigInteger.valueOf = nbv
1913 module.exports = BigInteger
1915 },{"../package.json":
4}],
2:[function(require,module,exports){
1917 // FIXME: Kind of a weird way to throw exceptions, consider removing
1918 var assert = require('assert')
1919 var BigInteger = require('./bigi')
1922 * Turns a byte array into a big integer.
1924 * This function will interpret a byte array as a big integer in big
1927 BigInteger.fromByteArrayUnsigned = function(byteArray) {
1928 // BigInteger expects a DER integer conformant byte array
1929 if (byteArray[
0] &
0x80) {
1930 return new BigInteger([
0].concat(byteArray))
1933 return new BigInteger(byteArray)
1937 * Returns a byte array representation of the big integer.
1939 * This returns the absolute of the contained value in big endian
1940 * form. A value of zero results in an empty array.
1942 BigInteger.prototype.toByteArrayUnsigned = function() {
1943 var byteArray = this.toByteArray()
1944 return byteArray[
0] ===
0 ? byteArray.slice(
1) : byteArray
1947 BigInteger.fromDERInteger = function(byteArray) {
1948 return new BigInteger(byteArray)
1952 * Converts BigInteger to a DER integer representation.
1954 * The format for this value uses the most significant bit as a sign
1955 * bit. If the most significant bit is already set and the integer is
1956 * positive, a
0x00 is prepended.
1972 * -
62300 =
> 0xff0ca4
1974 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
1976 BigInteger.fromBuffer = function(buffer) {
1977 // BigInteger expects a DER integer conformant byte array
1978 if (buffer[
0] &
0x80) {
1979 var byteArray = Array.prototype.slice.call(buffer)
1981 return new BigInteger([
0].concat(byteArray))
1984 return new BigInteger(buffer)
1987 BigInteger.fromHex = function(hex) {
1988 if (hex === '') return BigInteger.ZERO
1990 assert.equal(hex, hex.match(/^[A-Fa-f0-
9]+/), 'Invalid hex string')
1991 assert.equal(hex.length %
2,
0, 'Incomplete hex')
1992 return new BigInteger(hex,
16)
1995 BigInteger.prototype.toBuffer = function(size) {
1996 var byteArray = this.toByteArrayUnsigned()
1999 var padding = size - byteArray.length
2000 while (zeros.length < padding) zeros.push(
0)
2002 return new Buffer(zeros.concat(byteArray))
2005 BigInteger.prototype.toHex = function(size) {
2006 return this.toBuffer(size).toString('hex')
2009 }).call(this,require(
"buffer").Buffer)
2010 },{
"./bigi":
1,
"assert":
5,
"buffer":
7}],
3:[function(require,module,exports){
2011 var BigInteger = require('./bigi')
2014 require('./convert')
2016 module.exports = BigInteger
2017 },{
"./bigi":
1,
"./convert":
2}],
4:[function(require,module,exports){
2021 "description":
"Big integers.",
2039 "devDependencies": {
2042 "coveralls":
"^2.10.0",
2043 "istanbul":
"^0.2.11"
2046 "url":
"https://github.com/cryptocoinjs/bigi",
2049 "main":
"./lib/index.js",
2051 "test":
"_mocha -- test/*.js",
2052 "jshint":
"jshint --config jshint.json lib/*.js ; true",
2054 "coverage":
"istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2055 "coveralls":
"npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2059 "files":
"test/*.js",
2065 "safari/6.0..latest",
2066 "iphone/6.0..latest",
2067 "android-browser/4.2..latest"
2071 "url":
"https://github.com/cryptocoinjs/bigi/issues"
2073 "homepage":
"https://github.com/cryptocoinjs/bigi",
2074 "_id":
"bigi@1.4.0",
2076 "shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2077 "tarball":
"http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2079 "_from":
"bigi@^1.4.0",
2080 "_npmVersion":
"1.4.3",
2083 "email":
"jprichardson@gmail.com"
2088 "email":
"jprichardson@gmail.com"
2091 "name":
"midnightlightning",
2092 "email":
"boydb@midnightdesign.ws"
2095 "name":
"sidazhang",
2096 "email":
"sidazhang89@gmail.com"
2100 "email":
"npm@shesek.info"
2104 "_shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2105 "_resolved":
"https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2108 },{}],
5:[function(require,module,exports){
2109 // http://wiki.commonjs.org/wiki/Unit_Testing/
1.0
2111 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2113 // Originally from narwhal.js (http://narwhaljs.org)
2114 // Copyright (c)
2009 Thomas Robinson
<280north.com
>
2116 // Permission is hereby granted, free of charge, to any person obtaining a copy
2117 // of this software and associated documentation files (the 'Software'), to
2118 // deal in the Software without restriction, including without limitation the
2119 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2120 // sell copies of the Software, and to permit persons to whom the Software is
2121 // furnished to do so, subject to the following conditions:
2123 // The above copyright notice and this permission notice shall be included in
2124 // all copies or substantial portions of the Software.
2126 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2127 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2128 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2129 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2130 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2131 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2133 // when used in node, this will actually load the util module we depend on
2134 // versus loading the builtin util module as happens otherwise
2135 // this is a bug in node module loading as far as I am concerned
2136 var util = require('util/');
2138 var pSlice = Array.prototype.slice;
2139 var hasOwn = Object.prototype.hasOwnProperty;
2141 //
1. The assert module provides functions that throw
2142 // AssertionError's when particular conditions are not met. The
2143 // assert module must conform to the following interface.
2145 var assert = module.exports = ok;
2147 //
2. The AssertionError is defined in assert.
2148 // new assert.AssertionError({ message: message,
2150 // expected: expected })
2152 assert.AssertionError = function AssertionError(options) {
2153 this.name = 'AssertionError';
2154 this.actual = options.actual;
2155 this.expected = options.expected;
2156 this.operator = options.operator;
2157 if (options.message) {
2158 this.message = options.message;
2159 this.generatedMessage = false;
2161 this.message = getMessage(this);
2162 this.generatedMessage = true;
2164 var stackStartFunction = options.stackStartFunction || fail;
2166 if (Error.captureStackTrace) {
2167 Error.captureStackTrace(this, stackStartFunction);
2170 // non v8 browsers so we can have a stacktrace
2171 var err = new Error();
2173 var out = err.stack;
2175 // try to strip useless frames
2176 var fn_name = stackStartFunction.name;
2177 var idx = out.indexOf('\n' + fn_name);
2179 // once we have located the function frame
2180 // we need to strip out everything before it (and its line)
2181 var next_line = out.indexOf('\n', idx +
1);
2182 out = out.substring(next_line +
1);
2190 // assert.AssertionError instanceof Error
2191 util.inherits(assert.AssertionError, Error);
2193 function replacer(key, value) {
2194 if (util.isUndefined(value)) {
2197 if (util.isNumber(value) && !isFinite(value)) {
2198 return value.toString();
2200 if (util.isFunction(value) || util.isRegExp(value)) {
2201 return value.toString();
2206 function truncate(s, n) {
2207 if (util.isString(s)) {
2208 return s.length < n ? s : s.slice(
0, n);
2214 function getMessage(self) {
2215 return truncate(JSON.stringify(self.actual, replacer),
128) + ' ' +
2216 self.operator + ' ' +
2217 truncate(JSON.stringify(self.expected, replacer),
128);
2220 // At present only the three keys mentioned above are used and
2221 // understood by the spec. Implementations or sub modules can pass
2222 // other keys to the AssertionError's constructor - they will be
2225 //
3. All of the following functions must throw an AssertionError
2226 // when a corresponding condition is not met, with a message that
2227 // may be undefined if not provided. All assertion methods provide
2228 // both the actual and expected values to the assertion error for
2229 // display purposes.
2231 function fail(actual, expected, message, operator, stackStartFunction) {
2232 throw new assert.AssertionError({
2237 stackStartFunction: stackStartFunction
2241 // EXTENSION! allows for well behaved errors defined elsewhere.
2244 //
4. Pure assertion tests whether a value is truthy, as determined
2246 // assert.ok(guard, message_opt);
2247 // This statement is equivalent to assert.equal(true, !!guard,
2248 // message_opt);. To test strictly for the value true, use
2249 // assert.strictEqual(true, guard, message_opt);.
2251 function ok(value, message) {
2252 if (!value) fail(value, true, message, '==', assert.ok);
2256 //
5. The equality assertion tests shallow, coercive equality with
2258 // assert.equal(actual, expected, message_opt);
2260 assert.equal = function equal(actual, expected, message) {
2261 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2264 //
6. The non-equality assertion tests for whether two objects are not equal
2265 // with != assert.notEqual(actual, expected, message_opt);
2267 assert.notEqual = function notEqual(actual, expected, message) {
2268 if (actual == expected) {
2269 fail(actual, expected, message, '!=', assert.notEqual);
2273 //
7. The equivalence assertion tests a deep equality relation.
2274 // assert.deepEqual(actual, expected, message_opt);
2276 assert.deepEqual = function deepEqual(actual, expected, message) {
2277 if (!_deepEqual(actual, expected)) {
2278 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2282 function _deepEqual(actual, expected) {
2283 //
7.1. All identical values are equivalent, as determined by ===.
2284 if (actual === expected) {
2287 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2288 if (actual.length != expected.length) return false;
2290 for (var i =
0; i < actual.length; i++) {
2291 if (actual[i] !== expected[i]) return false;
2296 //
7.2. If the expected value is a Date object, the actual value is
2297 // equivalent if it is also a Date object that refers to the same time.
2298 } else if (util.isDate(actual) && util.isDate(expected)) {
2299 return actual.getTime() === expected.getTime();
2301 //
7.3 If the expected value is a RegExp object, the actual value is
2302 // equivalent if it is also a RegExp object with the same source and
2303 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2304 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2305 return actual.source === expected.source &&
2306 actual.global === expected.global &&
2307 actual.multiline === expected.multiline &&
2308 actual.lastIndex === expected.lastIndex &&
2309 actual.ignoreCase === expected.ignoreCase;
2311 //
7.4. Other pairs that do not both pass typeof value == 'object',
2312 // equivalence is determined by ==.
2313 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2314 return actual == expected;
2316 //
7.5 For all other Object pairs, including Array objects, equivalence is
2317 // determined by having the same number of owned properties (as verified
2318 // with Object.prototype.hasOwnProperty.call), the same set of keys
2319 // (although not necessarily the same order), equivalent values for every
2320 // corresponding key, and an identical 'prototype' property. Note: this
2321 // accounts for both named and indexed properties on Arrays.
2323 return objEquiv(actual, expected);
2327 function isArguments(object) {
2328 return Object.prototype.toString.call(object) == '[object Arguments]';
2331 function objEquiv(a, b) {
2332 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2334 // an identical 'prototype' property.
2335 if (a.prototype !== b.prototype) return false;
2336 // if one is a primitive, the other must be same
2337 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2340 var aIsArgs = isArguments(a),
2341 bIsArgs = isArguments(b);
2342 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2347 return _deepEqual(a, b);
2349 var ka = objectKeys(a),
2352 // having the same number of owned properties (keys incorporates
2354 if (ka.length != kb.length)
2356 //the same set of keys (although not necessarily the same order),
2360 for (i = ka.length -
1; i
>=
0; i--) {
2364 //equivalent values for every corresponding key, and
2365 //~~~possibly expensive deep test
2366 for (i = ka.length -
1; i
>=
0; i--) {
2368 if (!_deepEqual(a[key], b[key])) return false;
2373 //
8. The non-equivalence assertion tests for any deep inequality.
2374 // assert.notDeepEqual(actual, expected, message_opt);
2376 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2377 if (_deepEqual(actual, expected)) {
2378 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2382 //
9. The strict equality assertion tests strict equality, as determined by ===.
2383 // assert.strictEqual(actual, expected, message_opt);
2385 assert.strictEqual = function strictEqual(actual, expected, message) {
2386 if (actual !== expected) {
2387 fail(actual, expected, message, '===', assert.strictEqual);
2391 //
10. The strict non-equality assertion tests for strict inequality, as
2392 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2394 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2395 if (actual === expected) {
2396 fail(actual, expected, message, '!==', assert.notStrictEqual);
2400 function expectedException(actual, expected) {
2401 if (!actual || !expected) {
2405 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2406 return expected.test(actual);
2407 } else if (actual instanceof expected) {
2409 } else if (expected.call({}, actual) === true) {
2416 function _throws(shouldThrow, block, expected, message) {
2419 if (util.isString(expected)) {
2430 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2431 (message ? ' ' + message : '.');
2433 if (shouldThrow && !actual) {
2434 fail(actual, expected, 'Missing expected exception' + message);
2437 if (!shouldThrow && expectedException(actual, expected)) {
2438 fail(actual, expected, 'Got unwanted exception' + message);
2441 if ((shouldThrow && actual && expected &&
2442 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2447 //
11. Expected to throw an error:
2448 // assert.throws(block, Error_opt, message_opt);
2450 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2451 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2454 // EXTENSION! This is annoying to write outside this module.
2455 assert.doesNotThrow = function(block, /*optional*/message) {
2456 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2459 assert.ifError = function(err) { if (err) {throw err;}};
2461 var objectKeys = Object.keys || function (obj) {
2463 for (var key in obj) {
2464 if (hasOwn.call(obj, key)) keys.push(key);
2469 },{"util/":
29}],
6:[function(require,module,exports){
2471 },{}],
7:[function(require,module,exports){
2473 * The buffer module from node.js, for the browser.
2475 * @author Feross Aboukhadijeh
<feross@feross.org
> <http://feross.org
>
2479 var base64 = require('base64-js')
2480 var ieee754 = require('ieee754')
2481 var isArray = require('is-array')
2483 exports.Buffer = Buffer
2484 exports.SlowBuffer = SlowBuffer
2485 exports.INSPECT_MAX_BYTES =
50
2486 Buffer.poolSize =
8192 // not used by this implementation
2491 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2492 * === true Use Uint8Array implementation (fastest)
2493 * === false Use Object implementation (most compatible, even IE6)
2495 * Browsers that support typed arrays are IE
10+, Firefox
4+, Chrome
7+, Safari
5.1+,
2496 * Opera
11.6+, iOS
4.2+.
2498 * Due to various browser bugs, sometimes the Object implementation will be used even
2499 * when the browser supports typed arrays.
2503 * - Firefox
4-
29 lacks support for adding new properties to `Uint8Array` instances,
2504 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=
695438.
2506 * - Safari
5-
7 lacks support for changing the `Object.prototype.constructor` property
2509 * - Chrome
9-
10 is missing the `TypedArray.prototype.subarray` function.
2511 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2512 * incorrect length in some situations.
2514 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2515 * get the Object implementation, which is slower but behaves correctly.
2517 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2520 var arr = new Uint8Array(
1)
2521 arr.foo = function () { return
42 }
2522 arr.constructor = Bar
2523 return arr.foo() ===
42 && // typed array instances can be augmented
2524 arr.constructor === Bar && // constructor can be set
2525 typeof arr.subarray === 'function' && // chrome
9-
10 lack `subarray`
2526 arr.subarray(
1,
1).byteLength ===
0 // ie10 has broken `subarray`
2532 function kMaxLength () {
2533 return Buffer.TYPED_ARRAY_SUPPORT
2542 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2543 * with function properties for all the node `Buffer` API functions. We use
2544 * `Uint8Array` so that square bracket notation works as expected -- it returns
2547 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2550 function Buffer (arg) {
2551 if (!(this instanceof Buffer)) {
2552 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2553 if (arguments.length
> 1) return new Buffer(arg, arguments[
1])
2554 return new Buffer(arg)
2558 this.parent = undefined
2561 if (typeof arg === 'number') {
2562 return fromNumber(this, arg)
2565 // Slightly less common case.
2566 if (typeof arg === 'string') {
2567 return fromString(this, arg, arguments.length
> 1 ? arguments[
1] : 'utf8')
2571 return fromObject(this, arg)
2574 function fromNumber (that, length) {
2575 that = allocate(that, length <
0 ?
0 : checked(length) |
0)
2576 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2577 for (var i =
0; i < length; i++) {
2584 function fromString (that, string, encoding) {
2585 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2587 // Assumption: byteLength() return value is always < kMaxLength.
2588 var length = byteLength(string, encoding) |
0
2589 that = allocate(that, length)
2591 that.write(string, encoding)
2595 function fromObject (that, object) {
2596 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2598 if (isArray(object)) return fromArray(that, object)
2600 if (object == null) {
2601 throw new TypeError('must start with number, buffer, array or string')
2604 if (typeof ArrayBuffer !== 'undefined') {
2605 if (object.buffer instanceof ArrayBuffer) {
2606 return fromTypedArray(that, object)
2608 if (object instanceof ArrayBuffer) {
2609 return fromArrayBuffer(that, object)
2613 if (object.length) return fromArrayLike(that, object)
2615 return fromJsonObject(that, object)
2618 function fromBuffer (that, buffer) {
2619 var length = checked(buffer.length) |
0
2620 that = allocate(that, length)
2621 buffer.copy(that,
0,
0, length)
2625 function fromArray (that, array) {
2626 var length = checked(array.length) |
0
2627 that = allocate(that, length)
2628 for (var i =
0; i < length; i +=
1) {
2629 that[i] = array[i] &
255
2634 // Duplicate of fromArray() to keep fromArray() monomorphic.
2635 function fromTypedArray (that, array) {
2636 var length = checked(array.length) |
0
2637 that = allocate(that, length)
2638 // Truncating the elements is probably not what people expect from typed
2639 // arrays with BYTES_PER_ELEMENT
> 1 but it's compatible with the behavior
2640 // of the old Buffer constructor.
2641 for (var i =
0; i < length; i +=
1) {
2642 that[i] = array[i] &
255
2647 function fromArrayBuffer (that, array) {
2648 if (Buffer.TYPED_ARRAY_SUPPORT) {
2649 // Return an augmented `Uint8Array` instance, for best performance
2651 that = Buffer._augment(new Uint8Array(array))
2653 // Fallback: Return an object instance of the Buffer class
2654 that = fromTypedArray(that, new Uint8Array(array))
2659 function fromArrayLike (that, array) {
2660 var length = checked(array.length) |
0
2661 that = allocate(that, length)
2662 for (var i =
0; i < length; i +=
1) {
2663 that[i] = array[i] &
255
2668 // Deserialize { type: 'Buffer', data: [
1,
2,
3,...] } into a Buffer object.
2669 // Returns a zero-length buffer for inputs that don't conform to the spec.
2670 function fromJsonObject (that, object) {
2674 if (object.type === 'Buffer' && isArray(object.data)) {
2676 length = checked(array.length) |
0
2678 that = allocate(that, length)
2680 for (var i =
0; i < length; i +=
1) {
2681 that[i] = array[i] &
255
2686 function allocate (that, length) {
2687 if (Buffer.TYPED_ARRAY_SUPPORT) {
2688 // Return an augmented `Uint8Array` instance, for best performance
2689 that = Buffer._augment(new Uint8Array(length))
2691 // Fallback: Return an object instance of the Buffer class
2692 that.length = length
2693 that._isBuffer = true
2696 var fromPool = length !==
0 && length <= Buffer.poolSize
>>> 1
2697 if (fromPool) that.parent = rootParent
2702 function checked (length) {
2703 // Note: cannot use `length < kMaxLength` here because that fails when
2704 // length is NaN (which is otherwise coerced to zero.)
2705 if (length
>= kMaxLength()) {
2706 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2707 'size:
0x' + kMaxLength().toString(
16) + ' bytes')
2712 function SlowBuffer (subject, encoding) {
2713 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2715 var buf = new Buffer(subject, encoding)
2720 Buffer.isBuffer = function isBuffer (b) {
2721 return !!(b != null && b._isBuffer)
2724 Buffer.compare = function compare (a, b) {
2725 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2726 throw new TypeError('Arguments must be Buffers')
2729 if (a === b) return
0
2735 var len = Math.min(x, y)
2737 if (a[i] !== b[i]) break
2747 if (x < y) return -
1
2752 Buffer.isEncoding = function isEncoding (encoding) {
2753 switch (String(encoding).toLowerCase()) {
2771 Buffer.concat = function concat (list, length) {
2772 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
2774 if (list.length ===
0) {
2775 return new Buffer(
0)
2779 if (length === undefined) {
2781 for (i =
0; i < list.length; i++) {
2782 length += list[i].length
2786 var buf = new Buffer(length)
2788 for (i =
0; i < list.length; i++) {
2796 function byteLength (string, encoding) {
2797 if (typeof string !== 'string') string = '' + string
2799 var len = string.length
2800 if (len ===
0) return
0
2802 // Use a for loop to avoid recursion
2803 var loweredCase = false
2814 return utf8ToBytes(string).length
2823 return base64ToBytes(string).length
2825 if (loweredCase) return utf8ToBytes(string).length // assume utf8
2826 encoding = ('' + encoding).toLowerCase()
2831 Buffer.byteLength = byteLength
2833 // pre-set for values that may exist in the future
2834 Buffer.prototype.length = undefined
2835 Buffer.prototype.parent = undefined
2837 function slowToString (encoding, start, end) {
2838 var loweredCase = false
2841 end = end === undefined || end === Infinity ? this.length : end |
0
2843 if (!encoding) encoding = 'utf8'
2844 if (start <
0) start =
0
2845 if (end
> this.length) end = this.length
2846 if (end <= start) return ''
2851 return hexSlice(this, start, end)
2855 return utf8Slice(this, start, end)
2858 return asciiSlice(this, start, end)
2861 return binarySlice(this, start, end)
2864 return base64Slice(this, start, end)
2870 return utf16leSlice(this, start, end)
2873 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
2874 encoding = (encoding + '').toLowerCase()
2880 Buffer.prototype.toString = function toString () {
2881 var length = this.length |
0
2882 if (length ===
0) return ''
2883 if (arguments.length ===
0) return utf8Slice(this,
0, length)
2884 return slowToString.apply(this, arguments)
2887 Buffer.prototype.equals = function equals (b) {
2888 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2889 if (this === b) return true
2890 return Buffer.compare(this, b) ===
0
2893 Buffer.prototype.inspect = function inspect () {
2895 var max = exports.INSPECT_MAX_BYTES
2896 if (this.length
> 0) {
2897 str = this.toString('hex',
0, max).match(/.{
2}/g).join(' ')
2898 if (this.length
> max) str += ' ... '
2900 return '
<Buffer ' + str + '
>'
2903 Buffer.prototype.compare = function compare (b) {
2904 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2905 if (this === b) return
0
2906 return Buffer.compare(this, b)
2909 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
2910 if (byteOffset
> 0x7fffffff) byteOffset =
0x7fffffff
2911 else if (byteOffset < -
0x80000000) byteOffset = -
0x80000000
2914 if (this.length ===
0) return -
1
2915 if (byteOffset
>= this.length) return -
1
2917 // Negative offsets start from the end of the buffer
2918 if (byteOffset <
0) byteOffset = Math.max(this.length + byteOffset,
0)
2920 if (typeof val === 'string') {
2921 if (val.length ===
0) return -
1 // special case: looking for empty string always fails
2922 return String.prototype.indexOf.call(this, val, byteOffset)
2924 if (Buffer.isBuffer(val)) {
2925 return arrayIndexOf(this, val, byteOffset)
2927 if (typeof val === 'number') {
2928 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
2929 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
2931 return arrayIndexOf(this, [ val ], byteOffset)
2934 function arrayIndexOf (arr, val, byteOffset) {
2936 for (var i =
0; byteOffset + i < arr.length; i++) {
2937 if (arr[byteOffset + i] === val[foundIndex === -
1 ?
0 : i - foundIndex]) {
2938 if (foundIndex === -
1) foundIndex = i
2939 if (i - foundIndex +
1 === val.length) return byteOffset + foundIndex
2947 throw new TypeError('val must be string, number or Buffer')
2950 // `get` is deprecated
2951 Buffer.prototype.get = function get (offset) {
2952 console.log('.get() is deprecated. Access using array indexes instead.')
2953 return this.readUInt8(offset)
2956 // `set` is deprecated
2957 Buffer.prototype.set = function set (v, offset) {
2958 console.log('.set() is deprecated. Access using array indexes instead.')
2959 return this.writeUInt8(v, offset)
2962 function hexWrite (buf, string, offset, length) {
2963 offset = Number(offset) ||
0
2964 var remaining = buf.length - offset
2968 length = Number(length)
2969 if (length
> remaining) {
2974 // must be an even number of digits
2975 var strLen = string.length
2976 if (strLen %
2 !==
0) throw new Error('Invalid hex string')
2978 if (length
> strLen /
2) {
2981 for (var i =
0; i < length; i++) {
2982 var parsed = parseInt(string.substr(i *
2,
2),
16)
2983 if (isNaN(parsed)) throw new Error('Invalid hex string')
2984 buf[offset + i] = parsed
2989 function utf8Write (buf, string, offset, length) {
2990 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
2993 function asciiWrite (buf, string, offset, length) {
2994 return blitBuffer(asciiToBytes(string), buf, offset, length)
2997 function binaryWrite (buf, string, offset, length) {
2998 return asciiWrite(buf, string, offset, length)
3001 function base64Write (buf, string, offset, length) {
3002 return blitBuffer(base64ToBytes(string), buf, offset, length)
3005 function ucs2Write (buf, string, offset, length) {
3006 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3009 Buffer.prototype.write = function write (string, offset, length, encoding) {
3010 // Buffer#write(string)
3011 if (offset === undefined) {
3013 length = this.length
3015 // Buffer#write(string, encoding)
3016 } else if (length === undefined && typeof offset === 'string') {
3018 length = this.length
3020 // Buffer#write(string, offset[, length][, encoding])
3021 } else if (isFinite(offset)) {
3023 if (isFinite(length)) {
3025 if (encoding === undefined) encoding = 'utf8'
3030 // legacy write(string, encoding, offset, length) - remove in v0.13
3038 var remaining = this.length - offset
3039 if (length === undefined || length
> remaining) length = remaining
3041 if ((string.length
> 0 && (length <
0 || offset <
0)) || offset
> this.length) {
3042 throw new RangeError('attempt to write outside buffer bounds')
3045 if (!encoding) encoding = 'utf8'
3047 var loweredCase = false
3051 return hexWrite(this, string, offset, length)
3055 return utf8Write(this, string, offset, length)
3058 return asciiWrite(this, string, offset, length)
3061 return binaryWrite(this, string, offset, length)
3064 // Warning: maxLength not taken into account in base64Write
3065 return base64Write(this, string, offset, length)
3071 return ucs2Write(this, string, offset, length)
3074 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3075 encoding = ('' + encoding).toLowerCase()
3081 Buffer.prototype.toJSON = function toJSON () {
3084 data: Array.prototype.slice.call(this._arr || this,
0)
3088 function base64Slice (buf, start, end) {
3089 if (start ===
0 && end === buf.length) {
3090 return base64.fromByteArray(buf)
3092 return base64.fromByteArray(buf.slice(start, end))
3096 function utf8Slice (buf, start, end) {
3097 end = Math.min(buf.length, end)
3102 var bytesPerSequence
3108 for (; i < end; i += bytesPerSequence) {
3112 if (firstByte
> 0xEF) {
3113 bytesPerSequence =
4
3114 } else if (firstByte
> 0xDF) {
3115 bytesPerSequence =
3
3116 } else if (firstByte
> 0xBF) {
3117 bytesPerSequence =
2
3119 bytesPerSequence =
1
3122 if (i + bytesPerSequence <= end) {
3123 switch (bytesPerSequence) {
3125 if (firstByte <
0x80) {
3126 codePoint = firstByte
3130 secondByte = buf[i +
1]
3131 if ((secondByte &
0xC0) ===
0x80) {
3132 tempCodePoint = (firstByte &
0x1F) <<
0x6 | (secondByte &
0x3F)
3133 if (tempCodePoint
> 0x7F) {
3134 codePoint = tempCodePoint
3139 secondByte = buf[i +
1]
3140 thirdByte = buf[i +
2]
3141 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80) {
3142 tempCodePoint = (firstByte &
0xF) <<
0xC | (secondByte &
0x3F) <<
0x6 | (thirdByte &
0x3F)
3143 if (tempCodePoint
> 0x7FF && (tempCodePoint <
0xD800 || tempCodePoint
> 0xDFFF)) {
3144 codePoint = tempCodePoint
3149 secondByte = buf[i +
1]
3150 thirdByte = buf[i +
2]
3151 fourthByte = buf[i +
3]
3152 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80 && (fourthByte &
0xC0) ===
0x80) {
3153 tempCodePoint = (firstByte &
0xF) <<
0x12 | (secondByte &
0x3F) <<
0xC | (thirdByte &
0x3F) <<
0x6 | (fourthByte &
0x3F)
3154 if (tempCodePoint
> 0xFFFF && tempCodePoint <
0x110000) {
3155 codePoint = tempCodePoint
3161 if (codePoint ===
0xFFFD) {
3162 // we generated an invalid codePoint so make sure to only advance by
1 byte
3163 bytesPerSequence =
1
3164 } else if (codePoint
> 0xFFFF) {
3165 // encode to utf16 (surrogate pair dance)
3166 codePoint -=
0x10000
3167 res.push(codePoint
>>> 10 &
0x3FF |
0xD800)
3168 codePoint =
0xDC00 | codePoint &
0x3FF
3174 return String.fromCharCode.apply(String, res)
3177 function asciiSlice (buf, start, end) {
3179 end = Math.min(buf.length, end)
3181 for (var i = start; i < end; i++) {
3182 ret += String.fromCharCode(buf[i] &
0x7F)
3187 function binarySlice (buf, start, end) {
3189 end = Math.min(buf.length, end)
3191 for (var i = start; i < end; i++) {
3192 ret += String.fromCharCode(buf[i])
3197 function hexSlice (buf, start, end) {
3198 var len = buf.length
3200 if (!start || start <
0) start =
0
3201 if (!end || end <
0 || end
> len) end = len
3204 for (var i = start; i < end; i++) {
3205 out += toHex(buf[i])
3210 function utf16leSlice (buf, start, end) {
3211 var bytes = buf.slice(start, end)
3213 for (var i =
0; i < bytes.length; i +=
2) {
3214 res += String.fromCharCode(bytes[i] + bytes[i +
1] *
256)
3219 Buffer.prototype.slice = function slice (start, end) {
3220 var len = this.length
3222 end = end === undefined ? len : ~~end
3226 if (start <
0) start =
0
3227 } else if (start
> len) {
3233 if (end <
0) end =
0
3234 } else if (end
> len) {
3238 if (end < start) end = start
3241 if (Buffer.TYPED_ARRAY_SUPPORT) {
3242 newBuf = Buffer._augment(this.subarray(start, end))
3244 var sliceLen = end - start
3245 newBuf = new Buffer(sliceLen, undefined)
3246 for (var i =
0; i < sliceLen; i++) {
3247 newBuf[i] = this[i + start]
3251 if (newBuf.length) newBuf.parent = this.parent || this
3257 * Need to make sure that buffer isn't trying to write out of bounds.
3259 function checkOffset (offset, ext, length) {
3260 if ((offset %
1) !==
0 || offset <
0) throw new RangeError('offset is not uint')
3261 if (offset + ext
> length) throw new RangeError('Trying to access beyond buffer length')
3264 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3266 byteLength = byteLength |
0
3267 if (!noAssert) checkOffset(offset, byteLength, this.length)
3269 var val = this[offset]
3272 while (++i < byteLength && (mul *=
0x100)) {
3273 val += this[offset + i] * mul
3279 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3281 byteLength = byteLength |
0
3283 checkOffset(offset, byteLength, this.length)
3286 var val = this[offset + --byteLength]
3288 while (byteLength
> 0 && (mul *=
0x100)) {
3289 val += this[offset + --byteLength] * mul
3295 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3296 if (!noAssert) checkOffset(offset,
1, this.length)
3300 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3301 if (!noAssert) checkOffset(offset,
2, this.length)
3302 return this[offset] | (this[offset +
1] <<
8)
3305 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3306 if (!noAssert) checkOffset(offset,
2, this.length)
3307 return (this[offset] <<
8) | this[offset +
1]
3310 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3311 if (!noAssert) checkOffset(offset,
4, this.length)
3313 return ((this[offset]) |
3314 (this[offset +
1] <<
8) |
3315 (this[offset +
2] <<
16)) +
3316 (this[offset +
3] *
0x1000000)
3319 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3320 if (!noAssert) checkOffset(offset,
4, this.length)
3322 return (this[offset] *
0x1000000) +
3323 ((this[offset +
1] <<
16) |
3324 (this[offset +
2] <<
8) |
3328 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3330 byteLength = byteLength |
0
3331 if (!noAssert) checkOffset(offset, byteLength, this.length)
3333 var val = this[offset]
3336 while (++i < byteLength && (mul *=
0x100)) {
3337 val += this[offset + i] * mul
3341 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3346 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3348 byteLength = byteLength |
0
3349 if (!noAssert) checkOffset(offset, byteLength, this.length)
3353 var val = this[offset + --i]
3354 while (i
> 0 && (mul *=
0x100)) {
3355 val += this[offset + --i] * mul
3359 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3364 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3365 if (!noAssert) checkOffset(offset,
1, this.length)
3366 if (!(this[offset] &
0x80)) return (this[offset])
3367 return ((
0xff - this[offset] +
1) * -
1)
3370 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3371 if (!noAssert) checkOffset(offset,
2, this.length)
3372 var val = this[offset] | (this[offset +
1] <<
8)
3373 return (val &
0x8000) ? val |
0xFFFF0000 : val
3376 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3377 if (!noAssert) checkOffset(offset,
2, this.length)
3378 var val = this[offset +
1] | (this[offset] <<
8)
3379 return (val &
0x8000) ? val |
0xFFFF0000 : val
3382 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3383 if (!noAssert) checkOffset(offset,
4, this.length)
3385 return (this[offset]) |
3386 (this[offset +
1] <<
8) |
3387 (this[offset +
2] <<
16) |
3388 (this[offset +
3] <<
24)
3391 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3392 if (!noAssert) checkOffset(offset,
4, this.length)
3394 return (this[offset] <<
24) |
3395 (this[offset +
1] <<
16) |
3396 (this[offset +
2] <<
8) |
3400 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3401 if (!noAssert) checkOffset(offset,
4, this.length)
3402 return ieee754.read(this, offset, true,
23,
4)
3405 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3406 if (!noAssert) checkOffset(offset,
4, this.length)
3407 return ieee754.read(this, offset, false,
23,
4)
3410 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3411 if (!noAssert) checkOffset(offset,
8, this.length)
3412 return ieee754.read(this, offset, true,
52,
8)
3415 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3416 if (!noAssert) checkOffset(offset,
8, this.length)
3417 return ieee754.read(this, offset, false,
52,
8)
3420 function checkInt (buf, value, offset, ext, max, min) {
3421 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3422 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3423 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3426 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3429 byteLength = byteLength |
0
3430 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3434 this[offset] = value &
0xFF
3435 while (++i < byteLength && (mul *=
0x100)) {
3436 this[offset + i] = (value / mul) &
0xFF
3439 return offset + byteLength
3442 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3445 byteLength = byteLength |
0
3446 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3448 var i = byteLength -
1
3450 this[offset + i] = value &
0xFF
3451 while (--i
>=
0 && (mul *=
0x100)) {
3452 this[offset + i] = (value / mul) &
0xFF
3455 return offset + byteLength
3458 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3461 if (!noAssert) checkInt(this, value, offset,
1,
0xff,
0)
3462 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3463 this[offset] = value
3467 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3468 if (value <
0) value =
0xffff + value +
1
3469 for (var i =
0, j = Math.min(buf.length - offset,
2); i < j; i++) {
3470 buf[offset + i] = (value & (
0xff << (
8 * (littleEndian ? i :
1 - i))))
>>>
3471 (littleEndian ? i :
1 - i) *
8
3475 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3478 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3479 if (Buffer.TYPED_ARRAY_SUPPORT) {
3480 this[offset] = value
3481 this[offset +
1] = (value
>>> 8)
3483 objectWriteUInt16(this, value, offset, true)
3488 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3491 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3492 if (Buffer.TYPED_ARRAY_SUPPORT) {
3493 this[offset] = (value
>>> 8)
3494 this[offset +
1] = value
3496 objectWriteUInt16(this, value, offset, false)
3501 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3502 if (value <
0) value =
0xffffffff + value +
1
3503 for (var i =
0, j = Math.min(buf.length - offset,
4); i < j; i++) {
3504 buf[offset + i] = (value
>>> (littleEndian ? i :
3 - i) *
8) &
0xff
3508 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3511 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3512 if (Buffer.TYPED_ARRAY_SUPPORT) {
3513 this[offset +
3] = (value
>>> 24)
3514 this[offset +
2] = (value
>>> 16)
3515 this[offset +
1] = (value
>>> 8)
3516 this[offset] = value
3518 objectWriteUInt32(this, value, offset, true)
3523 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3526 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3527 if (Buffer.TYPED_ARRAY_SUPPORT) {
3528 this[offset] = (value
>>> 24)
3529 this[offset +
1] = (value
>>> 16)
3530 this[offset +
2] = (value
>>> 8)
3531 this[offset +
3] = value
3533 objectWriteUInt32(this, value, offset, false)
3538 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3542 var limit = Math.pow(
2,
8 * byteLength -
1)
3544 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3549 var sub = value <
0 ?
1 :
0
3550 this[offset] = value &
0xFF
3551 while (++i < byteLength && (mul *=
0x100)) {
3552 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3555 return offset + byteLength
3558 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3562 var limit = Math.pow(
2,
8 * byteLength -
1)
3564 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3567 var i = byteLength -
1
3569 var sub = value <
0 ?
1 :
0
3570 this[offset + i] = value &
0xFF
3571 while (--i
>=
0 && (mul *=
0x100)) {
3572 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3575 return offset + byteLength
3578 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3581 if (!noAssert) checkInt(this, value, offset,
1,
0x7f, -
0x80)
3582 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3583 if (value <
0) value =
0xff + value +
1
3584 this[offset] = value
3588 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3591 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3592 if (Buffer.TYPED_ARRAY_SUPPORT) {
3593 this[offset] = value
3594 this[offset +
1] = (value
>>> 8)
3596 objectWriteUInt16(this, value, offset, true)
3601 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3604 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3605 if (Buffer.TYPED_ARRAY_SUPPORT) {
3606 this[offset] = (value
>>> 8)
3607 this[offset +
1] = value
3609 objectWriteUInt16(this, value, offset, false)
3614 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3617 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3618 if (Buffer.TYPED_ARRAY_SUPPORT) {
3619 this[offset] = value
3620 this[offset +
1] = (value
>>> 8)
3621 this[offset +
2] = (value
>>> 16)
3622 this[offset +
3] = (value
>>> 24)
3624 objectWriteUInt32(this, value, offset, true)
3629 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3632 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3633 if (value <
0) value =
0xffffffff + value +
1
3634 if (Buffer.TYPED_ARRAY_SUPPORT) {
3635 this[offset] = (value
>>> 24)
3636 this[offset +
1] = (value
>>> 16)
3637 this[offset +
2] = (value
>>> 8)
3638 this[offset +
3] = value
3640 objectWriteUInt32(this, value, offset, false)
3645 function checkIEEE754 (buf, value, offset, ext, max, min) {
3646 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3647 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3648 if (offset <
0) throw new RangeError('index out of range')
3651 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3653 checkIEEE754(buf, value, offset,
4,
3.4028234663852886e+38, -
3.4028234663852886e+38)
3655 ieee754.write(buf, value, offset, littleEndian,
23,
4)
3659 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3660 return writeFloat(this, value, offset, true, noAssert)
3663 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3664 return writeFloat(this, value, offset, false, noAssert)
3667 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3669 checkIEEE754(buf, value, offset,
8,
1.7976931348623157E+308, -
1.7976931348623157E+308)
3671 ieee754.write(buf, value, offset, littleEndian,
52,
8)
3675 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3676 return writeDouble(this, value, offset, true, noAssert)
3679 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3680 return writeDouble(this, value, offset, false, noAssert)
3683 // copy(targetBuffer, targetStart=
0, sourceStart=
0, sourceEnd=buffer.length)
3684 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3685 if (!start) start =
0
3686 if (!end && end !==
0) end = this.length
3687 if (targetStart
>= target.length) targetStart = target.length
3688 if (!targetStart) targetStart =
0
3689 if (end
> 0 && end < start) end = start
3691 // Copy
0 bytes; we're done
3692 if (end === start) return
0
3693 if (target.length ===
0 || this.length ===
0) return
0
3695 // Fatal error conditions
3696 if (targetStart <
0) {
3697 throw new RangeError('targetStart out of bounds')
3699 if (start <
0 || start
>= this.length) throw new RangeError('sourceStart out of bounds')
3700 if (end <
0) throw new RangeError('sourceEnd out of bounds')
3703 if (end
> this.length) end = this.length
3704 if (target.length - targetStart < end - start) {
3705 end = target.length - targetStart + start
3708 var len = end - start
3711 if (this === target && start < targetStart && targetStart < end) {
3712 // descending copy from end
3713 for (i = len -
1; i
>=
0; i--) {
3714 target[i + targetStart] = this[i + start]
3716 } else if (len <
1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3717 // ascending copy from start
3718 for (i =
0; i < len; i++) {
3719 target[i + targetStart] = this[i + start]
3722 target._set(this.subarray(start, start + len), targetStart)
3728 // fill(value, start=
0, end=buffer.length)
3729 Buffer.prototype.fill = function fill (value, start, end) {
3730 if (!value) value =
0
3731 if (!start) start =
0
3732 if (!end) end = this.length
3734 if (end < start) throw new RangeError('end < start')
3736 // Fill
0 bytes; we're done
3737 if (end === start) return
3738 if (this.length ===
0) return
3740 if (start <
0 || start
>= this.length) throw new RangeError('start out of bounds')
3741 if (end <
0 || end
> this.length) throw new RangeError('end out of bounds')
3744 if (typeof value === 'number') {
3745 for (i = start; i < end; i++) {
3749 var bytes = utf8ToBytes(value.toString())
3750 var len = bytes.length
3751 for (i = start; i < end; i++) {
3752 this[i] = bytes[i % len]
3760 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3761 * Added in Node
0.12. Only available in browsers that support ArrayBuffer.
3763 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3764 if (typeof Uint8Array !== 'undefined') {
3765 if (Buffer.TYPED_ARRAY_SUPPORT) {
3766 return (new Buffer(this)).buffer
3768 var buf = new Uint8Array(this.length)
3769 for (var i =
0, len = buf.length; i < len; i +=
1) {
3775 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
3782 var BP = Buffer.prototype
3785 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
3787 Buffer._augment = function _augment (arr) {
3788 arr.constructor = Buffer
3789 arr._isBuffer = true
3791 // save reference to original Uint8Array set method before overwriting
3798 arr.write = BP.write
3799 arr.toString = BP.toString
3800 arr.toLocaleString = BP.toString
3801 arr.toJSON = BP.toJSON
3802 arr.equals = BP.equals
3803 arr.compare = BP.compare
3804 arr.indexOf = BP.indexOf
3806 arr.slice = BP.slice
3807 arr.readUIntLE = BP.readUIntLE
3808 arr.readUIntBE = BP.readUIntBE
3809 arr.readUInt8 = BP.readUInt8
3810 arr.readUInt16LE = BP.readUInt16LE
3811 arr.readUInt16BE = BP.readUInt16BE
3812 arr.readUInt32LE = BP.readUInt32LE
3813 arr.readUInt32BE = BP.readUInt32BE
3814 arr.readIntLE = BP.readIntLE
3815 arr.readIntBE = BP.readIntBE
3816 arr.readInt8 = BP.readInt8
3817 arr.readInt16LE = BP.readInt16LE
3818 arr.readInt16BE = BP.readInt16BE
3819 arr.readInt32LE = BP.readInt32LE
3820 arr.readInt32BE = BP.readInt32BE
3821 arr.readFloatLE = BP.readFloatLE
3822 arr.readFloatBE = BP.readFloatBE
3823 arr.readDoubleLE = BP.readDoubleLE
3824 arr.readDoubleBE = BP.readDoubleBE
3825 arr.writeUInt8 = BP.writeUInt8
3826 arr.writeUIntLE = BP.writeUIntLE
3827 arr.writeUIntBE = BP.writeUIntBE
3828 arr.writeUInt16LE = BP.writeUInt16LE
3829 arr.writeUInt16BE = BP.writeUInt16BE
3830 arr.writeUInt32LE = BP.writeUInt32LE
3831 arr.writeUInt32BE = BP.writeUInt32BE
3832 arr.writeIntLE = BP.writeIntLE
3833 arr.writeIntBE = BP.writeIntBE
3834 arr.writeInt8 = BP.writeInt8
3835 arr.writeInt16LE = BP.writeInt16LE
3836 arr.writeInt16BE = BP.writeInt16BE
3837 arr.writeInt32LE = BP.writeInt32LE
3838 arr.writeInt32BE = BP.writeInt32BE
3839 arr.writeFloatLE = BP.writeFloatLE
3840 arr.writeFloatBE = BP.writeFloatBE
3841 arr.writeDoubleLE = BP.writeDoubleLE
3842 arr.writeDoubleBE = BP.writeDoubleBE
3844 arr.inspect = BP.inspect
3845 arr.toArrayBuffer = BP.toArrayBuffer
3850 var INVALID_BASE64_RE = /[^+\/
0-
9A-Za-z-_]/g
3852 function base64clean (str) {
3853 // Node strips out invalid characters like \n and \t from the string, base64-js does not
3854 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
3855 // Node converts strings with length <
2 to ''
3856 if (str.length <
2) return ''
3857 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
3858 while (str.length %
4 !==
0) {
3864 function stringtrim (str) {
3865 if (str.trim) return str.trim()
3866 return str.replace(/^\s+|\s+$/g, '')
3869 function toHex (n) {
3870 if (n <
16) return '
0' + n.toString(
16)
3871 return n.toString(
16)
3874 function utf8ToBytes (string, units) {
3875 units = units || Infinity
3877 var length = string.length
3878 var leadSurrogate = null
3881 for (var i =
0; i < length; i++) {
3882 codePoint = string.charCodeAt(i)
3884 // is surrogate component
3885 if (codePoint
> 0xD7FF && codePoint <
0xE000) {
3886 // last char was a lead
3887 if (!leadSurrogate) {
3889 if (codePoint
> 0xDBFF) {
3891 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
3894 } else if (i +
1 === length) {
3896 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
3901 leadSurrogate = codePoint
3907 if (codePoint <
0xDC00) {
3908 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
3909 leadSurrogate = codePoint
3913 // valid surrogate pair
3914 codePoint = leadSurrogate -
0xD800 <<
10 | codePoint -
0xDC00 |
0x10000
3916 } else if (leadSurrogate) {
3917 // valid bmp char, but last char was a lead
3918 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
3921 leadSurrogate = null
3924 if (codePoint <
0x80) {
3925 if ((units -=
1) <
0) break
3926 bytes.push(codePoint)
3927 } else if (codePoint <
0x800) {
3928 if ((units -=
2) <
0) break
3930 codePoint
>> 0x6 |
0xC0,
3931 codePoint &
0x3F |
0x80
3933 } else if (codePoint <
0x10000) {
3934 if ((units -=
3) <
0) break
3936 codePoint
>> 0xC |
0xE0,
3937 codePoint
>> 0x6 &
0x3F |
0x80,
3938 codePoint &
0x3F |
0x80
3940 } else if (codePoint <
0x110000) {
3941 if ((units -=
4) <
0) break
3943 codePoint
>> 0x12 |
0xF0,
3944 codePoint
>> 0xC &
0x3F |
0x80,
3945 codePoint
>> 0x6 &
0x3F |
0x80,
3946 codePoint &
0x3F |
0x80
3949 throw new Error('Invalid code point')
3956 function asciiToBytes (str) {
3958 for (var i =
0; i < str.length; i++) {
3959 // Node's code seems to be doing this and not &
0x7F..
3960 byteArray.push(str.charCodeAt(i) &
0xFF)
3965 function utf16leToBytes (str, units) {
3968 for (var i =
0; i < str.length; i++) {
3969 if ((units -=
2) <
0) break
3971 c = str.charCodeAt(i)
3981 function base64ToBytes (str) {
3982 return base64.toByteArray(base64clean(str))
3985 function blitBuffer (src, dst, offset, length) {
3986 for (var i =
0; i < length; i++) {
3987 if ((i + offset
>= dst.length) || (i
>= src.length)) break
3988 dst[i + offset] = src[i]
3993 },{"base64-js":
8,"ieee754":
9,"is-array":
10}],
8:[function(require,module,exports){
3994 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
3996 ;(function (exports) {
3999 var Arr = (typeof Uint8Array !== 'undefined')
4003 var PLUS = '+'.charCodeAt(
0)
4004 var SLASH = '/'.charCodeAt(
0)
4005 var NUMBER = '
0'.charCodeAt(
0)
4006 var LOWER = 'a'.charCodeAt(
0)
4007 var UPPER = 'A'.charCodeAt(
0)
4008 var PLUS_URL_SAFE = '-'.charCodeAt(
0)
4009 var SLASH_URL_SAFE = '_'.charCodeAt(
0)
4011 function decode (elt) {
4012 var code = elt.charCodeAt(
0)
4013 if (code === PLUS ||
4014 code === PLUS_URL_SAFE)
4016 if (code === SLASH ||
4017 code === SLASH_URL_SAFE)
4020 return -
1 //no match
4021 if (code < NUMBER +
10)
4022 return code - NUMBER +
26 +
26
4023 if (code < UPPER +
26)
4025 if (code < LOWER +
26)
4026 return code - LOWER +
26
4029 function b64ToByteArray (b64) {
4030 var i, j, l, tmp, placeHolders, arr
4032 if (b64.length %
4 > 0) {
4033 throw new Error('Invalid string. Length must be a multiple of
4')
4036 // the number of equal signs (place holders)
4037 // if there are two placeholders, than the two characters before it
4038 // represent one byte
4039 // if there is only one, then the three characters before it represent
2 bytes
4040 // this is just a cheap hack to not do indexOf twice
4041 var len = b64.length
4042 placeHolders = '=' === b64.charAt(len -
2) ?
2 : '=' === b64.charAt(len -
1) ?
1 :
0
4044 // base64 is
4/
3 + up to two characters of the original data
4045 arr = new Arr(b64.length *
3 /
4 - placeHolders)
4047 // if there are placeholders, only get up to the last complete
4 chars
4048 l = placeHolders
> 0 ? b64.length -
4 : b64.length
4056 for (i =
0, j =
0; i < l; i +=
4, j +=
3) {
4057 tmp = (decode(b64.charAt(i)) <<
18) | (decode(b64.charAt(i +
1)) <<
12) | (decode(b64.charAt(i +
2)) <<
6) | decode(b64.charAt(i +
3))
4058 push((tmp &
0xFF0000)
>> 16)
4059 push((tmp &
0xFF00)
>> 8)
4063 if (placeHolders ===
2) {
4064 tmp = (decode(b64.charAt(i)) <<
2) | (decode(b64.charAt(i +
1))
>> 4)
4066 } else if (placeHolders ===
1) {
4067 tmp = (decode(b64.charAt(i)) <<
10) | (decode(b64.charAt(i +
1)) <<
4) | (decode(b64.charAt(i +
2))
>> 2)
4068 push((tmp
>> 8) &
0xFF)
4075 function uint8ToBase64 (uint8) {
4077 extraBytes = uint8.length %
3, // if we have
1 byte left, pad
2 bytes
4081 function encode (num) {
4082 return lookup.charAt(num)
4085 function tripletToBase64 (num) {
4086 return encode(num
>> 18 &
0x3F) + encode(num
>> 12 &
0x3F) + encode(num
>> 6 &
0x3F) + encode(num &
0x3F)
4089 // go through the array every three bytes, we'll deal with trailing stuff later
4090 for (i =
0, length = uint8.length - extraBytes; i < length; i +=
3) {
4091 temp = (uint8[i] <<
16) + (uint8[i +
1] <<
8) + (uint8[i +
2])
4092 output += tripletToBase64(temp)
4095 // pad the end with zeros, but make sure to not forget the extra bytes
4096 switch (extraBytes) {
4098 temp = uint8[uint8.length -
1]
4099 output += encode(temp
>> 2)
4100 output += encode((temp <<
4) &
0x3F)
4104 temp = (uint8[uint8.length -
2] <<
8) + (uint8[uint8.length -
1])
4105 output += encode(temp
>> 10)
4106 output += encode((temp
>> 4) &
0x3F)
4107 output += encode((temp <<
2) &
0x3F)
4115 exports.toByteArray = b64ToByteArray
4116 exports.fromByteArray = uint8ToBase64
4117 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4119 },{}],
9:[function(require,module,exports){
4120 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4122 var eLen = nBytes *
8 - mLen -
1
4123 var eMax = (
1 << eLen) -
1
4124 var eBias = eMax
>> 1
4126 var i = isLE ? (nBytes -
1) :
0
4127 var d = isLE ? -
1 :
1
4128 var s = buffer[offset + i]
4132 e = s & ((
1 << (-nBits)) -
1)
4135 for (; nBits
> 0; e = e *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4137 m = e & ((
1 << (-nBits)) -
1)
4140 for (; nBits
> 0; m = m *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4144 } else if (e === eMax) {
4145 return m ? NaN : ((s ? -
1 :
1) * Infinity)
4147 m = m + Math.pow(
2, mLen)
4150 return (s ? -
1 :
1) * m * Math.pow(
2, e - mLen)
4153 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4155 var eLen = nBytes *
8 - mLen -
1
4156 var eMax = (
1 << eLen) -
1
4157 var eBias = eMax
>> 1
4158 var rt = (mLen ===
23 ? Math.pow(
2, -
24) - Math.pow(
2, -
77) :
0)
4159 var i = isLE ?
0 : (nBytes -
1)
4160 var d = isLE ?
1 : -
1
4161 var s = value <
0 || (value ===
0 &&
1 / value <
0) ?
1 :
0
4163 value = Math.abs(value)
4165 if (isNaN(value) || value === Infinity) {
4166 m = isNaN(value) ?
1 :
0
4169 e = Math.floor(Math.log(value) / Math.LN2)
4170 if (value * (c = Math.pow(
2, -e)) <
1) {
4174 if (e + eBias
>=
1) {
4177 value += rt * Math.pow(
2,
1 - eBias)
4179 if (value * c
>=
2) {
4184 if (e + eBias
>= eMax) {
4187 } else if (e + eBias
>=
1) {
4188 m = (value * c -
1) * Math.pow(
2, mLen)
4191 m = value * Math.pow(
2, eBias -
1) * Math.pow(
2, mLen)
4196 for (; mLen
>=
8; buffer[offset + i] = m &
0xff, i += d, m /=
256, mLen -=
8) {}
4200 for (; eLen
> 0; buffer[offset + i] = e &
0xff, i += d, e /=
256, eLen -=
8) {}
4202 buffer[offset + i - d] |= s *
128
4205 },{}],
10:[function(require,module,exports){
4211 var isArray = Array.isArray;
4217 var str = Object.prototype.toString;
4220 * Whether or not the given `val`
4227 * isArray(arguments);
4232 * @param {mixed} val
4236 module.exports = isArray || function (val) {
4237 return !! val && '[object Array]' == str.call(val);
4240 },{}],
11:[function(require,module,exports){
4241 // Copyright Joyent, Inc. and other Node contributors.
4243 // Permission is hereby granted, free of charge, to any person obtaining a
4244 // copy of this software and associated documentation files (the
4245 // "Software"), to deal in the Software without restriction, including
4246 // without limitation the rights to use, copy, modify, merge, publish,
4247 // distribute, sublicense, and/or sell copies of the Software, and to permit
4248 // persons to whom the Software is furnished to do so, subject to the
4249 // following conditions:
4251 // The above copyright notice and this permission notice shall be included
4252 // in all copies or substantial portions of the Software.
4254 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4255 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4256 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4257 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4258 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4259 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4260 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4262 function EventEmitter() {
4263 this._events = this._events || {};
4264 this._maxListeners = this._maxListeners || undefined;
4266 module.exports = EventEmitter;
4268 // Backwards-compat with node
0.10.x
4269 EventEmitter.EventEmitter = EventEmitter;
4271 EventEmitter.prototype._events = undefined;
4272 EventEmitter.prototype._maxListeners = undefined;
4274 // By default EventEmitters will print a warning if more than
10 listeners are
4275 // added to it. This is a useful default which helps finding memory leaks.
4276 EventEmitter.defaultMaxListeners =
10;
4278 // Obviously not all Emitters should be limited to
10. This function allows
4279 // that to be increased. Set to zero for unlimited.
4280 EventEmitter.prototype.setMaxListeners = function(n) {
4281 if (!isNumber(n) || n <
0 || isNaN(n))
4282 throw TypeError('n must be a positive number');
4283 this._maxListeners = n;
4287 EventEmitter.prototype.emit = function(type) {
4288 var er, handler, len, args, i, listeners;
4293 // If there is no 'error' event listener then throw.
4294 if (type === 'error') {
4295 if (!this._events.error ||
4296 (isObject(this._events.error) && !this._events.error.length)) {
4298 if (er instanceof Error) {
4299 throw er; // Unhandled 'error' event
4301 throw TypeError('Uncaught, unspecified "error" event.');
4305 handler = this._events[type];
4307 if (isUndefined(handler))
4310 if (isFunction(handler)) {
4311 switch (arguments.length) {
4317 handler.call(this, arguments[
1]);
4320 handler.call(this, arguments[
1], arguments[
2]);
4324 len = arguments.length;
4325 args = new Array(len -
1);
4326 for (i =
1; i < len; i++)
4327 args[i -
1] = arguments[i];
4328 handler.apply(this, args);
4330 } else if (isObject(handler)) {
4331 len = arguments.length;
4332 args = new Array(len -
1);
4333 for (i =
1; i < len; i++)
4334 args[i -
1] = arguments[i];
4336 listeners = handler.slice();
4337 len = listeners.length;
4338 for (i =
0; i < len; i++)
4339 listeners[i].apply(this, args);
4345 EventEmitter.prototype.addListener = function(type, listener) {
4348 if (!isFunction(listener))
4349 throw TypeError('listener must be a function');
4354 // To avoid recursion in the case that type === "newListener"! Before
4355 // adding it to the listeners, first emit "newListener".
4356 if (this._events.newListener)
4357 this.emit('newListener', type,
4358 isFunction(listener.listener) ?
4359 listener.listener : listener);
4361 if (!this._events[type])
4362 // Optimize the case of one listener. Don't need the extra array object.
4363 this._events[type] = listener;
4364 else if (isObject(this._events[type]))
4365 // If we've already got an array, just append.
4366 this._events[type].push(listener);
4368 // Adding the second element, need to change to array.
4369 this._events[type] = [this._events[type], listener];
4371 // Check for listener leak
4372 if (isObject(this._events[type]) && !this._events[type].warned) {
4374 if (!isUndefined(this._maxListeners)) {
4375 m = this._maxListeners;
4377 m = EventEmitter.defaultMaxListeners;
4380 if (m && m
> 0 && this._events[type].length
> m) {
4381 this._events[type].warned = true;
4382 console.error('(node) warning: possible EventEmitter memory ' +
4383 'leak detected. %d listeners added. ' +
4384 'Use emitter.setMaxListeners() to increase limit.',
4385 this._events[type].length);
4386 if (typeof console.trace === 'function') {
4387 // not supported in IE
10
4396 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4398 EventEmitter.prototype.once = function(type, listener) {
4399 if (!isFunction(listener))
4400 throw TypeError('listener must be a function');
4405 this.removeListener(type, g);
4409 listener.apply(this, arguments);
4413 g.listener = listener;
4419 // emits a 'removeListener' event iff the listener was removed
4420 EventEmitter.prototype.removeListener = function(type, listener) {
4421 var list, position, length, i;
4423 if (!isFunction(listener))
4424 throw TypeError('listener must be a function');
4426 if (!this._events || !this._events[type])
4429 list = this._events[type];
4430 length = list.length;
4433 if (list === listener ||
4434 (isFunction(list.listener) && list.listener === listener)) {
4435 delete this._events[type];
4436 if (this._events.removeListener)
4437 this.emit('removeListener', type, listener);
4439 } else if (isObject(list)) {
4440 for (i = length; i--
> 0;) {
4441 if (list[i] === listener ||
4442 (list[i].listener && list[i].listener === listener)) {
4451 if (list.length ===
1) {
4453 delete this._events[type];
4455 list.splice(position,
1);
4458 if (this._events.removeListener)
4459 this.emit('removeListener', type, listener);
4465 EventEmitter.prototype.removeAllListeners = function(type) {
4471 // not listening for removeListener, no need to emit
4472 if (!this._events.removeListener) {
4473 if (arguments.length ===
0)
4475 else if (this._events[type])
4476 delete this._events[type];
4480 // emit removeListener for all listeners on all events
4481 if (arguments.length ===
0) {
4482 for (key in this._events) {
4483 if (key === 'removeListener') continue;
4484 this.removeAllListeners(key);
4486 this.removeAllListeners('removeListener');
4491 listeners = this._events[type];
4493 if (isFunction(listeners)) {
4494 this.removeListener(type, listeners);
4497 while (listeners.length)
4498 this.removeListener(type, listeners[listeners.length -
1]);
4500 delete this._events[type];
4505 EventEmitter.prototype.listeners = function(type) {
4507 if (!this._events || !this._events[type])
4509 else if (isFunction(this._events[type]))
4510 ret = [this._events[type]];
4512 ret = this._events[type].slice();
4516 EventEmitter.listenerCount = function(emitter, type) {
4518 if (!emitter._events || !emitter._events[type])
4520 else if (isFunction(emitter._events[type]))
4523 ret = emitter._events[type].length;
4527 function isFunction(arg) {
4528 return typeof arg === 'function';
4531 function isNumber(arg) {
4532 return typeof arg === 'number';
4535 function isObject(arg) {
4536 return typeof arg === 'object' && arg !== null;
4539 function isUndefined(arg) {
4540 return arg === void
0;
4543 },{}],
12:[function(require,module,exports){
4544 if (typeof Object.create === 'function') {
4545 // implementation from standard node.js 'util' module
4546 module.exports = function inherits(ctor, superCtor) {
4547 ctor.super_ = superCtor
4548 ctor.prototype = Object.create(superCtor.prototype, {
4558 // old school shim for old browsers
4559 module.exports = function inherits(ctor, superCtor) {
4560 ctor.super_ = superCtor
4561 var TempCtor = function () {}
4562 TempCtor.prototype = superCtor.prototype
4563 ctor.prototype = new TempCtor()
4564 ctor.prototype.constructor = ctor
4568 },{}],
13:[function(require,module,exports){
4569 module.exports = Array.isArray || function (arr) {
4570 return Object.prototype.toString.call(arr) == '[object Array]';
4573 },{}],
14:[function(require,module,exports){
4574 // shim for using process in browser
4576 var process = module.exports = {};
4578 var draining = false;
4580 var queueIndex = -
1;
4582 function cleanUpNextTick() {
4584 if (currentQueue.length) {
4585 queue = currentQueue.concat(queue);
4594 function drainQueue() {
4598 var timeout = setTimeout(cleanUpNextTick);
4601 var len = queue.length;
4603 currentQueue = queue;
4605 while (++queueIndex < len) {
4606 currentQueue[queueIndex].run();
4611 currentQueue = null;
4613 clearTimeout(timeout);
4616 process.nextTick = function (fun) {
4617 var args = new Array(arguments.length -
1);
4618 if (arguments.length
> 1) {
4619 for (var i =
1; i < arguments.length; i++) {
4620 args[i -
1] = arguments[i];
4623 queue.push(new Item(fun, args));
4624 if (queue.length ===
1 && !draining) {
4625 setTimeout(drainQueue,
0);
4629 // v8 likes predictible objects
4630 function Item(fun, array) {
4634 Item.prototype.run = function () {
4635 this.fun.apply(null, this.array);
4637 process.title = 'browser';
4638 process.browser = true;
4641 process.version = ''; // empty string to avoid regexp issues
4642 process.versions = {};
4647 process.addListener = noop;
4648 process.once = noop;
4650 process.removeListener = noop;
4651 process.removeAllListeners = noop;
4652 process.emit = noop;
4654 process.binding = function (name) {
4655 throw new Error('process.binding is not supported');
4659 process.cwd = function () { return '/' };
4660 process.chdir = function (dir) {
4661 throw new Error('process.chdir is not supported');
4663 process.umask = function() { return
0; };
4665 },{}],
15:[function(require,module,exports){
4666 module.exports = require(
"./lib/_stream_duplex.js")
4668 },{
"./lib/_stream_duplex.js":
16}],
16:[function(require,module,exports){
4669 (function (process){
4670 // Copyright Joyent, Inc. and other Node contributors.
4672 // Permission is hereby granted, free of charge, to any person obtaining a
4673 // copy of this software and associated documentation files (the
4674 //
"Software"), to deal in the Software without restriction, including
4675 // without limitation the rights to use, copy, modify, merge, publish,
4676 // distribute, sublicense, and/or sell copies of the Software, and to permit
4677 // persons to whom the Software is furnished to do so, subject to the
4678 // following conditions:
4680 // The above copyright notice and this permission notice shall be included
4681 // in all copies or substantial portions of the Software.
4683 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4684 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4685 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4686 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4687 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4688 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4689 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4691 // a duplex stream is just a stream that is both readable and writable.
4692 // Since JS doesn't have multiple prototypal inheritance, this class
4693 // prototypally inherits from Readable, and then parasitically from
4696 module.exports = Duplex;
4699 var objectKeys = Object.keys || function (obj) {
4701 for (var key in obj) keys.push(key);
4708 var util = require('core-util-is');
4709 util.inherits = require('inherits');
4712 var Readable = require('./_stream_readable');
4713 var Writable = require('./_stream_writable');
4715 util.inherits(Duplex, Readable);
4717 forEach(objectKeys(Writable.prototype), function(method) {
4718 if (!Duplex.prototype[method])
4719 Duplex.prototype[method] = Writable.prototype[method];
4722 function Duplex(options) {
4723 if (!(this instanceof Duplex))
4724 return new Duplex(options);
4726 Readable.call(this, options);
4727 Writable.call(this, options);
4729 if (options && options.readable === false)
4730 this.readable = false;
4732 if (options && options.writable === false)
4733 this.writable = false;
4735 this.allowHalfOpen = true;
4736 if (options && options.allowHalfOpen === false)
4737 this.allowHalfOpen = false;
4739 this.once('end', onend);
4742 // the no-half-open enforcer
4744 // if we allow half-open state, or if the writable side ended,
4746 if (this.allowHalfOpen || this._writableState.ended)
4749 // no more data can be written.
4750 // But allow more writes to happen in this tick.
4751 process.nextTick(this.end.bind(this));
4754 function forEach (xs, f) {
4755 for (var i =
0, l = xs.length; i < l; i++) {
4760 }).call(this,require('_process'))
4761 },{"./_stream_readable":
18,"./_stream_writable":
20,"_process":
14,"core-util-is":
21,"inherits":
12}],
17:[function(require,module,exports){
4762 // Copyright Joyent, Inc. and other Node contributors.
4764 // Permission is hereby granted, free of charge, to any person obtaining a
4765 // copy of this software and associated documentation files (the
4766 // "Software"), to deal in the Software without restriction, including
4767 // without limitation the rights to use, copy, modify, merge, publish,
4768 // distribute, sublicense, and/or sell copies of the Software, and to permit
4769 // persons to whom the Software is furnished to do so, subject to the
4770 // following conditions:
4772 // The above copyright notice and this permission notice shall be included
4773 // in all copies or substantial portions of the Software.
4775 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4776 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4777 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4778 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4779 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4780 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4781 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4783 // a passthrough stream.
4784 // basically just the most minimal sort of Transform stream.
4785 // Every written chunk gets output as-is.
4787 module.exports = PassThrough;
4789 var Transform = require('./_stream_transform');
4792 var util = require('core-util-is');
4793 util.inherits = require('inherits');
4796 util.inherits(PassThrough, Transform);
4798 function PassThrough(options) {
4799 if (!(this instanceof PassThrough))
4800 return new PassThrough(options);
4802 Transform.call(this, options);
4805 PassThrough.prototype._transform = function(chunk, encoding, cb) {
4809 },{"./_stream_transform":
19,"core-util-is":
21,"inherits":
12}],
18:[function(require,module,exports){
4810 (function (process){
4811 // Copyright Joyent, Inc. and other Node contributors.
4813 // Permission is hereby granted, free of charge, to any person obtaining a
4814 // copy of this software and associated documentation files (the
4815 // "Software"), to deal in the Software without restriction, including
4816 // without limitation the rights to use, copy, modify, merge, publish,
4817 // distribute, sublicense, and/or sell copies of the Software, and to permit
4818 // persons to whom the Software is furnished to do so, subject to the
4819 // following conditions:
4821 // The above copyright notice and this permission notice shall be included
4822 // in all copies or substantial portions of the Software.
4824 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4825 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4826 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4827 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4828 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4829 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4830 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4832 module.exports = Readable;
4835 var isArray = require('isarray');
4840 var Buffer = require('buffer').Buffer;
4843 Readable.ReadableState = ReadableState;
4845 var EE = require('events').EventEmitter;
4848 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
4849 return emitter.listeners(type).length;
4853 var Stream = require('stream');
4856 var util = require('core-util-is');
4857 util.inherits = require('inherits');
4864 var debug = require('util');
4865 if (debug && debug.debuglog) {
4866 debug = debug.debuglog('stream');
4868 debug = function () {};
4873 util.inherits(Readable, Stream);
4875 function ReadableState(options, stream) {
4876 var Duplex = require('./_stream_duplex');
4878 options = options || {};
4880 // the point at which it stops calling _read() to fill the buffer
4881 // Note:
0 is a valid value, means "don't call _read preemptively ever"
4882 var hwm = options.highWaterMark;
4883 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
4884 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
4887 this.highWaterMark = ~~this.highWaterMark;
4892 this.pipesCount =
0;
4893 this.flowing = null;
4895 this.endEmitted = false;
4896 this.reading = false;
4898 // a flag to be able to tell if the onwrite cb is called immediately,
4899 // or on a later tick. We set this to true at first, because any
4900 // actions that shouldn't happen until "later" should generally also
4901 // not happen before the first write call.
4904 // whenever we return null, then we set a flag to say
4905 // that we're awaiting a 'readable' event emission.
4906 this.needReadable = false;
4907 this.emittedReadable = false;
4908 this.readableListening = false;
4911 // object stream flag. Used to make read(n) ignore n and to
4912 // make all the buffer merging and length checks go away
4913 this.objectMode = !!options.objectMode;
4915 if (stream instanceof Duplex)
4916 this.objectMode = this.objectMode || !!options.readableObjectMode;
4918 // Crypto is kind of old and crusty. Historically, its default string
4919 // encoding is 'binary' so we have to make this configurable.
4920 // Everything else in the universe uses 'utf8', though.
4921 this.defaultEncoding = options.defaultEncoding || 'utf8';
4923 // when piping, we only care about 'readable' events that happen
4924 // after read()ing all the bytes and not getting any pushback.
4925 this.ranOut = false;
4927 // the number of writers that are awaiting a drain event in .pipe()s
4928 this.awaitDrain =
0;
4930 // if true, a maybeReadMore has been scheduled
4931 this.readingMore = false;
4933 this.decoder = null;
4934 this.encoding = null;
4935 if (options.encoding) {
4937 StringDecoder = require('string_decoder/').StringDecoder;
4938 this.decoder = new StringDecoder(options.encoding);
4939 this.encoding = options.encoding;
4943 function Readable(options) {
4944 var Duplex = require('./_stream_duplex');
4946 if (!(this instanceof Readable))
4947 return new Readable(options);
4949 this._readableState = new ReadableState(options, this);
4952 this.readable = true;
4957 // Manually shove something into the read() buffer.
4958 // This returns true if the highWaterMark has not been hit yet,
4959 // similar to how Writable.write() returns true if you should
4960 // write() some more.
4961 Readable.prototype.push = function(chunk, encoding) {
4962 var state = this._readableState;
4964 if (util.isString(chunk) && !state.objectMode) {
4965 encoding = encoding || state.defaultEncoding;
4966 if (encoding !== state.encoding) {
4967 chunk = new Buffer(chunk, encoding);
4972 return readableAddChunk(this, state, chunk, encoding, false);
4975 // Unshift should *always* be something directly out of read()
4976 Readable.prototype.unshift = function(chunk) {
4977 var state = this._readableState;
4978 return readableAddChunk(this, state, chunk, '', true);
4981 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
4982 var er = chunkInvalid(state, chunk);
4984 stream.emit('error', er);
4985 } else if (util.isNullOrUndefined(chunk)) {
4986 state.reading = false;
4988 onEofChunk(stream, state);
4989 } else if (state.objectMode || chunk && chunk.length
> 0) {
4990 if (state.ended && !addToFront) {
4991 var e = new Error('stream.push() after EOF');
4992 stream.emit('error', e);
4993 } else if (state.endEmitted && addToFront) {
4994 var e = new Error('stream.unshift() after end event');
4995 stream.emit('error', e);
4997 if (state.decoder && !addToFront && !encoding)
4998 chunk = state.decoder.write(chunk);
5001 state.reading = false;
5003 // if we want the data now, just emit it.
5004 if (state.flowing && state.length ===
0 && !state.sync) {
5005 stream.emit('data', chunk);
5008 // update the buffer info.
5009 state.length += state.objectMode ?
1 : chunk.length;
5011 state.buffer.unshift(chunk);
5013 state.buffer.push(chunk);
5015 if (state.needReadable)
5016 emitReadable(stream);
5019 maybeReadMore(stream, state);
5021 } else if (!addToFront) {
5022 state.reading = false;
5025 return needMoreData(state);
5030 // if it's past the high water mark, we can push in some more.
5031 // Also, if we have no data yet, we can stand some
5032 // more bytes. This is to work around cases where hwm=
0,
5033 // such as the repl. Also, if the push() triggered a
5034 // readable event, and the user called read(largeNumber) such that
5035 // needReadable was set, then we ought to push more, so that another
5036 // 'readable' event will be triggered.
5037 function needMoreData(state) {
5038 return !state.ended &&
5039 (state.needReadable ||
5040 state.length < state.highWaterMark ||
5041 state.length ===
0);
5044 // backwards compatibility.
5045 Readable.prototype.setEncoding = function(enc) {
5047 StringDecoder = require('string_decoder/').StringDecoder;
5048 this._readableState.decoder = new StringDecoder(enc);
5049 this._readableState.encoding = enc;
5053 // Don't raise the hwm
> 128MB
5054 var MAX_HWM =
0x800000;
5055 function roundUpToNextPowerOf2(n) {
5059 // Get the next highest power of
2
5061 for (var p =
1; p <
32; p <<=
1) n |= n
>> p;
5067 function howMuchToRead(n, state) {
5068 if (state.length ===
0 && state.ended)
5071 if (state.objectMode)
5072 return n ===
0 ?
0 :
1;
5074 if (isNaN(n) || util.isNull(n)) {
5075 // only flow one buffer at a time
5076 if (state.flowing && state.buffer.length)
5077 return state.buffer[
0].length;
5079 return state.length;
5085 // If we're asking for more than the target buffer level,
5086 // then raise the water mark. Bump up to the next highest
5087 // power of
2, to prevent increasing it excessively in tiny
5089 if (n
> state.highWaterMark)
5090 state.highWaterMark = roundUpToNextPowerOf2(n);
5092 // don't have that much. return null, unless we've ended.
5093 if (n
> state.length) {
5095 state.needReadable = true;
5098 return state.length;
5104 // you can override either this method, or the async _read(n) below.
5105 Readable.prototype.read = function(n) {
5107 var state = this._readableState;
5110 if (!util.isNumber(n) || n
> 0)
5111 state.emittedReadable = false;
5113 // if we're doing read(
0) to trigger a readable event, but we
5114 // already have a bunch of data in the buffer, then just trigger
5115 // the 'readable' event and move on.
5117 state.needReadable &&
5118 (state.length
>= state.highWaterMark || state.ended)) {
5119 debug('read: emitReadable', state.length, state.ended);
5120 if (state.length ===
0 && state.ended)
5127 n = howMuchToRead(n, state);
5129 // if we've ended, and we're now clear, then finish it up.
5130 if (n ===
0 && state.ended) {
5131 if (state.length ===
0)
5136 // All the actual chunk generation logic needs to be
5137 // *below* the call to _read. The reason is that in certain
5138 // synthetic stream cases, such as passthrough streams, _read
5139 // may be a completely synchronous operation which may change
5140 // the state of the read buffer, providing enough data when
5141 // before there was *not* enough.
5143 // So, the steps are:
5144 //
1. Figure out what the state of things will be after we do
5145 // a read from the buffer.
5147 //
2. If that resulting state will trigger a _read, then call _read.
5148 // Note that this may be asynchronous, or synchronous. Yes, it is
5149 // deeply ugly to write APIs this way, but that still doesn't mean
5150 // that the Readable class should behave improperly, as streams are
5151 // designed to be sync/async agnostic.
5152 // Take note if the _read call is sync or async (ie, if the read call
5153 // has returned yet), so that we know whether or not it's safe to emit
5156 //
3. Actually pull the requested chunks out of the buffer and return.
5158 // if we need a readable event, then we need to do some reading.
5159 var doRead = state.needReadable;
5160 debug('need readable', doRead);
5162 // if we currently have less than the highWaterMark, then also read some
5163 if (state.length ===
0 || state.length - n < state.highWaterMark) {
5165 debug('length less than watermark', doRead);
5168 // however, if we've ended, then there's no point, and if we're already
5169 // reading, then it's unnecessary.
5170 if (state.ended || state.reading) {
5172 debug('reading or ended', doRead);
5177 state.reading = true;
5179 // if the length is currently zero, then we *need* a readable event.
5180 if (state.length ===
0)
5181 state.needReadable = true;
5182 // call internal read method
5183 this._read(state.highWaterMark);
5187 // If _read pushed data synchronously, then `reading` will be false,
5188 // and we need to re-evaluate how much data we can return to the user.
5189 if (doRead && !state.reading)
5190 n = howMuchToRead(nOrig, state);
5194 ret = fromList(n, state);
5198 if (util.isNull(ret)) {
5199 state.needReadable = true;
5205 // If we have nothing in the buffer, then we want to know
5206 // as soon as we *do* get something into the buffer.
5207 if (state.length ===
0 && !state.ended)
5208 state.needReadable = true;
5210 // If we tried to read() past the EOF, then emit end on the next tick.
5211 if (nOrig !== n && state.ended && state.length ===
0)
5214 if (!util.isNull(ret))
5215 this.emit('data', ret);
5220 function chunkInvalid(state, chunk) {
5222 if (!util.isBuffer(chunk) &&
5223 !util.isString(chunk) &&
5224 !util.isNullOrUndefined(chunk) &&
5225 !state.objectMode) {
5226 er = new TypeError('Invalid non-string/buffer chunk');
5232 function onEofChunk(stream, state) {
5233 if (state.decoder && !state.ended) {
5234 var chunk = state.decoder.end();
5235 if (chunk && chunk.length) {
5236 state.buffer.push(chunk);
5237 state.length += state.objectMode ?
1 : chunk.length;
5242 // emit 'readable' now to make sure it gets picked up.
5243 emitReadable(stream);
5246 // Don't emit readable right away in sync mode, because this can trigger
5247 // another read() call =
> stack overflow. This way, it might trigger
5248 // a nextTick recursion warning, but that's not so bad.
5249 function emitReadable(stream) {
5250 var state = stream._readableState;
5251 state.needReadable = false;
5252 if (!state.emittedReadable) {
5253 debug('emitReadable', state.flowing);
5254 state.emittedReadable = true;
5256 process.nextTick(function() {
5257 emitReadable_(stream);
5260 emitReadable_(stream);
5264 function emitReadable_(stream) {
5265 debug('emit readable');
5266 stream.emit('readable');
5271 // at this point, the user has presumably seen the 'readable' event,
5272 // and called read() to consume some data. that may have triggered
5273 // in turn another _read(n) call, in which case reading = true if
5274 // it's in progress.
5275 // However, if we're not ended, or reading, and the length < hwm,
5276 // then go ahead and try to read some more preemptively.
5277 function maybeReadMore(stream, state) {
5278 if (!state.readingMore) {
5279 state.readingMore = true;
5280 process.nextTick(function() {
5281 maybeReadMore_(stream, state);
5286 function maybeReadMore_(stream, state) {
5287 var len = state.length;
5288 while (!state.reading && !state.flowing && !state.ended &&
5289 state.length < state.highWaterMark) {
5290 debug('maybeReadMore read
0');
5292 if (len === state.length)
5293 // didn't get any data, stop spinning.
5298 state.readingMore = false;
5301 // abstract method. to be overridden in specific implementation classes.
5302 // call cb(er, data) where data is <= n in length.
5303 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5304 // arbitrary, and perhaps not very meaningful.
5305 Readable.prototype._read = function(n) {
5306 this.emit('error', new Error('not implemented'));
5309 Readable.prototype.pipe = function(dest, pipeOpts) {
5311 var state = this._readableState;
5313 switch (state.pipesCount) {
5318 state.pipes = [state.pipes, dest];
5321 state.pipes.push(dest);
5324 state.pipesCount +=
1;
5325 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5327 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5328 dest !== process.stdout &&
5329 dest !== process.stderr;
5331 var endFn = doEnd ? onend : cleanup;
5332 if (state.endEmitted)
5333 process.nextTick(endFn);
5335 src.once('end', endFn);
5337 dest.on('unpipe', onunpipe);
5338 function onunpipe(readable) {
5340 if (readable === src) {
5350 // when the dest drains, it reduces the awaitDrain counter
5351 // on the source. This would be more elegant with a .once()
5352 // handler in flow(), but adding and removing repeatedly is
5354 var ondrain = pipeOnDrain(src);
5355 dest.on('drain', ondrain);
5357 function cleanup() {
5359 // cleanup event handlers once the pipe is broken
5360 dest.removeListener('close', onclose);
5361 dest.removeListener('finish', onfinish);
5362 dest.removeListener('drain', ondrain);
5363 dest.removeListener('error', onerror);
5364 dest.removeListener('unpipe', onunpipe);
5365 src.removeListener('end', onend);
5366 src.removeListener('end', cleanup);
5367 src.removeListener('data', ondata);
5369 // if the reader is waiting for a drain event from this
5370 // specific writer, then it would cause it to never start
5372 // So, if this is awaiting a drain, then we just call it now.
5373 // If we don't know, then assume that we are waiting for one.
5374 if (state.awaitDrain &&
5375 (!dest._writableState || dest._writableState.needDrain))
5379 src.on('data', ondata);
5380 function ondata(chunk) {
5382 var ret = dest.write(chunk);
5383 if (false === ret) {
5384 debug('false write response, pause',
5385 src._readableState.awaitDrain);
5386 src._readableState.awaitDrain++;
5391 // if the dest has an error, then stop piping into it.
5392 // however, don't suppress the throwing behavior for this.
5393 function onerror(er) {
5394 debug('onerror', er);
5396 dest.removeListener('error', onerror);
5397 if (EE.listenerCount(dest, 'error') ===
0)
5398 dest.emit('error', er);
5400 // This is a brutally ugly hack to make sure that our error handler
5401 // is attached before any userland ones. NEVER DO THIS.
5402 if (!dest._events || !dest._events.error)
5403 dest.on('error', onerror);
5404 else if (isArray(dest._events.error))
5405 dest._events.error.unshift(onerror);
5407 dest._events.error = [onerror, dest._events.error];
5411 // Both close and finish should trigger unpipe, but only once.
5412 function onclose() {
5413 dest.removeListener('finish', onfinish);
5416 dest.once('close', onclose);
5417 function onfinish() {
5419 dest.removeListener('close', onclose);
5422 dest.once('finish', onfinish);
5429 // tell the dest that it's being piped to
5430 dest.emit('pipe', src);
5432 // start the flow if it hasn't been started already.
5433 if (!state.flowing) {
5434 debug('pipe resume');
5441 function pipeOnDrain(src) {
5443 var state = src._readableState;
5444 debug('pipeOnDrain', state.awaitDrain);
5445 if (state.awaitDrain)
5447 if (state.awaitDrain ===
0 && EE.listenerCount(src, 'data')) {
5448 state.flowing = true;
5455 Readable.prototype.unpipe = function(dest) {
5456 var state = this._readableState;
5458 // if we're not piping anywhere, then do nothing.
5459 if (state.pipesCount ===
0)
5462 // just one destination. most common case.
5463 if (state.pipesCount ===
1) {
5464 // passed in one, but it's not the right one.
5465 if (dest && dest !== state.pipes)
5473 state.pipesCount =
0;
5474 state.flowing = false;
5476 dest.emit('unpipe', this);
5480 // slow case. multiple pipe destinations.
5484 var dests = state.pipes;
5485 var len = state.pipesCount;
5487 state.pipesCount =
0;
5488 state.flowing = false;
5490 for (var i =
0; i < len; i++)
5491 dests[i].emit('unpipe', this);
5495 // try to find the right one.
5496 var i = indexOf(state.pipes, dest);
5500 state.pipes.splice(i,
1);
5501 state.pipesCount -=
1;
5502 if (state.pipesCount ===
1)
5503 state.pipes = state.pipes[
0];
5505 dest.emit('unpipe', this);
5510 // set up data events if they are asked for
5511 // Ensure readable listeners eventually get something
5512 Readable.prototype.on = function(ev, fn) {
5513 var res = Stream.prototype.on.call(this, ev, fn);
5515 // If listening to data, and it has not explicitly been paused,
5516 // then call resume to start the flow of data on the next tick.
5517 if (ev === 'data' && false !== this._readableState.flowing) {
5521 if (ev === 'readable' && this.readable) {
5522 var state = this._readableState;
5523 if (!state.readableListening) {
5524 state.readableListening = true;
5525 state.emittedReadable = false;
5526 state.needReadable = true;
5527 if (!state.reading) {
5529 process.nextTick(function() {
5530 debug('readable nexttick read
0');
5533 } else if (state.length) {
5534 emitReadable(this, state);
5541 Readable.prototype.addListener = Readable.prototype.on;
5543 // pause() and resume() are remnants of the legacy readable stream API
5544 // If the user uses them, then switch into old mode.
5545 Readable.prototype.resume = function() {
5546 var state = this._readableState;
5547 if (!state.flowing) {
5549 state.flowing = true;
5550 if (!state.reading) {
5551 debug('resume read
0');
5554 resume(this, state);
5559 function resume(stream, state) {
5560 if (!state.resumeScheduled) {
5561 state.resumeScheduled = true;
5562 process.nextTick(function() {
5563 resume_(stream, state);
5568 function resume_(stream, state) {
5569 state.resumeScheduled = false;
5570 stream.emit('resume');
5572 if (state.flowing && !state.reading)
5576 Readable.prototype.pause = function() {
5577 debug('call pause flowing=%j', this._readableState.flowing);
5578 if (false !== this._readableState.flowing) {
5580 this._readableState.flowing = false;
5586 function flow(stream) {
5587 var state = stream._readableState;
5588 debug('flow', state.flowing);
5589 if (state.flowing) {
5591 var chunk = stream.read();
5592 } while (null !== chunk && state.flowing);
5596 // wrap an old-style stream as the async data source.
5597 // This is *not* part of the readable stream interface.
5598 // It is an ugly unfortunate mess of history.
5599 Readable.prototype.wrap = function(stream) {
5600 var state = this._readableState;
5604 stream.on('end', function() {
5605 debug('wrapped end');
5606 if (state.decoder && !state.ended) {
5607 var chunk = state.decoder.end();
5608 if (chunk && chunk.length)
5615 stream.on('data', function(chunk) {
5616 debug('wrapped data');
5618 chunk = state.decoder.write(chunk);
5619 if (!chunk || !state.objectMode && !chunk.length)
5622 var ret = self.push(chunk);
5629 // proxy all the other methods.
5630 // important when wrapping filters and duplexes.
5631 for (var i in stream) {
5632 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5633 this[i] = function(method) { return function() {
5634 return stream[method].apply(stream, arguments);
5639 // proxy certain important events.
5640 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5641 forEach(events, function(ev) {
5642 stream.on(ev, self.emit.bind(self, ev));
5645 // when we try to consume some more bytes, simply unpause the
5646 // underlying stream.
5647 self._read = function(n) {
5648 debug('wrapped _read', n);
5660 // exposed for testing purposes only.
5661 Readable._fromList = fromList;
5663 // Pluck off n bytes from an array of buffers.
5664 // Length is the combined lengths of all the buffers in the list.
5665 function fromList(n, state) {
5666 var list = state.buffer;
5667 var length = state.length;
5668 var stringMode = !!state.decoder;
5669 var objectMode = !!state.objectMode;
5672 // nothing in the list, definitely empty.
5673 if (list.length ===
0)
5678 else if (objectMode)
5680 else if (!n || n
>= length) {
5681 // read it all, truncate the array.
5683 ret = list.join('');
5685 ret = Buffer.concat(list, length);
5688 // read just some of it.
5689 if (n < list[
0].length) {
5690 // just take a part of the first list item.
5691 // slice is the same for buffers and strings.
5693 ret = buf.slice(
0, n);
5694 list[
0] = buf.slice(n);
5695 } else if (n === list[
0].length) {
5696 // first list is a perfect match
5700 // we have enough to cover it, but it spans past the first buffer.
5704 ret = new Buffer(n);
5707 for (var i =
0, l = list.length; i < l && c < n; i++) {
5709 var cpy = Math.min(n - c, buf.length);
5712 ret += buf.slice(
0, cpy);
5714 buf.copy(ret, c,
0, cpy);
5716 if (cpy < buf.length)
5717 list[
0] = buf.slice(cpy);
5729 function endReadable(stream) {
5730 var state = stream._readableState;
5732 // If we get here before consuming all the bytes, then that is a
5733 // bug in node. Should never happen.
5734 if (state.length
> 0)
5735 throw new Error('endReadable called on non-empty stream');
5737 if (!state.endEmitted) {
5739 process.nextTick(function() {
5740 // Check that we didn't get one last unshift.
5741 if (!state.endEmitted && state.length ===
0) {
5742 state.endEmitted = true;
5743 stream.readable = false;
5750 function forEach (xs, f) {
5751 for (var i =
0, l = xs.length; i < l; i++) {
5756 function indexOf (xs, x) {
5757 for (var i =
0, l = xs.length; i < l; i++) {
5758 if (xs[i] === x) return i;
5763 }).call(this,require('_process'))
5764 },{
"./_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){
5765 // Copyright Joyent, Inc. and other Node contributors.
5767 // Permission is hereby granted, free of charge, to any person obtaining a
5768 // copy of this software and associated documentation files (the
5769 //
"Software"), to deal in the Software without restriction, including
5770 // without limitation the rights to use, copy, modify, merge, publish,
5771 // distribute, sublicense, and/or sell copies of the Software, and to permit
5772 // persons to whom the Software is furnished to do so, subject to the
5773 // following conditions:
5775 // The above copyright notice and this permission notice shall be included
5776 // in all copies or substantial portions of the Software.
5778 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5779 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5780 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5781 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5782 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5783 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5784 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5787 // a transform stream is a readable/writable stream where you do
5788 // something with the data. Sometimes it's called a
"filter",
5789 // but that's not a great name for it, since that implies a thing where
5790 // some bits pass through, and others are simply ignored. (That would
5791 // be a valid example of a transform, of course.)
5793 // While the output is causally related to the input, it's not a
5794 // necessarily symmetric or synchronous transformation. For example,
5795 // a zlib stream might take multiple plain-text writes(), and then
5796 // emit a single compressed chunk some time in the future.
5798 // Here's how this works:
5800 // The Transform stream has all the aspects of the readable and writable
5801 // stream classes. When you write(chunk), that calls _write(chunk,cb)
5802 // internally, and returns false if there's a lot of pending writes
5803 // buffered up. When you call read(), that calls _read(n) until
5804 // there's enough pending readable data buffered up.
5806 // In a transform stream, the written data is placed in a buffer. When
5807 // _read(n) is called, it transforms the queued up data, calling the
5808 // buffered _write cb's as it consumes chunks. If consuming a single
5809 // written chunk would result in multiple output chunks, then the first
5810 // outputted bit calls the readcb, and subsequent chunks just go into
5811 // the read buffer, and will cause it to emit 'readable' if necessary.
5813 // This way, back-pressure is actually determined by the reading side,
5814 // since _read has to be called to start processing a new chunk. However,
5815 // a pathological inflate type of transform can cause excessive buffering
5816 // here. For example, imagine a stream where every byte of input is
5817 // interpreted as an integer from
0-
255, and then results in that many
5818 // bytes of output. Writing the
4 bytes {ff,ff,ff,ff} would result in
5819 //
1kb of data being output. In this case, you could write a very small
5820 // amount of input, and end up with a very large amount of output. In
5821 // such a pathological inflating mechanism, there'd be no way to tell
5822 // the system to stop doing the transform. A single
4MB write could
5823 // cause the system to run out of memory.
5825 // However, even in such a pathological case, only a single written chunk
5826 // would be consumed, and then the rest would wait (un-transformed) until
5827 // the results of the previous transformed chunk were consumed.
5829 module.exports = Transform;
5831 var Duplex = require('./_stream_duplex');
5834 var util = require('core-util-is');
5835 util.inherits = require('inherits');
5838 util.inherits(Transform, Duplex);
5841 function TransformState(options, stream) {
5842 this.afterTransform = function(er, data) {
5843 return afterTransform(stream, er, data);
5846 this.needTransform = false;
5847 this.transforming = false;
5848 this.writecb = null;
5849 this.writechunk = null;
5852 function afterTransform(stream, er, data) {
5853 var ts = stream._transformState;
5854 ts.transforming = false;
5856 var cb = ts.writecb;
5859 return stream.emit('error', new Error('no writecb in Transform class'));
5861 ts.writechunk = null;
5864 if (!util.isNullOrUndefined(data))
5870 var rs = stream._readableState;
5872 if (rs.needReadable || rs.length < rs.highWaterMark) {
5873 stream._read(rs.highWaterMark);
5878 function Transform(options) {
5879 if (!(this instanceof Transform))
5880 return new Transform(options);
5882 Duplex.call(this, options);
5884 this._transformState = new TransformState(options, this);
5886 // when the writable side finishes, then flush out anything remaining.
5889 // start out asking for a readable event once data is transformed.
5890 this._readableState.needReadable = true;
5892 // we have implemented the _read method, and done the other things
5893 // that Readable wants before the first _read call, so unset the
5895 this._readableState.sync = false;
5897 this.once('prefinish', function() {
5898 if (util.isFunction(this._flush))
5899 this._flush(function(er) {
5907 Transform.prototype.push = function(chunk, encoding) {
5908 this._transformState.needTransform = false;
5909 return Duplex.prototype.push.call(this, chunk, encoding);
5912 // This is the part where you do stuff!
5913 // override this function in implementation classes.
5914 // 'chunk' is an input chunk.
5916 // Call `push(newChunk)` to pass along transformed output
5917 // to the readable side. You may call 'push' zero or more times.
5919 // Call `cb(err)` when you are done with this chunk. If you pass
5920 // an error, then that'll put the hurt on the whole operation. If you
5921 // never call cb(), then you'll never get another chunk.
5922 Transform.prototype._transform = function(chunk, encoding, cb) {
5923 throw new Error('not implemented');
5926 Transform.prototype._write = function(chunk, encoding, cb) {
5927 var ts = this._transformState;
5929 ts.writechunk = chunk;
5930 ts.writeencoding = encoding;
5931 if (!ts.transforming) {
5932 var rs = this._readableState;
5933 if (ts.needTransform ||
5935 rs.length < rs.highWaterMark)
5936 this._read(rs.highWaterMark);
5940 // Doesn't matter what the args are here.
5941 // _transform does all the work.
5942 // That we got here means that the readable side wants more data.
5943 Transform.prototype._read = function(n) {
5944 var ts = this._transformState;
5946 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
5947 ts.transforming = true;
5948 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
5950 // mark that we need a transform, so that any data that comes in
5951 // will get processed, now that we've asked for it.
5952 ts.needTransform = true;
5957 function done(stream, er) {
5959 return stream.emit('error', er);
5961 // if there's nothing in the write buffer, then that means
5962 // that nothing more will ever be provided
5963 var ws = stream._writableState;
5964 var ts = stream._transformState;
5967 throw new Error('calling transform done when ws.length !=
0');
5969 if (ts.transforming)
5970 throw new Error('calling transform done when still transforming');
5972 return stream.push(null);
5975 },{"./_stream_duplex":
16,"core-util-is":
21,"inherits":
12}],
20:[function(require,module,exports){
5976 (function (process){
5977 // Copyright Joyent, Inc. and other Node contributors.
5979 // Permission is hereby granted, free of charge, to any person obtaining a
5980 // copy of this software and associated documentation files (the
5981 // "Software"), to deal in the Software without restriction, including
5982 // without limitation the rights to use, copy, modify, merge, publish,
5983 // distribute, sublicense, and/or sell copies of the Software, and to permit
5984 // persons to whom the Software is furnished to do so, subject to the
5985 // following conditions:
5987 // The above copyright notice and this permission notice shall be included
5988 // in all copies or substantial portions of the Software.
5990 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5991 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5992 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5993 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5994 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5995 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5996 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5998 // A bit simpler than readable streams.
5999 // Implement an async ._write(chunk, cb), and it'll handle all
6000 // the drain event emission and buffering.
6002 module.exports = Writable;
6005 var Buffer = require('buffer').Buffer;
6008 Writable.WritableState = WritableState;
6012 var util = require('core-util-is');
6013 util.inherits = require('inherits');
6016 var Stream = require('stream');
6018 util.inherits(Writable, Stream);
6020 function WriteReq(chunk, encoding, cb) {
6022 this.encoding = encoding;
6026 function WritableState(options, stream) {
6027 var Duplex = require('./_stream_duplex');
6029 options = options || {};
6031 // the point at which write() starts returning false
6032 // Note:
0 is a valid value, means that we always return false if
6033 // the entire buffer is not flushed immediately on write()
6034 var hwm = options.highWaterMark;
6035 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
6036 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
6038 // object stream flag to indicate whether or not this stream
6039 // contains buffers or objects.
6040 this.objectMode = !!options.objectMode;
6042 if (stream instanceof Duplex)
6043 this.objectMode = this.objectMode || !!options.writableObjectMode;
6046 this.highWaterMark = ~~this.highWaterMark;
6048 this.needDrain = false;
6049 // at the start of calling end()
6050 this.ending = false;
6051 // when end() has been called, and returned
6053 // when 'finish' is emitted
6054 this.finished = false;
6056 // should we decode strings into buffers before passing to _write?
6057 // this is here so that some node-core streams can optimize string
6058 // handling at a lower level.
6059 var noDecode = options.decodeStrings === false;
6060 this.decodeStrings = !noDecode;
6062 // Crypto is kind of old and crusty. Historically, its default string
6063 // encoding is 'binary' so we have to make this configurable.
6064 // Everything else in the universe uses 'utf8', though.
6065 this.defaultEncoding = options.defaultEncoding || 'utf8';
6067 // not an actual buffer we keep track of, but a measurement
6068 // of how much we're waiting to get pushed to some underlying
6072 // a flag to see when we're in the middle of a write.
6073 this.writing = false;
6075 // when true all writes will be buffered until .uncork() call
6078 // a flag to be able to tell if the onwrite cb is called immediately,
6079 // or on a later tick. We set this to true at first, because any
6080 // actions that shouldn't happen until "later" should generally also
6081 // not happen before the first write call.
6084 // a flag to know if we're processing previously buffered items, which
6085 // may call the _write() callback in the same tick, so that we don't
6086 // end up in an overlapped onwrite situation.
6087 this.bufferProcessing = false;
6089 // the callback that's passed to _write(chunk,cb)
6090 this.onwrite = function(er) {
6091 onwrite(stream, er);
6094 // the callback that the user supplies to write(chunk,encoding,cb)
6095 this.writecb = null;
6097 // the amount that is being written when _write is called.
6102 // number of pending user-supplied write callbacks
6103 // this must be
0 before 'finish' can be emitted
6106 // emit prefinish if the only thing we're waiting for is _write cbs
6107 // This is relevant for synchronous Transform streams
6108 this.prefinished = false;
6110 // True if the error was already emitted and should not be thrown again
6111 this.errorEmitted = false;
6114 function Writable(options) {
6115 var Duplex = require('./_stream_duplex');
6117 // Writable ctor is applied to Duplexes, though they're not
6118 // instanceof Writable, they're instanceof Readable.
6119 if (!(this instanceof Writable) && !(this instanceof Duplex))
6120 return new Writable(options);
6122 this._writableState = new WritableState(options, this);
6125 this.writable = true;
6130 // Otherwise people can pipe Writable streams, which is just wrong.
6131 Writable.prototype.pipe = function() {
6132 this.emit('error', new Error('Cannot pipe. Not readable.'));
6136 function writeAfterEnd(stream, state, cb) {
6137 var er = new Error('write after end');
6138 // TODO: defer error events consistently everywhere, not just the cb
6139 stream.emit('error', er);
6140 process.nextTick(function() {
6145 // If we get something that is not a buffer, string, null, or undefined,
6146 // and we're not in objectMode, then that's an error.
6147 // Otherwise stream chunks are all considered to be of length=
1, and the
6148 // watermarks determine how many objects to keep in the buffer, rather than
6149 // how many bytes or characters.
6150 function validChunk(stream, state, chunk, cb) {
6152 if (!util.isBuffer(chunk) &&
6153 !util.isString(chunk) &&
6154 !util.isNullOrUndefined(chunk) &&
6155 !state.objectMode) {
6156 var er = new TypeError('Invalid non-string/buffer chunk');
6157 stream.emit('error', er);
6158 process.nextTick(function() {
6166 Writable.prototype.write = function(chunk, encoding, cb) {
6167 var state = this._writableState;
6170 if (util.isFunction(encoding)) {
6175 if (util.isBuffer(chunk))
6176 encoding = 'buffer';
6178 encoding = state.defaultEncoding;
6180 if (!util.isFunction(cb))
6184 writeAfterEnd(this, state, cb);
6185 else if (validChunk(this, state, chunk, cb)) {
6187 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6193 Writable.prototype.cork = function() {
6194 var state = this._writableState;
6199 Writable.prototype.uncork = function() {
6200 var state = this._writableState;
6205 if (!state.writing &&
6208 !state.bufferProcessing &&
6209 state.buffer.length)
6210 clearBuffer(this, state);
6214 function decodeChunk(state, chunk, encoding) {
6215 if (!state.objectMode &&
6216 state.decodeStrings !== false &&
6217 util.isString(chunk)) {
6218 chunk = new Buffer(chunk, encoding);
6223 // if we're already writing something, then just put this
6224 // in the queue, and wait our turn. Otherwise, call _write
6225 // If we return false, then we need a drain event, so set that flag.
6226 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6227 chunk = decodeChunk(state, chunk, encoding);
6228 if (util.isBuffer(chunk))
6229 encoding = 'buffer';
6230 var len = state.objectMode ?
1 : chunk.length;
6232 state.length += len;
6234 var ret = state.length < state.highWaterMark;
6235 // we must ensure that previous needDrain will not be reset to false.
6237 state.needDrain = true;
6239 if (state.writing || state.corked)
6240 state.buffer.push(new WriteReq(chunk, encoding, cb));
6242 doWrite(stream, state, false, len, chunk, encoding, cb);
6247 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6248 state.writelen = len;
6250 state.writing = true;
6253 stream._writev(chunk, state.onwrite);
6255 stream._write(chunk, encoding, state.onwrite);
6259 function onwriteError(stream, state, sync, er, cb) {
6261 process.nextTick(function() {
6270 stream._writableState.errorEmitted = true;
6271 stream.emit('error', er);
6274 function onwriteStateUpdate(state) {
6275 state.writing = false;
6276 state.writecb = null;
6277 state.length -= state.writelen;
6281 function onwrite(stream, er) {
6282 var state = stream._writableState;
6283 var sync = state.sync;
6284 var cb = state.writecb;
6286 onwriteStateUpdate(state);
6289 onwriteError(stream, state, sync, er, cb);
6291 // Check if we're actually ready to finish, but don't emit yet
6292 var finished = needFinish(stream, state);
6296 !state.bufferProcessing &&
6297 state.buffer.length) {
6298 clearBuffer(stream, state);
6302 process.nextTick(function() {
6303 afterWrite(stream, state, finished, cb);
6306 afterWrite(stream, state, finished, cb);
6311 function afterWrite(stream, state, finished, cb) {
6313 onwriteDrain(stream, state);
6316 finishMaybe(stream, state);
6319 // Must force callback to be called on nextTick, so that we don't
6320 // emit 'drain' before the write() consumer gets the 'false' return
6321 // value, and has a chance to attach a 'drain' listener.
6322 function onwriteDrain(stream, state) {
6323 if (state.length ===
0 && state.needDrain) {
6324 state.needDrain = false;
6325 stream.emit('drain');
6330 // if there's something in the buffer waiting, then process it
6331 function clearBuffer(stream, state) {
6332 state.bufferProcessing = true;
6334 if (stream._writev && state.buffer.length
> 1) {
6335 // Fast case, write everything using _writev()
6337 for (var c =
0; c < state.buffer.length; c++)
6338 cbs.push(state.buffer[c].callback);
6340 // count the one we are adding, as well.
6341 // TODO(isaacs) clean this up
6343 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6344 for (var i =
0; i < cbs.length; i++) {
6353 // Slow case, write chunks one-by-one
6354 for (var c =
0; c < state.buffer.length; c++) {
6355 var entry = state.buffer[c];
6356 var chunk = entry.chunk;
6357 var encoding = entry.encoding;
6358 var cb = entry.callback;
6359 var len = state.objectMode ?
1 : chunk.length;
6361 doWrite(stream, state, false, len, chunk, encoding, cb);
6363 // if we didn't call the onwrite immediately, then
6364 // it means that we need to wait until it does.
6365 // also, that means that the chunk and cb are currently
6366 // being processed, so move the buffer counter past them.
6367 if (state.writing) {
6373 if (c < state.buffer.length)
6374 state.buffer = state.buffer.slice(c);
6376 state.buffer.length =
0;
6379 state.bufferProcessing = false;
6382 Writable.prototype._write = function(chunk, encoding, cb) {
6383 cb(new Error('not implemented'));
6387 Writable.prototype._writev = null;
6389 Writable.prototype.end = function(chunk, encoding, cb) {
6390 var state = this._writableState;
6392 if (util.isFunction(chunk)) {
6396 } else if (util.isFunction(encoding)) {
6401 if (!util.isNullOrUndefined(chunk))
6402 this.write(chunk, encoding);
6404 // .end() fully uncorks
6410 // ignore unnecessary end() calls.
6411 if (!state.ending && !state.finished)
6412 endWritable(this, state, cb);
6416 function needFinish(stream, state) {
6417 return (state.ending &&
6418 state.length ===
0 &&
6423 function prefinish(stream, state) {
6424 if (!state.prefinished) {
6425 state.prefinished = true;
6426 stream.emit('prefinish');
6430 function finishMaybe(stream, state) {
6431 var need = needFinish(stream, state);
6433 if (state.pendingcb ===
0) {
6434 prefinish(stream, state);
6435 state.finished = true;
6436 stream.emit('finish');
6438 prefinish(stream, state);
6443 function endWritable(stream, state, cb) {
6444 state.ending = true;
6445 finishMaybe(stream, state);
6448 process.nextTick(cb);
6450 stream.once('finish', cb);
6455 }).call(this,require('_process'))
6456 },{
"./_stream_duplex":
16,
"_process":
14,
"buffer":
7,
"core-util-is":
21,
"inherits":
12,
"stream":
26}],
21:[function(require,module,exports){
6458 // Copyright Joyent, Inc. and other Node contributors.
6460 // Permission is hereby granted, free of charge, to any person obtaining a
6461 // copy of this software and associated documentation files (the
6462 //
"Software"), to deal in the Software without restriction, including
6463 // without limitation the rights to use, copy, modify, merge, publish,
6464 // distribute, sublicense, and/or sell copies of the Software, and to permit
6465 // persons to whom the Software is furnished to do so, subject to the
6466 // following conditions:
6468 // The above copyright notice and this permission notice shall be included
6469 // in all copies or substantial portions of the Software.
6471 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6472 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6473 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6474 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6475 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6476 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6477 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6479 // NOTE: These type checking functions intentionally don't use `instanceof`
6480 // because it is fragile and can be easily faked with `Object.create()`.
6481 function isArray(ar) {
6482 return Array.isArray(ar);
6484 exports.isArray = isArray;
6486 function isBoolean(arg) {
6487 return typeof arg === 'boolean';
6489 exports.isBoolean = isBoolean;
6491 function isNull(arg) {
6492 return arg === null;
6494 exports.isNull = isNull;
6496 function isNullOrUndefined(arg) {
6499 exports.isNullOrUndefined = isNullOrUndefined;
6501 function isNumber(arg) {
6502 return typeof arg === 'number';
6504 exports.isNumber = isNumber;
6506 function isString(arg) {
6507 return typeof arg === 'string';
6509 exports.isString = isString;
6511 function isSymbol(arg) {
6512 return typeof arg === 'symbol';
6514 exports.isSymbol = isSymbol;
6516 function isUndefined(arg) {
6517 return arg === void
0;
6519 exports.isUndefined = isUndefined;
6521 function isRegExp(re) {
6522 return isObject(re) && objectToString(re) === '[object RegExp]';
6524 exports.isRegExp = isRegExp;
6526 function isObject(arg) {
6527 return typeof arg === 'object' && arg !== null;
6529 exports.isObject = isObject;
6531 function isDate(d) {
6532 return isObject(d) && objectToString(d) === '[object Date]';
6534 exports.isDate = isDate;
6536 function isError(e) {
6537 return isObject(e) &&
6538 (objectToString(e) === '[object Error]' || e instanceof Error);
6540 exports.isError = isError;
6542 function isFunction(arg) {
6543 return typeof arg === 'function';
6545 exports.isFunction = isFunction;
6547 function isPrimitive(arg) {
6548 return arg === null ||
6549 typeof arg === 'boolean' ||
6550 typeof arg === 'number' ||
6551 typeof arg === 'string' ||
6552 typeof arg === 'symbol' || // ES6 symbol
6553 typeof arg === 'undefined';
6555 exports.isPrimitive = isPrimitive;
6557 function isBuffer(arg) {
6558 return Buffer.isBuffer(arg);
6560 exports.isBuffer = isBuffer;
6562 function objectToString(o) {
6563 return Object.prototype.toString.call(o);
6565 }).call(this,require(
"buffer").Buffer)
6566 },{
"buffer":
7}],
22:[function(require,module,exports){
6567 module.exports = require(
"./lib/_stream_passthrough.js")
6569 },{
"./lib/_stream_passthrough.js":
17}],
23:[function(require,module,exports){
6570 exports = module.exports = require('./lib/_stream_readable.js');
6571 exports.Stream = require('stream');
6572 exports.Readable = exports;
6573 exports.Writable = require('./lib/_stream_writable.js');
6574 exports.Duplex = require('./lib/_stream_duplex.js');
6575 exports.Transform = require('./lib/_stream_transform.js');
6576 exports.PassThrough = require('./lib/_stream_passthrough.js');
6578 },{
"./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){
6579 module.exports = require(
"./lib/_stream_transform.js")
6581 },{
"./lib/_stream_transform.js":
19}],
25:[function(require,module,exports){
6582 module.exports = require(
"./lib/_stream_writable.js")
6584 },{
"./lib/_stream_writable.js":
20}],
26:[function(require,module,exports){
6585 // Copyright Joyent, Inc. and other Node contributors.
6587 // Permission is hereby granted, free of charge, to any person obtaining a
6588 // copy of this software and associated documentation files (the
6589 //
"Software"), to deal in the Software without restriction, including
6590 // without limitation the rights to use, copy, modify, merge, publish,
6591 // distribute, sublicense, and/or sell copies of the Software, and to permit
6592 // persons to whom the Software is furnished to do so, subject to the
6593 // following conditions:
6595 // The above copyright notice and this permission notice shall be included
6596 // in all copies or substantial portions of the Software.
6598 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6599 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6600 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6601 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6602 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6603 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6604 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6606 module.exports = Stream;
6608 var EE = require('events').EventEmitter;
6609 var inherits = require('inherits');
6611 inherits(Stream, EE);
6612 Stream.Readable = require('readable-stream/readable.js');
6613 Stream.Writable = require('readable-stream/writable.js');
6614 Stream.Duplex = require('readable-stream/duplex.js');
6615 Stream.Transform = require('readable-stream/transform.js');
6616 Stream.PassThrough = require('readable-stream/passthrough.js');
6618 // Backwards-compat with node
0.4.x
6619 Stream.Stream = Stream;
6623 // old-style streams. Note that the pipe method (the only relevant
6624 // part of this class) is overridden in the Readable class.
6630 Stream.prototype.pipe = function(dest, options) {
6633 function ondata(chunk) {
6634 if (dest.writable) {
6635 if (false === dest.write(chunk) && source.pause) {
6641 source.on('data', ondata);
6643 function ondrain() {
6644 if (source.readable && source.resume) {
6649 dest.on('drain', ondrain);
6651 // If the 'end' option is not supplied, dest.end() will be called when
6652 // source gets the 'end' or 'close' events. Only dest.end() once.
6653 if (!dest._isStdio && (!options || options.end !== false)) {
6654 source.on('end', onend);
6655 source.on('close', onclose);
6658 var didOnEnd = false;
6660 if (didOnEnd) return;
6667 function onclose() {
6668 if (didOnEnd) return;
6671 if (typeof dest.destroy === 'function') dest.destroy();
6674 // don't leave dangling pipes when there are errors.
6675 function onerror(er) {
6677 if (EE.listenerCount(this, 'error') ===
0) {
6678 throw er; // Unhandled stream error in pipe.
6682 source.on('error', onerror);
6683 dest.on('error', onerror);
6685 // remove all the event listeners that were added.
6686 function cleanup() {
6687 source.removeListener('data', ondata);
6688 dest.removeListener('drain', ondrain);
6690 source.removeListener('end', onend);
6691 source.removeListener('close', onclose);
6693 source.removeListener('error', onerror);
6694 dest.removeListener('error', onerror);
6696 source.removeListener('end', cleanup);
6697 source.removeListener('close', cleanup);
6699 dest.removeListener('close', cleanup);
6702 source.on('end', cleanup);
6703 source.on('close', cleanup);
6705 dest.on('close', cleanup);
6707 dest.emit('pipe', source);
6709 // Allow for unix-like usage: A.pipe(B).pipe(C)
6713 },{
"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){
6714 // Copyright Joyent, Inc. and other Node contributors.
6716 // Permission is hereby granted, free of charge, to any person obtaining a
6717 // copy of this software and associated documentation files (the
6718 //
"Software"), to deal in the Software without restriction, including
6719 // without limitation the rights to use, copy, modify, merge, publish,
6720 // distribute, sublicense, and/or sell copies of the Software, and to permit
6721 // persons to whom the Software is furnished to do so, subject to the
6722 // following conditions:
6724 // The above copyright notice and this permission notice shall be included
6725 // in all copies or substantial portions of the Software.
6727 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6728 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6729 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6730 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6731 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6732 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6733 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6735 var Buffer = require('buffer').Buffer;
6737 var isBufferEncoding = Buffer.isEncoding
6738 || function(encoding) {
6739 switch (encoding && encoding.toLowerCase()) {
6740 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;
6741 default: return false;
6746 function assertEncoding(encoding) {
6747 if (encoding && !isBufferEncoding(encoding)) {
6748 throw new Error('Unknown encoding: ' + encoding);
6752 // StringDecoder provides an interface for efficiently splitting a series of
6753 // buffers into a series of JS strings without breaking apart multi-byte
6754 // characters. CESU-
8 is handled as part of the UTF-
8 encoding.
6756 // @TODO Handling all encodings inside a single object makes it very difficult
6757 // to reason about this code, so it should be split up in the future.
6758 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-
8 code
6759 // points as used by CESU-
8.
6760 var StringDecoder = exports.StringDecoder = function(encoding) {
6761 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6762 assertEncoding(encoding);
6763 switch (this.encoding) {
6765 // CESU-
8 represents each of Surrogate Pair by
3-bytes
6766 this.surrogateSize =
3;
6770 // UTF-
16 represents each of Surrogate Pair by
2-bytes
6771 this.surrogateSize =
2;
6772 this.detectIncompleteChar = utf16DetectIncompleteChar;
6775 // Base-
64 stores
3 bytes in
4 chars, and pads the remainder.
6776 this.surrogateSize =
3;
6777 this.detectIncompleteChar = base64DetectIncompleteChar;
6780 this.write = passThroughWrite;
6784 // Enough space to store all bytes of a single character. UTF-
8 needs
4
6785 // bytes, but CESU-
8 may require up to
6 (
3 bytes per surrogate).
6786 this.charBuffer = new Buffer(
6);
6787 // Number of bytes received for the current incomplete multi-byte character.
6788 this.charReceived =
0;
6789 // Number of bytes expected for the current incomplete multi-byte character.
6790 this.charLength =
0;
6794 // write decodes the given buffer and returns it as JS string that is
6795 // guaranteed to not contain any partial multi-byte characters. Any partial
6796 // character found at the end of the buffer is buffered up, and will be
6797 // returned when calling write again with the remaining bytes.
6799 // Note: Converting a Buffer containing an orphan surrogate to a String
6800 // currently works, but converting a String to a Buffer (via `new Buffer`, or
6801 // Buffer#write) will replace incomplete surrogates with the unicode
6802 // replacement character. See https://codereview.chromium.org/
121173009/ .
6803 StringDecoder.prototype.write = function(buffer) {
6805 // if our last write ended with an incomplete multibyte character
6806 while (this.charLength) {
6807 // determine how many remaining bytes this buffer has to offer for this char
6808 var available = (buffer.length
>= this.charLength - this.charReceived) ?
6809 this.charLength - this.charReceived :
6812 // add the new bytes to the char buffer
6813 buffer.copy(this.charBuffer, this.charReceived,
0, available);
6814 this.charReceived += available;
6816 if (this.charReceived < this.charLength) {
6817 // still not enough chars in this buffer? wait for more ...
6821 // remove bytes belonging to the current character from the buffer
6822 buffer = buffer.slice(available, buffer.length);
6824 // get the character that was split
6825 charStr = this.charBuffer.slice(
0, this.charLength).toString(this.encoding);
6827 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
6828 var charCode = charStr.charCodeAt(charStr.length -
1);
6829 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
6830 this.charLength += this.surrogateSize;
6834 this.charReceived = this.charLength =
0;
6836 // if there are no more bytes in this buffer, just emit our char
6837 if (buffer.length ===
0) {
6843 // determine and set charLength / charReceived
6844 this.detectIncompleteChar(buffer);
6846 var end = buffer.length;
6847 if (this.charLength) {
6848 // buffer the incomplete character bytes we got
6849 buffer.copy(this.charBuffer,
0, buffer.length - this.charReceived, end);
6850 end -= this.charReceived;
6853 charStr += buffer.toString(this.encoding,
0, end);
6855 var end = charStr.length -
1;
6856 var charCode = charStr.charCodeAt(end);
6857 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
6858 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
6859 var size = this.surrogateSize;
6860 this.charLength += size;
6861 this.charReceived += size;
6862 this.charBuffer.copy(this.charBuffer, size,
0, size);
6863 buffer.copy(this.charBuffer,
0,
0, size);
6864 return charStr.substring(
0, end);
6867 // or just emit the charStr
6871 // detectIncompleteChar determines if there is an incomplete UTF-
8 character at
6872 // the end of the given buffer. If so, it sets this.charLength to the byte
6873 // length that character, and sets this.charReceived to the number of bytes
6874 // that are available for this character.
6875 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
6876 // determine how many bytes we have to check at the end of this buffer
6877 var i = (buffer.length
>=
3) ?
3 : buffer.length;
6879 // Figure out if one of the last i bytes of our buffer announces an
6881 for (; i
> 0; i--) {
6882 var c = buffer[buffer.length - i];
6884 // See http://en.wikipedia.org/wiki/UTF-
8#Description
6887 if (i ==
1 && c
>> 5 ==
0x06) {
6888 this.charLength =
2;
6893 if (i <=
2 && c
>> 4 ==
0x0E) {
6894 this.charLength =
3;
6899 if (i <=
3 && c
>> 3 ==
0x1E) {
6900 this.charLength =
4;
6904 this.charReceived = i;
6907 StringDecoder.prototype.end = function(buffer) {
6909 if (buffer && buffer.length)
6910 res = this.write(buffer);
6912 if (this.charReceived) {
6913 var cr = this.charReceived;
6914 var buf = this.charBuffer;
6915 var enc = this.encoding;
6916 res += buf.slice(
0, cr).toString(enc);
6922 function passThroughWrite(buffer) {
6923 return buffer.toString(this.encoding);
6926 function utf16DetectIncompleteChar(buffer) {
6927 this.charReceived = buffer.length %
2;
6928 this.charLength = this.charReceived ?
2 :
0;
6931 function base64DetectIncompleteChar(buffer) {
6932 this.charReceived = buffer.length %
3;
6933 this.charLength = this.charReceived ?
3 :
0;
6936 },{
"buffer":
7}],
28:[function(require,module,exports){
6937 module.exports = function isBuffer(arg) {
6938 return arg && typeof arg === 'object'
6939 && typeof arg.copy === 'function'
6940 && typeof arg.fill === 'function'
6941 && typeof arg.readUInt8 === 'function';
6943 },{}],
29:[function(require,module,exports){
6944 (function (process,global){
6945 // Copyright Joyent, Inc. and other Node contributors.
6947 // Permission is hereby granted, free of charge, to any person obtaining a
6948 // copy of this software and associated documentation files (the
6949 //
"Software"), to deal in the Software without restriction, including
6950 // without limitation the rights to use, copy, modify, merge, publish,
6951 // distribute, sublicense, and/or sell copies of the Software, and to permit
6952 // persons to whom the Software is furnished to do so, subject to the
6953 // following conditions:
6955 // The above copyright notice and this permission notice shall be included
6956 // in all copies or substantial portions of the Software.
6958 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6959 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6960 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6961 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6962 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6963 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6964 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6966 var formatRegExp = /%[sdj%]/g;
6967 exports.format = function(f) {
6970 for (var i =
0; i < arguments.length; i++) {
6971 objects.push(inspect(arguments[i]));
6973 return objects.join(' ');
6977 var args = arguments;
6978 var len = args.length;
6979 var str = String(f).replace(formatRegExp, function(x) {
6980 if (x === '%%') return '%';
6981 if (i
>= len) return x;
6983 case '%s': return String(args[i++]);
6984 case '%d': return Number(args[i++]);
6987 return JSON.stringify(args[i++]);
6989 return '[Circular]';
6995 for (var x = args[i]; i < len; x = args[++i]) {
6996 if (isNull(x) || !isObject(x)) {
6999 str += ' ' + inspect(x);
7006 // Mark that a method should not be used.
7007 // Returns a modified function which warns once by default.
7008 // If --no-deprecation is set, then it is a no-op.
7009 exports.deprecate = function(fn, msg) {
7010 // Allow for deprecating things in the process of starting up.
7011 if (isUndefined(global.process)) {
7013 return exports.deprecate(fn, msg).apply(this, arguments);
7017 if (process.noDeprecation === true) {
7022 function deprecated() {
7024 if (process.throwDeprecation) {
7025 throw new Error(msg);
7026 } else if (process.traceDeprecation) {
7033 return fn.apply(this, arguments);
7042 exports.debuglog = function(set) {
7043 if (isUndefined(debugEnviron))
7044 debugEnviron = process.env.NODE_DEBUG || '';
7045 set = set.toUpperCase();
7047 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7048 var pid = process.pid;
7049 debugs[set] = function() {
7050 var msg = exports.format.apply(exports, arguments);
7051 console.error('%s %d: %s', set, pid, msg);
7054 debugs[set] = function() {};
7062 * Echos the value of a value. Trys to print the value out
7063 * in the best way possible given the different types.
7065 * @param {Object} obj The object to print out.
7066 * @param {Object} opts Optional options object that alters the output.
7068 /* legacy: obj, showHidden, depth, colors*/
7069 function inspect(obj, opts) {
7073 stylize: stylizeNoColor
7076 if (arguments.length
>=
3) ctx.depth = arguments[
2];
7077 if (arguments.length
>=
4) ctx.colors = arguments[
3];
7078 if (isBoolean(opts)) {
7080 ctx.showHidden = opts;
7082 // got an "options" object
7083 exports._extend(ctx, opts);
7085 // set default options
7086 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7087 if (isUndefined(ctx.depth)) ctx.depth =
2;
7088 if (isUndefined(ctx.colors)) ctx.colors = false;
7089 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7090 if (ctx.colors) ctx.stylize = stylizeWithColor;
7091 return formatValue(ctx, obj, ctx.depth);
7093 exports.inspect = inspect;
7096 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7100 'underline' : [
4,
24],
7101 'inverse' : [
7,
27],
7108 'magenta' : [
35,
39],
7113 // Don't use 'blue' not visible on cmd.exe
7117 'boolean': 'yellow',
7118 'undefined': 'grey',
7122 // "name": intentionally not styling
7127 function stylizeWithColor(str, styleType) {
7128 var style = inspect.styles[styleType];
7131 return '\u001b[' + inspect.colors[style][
0] + 'm' + str +
7132 '\u001b[' + inspect.colors[style][
1] + 'm';
7139 function stylizeNoColor(str, styleType) {
7144 function arrayToHash(array) {
7147 array.forEach(function(val, idx) {
7155 function formatValue(ctx, value, recurseTimes) {
7156 // Provide a hook for user-specified inspect functions.
7157 // Check that value is an object with an inspect function on it
7158 if (ctx.customInspect &&
7160 isFunction(value.inspect) &&
7161 // Filter out the util module, it's inspect function is special
7162 value.inspect !== exports.inspect &&
7163 // Also filter out any prototype objects using the circular check.
7164 !(value.constructor && value.constructor.prototype === value)) {
7165 var ret = value.inspect(recurseTimes, ctx);
7166 if (!isString(ret)) {
7167 ret = formatValue(ctx, ret, recurseTimes);
7172 // Primitive types cannot have properties
7173 var primitive = formatPrimitive(ctx, value);
7178 // Look up the keys of the object.
7179 var keys = Object.keys(value);
7180 var visibleKeys = arrayToHash(keys);
7182 if (ctx.showHidden) {
7183 keys = Object.getOwnPropertyNames(value);
7186 // IE doesn't make error fields non-enumerable
7187 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs
.94).aspx
7189 && (keys.indexOf('message')
>=
0 || keys.indexOf('description')
>=
0)) {
7190 return formatError(value);
7193 // Some type of object without properties can be shortcutted.
7194 if (keys.length ===
0) {
7195 if (isFunction(value)) {
7196 var name = value.name ? ': ' + value.name : '';
7197 return ctx.stylize('[Function' + name + ']', 'special');
7199 if (isRegExp(value)) {
7200 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7202 if (isDate(value)) {
7203 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7205 if (isError(value)) {
7206 return formatError(value);
7210 var base = '', array = false, braces = ['{', '}'];
7212 // Make Array say that they are Array
7213 if (isArray(value)) {
7215 braces = ['[', ']'];
7218 // Make functions say that they are functions
7219 if (isFunction(value)) {
7220 var n = value.name ? ': ' + value.name : '';
7221 base = ' [Function' + n + ']';
7224 // Make RegExps say that they are RegExps
7225 if (isRegExp(value)) {
7226 base = ' ' + RegExp.prototype.toString.call(value);
7229 // Make dates with properties first say the date
7230 if (isDate(value)) {
7231 base = ' ' + Date.prototype.toUTCString.call(value);
7234 // Make error with message first say the error
7235 if (isError(value)) {
7236 base = ' ' + formatError(value);
7239 if (keys.length ===
0 && (!array || value.length ==
0)) {
7240 return braces[
0] + base + braces[
1];
7243 if (recurseTimes <
0) {
7244 if (isRegExp(value)) {
7245 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7247 return ctx.stylize('[Object]', 'special');
7251 ctx.seen.push(value);
7255 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7257 output = keys.map(function(key) {
7258 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7264 return reduceToSingleString(output, base, braces);
7268 function formatPrimitive(ctx, value) {
7269 if (isUndefined(value))
7270 return ctx.stylize('undefined', 'undefined');
7271 if (isString(value)) {
7272 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7273 .replace(/'/g, "\\'")
7274 .replace(/\\"/g, '"') + '\'';
7275 return ctx.stylize(simple, 'string');
7277 if (isNumber(value))
7278 return ctx.stylize('' + value, 'number');
7279 if (isBoolean(value))
7280 return ctx.stylize('' + value, 'boolean');
7281 // For some reason typeof null is "object", so special case here.
7283 return ctx.stylize('null', 'null');
7287 function formatError(value) {
7288 return '[' + Error.prototype.toString.call(value) + ']';
7292 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7294 for (var i =
0, l = value.length; i < l; ++i) {
7295 if (hasOwnProperty(value, String(i))) {
7296 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7302 keys.forEach(function(key) {
7303 if (!key.match(/^\d+$/)) {
7304 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7312 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7313 var name, str, desc;
7314 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7317 str = ctx.stylize('[Getter/Setter]', 'special');
7319 str = ctx.stylize('[Getter]', 'special');
7323 str = ctx.stylize('[Setter]', 'special');
7326 if (!hasOwnProperty(visibleKeys, key)) {
7327 name = '[' + key + ']';
7330 if (ctx.seen.indexOf(desc.value) <
0) {
7331 if (isNull(recurseTimes)) {
7332 str = formatValue(ctx, desc.value, null);
7334 str = formatValue(ctx, desc.value, recurseTimes -
1);
7336 if (str.indexOf('\n')
> -
1) {
7338 str = str.split('\n').map(function(line) {
7340 }).join('\n').substr(
2);
7342 str = '\n' + str.split('\n').map(function(line) {
7348 str = ctx.stylize('[Circular]', 'special');
7351 if (isUndefined(name)) {
7352 if (array && key.match(/^\d+$/)) {
7355 name = JSON.stringify('' + key);
7356 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-
9]*)"$/)) {
7357 name = name.substr(
1, name.length -
2);
7358 name = ctx.stylize(name, 'name');
7360 name = name.replace(/'/g, "\\'")
7361 .replace(/\\"/g, '"')
7362 .replace(/(^"|"$)/g, "'");
7363 name = ctx.stylize(name, 'string');
7367 return name + ': ' + str;
7371 function reduceToSingleString(output, base, braces) {
7372 var numLinesEst =
0;
7373 var length = output.reduce(function(prev, cur) {
7375 if (cur.indexOf('\n')
>=
0) numLinesEst++;
7376 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length +
1;
7381 (base === '' ? '' : base + '\n ') +
7383 output.join(',\n ') +
7388 return braces[
0] + base + ' ' + output.join(', ') + ' ' + braces[
1];
7392 // NOTE: These type checking functions intentionally don't use `instanceof`
7393 // because it is fragile and can be easily faked with `Object.create()`.
7394 function isArray(ar) {
7395 return Array.isArray(ar);
7397 exports.isArray = isArray;
7399 function isBoolean(arg) {
7400 return typeof arg === 'boolean';
7402 exports.isBoolean = isBoolean;
7404 function isNull(arg) {
7405 return arg === null;
7407 exports.isNull = isNull;
7409 function isNullOrUndefined(arg) {
7412 exports.isNullOrUndefined = isNullOrUndefined;
7414 function isNumber(arg) {
7415 return typeof arg === 'number';
7417 exports.isNumber = isNumber;
7419 function isString(arg) {
7420 return typeof arg === 'string';
7422 exports.isString = isString;
7424 function isSymbol(arg) {
7425 return typeof arg === 'symbol';
7427 exports.isSymbol = isSymbol;
7429 function isUndefined(arg) {
7430 return arg === void
0;
7432 exports.isUndefined = isUndefined;
7434 function isRegExp(re) {
7435 return isObject(re) && objectToString(re) === '[object RegExp]';
7437 exports.isRegExp = isRegExp;
7439 function isObject(arg) {
7440 return typeof arg === 'object' && arg !== null;
7442 exports.isObject = isObject;
7444 function isDate(d) {
7445 return isObject(d) && objectToString(d) === '[object Date]';
7447 exports.isDate = isDate;
7449 function isError(e) {
7450 return isObject(e) &&
7451 (objectToString(e) === '[object Error]' || e instanceof Error);
7453 exports.isError = isError;
7455 function isFunction(arg) {
7456 return typeof arg === 'function';
7458 exports.isFunction = isFunction;
7460 function isPrimitive(arg) {
7461 return arg === null ||
7462 typeof arg === 'boolean' ||
7463 typeof arg === 'number' ||
7464 typeof arg === 'string' ||
7465 typeof arg === 'symbol' || // ES6 symbol
7466 typeof arg === 'undefined';
7468 exports.isPrimitive = isPrimitive;
7470 exports.isBuffer = require('./support/isBuffer');
7472 function objectToString(o) {
7473 return Object.prototype.toString.call(o);
7478 return n <
10 ? '
0' + n.toString(
10) : n.toString(
10);
7482 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7483 'Oct', 'Nov', 'Dec'];
7486 function timestamp() {
7488 var time = [pad(d.getHours()),
7489 pad(d.getMinutes()),
7490 pad(d.getSeconds())].join(':');
7491 return [d.getDate(), months[d.getMonth()], time].join(' ');
7495 // log is just a thin wrapper to console.log that prepends a timestamp
7496 exports.log = function() {
7497 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7502 * Inherit the prototype methods from one constructor into another.
7504 * The Function.prototype.inherits from lang.js rewritten as a standalone
7505 * function (not on Function.prototype). NOTE: If this file is to be loaded
7506 * during bootstrapping this function needs to be rewritten using some native
7507 * functions as prototype setup using normal JavaScript does not work as
7508 * expected during bootstrapping (see mirror.js in r114903).
7510 * @param {function} ctor Constructor function which needs to inherit the
7512 * @param {function} superCtor Constructor function to inherit prototype from.
7514 exports.inherits = require('inherits');
7516 exports._extend = function(origin, add) {
7517 // Don't do anything if add isn't an object
7518 if (!add || !isObject(add)) return origin;
7520 var keys = Object.keys(add);
7521 var i = keys.length;
7523 origin[keys[i]] = add[keys[i]];
7528 function hasOwnProperty(obj, prop) {
7529 return Object.prototype.hasOwnProperty.call(obj, prop);
7532 }).call(this,require('_process'),typeof global !==
"undefined" ? global : typeof self !==
"undefined" ? self : typeof window !==
"undefined" ? window : {})
7533 },{
"./support/isBuffer":
28,
"_process":
14,
"inherits":
12}],
30:[function(require,module,exports){
7534 // Base58 encoding/decoding
7535 // Originally written by Mike Hearn for BitcoinJ
7536 // Copyright (c)
2011 Google Inc
7537 // Ported to JavaScript by Stefan Thomas
7538 // Merged Buffer refactorings from base58-native by Stephen Pair
7539 // Copyright (c)
2013 BitPay Inc
7541 var ALPHABET = '
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7542 var ALPHABET_MAP = {}
7543 for(var i =
0; i < ALPHABET.length; i++) {
7544 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7548 function encode(buffer) {
7549 if (buffer.length ===
0) return ''
7551 var i, j, digits = [
0]
7552 for (i =
0; i < buffer.length; i++) {
7553 for (j =
0; j < digits.length; j++) digits[j] <<=
8
7555 digits[
0] += buffer[i]
7558 for (j =
0; j < digits.length; ++j) {
7561 carry = (digits[j] / BASE) |
0
7566 digits.push(carry % BASE)
7568 carry = (carry / BASE) |
0
7572 // deal with leading zeros
7573 for (i =
0; buffer[i] ===
0 && i < buffer.length -
1; i++) digits.push(
0)
7575 // convert digits to a string
7576 var stringOutput =
""
7577 for (var i = digits.length -
1; i
>=
0; i--) {
7578 stringOutput = stringOutput + ALPHABET[digits[i]]
7583 function decode(string) {
7584 if (string.length ===
0) return []
7586 var i, j, bytes = [
0]
7587 for (i =
0; i < string.length; i++) {
7589 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7591 for (j =
0; j < bytes.length; j++) bytes[j] *= BASE
7592 bytes[
0] += ALPHABET_MAP[c]
7595 for (j =
0; j < bytes.length; ++j) {
7598 carry = bytes[j]
>> 8
7603 bytes.push(carry &
0xff)
7609 // deal with leading zeros
7610 for (i =
0; string[i] === '
1' && i < string.length -
1; i++) bytes.push(
0)
7612 return bytes.reverse()
7620 },{}],
31:[function(require,module,exports){
7624 var base58 = require('bs58')
7625 var createHash = require('create-hash')
7627 // SHA256(SHA256(buffer))
7628 function sha256x2 (buffer) {
7629 buffer = createHash('sha256').update(buffer).digest()
7630 return createHash('sha256').update(buffer).digest()
7633 // Encode a buffer as a base58-check encoded string
7634 function encode (payload) {
7635 var checksum = sha256x2(payload).slice(
0,
4)
7637 return base58.encode(Buffer.concat([
7643 // Decode a base58-check encoded string to a buffer
7644 function decode (string) {
7645 var buffer = new Buffer(base58.decode(string))
7647 var payload = buffer.slice(
0, -
4)
7648 var checksum = buffer.slice(-
4)
7649 var newChecksum = sha256x2(payload).slice(
0,
4)
7651 for (var i =
0; i < newChecksum.length; ++i) {
7652 if (newChecksum[i] === checksum[i]) continue
7654 throw new Error('Invalid checksum')
7665 }).call(this,require("buffer").Buffer)
7666 },{"bs58":
30,"buffer":
7,"create-hash":
32}],
32:[function(require,module,exports){
7669 var inherits = require('inherits')
7670 var md5 = require('./md5')
7671 var rmd160 = require('ripemd160')
7672 var sha = require('sha.js')
7674 var Transform = require('stream').Transform
7676 function HashNoConstructor(hash) {
7677 Transform.call(this)
7683 inherits(HashNoConstructor, Transform)
7685 HashNoConstructor.prototype._transform = function (data, _, next) {
7686 this.buffers.push(data)
7691 HashNoConstructor.prototype._flush = function (next) {
7692 this.push(this.digest())
7696 HashNoConstructor.prototype.update = function (data, enc) {
7697 if (typeof data === 'string') {
7698 data = new Buffer(data, enc)
7701 this.buffers.push(data)
7705 HashNoConstructor.prototype.digest = function (enc) {
7706 var buf = Buffer.concat(this.buffers)
7707 var r = this._hash(buf)
7710 return enc ? r.toString(enc) : r
7713 function Hash(hash) {
7714 Transform.call(this)
7719 inherits(Hash, Transform)
7721 Hash.prototype._transform = function (data, enc, next) {
7722 if (enc) data = new Buffer(data, enc)
7724 this._hash.update(data)
7729 Hash.prototype._flush = function (next) {
7730 this.push(this._hash.digest())
7736 Hash.prototype.update = function (data, enc) {
7737 if (typeof data === 'string') {
7738 data = new Buffer(data, enc)
7741 this._hash.update(data)
7745 Hash.prototype.digest = function (enc) {
7746 var outData = this._hash.digest()
7748 return enc ? outData.toString(enc) : outData
7751 module.exports = function createHash (alg) {
7752 if ('md5' === alg) return new HashNoConstructor(md5)
7753 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7755 return new Hash(sha(alg))
7758 }).call(this,require("buffer").Buffer)
7759 },{"./md5":
34,"buffer":
7,"inherits":
35,"ripemd160":
36,"sha.js":
38,"stream":
26}],
33:[function(require,module,exports){
7763 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(
0);
7766 function toArray(buf, bigEndian) {
7767 if ((buf.length % intSize) !==
0) {
7768 var len = buf.length + (intSize - (buf.length % intSize));
7769 buf = Buffer.concat([buf, zeroBuffer], len);
7773 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
7774 for (var i =
0; i < buf.length; i += intSize) {
7775 arr.push(fn.call(buf, i));
7780 function toBuffer(arr, size, bigEndian) {
7781 var buf = new Buffer(size);
7782 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
7783 for (var i =
0; i < arr.length; i++) {
7784 fn.call(buf, arr[i], i *
4, true);
7789 function hash(buf, fn, hashSize, bigEndian) {
7790 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
7791 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
7792 return toBuffer(arr, hashSize, bigEndian);
7794 exports.hash = hash;
7795 }).call(this,require("buffer").Buffer)
7796 },{"buffer":
7}],
34:[function(require,module,exports){
7799 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
7800 * Digest Algorithm, as defined in RFC
1321.
7801 * Version
2.1 Copyright (C) Paul Johnston
1999 -
2002.
7802 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
7803 * Distributed under the BSD License
7804 * See http://pajhome.org.uk/crypt/md5 for more info.
7807 var helpers = require('./helpers');
7810 * Calculate the MD5 of an array of little-endian words, and a bit length
7812 function core_md5(x, len)
7814 /* append padding */
7815 x[len
>> 5] |=
0x80 << ((len) %
32);
7816 x[(((len +
64)
>>> 9) <<
4) +
14] = len;
7820 var c = -
1732584194;
7823 for(var i =
0; i < x.length; i +=
16)
7830 a = md5_ff(a, b, c, d, x[i+
0],
7 , -
680876936);
7831 d = md5_ff(d, a, b, c, x[i+
1],
12, -
389564586);
7832 c = md5_ff(c, d, a, b, x[i+
2],
17,
606105819);
7833 b = md5_ff(b, c, d, a, x[i+
3],
22, -
1044525330);
7834 a = md5_ff(a, b, c, d, x[i+
4],
7 , -
176418897);
7835 d = md5_ff(d, a, b, c, x[i+
5],
12,
1200080426);
7836 c = md5_ff(c, d, a, b, x[i+
6],
17, -
1473231341);
7837 b = md5_ff(b, c, d, a, x[i+
7],
22, -
45705983);
7838 a = md5_ff(a, b, c, d, x[i+
8],
7 ,
1770035416);
7839 d = md5_ff(d, a, b, c, x[i+
9],
12, -
1958414417);
7840 c = md5_ff(c, d, a, b, x[i+
10],
17, -
42063);
7841 b = md5_ff(b, c, d, a, x[i+
11],
22, -
1990404162);
7842 a = md5_ff(a, b, c, d, x[i+
12],
7 ,
1804603682);
7843 d = md5_ff(d, a, b, c, x[i+
13],
12, -
40341101);
7844 c = md5_ff(c, d, a, b, x[i+
14],
17, -
1502002290);
7845 b = md5_ff(b, c, d, a, x[i+
15],
22,
1236535329);
7847 a = md5_gg(a, b, c, d, x[i+
1],
5 , -
165796510);
7848 d = md5_gg(d, a, b, c, x[i+
6],
9 , -
1069501632);
7849 c = md5_gg(c, d, a, b, x[i+
11],
14,
643717713);
7850 b = md5_gg(b, c, d, a, x[i+
0],
20, -
373897302);
7851 a = md5_gg(a, b, c, d, x[i+
5],
5 , -
701558691);
7852 d = md5_gg(d, a, b, c, x[i+
10],
9 ,
38016083);
7853 c = md5_gg(c, d, a, b, x[i+
15],
14, -
660478335);
7854 b = md5_gg(b, c, d, a, x[i+
4],
20, -
405537848);
7855 a = md5_gg(a, b, c, d, x[i+
9],
5 ,
568446438);
7856 d = md5_gg(d, a, b, c, x[i+
14],
9 , -
1019803690);
7857 c = md5_gg(c, d, a, b, x[i+
3],
14, -
187363961);
7858 b = md5_gg(b, c, d, a, x[i+
8],
20,
1163531501);
7859 a = md5_gg(a, b, c, d, x[i+
13],
5 , -
1444681467);
7860 d = md5_gg(d, a, b, c, x[i+
2],
9 , -
51403784);
7861 c = md5_gg(c, d, a, b, x[i+
7],
14,
1735328473);
7862 b = md5_gg(b, c, d, a, x[i+
12],
20, -
1926607734);
7864 a = md5_hh(a, b, c, d, x[i+
5],
4 , -
378558);
7865 d = md5_hh(d, a, b, c, x[i+
8],
11, -
2022574463);
7866 c = md5_hh(c, d, a, b, x[i+
11],
16,
1839030562);
7867 b = md5_hh(b, c, d, a, x[i+
14],
23, -
35309556);
7868 a = md5_hh(a, b, c, d, x[i+
1],
4 , -
1530992060);
7869 d = md5_hh(d, a, b, c, x[i+
4],
11,
1272893353);
7870 c = md5_hh(c, d, a, b, x[i+
7],
16, -
155497632);
7871 b = md5_hh(b, c, d, a, x[i+
10],
23, -
1094730640);
7872 a = md5_hh(a, b, c, d, x[i+
13],
4 ,
681279174);
7873 d = md5_hh(d, a, b, c, x[i+
0],
11, -
358537222);
7874 c = md5_hh(c, d, a, b, x[i+
3],
16, -
722521979);
7875 b = md5_hh(b, c, d, a, x[i+
6],
23,
76029189);
7876 a = md5_hh(a, b, c, d, x[i+
9],
4 , -
640364487);
7877 d = md5_hh(d, a, b, c, x[i+
12],
11, -
421815835);
7878 c = md5_hh(c, d, a, b, x[i+
15],
16,
530742520);
7879 b = md5_hh(b, c, d, a, x[i+
2],
23, -
995338651);
7881 a = md5_ii(a, b, c, d, x[i+
0],
6 , -
198630844);
7882 d = md5_ii(d, a, b, c, x[i+
7],
10,
1126891415);
7883 c = md5_ii(c, d, a, b, x[i+
14],
15, -
1416354905);
7884 b = md5_ii(b, c, d, a, x[i+
5],
21, -
57434055);
7885 a = md5_ii(a, b, c, d, x[i+
12],
6 ,
1700485571);
7886 d = md5_ii(d, a, b, c, x[i+
3],
10, -
1894986606);
7887 c = md5_ii(c, d, a, b, x[i+
10],
15, -
1051523);
7888 b = md5_ii(b, c, d, a, x[i+
1],
21, -
2054922799);
7889 a = md5_ii(a, b, c, d, x[i+
8],
6 ,
1873313359);
7890 d = md5_ii(d, a, b, c, x[i+
15],
10, -
30611744);
7891 c = md5_ii(c, d, a, b, x[i+
6],
15, -
1560198380);
7892 b = md5_ii(b, c, d, a, x[i+
13],
21,
1309151649);
7893 a = md5_ii(a, b, c, d, x[i+
4],
6 , -
145523070);
7894 d = md5_ii(d, a, b, c, x[i+
11],
10, -
1120210379);
7895 c = md5_ii(c, d, a, b, x[i+
2],
15,
718787259);
7896 b = md5_ii(b, c, d, a, x[i+
9],
21, -
343485551);
7898 a = safe_add(a, olda);
7899 b = safe_add(b, oldb);
7900 c = safe_add(c, oldc);
7901 d = safe_add(d, oldd);
7903 return Array(a, b, c, d);
7908 * These functions implement the four basic operations the algorithm uses.
7910 function md5_cmn(q, a, b, x, s, t)
7912 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
7914 function md5_ff(a, b, c, d, x, s, t)
7916 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
7918 function md5_gg(a, b, c, d, x, s, t)
7920 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
7922 function md5_hh(a, b, c, d, x, s, t)
7924 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
7926 function md5_ii(a, b, c, d, x, s, t)
7928 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
7932 * Add integers, wrapping at
2^
32. This uses
16-bit operations internally
7933 * to work around bugs in some JS interpreters.
7935 function safe_add(x, y)
7937 var lsw = (x &
0xFFFF) + (y &
0xFFFF);
7938 var msw = (x
>> 16) + (y
>> 16) + (lsw
>> 16);
7939 return (msw <<
16) | (lsw &
0xFFFF);
7943 * Bitwise rotate a
32-bit number to the left.
7945 function bit_rol(num, cnt)
7947 return (num << cnt) | (num
>>> (
32 - cnt));
7950 module.exports = function md5(buf) {
7951 return helpers.hash(buf, core_md5,
16);
7953 },{"./helpers":
33}],
35:[function(require,module,exports){
7954 arguments[
4][
12][
0].apply(exports,arguments)
7955 },{"dup":
12}],
36:[function(require,module,exports){
7959 code.google.com/p/crypto-js
7960 (c)
2009-
2013 by Jeff Mott. All rights reserved.
7961 code.google.com/p/crypto-js/wiki/License
7964 (c)
2012 by Cédric Mesnil. All rights reserved.
7966 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
7968 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7969 - 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.
7971 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.
7976 0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
7977 7,
4,
13,
1,
10,
6,
15,
3,
12,
0,
9,
5,
2,
14,
11,
8,
7978 3,
10,
14,
4,
9,
15,
8,
1,
2,
7,
0,
6,
13,
11,
5,
12,
7979 1,
9,
11,
10,
0,
8,
12,
4,
13,
3,
7,
15,
14,
5,
6,
2,
7980 4,
0,
5,
9,
7,
12,
2,
10,
14,
1,
3,
8,
11,
6,
15,
13
7984 5,
14,
7,
0,
9,
2,
11,
4,
13,
6,
15,
8,
1,
10,
3,
12,
7985 6,
11,
3,
7,
0,
13,
5,
10,
14,
15,
8,
12,
4,
9,
1,
2,
7986 15,
5,
1,
3,
7,
14,
6,
9,
11,
8,
12,
2,
10,
0,
4,
13,
7987 8,
6,
4,
1,
3,
11,
15,
0,
5,
12,
2,
13,
9,
7,
10,
14,
7988 12,
15,
10,
4,
1,
5,
8,
7,
6,
2,
13,
14,
0,
3,
9,
11
7992 11,
14,
15,
12,
5,
8,
7,
9,
11,
13,
14,
15,
6,
7,
9,
8,
7993 7,
6,
8,
13,
11,
9,
7,
15,
7,
12,
15,
9,
11,
7,
13,
12,
7994 11,
13,
6,
7,
14,
9,
13,
15,
14,
8,
13,
6,
5,
12,
7,
5,
7995 11,
12,
14,
15,
14,
15,
9,
8,
9,
14,
5,
6,
8,
6,
5,
12,
7996 9,
15,
5,
11,
6,
8,
13,
12,
5,
12,
13,
14,
11,
8,
5,
6
8000 8,
9,
9,
11,
13,
15,
15,
5,
7,
7,
8,
11,
14,
14,
12,
6,
8001 9,
13,
15,
7,
12,
8,
9,
11,
7,
7,
12,
7,
6,
15,
13,
11,
8002 9,
7,
15,
11,
8,
6,
6,
14,
12,
13,
5,
14,
13,
13,
7,
5,
8003 15,
5,
8,
11,
14,
14,
6,
14,
6,
9,
12,
9,
12,
5,
15,
8,
8004 8,
5,
12,
9,
12,
5,
14,
6,
8,
13,
6,
5,
15,
13,
11,
11
8007 var hl = [
0x00000000,
0x5A827999,
0x6ED9EBA1,
0x8F1BBCDC,
0xA953FD4E]
8008 var hr = [
0x50A28BE6,
0x5C4DD124,
0x6D703EF3,
0x7A6D76E9,
0x00000000]
8010 function bytesToWords (bytes) {
8012 for (var i =
0, b =
0; i < bytes.length; i++, b +=
8) {
8013 words[b
>>> 5] |= bytes[i] << (
24 - b %
32)
8018 function wordsToBytes (words) {
8020 for (var b =
0; b < words.length *
32; b +=
8) {
8021 bytes.push((words[b
>>> 5]
>>> (
24 - b %
32)) &
0xFF)
8026 function processBlock (H, M, offset) {
8028 for (var i =
0; i <
16; i++) {
8029 var offset_i = offset + i
8030 var M_offset_i = M[offset_i]
8034 (((M_offset_i <<
8) | (M_offset_i
>>> 24)) &
0x00ff00ff) |
8035 (((M_offset_i <<
24) | (M_offset_i
>>> 8)) &
0xff00ff00)
8039 // Working variables
8040 var al, bl, cl, dl, el
8041 var ar, br, cr, dr, er
8051 for (i =
0; i <
80; i +=
1) {
8052 t = (al + M[offset + zl[i]]) |
0
8054 t += f1(bl, cl, dl) + hl[
0]
8055 } else if (i <
32) {
8056 t += f2(bl, cl, dl) + hl[
1]
8057 } else if (i <
48) {
8058 t += f3(bl, cl, dl) + hl[
2]
8059 } else if (i <
64) {
8060 t += f4(bl, cl, dl) + hl[
3]
8061 } else {// if (i
<80) {
8062 t += f5(bl, cl, dl) + hl[
4]
8073 t = (ar + M[offset + zr[i]]) |
0
8075 t += f5(br, cr, dr) + hr[
0]
8076 } else if (i <
32) {
8077 t += f4(br, cr, dr) + hr[
1]
8078 } else if (i <
48) {
8079 t += f3(br, cr, dr) + hr[
2]
8080 } else if (i <
64) {
8081 t += f2(br, cr, dr) + hr[
3]
8082 } else {// if (i
<80) {
8083 t += f1(br, cr, dr) + hr[
4]
8096 // intermediate hash value
8097 t = (H[
1] + cl + dr) |
0
8098 H[
1] = (H[
2] + dl + er) |
0
8099 H[
2] = (H[
3] + el + ar) |
0
8100 H[
3] = (H[
4] + al + br) |
0
8101 H[
4] = (H[
0] + bl + cr) |
0
8105 function f1 (x, y, z) {
8106 return ((x) ^ (y) ^ (z))
8109 function f2 (x, y, z) {
8110 return (((x) & (y)) | ((~x) & (z)))
8113 function f3 (x, y, z) {
8114 return (((x) | (~(y))) ^ (z))
8117 function f4 (x, y, z) {
8118 return (((x) & (z)) | ((y) & (~(z))))
8121 function f5 (x, y, z) {
8122 return ((x) ^ ((y) | (~(z))))
8125 function rotl (x, n) {
8126 return (x << n) | (x
>>> (
32 - n))
8129 function ripemd160 (message) {
8130 var H = [
0x67452301,
0xEFCDAB89,
0x98BADCFE,
0x10325476,
0xC3D2E1F0]
8132 if (typeof message === 'string') {
8133 message = new Buffer(message, 'utf8')
8136 var m = bytesToWords(message)
8138 var nBitsLeft = message.length *
8
8139 var nBitsTotal = message.length *
8
8142 m[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32)
8143 m[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = (
8144 (((nBitsTotal <<
8) | (nBitsTotal
>>> 24)) &
0x00ff00ff) |
8145 (((nBitsTotal <<
24) | (nBitsTotal
>>> 8)) &
0xff00ff00)
8148 for (var i =
0; i < m.length; i +=
16) {
8149 processBlock(H, m, i)
8153 for (i =
0; i <
5; i++) {
8158 H[i] = (((H_i <<
8) | (H_i
>>> 24)) &
0x00ff00ff) |
8159 (((H_i <<
24) | (H_i
>>> 8)) &
0xff00ff00)
8162 var digestbytes = wordsToBytes(H)
8163 return new Buffer(digestbytes)
8166 module.exports = ripemd160
8168 }).call(this,require(
"buffer").Buffer)
8169 },{
"buffer":
7}],
37:[function(require,module,exports){
8171 // prototype class for hash functions
8172 function Hash (blockSize, finalSize) {
8173 this._block = new Buffer(blockSize)
8174 this._finalSize = finalSize
8175 this._blockSize = blockSize
8180 Hash.prototype.update = function (data, enc) {
8181 if (typeof data === 'string') {
8183 data = new Buffer(data, enc)
8186 var l = this._len += data.length
8187 var s = this._s ||
0
8189 var buffer = this._block
8192 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8195 for (var i =
0; i < ch; i++) {
8196 buffer[(s % this._blockSize) + i] = data[i + f]
8202 if ((s % this._blockSize) ===
0) {
8203 this._update(buffer)
8211 Hash.prototype.digest = function (enc) {
8212 // Suppose the length of the message M, in bits, is l
8213 var l = this._len *
8
8215 // Append the bit
1 to the end of the message
8216 this._block[this._len % this._blockSize] =
0x80
8218 // and then k zero bits, where k is the smallest non-negative solution to the equation (l +
1 + k) === finalSize mod blockSize
8219 this._block.fill(
0, this._len % this._blockSize +
1)
8221 if (l % (this._blockSize *
8)
>= this._finalSize *
8) {
8222 this._update(this._block)
8226 // to this append the block which is equal to the number l written in binary
8227 // TODO: handle case where l is
> Math.pow(
2,
29)
8228 this._block.writeInt32BE(l, this._blockSize -
4)
8230 var hash = this._update(this._block) || this._hash()
8232 return enc ? hash.toString(enc) : hash
8235 Hash.prototype._update = function () {
8236 throw new Error('_update must be implemented by subclass')
8239 module.exports = Hash
8241 }).call(this,require("buffer").Buffer)
8242 },{"buffer":
7}],
38:[function(require,module,exports){
8243 var exports = module.exports = function SHA (algorithm) {
8244 algorithm = algorithm.toLowerCase()
8246 var Algorithm = exports[algorithm]
8247 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8249 return new Algorithm()
8252 exports.sha = require('./sha')
8253 exports.sha1 = require('./sha1')
8254 exports.sha224 = require('./sha224')
8255 exports.sha256 = require('./sha256')
8256 exports.sha384 = require('./sha384')
8257 exports.sha512 = require('./sha512')
8259 },{"./sha":
39,"./sha1":
40,"./sha224":
41,"./sha256":
42,"./sha384":
43,"./sha512":
44}],
39:[function(require,module,exports){
8262 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
0, as defined
8264 * This source code is derived from sha1.js of the same repository.
8265 * The difference between SHA-
0 and SHA-
1 is just a bitwise rotate left
8266 * operation was added.
8269 var inherits = require('inherits')
8270 var Hash = require('./hash')
8272 var W = new Array(
80)
8278 Hash.call(this,
64,
56)
8283 Sha.prototype.init = function () {
8284 this._a =
0x67452301 |
0
8285 this._b =
0xefcdab89 |
0
8286 this._c =
0x98badcfe |
0
8287 this._d =
0x10325476 |
0
8288 this._e =
0xc3d2e1f0 |
0
8294 * Bitwise rotate a
32-bit number to the left.
8296 function rol (num, cnt) {
8297 return (num << cnt) | (num
>>> (
32 - cnt))
8300 Sha.prototype._update = function (M) {
8312 * SHA-
1 has a bitwise rotate left operation. But, SHA is not
8313 * function calcW() { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8315 function calcW () { return W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16] }
8316 function loop (w, f) {
8319 var t = rol(a,
5) + f + e + w + k
8330 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8331 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8333 while (j <
40) loop(calcW(), b ^ c ^ d)
8335 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8337 while (j <
80) loop(calcW(), b ^ c ^ d)
8339 this._a = (a + this._a) |
0
8340 this._b = (b + this._b) |
0
8341 this._c = (c + this._c) |
0
8342 this._d = (d + this._d) |
0
8343 this._e = (e + this._e) |
0
8346 Sha.prototype._hash = function () {
8347 var H = new Buffer(
20)
8349 H.writeInt32BE(this._a |
0,
0)
8350 H.writeInt32BE(this._b |
0,
4)
8351 H.writeInt32BE(this._c |
0,
8)
8352 H.writeInt32BE(this._d |
0,
12)
8353 H.writeInt32BE(this._e |
0,
16)
8358 module.exports = Sha
8361 }).call(this,require("buffer").Buffer)
8362 },{"./hash":
37,"buffer":
7,"inherits":
35}],
40:[function(require,module,exports){
8365 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
1, as defined
8367 * Version
2.1a Copyright Paul Johnston
2000 -
2002.
8368 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8369 * Distributed under the BSD License
8370 * See http://pajhome.org.uk/crypt/md5 for details.
8373 var inherits = require('inherits')
8374 var Hash = require('./hash')
8376 var W = new Array(
80)
8382 Hash.call(this,
64,
56)
8385 inherits(Sha1, Hash)
8387 Sha1.prototype.init = function () {
8388 this._a =
0x67452301 |
0
8389 this._b =
0xefcdab89 |
0
8390 this._c =
0x98badcfe |
0
8391 this._d =
0x10325476 |
0
8392 this._e =
0xc3d2e1f0 |
0
8398 * Bitwise rotate a
32-bit number to the left.
8400 function rol (num, cnt) {
8401 return (num << cnt) | (num
>>> (
32 - cnt))
8404 Sha1.prototype._update = function (M) {
8415 function calcW () { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8416 function loop (w, f) {
8419 var t = rol(a,
5) + f + e + w + k
8430 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8431 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8433 while (j <
40) loop(calcW(), b ^ c ^ d)
8435 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8437 while (j <
80) loop(calcW(), b ^ c ^ d)
8439 this._a = (a + this._a) |
0
8440 this._b = (b + this._b) |
0
8441 this._c = (c + this._c) |
0
8442 this._d = (d + this._d) |
0
8443 this._e = (e + this._e) |
0
8446 Sha1.prototype._hash = function () {
8447 var H = new Buffer(
20)
8449 H.writeInt32BE(this._a |
0,
0)
8450 H.writeInt32BE(this._b |
0,
4)
8451 H.writeInt32BE(this._c |
0,
8)
8452 H.writeInt32BE(this._d |
0,
12)
8453 H.writeInt32BE(this._e |
0,
16)
8458 module.exports = Sha1
8460 }).call(this,require("buffer").Buffer)
8461 },{"./hash":
37,"buffer":
7,"inherits":
35}],
41:[function(require,module,exports){
8464 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8466 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8467 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8471 var inherits = require('inherits')
8472 var Sha256 = require('./sha256')
8473 var Hash = require('./hash')
8475 var W = new Array(
64)
8477 function Sha224 () {
8480 this._w = W // new Array(
64)
8482 Hash.call(this,
64,
56)
8485 inherits(Sha224, Sha256)
8487 Sha224.prototype.init = function () {
8488 this._a =
0xc1059ed8 |
0
8489 this._b =
0x367cd507 |
0
8490 this._c =
0x3070dd17 |
0
8491 this._d =
0xf70e5939 |
0
8492 this._e =
0xffc00b31 |
0
8493 this._f =
0x68581511 |
0
8494 this._g =
0x64f98fa7 |
0
8495 this._h =
0xbefa4fa4 |
0
8500 Sha224.prototype._hash = function () {
8501 var H = new Buffer(
28)
8503 H.writeInt32BE(this._a,
0)
8504 H.writeInt32BE(this._b,
4)
8505 H.writeInt32BE(this._c,
8)
8506 H.writeInt32BE(this._d,
12)
8507 H.writeInt32BE(this._e,
16)
8508 H.writeInt32BE(this._f,
20)
8509 H.writeInt32BE(this._g,
24)
8514 module.exports = Sha224
8516 }).call(this,require("buffer").Buffer)
8517 },{"./hash":
37,"./sha256":
42,"buffer":
7,"inherits":
35}],
42:[function(require,module,exports){
8520 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8522 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8523 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8527 var inherits = require('inherits')
8528 var Hash = require('./hash')
8531 0x428A2F98,
0x71374491,
0xB5C0FBCF,
0xE9B5DBA5,
8532 0x3956C25B,
0x59F111F1,
0x923F82A4,
0xAB1C5ED5,
8533 0xD807AA98,
0x12835B01,
0x243185BE,
0x550C7DC3,
8534 0x72BE5D74,
0x80DEB1FE,
0x9BDC06A7,
0xC19BF174,
8535 0xE49B69C1,
0xEFBE4786,
0x0FC19DC6,
0x240CA1CC,
8536 0x2DE92C6F,
0x4A7484AA,
0x5CB0A9DC,
0x76F988DA,
8537 0x983E5152,
0xA831C66D,
0xB00327C8,
0xBF597FC7,
8538 0xC6E00BF3,
0xD5A79147,
0x06CA6351,
0x14292967,
8539 0x27B70A85,
0x2E1B2138,
0x4D2C6DFC,
0x53380D13,
8540 0x650A7354,
0x766A0ABB,
0x81C2C92E,
0x92722C85,
8541 0xA2BFE8A1,
0xA81A664B,
0xC24B8B70,
0xC76C51A3,
8542 0xD192E819,
0xD6990624,
0xF40E3585,
0x106AA070,
8543 0x19A4C116,
0x1E376C08,
0x2748774C,
0x34B0BCB5,
8544 0x391C0CB3,
0x4ED8AA4A,
0x5B9CCA4F,
0x682E6FF3,
8545 0x748F82EE,
0x78A5636F,
0x84C87814,
0x8CC70208,
8546 0x90BEFFFA,
0xA4506CEB,
0xBEF9A3F7,
0xC67178F2
8549 var W = new Array(
64)
8551 function Sha256 () {
8554 this._w = W // new Array(
64)
8556 Hash.call(this,
64,
56)
8559 inherits(Sha256, Hash)
8561 Sha256.prototype.init = function () {
8562 this._a =
0x6a09e667 |
0
8563 this._b =
0xbb67ae85 |
0
8564 this._c =
0x3c6ef372 |
0
8565 this._d =
0xa54ff53a |
0
8566 this._e =
0x510e527f |
0
8567 this._f =
0x9b05688c |
0
8568 this._g =
0x1f83d9ab |
0
8569 this._h =
0x5be0cd19 |
0
8575 return (X
>>> n) | (X << (
32 - n))
8582 function Ch (x, y, z) {
8583 return ((x & y) ^ ((~x) & z))
8586 function Maj (x, y, z) {
8587 return ((x & y) ^ (x & z) ^ (y & z))
8590 function Sigma0256 (x) {
8591 return (S(x,
2) ^ S(x,
13) ^ S(x,
22))
8594 function Sigma1256 (x) {
8595 return (S(x,
6) ^ S(x,
11) ^ S(x,
25))
8598 function Gamma0256 (x) {
8599 return (S(x,
7) ^ S(x,
18) ^ R(x,
3))
8602 function Gamma1256 (x) {
8603 return (S(x,
17) ^ S(x,
19) ^ R(x,
10))
8606 Sha256.prototype._update = function (M) {
8620 function calcW () { return Gamma1256(W[j -
2]) + W[j -
7] + Gamma0256(W[j -
15]) + W[j -
16] }
8624 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8625 var T2 = Sigma0256(a) + Maj(a, b, c)
8639 while (j <
16) loop(M.readInt32BE(j *
4))
8640 while (j <
64) loop(calcW())
8642 this._a = (a + this._a) |
0
8643 this._b = (b + this._b) |
0
8644 this._c = (c + this._c) |
0
8645 this._d = (d + this._d) |
0
8646 this._e = (e + this._e) |
0
8647 this._f = (f + this._f) |
0
8648 this._g = (g + this._g) |
0
8649 this._h = (h + this._h) |
0
8652 Sha256.prototype._hash = function () {
8653 var H = new Buffer(
32)
8655 H.writeInt32BE(this._a,
0)
8656 H.writeInt32BE(this._b,
4)
8657 H.writeInt32BE(this._c,
8)
8658 H.writeInt32BE(this._d,
12)
8659 H.writeInt32BE(this._e,
16)
8660 H.writeInt32BE(this._f,
20)
8661 H.writeInt32BE(this._g,
24)
8662 H.writeInt32BE(this._h,
28)
8667 module.exports = Sha256
8669 }).call(this,require("buffer").Buffer)
8670 },{"./hash":
37,"buffer":
7,"inherits":
35}],
43:[function(require,module,exports){
8672 var inherits = require('inherits')
8673 var SHA512 = require('./sha512')
8674 var Hash = require('./hash')
8676 var W = new Array(
160)
8678 function Sha384 () {
8682 Hash.call(this,
128,
112)
8685 inherits(Sha384, SHA512)
8687 Sha384.prototype.init = function () {
8688 this._a =
0xcbbb9d5d |
0
8689 this._b =
0x629a292a |
0
8690 this._c =
0x9159015a |
0
8691 this._d =
0x152fecd8 |
0
8692 this._e =
0x67332667 |
0
8693 this._f =
0x8eb44a87 |
0
8694 this._g =
0xdb0c2e0d |
0
8695 this._h =
0x47b5481d |
0
8697 this._al =
0xc1059ed8 |
0
8698 this._bl =
0x367cd507 |
0
8699 this._cl =
0x3070dd17 |
0
8700 this._dl =
0xf70e5939 |
0
8701 this._el =
0xffc00b31 |
0
8702 this._fl =
0x68581511 |
0
8703 this._gl =
0x64f98fa7 |
0
8704 this._hl =
0xbefa4fa4 |
0
8709 Sha384.prototype._hash = function () {
8710 var H = new Buffer(
48)
8712 function writeInt64BE (h, l, offset) {
8713 H.writeInt32BE(h, offset)
8714 H.writeInt32BE(l, offset +
4)
8717 writeInt64BE(this._a, this._al,
0)
8718 writeInt64BE(this._b, this._bl,
8)
8719 writeInt64BE(this._c, this._cl,
16)
8720 writeInt64BE(this._d, this._dl,
24)
8721 writeInt64BE(this._e, this._el,
32)
8722 writeInt64BE(this._f, this._fl,
40)
8727 module.exports = Sha384
8729 }).call(this,require("buffer").Buffer)
8730 },{"./hash":
37,"./sha512":
44,"buffer":
7,"inherits":
35}],
44:[function(require,module,exports){
8732 var inherits = require('inherits')
8733 var Hash = require('./hash')
8736 0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
8737 0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
8738 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
8739 0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
8740 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
8741 0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
8742 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
8743 0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
8744 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
8745 0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
8746 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
8747 0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
8748 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
8749 0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
8750 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
8751 0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
8752 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
8753 0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
8754 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
8755 0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
8756 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
8757 0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
8758 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
8759 0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
8760 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
8761 0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
8762 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
8763 0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
8764 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
8765 0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
8766 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
8767 0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
8768 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
8769 0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
8770 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
8771 0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
8772 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
8773 0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
8774 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
8775 0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817
8778 var W = new Array(
160)
8780 function Sha512 () {
8784 Hash.call(this,
128,
112)
8787 inherits(Sha512, Hash)
8789 Sha512.prototype.init = function () {
8790 this._a =
0x6a09e667 |
0
8791 this._b =
0xbb67ae85 |
0
8792 this._c =
0x3c6ef372 |
0
8793 this._d =
0xa54ff53a |
0
8794 this._e =
0x510e527f |
0
8795 this._f =
0x9b05688c |
0
8796 this._g =
0x1f83d9ab |
0
8797 this._h =
0x5be0cd19 |
0
8799 this._al =
0xf3bcc908 |
0
8800 this._bl =
0x84caa73b |
0
8801 this._cl =
0xfe94f82b |
0
8802 this._dl =
0x5f1d36f1 |
0
8803 this._el =
0xade682d1 |
0
8804 this._fl =
0x2b3e6c1f |
0
8805 this._gl =
0xfb41bd6b |
0
8806 this._hl =
0x137e2179 |
0
8811 function S (X, Xl, n) {
8812 return (X
>>> n) | (Xl << (
32 - n))
8815 function Ch (x, y, z) {
8816 return ((x & y) ^ ((~x) & z))
8819 function Maj (x, y, z) {
8820 return ((x & y) ^ (x & z) ^ (y & z))
8823 Sha512.prototype._update = function (M) {
8835 var al = this._al |
0
8836 var bl = this._bl |
0
8837 var cl = this._cl |
0
8838 var dl = this._dl |
0
8839 var el = this._el |
0
8840 var fl = this._fl |
0
8841 var gl = this._gl |
0
8842 var hl = this._hl |
0
8847 var x = W[j -
15 *
2]
8848 var xl = W[j -
15 *
2 +
1]
8849 var gamma0 = S(x, xl,
1) ^ S(x, xl,
8) ^ (x
>>> 7)
8850 var gamma0l = S(xl, x,
1) ^ S(xl, x,
8) ^ S(xl, x,
7)
8853 xl = W[j -
2 *
2 +
1]
8854 var gamma1 = S(x, xl,
19) ^ S(xl, x,
29) ^ (x
>>> 6)
8855 var gamma1l = S(xl, x,
19) ^ S(x, xl,
29) ^ S(xl, x,
6)
8857 // W[i] = gamma0 + W[i -
7] + gamma1 + W[i -
16]
8858 var Wi7 = W[j -
7 *
2]
8859 var Wi7l = W[j -
7 *
2 +
1]
8861 var Wi16 = W[j -
16 *
2]
8862 var Wi16l = W[j -
16 *
2 +
1]
8864 Wil = gamma0l + Wi7l
8865 Wi = gamma0 + Wi7 + ((Wil
>>> 0) < (gamma0l
>>> 0) ?
1 :
0)
8867 Wi = Wi + gamma1 + ((Wil
>>> 0) < (gamma1l
>>> 0) ?
1 :
0)
8869 Wi = Wi + Wi16 + ((Wil
>>> 0) < (Wi16l
>>> 0) ?
1 :
0)
8876 var maj = Maj(a, b, c)
8877 var majl = Maj(al, bl, cl)
8879 var sigma0h = S(a, al,
28) ^ S(al, a,
2) ^ S(al, a,
7)
8880 var sigma0l = S(al, a,
28) ^ S(a, al,
2) ^ S(a, al,
7)
8881 var sigma1h = S(e, el,
14) ^ S(e, el,
18) ^ S(el, e,
9)
8882 var sigma1l = S(el, e,
14) ^ S(el, e,
18) ^ S(e, el,
9)
8884 // t1 = h + sigma1 + ch + K[i] + W[i]
8888 var ch = Ch(e, f, g)
8889 var chl = Ch(el, fl, gl)
8891 var t1l = hl + sigma1l
8892 var t1 = h + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0)
8894 t1 = t1 + ch + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0)
8896 t1 = t1 + Ki + ((t1l
>>> 0) < (Kil
>>> 0) ?
1 :
0)
8898 t1 = t1 + Wi + ((t1l
>>> 0) < (Wil
>>> 0) ?
1 :
0)
8900 // t2 = sigma0 + maj
8901 var t2l = sigma0l + majl
8902 var t2 = sigma0h + maj + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0)
8911 e = (d + t1 + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
8918 al = (t1l + t2l) |
0
8919 a = (t1 + t2 + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0
8926 Wi = M.readInt32BE(j *
4)
8927 Wil = M.readInt32BE(j *
4 +
4)
8937 this._al = (this._al + al) |
0
8938 this._bl = (this._bl + bl) |
0
8939 this._cl = (this._cl + cl) |
0
8940 this._dl = (this._dl + dl) |
0
8941 this._el = (this._el + el) |
0
8942 this._fl = (this._fl + fl) |
0
8943 this._gl = (this._gl + gl) |
0
8944 this._hl = (this._hl + hl) |
0
8946 this._a = (this._a + a + ((this._al
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0
8947 this._b = (this._b + b + ((this._bl
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0
8948 this._c = (this._c + c + ((this._cl
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0
8949 this._d = (this._d + d + ((this._dl
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
8950 this._e = (this._e + e + ((this._el
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0
8951 this._f = (this._f + f + ((this._fl
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0
8952 this._g = (this._g + g + ((this._gl
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0
8953 this._h = (this._h + h + ((this._hl
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0
8956 Sha512.prototype._hash = function () {
8957 var H = new Buffer(
64)
8959 function writeInt64BE (h, l, offset) {
8960 H.writeInt32BE(h, offset)
8961 H.writeInt32BE(l, offset +
4)
8964 writeInt64BE(this._a, this._al,
0)
8965 writeInt64BE(this._b, this._bl,
8)
8966 writeInt64BE(this._c, this._cl,
16)
8967 writeInt64BE(this._d, this._dl,
24)
8968 writeInt64BE(this._e, this._el,
32)
8969 writeInt64BE(this._f, this._fl,
40)
8970 writeInt64BE(this._g, this._gl,
48)
8971 writeInt64BE(this._h, this._hl,
56)
8976 module.exports = Sha512
8978 }).call(this,require(
"buffer").Buffer)
8979 },{
"./hash":
37,
"buffer":
7,
"inherits":
35}],
45:[function(require,module,exports){
8982 var createHash = require('create-hash/browser');
8983 var inherits = require('inherits')
8985 var Transform = require('stream').Transform
8987 var ZEROS = new Buffer(
128)
8990 function Hmac(alg, key) {
8991 Transform.call(this)
8993 if (typeof key === 'string') {
8994 key = new Buffer(key)
8997 var blocksize = (alg === 'sha512' || alg === 'sha384') ?
128 :
64
9002 if (key.length
> blocksize) {
9003 key = createHash(alg).update(key).digest()
9005 } else if (key.length < blocksize) {
9006 key = Buffer.concat([key, ZEROS], blocksize)
9009 var ipad = this._ipad = new Buffer(blocksize)
9010 var opad = this._opad = new Buffer(blocksize)
9012 for (var i =
0; i < blocksize; i++) {
9013 ipad[i] = key[i] ^
0x36
9014 opad[i] = key[i] ^
0x5C
9017 this._hash = createHash(alg).update(ipad)
9020 inherits(Hmac, Transform)
9022 Hmac.prototype.update = function (data, enc) {
9023 this._hash.update(data, enc)
9028 Hmac.prototype._transform = function (data, _, next) {
9029 this._hash.update(data)
9034 Hmac.prototype._flush = function (next) {
9035 this.push(this.digest())
9040 Hmac.prototype.digest = function (enc) {
9041 var h = this._hash.digest()
9043 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9046 module.exports = function createHmac(alg, key) {
9047 return new Hmac(alg, key)
9050 }).call(this,require("buffer").Buffer)
9051 },{"buffer":
7,"create-hash/browser":
32,"inherits":
46,"stream":
26}],
46:[function(require,module,exports){
9052 arguments[
4][
12][
0].apply(exports,arguments)
9053 },{"dup":
12}],
47:[function(require,module,exports){
9054 var assert = require('assert')
9055 var BigInteger = require('bigi')
9057 var Point = require('./point')
9059 function Curve(p, a, b, Gx, Gy, n, h) {
9063 this.G = Point.fromAffine(this, Gx, Gy)
9067 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9070 this.pOverFour = p.add(BigInteger.ONE).shiftRight(
2)
9073 Curve.prototype.pointFromX = function(isOdd, x) {
9074 var alpha = x.pow(
3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9075 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9078 if (beta.isEven() ^ !isOdd) {
9079 y = this.p.subtract(y) // -y % p
9082 return Point.fromAffine(this, x, y)
9085 Curve.prototype.isInfinity = function(Q) {
9086 if (Q === this.infinity) return true
9088 return Q.z.signum() ===
0 && Q.y.signum() !==
0
9091 Curve.prototype.isOnCurve = function(Q) {
9092 if (this.isInfinity(Q)) return true
9100 // Check that xQ and yQ are integers in the interval [
0, p -
1]
9101 if (x.signum() <
0 || x.compareTo(p)
>=
0) return false
9102 if (y.signum() <
0 || y.compareTo(p)
>=
0) return false
9104 // and check that y^
2 = x^
3 + ax + b (mod p)
9105 var lhs = y.square().mod(p)
9106 var rhs = x.pow(
3).add(a.multiply(x)).add(b).mod(p)
9107 return lhs.equals(rhs)
9111 * Validate an elliptic curve point.
9113 * See SEC
1, section
3.2.2.1: Elliptic Curve Public Key Validation Primitive
9115 Curve.prototype.validate = function(Q) {
9117 assert(!this.isInfinity(Q), 'Point is at infinity')
9118 assert(this.isOnCurve(Q), 'Point is not on the curve')
9120 // Check nQ = O (where Q is a scalar multiple of G)
9121 var nQ = Q.multiply(this.n)
9122 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9127 module.exports = Curve
9129 },{"./point":
51,"assert":
5,"bigi":
3}],
48:[function(require,module,exports){
9132 "p": "fffffffdffffffffffffffffffffffff",
9133 "a": "fffffffdfffffffffffffffffffffffc",
9134 "b": "e87579c11079f43dd824993c2cee5ed3",
9135 "n": "fffffffe0000000075a30d1b9038a115",
9137 "Gx": "
161ff7528b899b2d0c28607ca52c5b86",
9138 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9141 "p": "fffffffffffffffffffffffffffffffeffffac73",
9144 "n": "
0100000000000000000001b8fa16dfab9aca16b6b3",
9146 "Gx": "
3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9147 "Gy": "
938cf935318fdced6bc28286531733c3f03c4fee"
9150 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9151 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9152 "b": "
1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9153 "n": "
0100000000000000000001f4c8f927aed3ca752257",
9155 "Gx": "
4a96b5688ef573284664698968c38bb913cbfc82",
9156 "Gy": "
23a628553168947d59dcc912042351377ac5fb32"
9159 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9162 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9164 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9165 "Gy": "
9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9168 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9169 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9170 "b": "
64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9171 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9173 "Gx": "
188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9174 "Gy": "
07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9177 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9180 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9182 "Gx": "
79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9183 "Gy": "
483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9186 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9187 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9188 "b": "
5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9189 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9191 "Gx": "
6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9192 "Gy": "
4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9196 },{}],
49:[function(require,module,exports){
9197 var Point = require('./point')
9198 var Curve = require('./curve')
9200 var getCurveByName = require('./names')
9205 getCurveByName: getCurveByName
9208 },{"./curve":
47,"./names":
50,"./point":
51}],
50:[function(require,module,exports){
9209 var BigInteger = require('bigi')
9211 var curves = require('./curves')
9212 var Curve = require('./curve')
9214 function getCurveByName(name) {
9215 var curve = curves[name]
9216 if (!curve) return null
9218 var p = new BigInteger(curve.p,
16)
9219 var a = new BigInteger(curve.a,
16)
9220 var b = new BigInteger(curve.b,
16)
9221 var n = new BigInteger(curve.n,
16)
9222 var h = new BigInteger(curve.h,
16)
9223 var Gx = new BigInteger(curve.Gx,
16)
9224 var Gy = new BigInteger(curve.Gy,
16)
9226 return new Curve(p, a, b, Gx, Gy, n, h)
9229 module.exports = getCurveByName
9231 },{"./curve":
47,"./curves":
48,"bigi":
3}],
51:[function(require,module,exports){
9233 var assert = require('assert')
9234 var BigInteger = require('bigi')
9236 var THREE = BigInteger.valueOf(
3)
9238 function Point(curve, x, y, z) {
9239 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9247 this.compressed = true
9250 Object.defineProperty(Point.prototype, 'zInv', {
9252 if (this._zInv === null) {
9253 this._zInv = this.z.modInverse(this.curve.p)
9260 Object.defineProperty(Point.prototype, 'affineX', {
9262 return this.x.multiply(this.zInv).mod(this.curve.p)
9266 Object.defineProperty(Point.prototype, 'affineY', {
9268 return this.y.multiply(this.zInv).mod(this.curve.p)
9272 Point.fromAffine = function(curve, x, y) {
9273 return new Point(curve, x, y, BigInteger.ONE)
9276 Point.prototype.equals = function(other) {
9277 if (other === this) return true
9278 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9279 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9281 // u = Y2 * Z1 - Y1 * Z2
9282 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9284 if (u.signum() !==
0) return false
9286 // v = X2 * Z1 - X1 * Z2
9287 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9289 return v.signum() ===
0
9292 Point.prototype.negate = function() {
9293 var y = this.curve.p.subtract(this.y)
9295 return new Point(this.curve, this.x, y, this.z)
9298 Point.prototype.add = function(b) {
9299 if (this.curve.isInfinity(this)) return b
9300 if (this.curve.isInfinity(b)) return this
9307 // u = Y2 * Z1 - Y1 * Z2
9308 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9309 // v = X2 * Z1 - X1 * Z2
9310 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9312 if (v.signum() ===
0) {
9313 if (u.signum() ===
0) {
9314 return this.twice() // this == b, so double
9317 return this.curve.infinity // this = -b, so infinity
9321 var v3 = v2.multiply(v)
9322 var x1v2 = x1.multiply(v2)
9323 var zu2 = u.square().multiply(this.z)
9325 // x3 = v * (z2 * (z1 * u^
2 -
2 * x1 * v^
2) - v^
3)
9326 var x3 = zu2.subtract(x1v2.shiftLeft(
1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9327 // y3 = z2 * (
3 * x1 * u * v^
2 - y1 * v^
3 - z1 * u^
3) + u * v^
3
9328 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)
9329 // z3 = v^
3 * z1 * z2
9330 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9332 return new Point(this.curve, x3, y3, z3)
9335 Point.prototype.twice = function() {
9336 if (this.curve.isInfinity(this)) return this
9337 if (this.y.signum() ===
0) return this.curve.infinity
9342 var y1z1 = y1.multiply(this.z)
9343 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9344 var a = this.curve.a
9346 // w =
3 * x1^
2 + a * z1^
2
9347 var w = x1.square().multiply(THREE)
9349 if (a.signum() !==
0) {
9350 w = w.add(this.z.square().multiply(a))
9353 w = w.mod(this.curve.p)
9354 // x3 =
2 * y1 * z1 * (w^
2 -
8 * x1 * y1^
2 * z1)
9355 var x3 = w.square().subtract(x1.shiftLeft(
3).multiply(y1sqz1)).shiftLeft(
1).multiply(y1z1).mod(this.curve.p)
9356 // y3 =
4 * y1^
2 * z1 * (
3 * w * x1 -
2 * y1^
2 * z1) - w^
3
9357 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(
1)).shiftLeft(
2).multiply(y1sqz1).subtract(w.pow(
3)).mod(this.curve.p)
9358 // z3 =
8 * (y1 * z1)^
3
9359 var z3 = y1z1.pow(
3).shiftLeft(
3).mod(this.curve.p)
9361 return new Point(this.curve, x3, y3, z3)
9364 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9365 // TODO: modularize the multiplication algorithm
9366 Point.prototype.multiply = function(k) {
9367 if (this.curve.isInfinity(this)) return this
9368 if (k.signum() ===
0) return this.curve.infinity
9371 var h = e.multiply(THREE)
9373 var neg = this.negate()
9376 for (var i = h.bitLength() -
2; i
> 0; --i) {
9379 var hBit = h.testBit(i)
9380 var eBit = e.testBit(i)
9383 R = R.add(hBit ? this : neg)
9390 // Compute this*j + x*k (simultaneous multiplication)
9391 Point.prototype.multiplyTwo = function(j, x, k) {
9394 if (j.bitLength()
> k.bitLength())
9395 i = j.bitLength() -
1
9397 i = k.bitLength() -
1
9399 var R = this.curve.infinity
9400 var both = this.add(x)
9405 var jBit = j.testBit(i)
9406 var kBit = k.testBit(i)
9427 Point.prototype.getEncoded = function(compressed) {
9428 if (compressed == undefined) compressed = this.compressed
9429 if (this.curve.isInfinity(this)) return new Buffer('
00', 'hex') // Infinity point encoded is simply '
00'
9431 var x = this.affineX
9432 var y = this.affineY
9436 // Determine size of q in bytes
9437 var byteLength = Math.floor((this.curve.p.bitLength() +
7) /
8)
9441 buffer = new Buffer(
1 + byteLength)
9442 buffer.writeUInt8(y.isEven() ?
0x02 :
0x03,
0)
9446 buffer = new Buffer(
1 + byteLength + byteLength)
9447 buffer.writeUInt8(
0x04,
0)
9449 y.toBuffer(byteLength).copy(buffer,
1 + byteLength)
9452 x.toBuffer(byteLength).copy(buffer,
1)
9457 Point.decodeFrom = function(curve, buffer) {
9458 var type = buffer.readUInt8(
0)
9459 var compressed = (type !==
4)
9461 var byteLength = Math.floor((curve.p.bitLength() +
7) /
8)
9462 var x = BigInteger.fromBuffer(buffer.slice(
1,
1 + byteLength))
9466 assert.equal(buffer.length, byteLength +
1, 'Invalid sequence length')
9467 assert(type ===
0x02 || type ===
0x03, 'Invalid sequence tag')
9469 var isOdd = (type ===
0x03)
9470 Q = curve.pointFromX(isOdd, x)
9473 assert.equal(buffer.length,
1 + byteLength + byteLength, 'Invalid sequence length')
9475 var y = BigInteger.fromBuffer(buffer.slice(
1 + byteLength))
9476 Q = Point.fromAffine(curve, x, y)
9479 Q.compressed = compressed
9483 Point.prototype.toString = function () {
9484 if (this.curve.isInfinity(this)) return '(INFINITY)'
9486 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9489 module.exports = Point
9491 }).call(this,require("buffer").Buffer)
9492 },{"assert":
5,"bigi":
3,"buffer":
7}],
52:[function(require,module,exports){
9493 (function (process,global,Buffer){
9496 var crypto = global.crypto || global.msCrypto
9497 if(crypto && crypto.getRandomValues) {
9498 module.exports = randomBytes;
9500 module.exports = oldBrowser;
9502 function randomBytes(size, cb) {
9503 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9504 /* This will not work in older browsers.
9505 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9508 crypto.getRandomValues(bytes);
9509 if (typeof cb === 'function') {
9510 return process.nextTick(function () {
9516 function oldBrowser() {
9518 'secure random number generation not supported by this browser\n'+
9519 'use chrome, FireFox or Internet Explorer
11'
9523 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9524 },{"_process":
14,"buffer":
7}],
53:[function(require,module,exports){
9528 function getFunctionName(fn) {
9529 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[
1];
9532 function getTypeTypeName(type) {
9533 if (nativeTypes.Function(type)) {
9534 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9536 if (nativeTypes.Object(type)) return JSON.stringify(type);
9541 function getValueTypeName(value) {
9542 if (nativeTypes.Null(value)) return '';
9544 return getFunctionName(value.constructor);
9547 function tfErrorString(type, value) {
9548 var typeTypeName = getTypeTypeName(type);
9549 var valueTypeName = getValueTypeName(value);
9551 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9554 function tfPropertyErrorString(type, name, value) {
9555 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9559 Array: (function (_Array) {
9560 function Array(_x) {
9561 return _Array.apply(this, arguments);
9564 Array.toString = function () {
9565 return _Array.toString();
9569 })(function (value) {
9570 return value !== null && value !== undefined && value.constructor === Array;
9572 Boolean: function Boolean(value) {
9573 return typeof value === 'boolean';
9575 Buffer: (function (_Buffer) {
9576 function Buffer(_x2) {
9577 return _Buffer.apply(this, arguments);
9580 Buffer.toString = function () {
9581 return _Buffer.toString();
9585 })(function (value) {
9586 return Buffer.isBuffer(value);
9588 Function: function Function(value) {
9589 return typeof value === 'function';
9591 Null: function Null(value) {
9592 return value === undefined || value === null;
9594 Number: function Number(value) {
9595 return typeof value === 'number';
9597 Object: function Object(value) {
9598 return typeof value === 'object';
9600 String: function String(value) {
9601 return typeof value === 'string';
9608 function tJSON(type) {
9609 return type && type.toJSON ? type.toJSON() : type;
9612 function sJSON(type) {
9613 var json = tJSON(type);
9614 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9618 arrayOf: function arrayOf(type) {
9619 function arrayOf(value, strict) {
9621 return nativeTypes.Array(value) && value.every(function (x) {
9622 return typeforce(type, x, strict);
9628 arrayOf.toJSON = function () {
9629 return [tJSON(type)];
9635 maybe: function maybe(type) {
9636 function maybe(value, strict) {
9637 return nativeTypes.Null(value) || typeforce(type, value, strict);
9639 maybe.toJSON = function () {
9640 return '?' + sJSON(type);
9646 object: function object(type) {
9647 function object(value, strict) {
9648 typeforce(nativeTypes.Object, value, strict);
9650 var propertyName, propertyType, propertyValue;
9653 for (propertyName in type) {
9654 propertyType = type[propertyName];
9655 propertyValue = value[propertyName];
9657 typeforce(propertyType, propertyValue, strict);
9660 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9664 for (propertyName in value) {
9665 if (type[propertyName]) continue;
9667 throw new TypeError('Unexpected property "' + propertyName + '"');
9673 object.toJSON = function () {
9680 oneOf: function oneOf() {
9681 for (var _len = arguments.length, types = Array(_len), _key =
0; _key < _len; _key++) {
9682 types[_key] = arguments[_key];
9685 function oneOf(value, strict) {
9686 return types.some(function (type) {
9688 return typeforce(type, value, strict);
9694 oneOf.toJSON = function () {
9695 return types.map(sJSON).join('|');
9701 quacksLike: function quacksLike(type) {
9702 function quacksLike(value, strict) {
9703 return type === getValueTypeName(value);
9705 quacksLike.toJSON = function () {
9712 tuple: function tuple() {
9713 for (var _len2 = arguments.length, types = Array(_len2), _key2 =
0; _key2 < _len2; _key2++) {
9714 types[_key2] = arguments[_key2];
9717 function tuple(value, strict) {
9718 return types.every(function (type, i) {
9719 return typeforce(type, value[i], strict);
9722 tuple.toJSON = function () {
9723 return '(' + types.map(sJSON).join(', ') + ')';
9729 value: function value(expected) {
9730 function value(actual) {
9731 return actual === expected;
9733 value.toJSON = function () {
9741 function compile(type) {
9742 if (nativeTypes.String(type)) {
9743 if (type[
0] === '?') return otherTypes.maybe(compile(type.slice(
1)));
9745 return nativeTypes[type] || otherTypes.quacksLike(type);
9746 } else if (type && nativeTypes.Object(type)) {
9747 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[
0]));
9751 for (var propertyName in type) {
9752 compiled[propertyName] = compile(type[propertyName]);
9755 return otherTypes.object(compiled);
9756 } else if (nativeTypes.Function(type)) {
9760 return otherTypes.value(type);
9763 function typeforce(_x3, _x4, _x5) {
9766 _function: while (_again) {
9772 if (nativeTypes.Function(type)) {
9773 if (type(value, strict)) return true;
9775 throw new TypeError(tfErrorString(type, value));
9779 _x3 = compile(type);
9787 // assign all types to typeforce function
9789 Object.keys(nativeTypes).forEach(function (typeName) {
9790 var nativeType = nativeTypes[typeName];
9791 nativeType.toJSON = function () {
9795 typeforce[typeName] = nativeType;
9798 for (typeName in otherTypes) {
9799 typeforce[typeName] = otherTypes[typeName];
9802 module.exports = typeforce;
9803 module.exports.compile = compile;
9804 }).call(this,require("buffer").Buffer)
9805 },{"buffer":
7}],
54:[function(require,module,exports){
9807 var assert = require('assert')
9808 var base58check = require('bs58check')
9809 var typeForce = require('typeforce')
9810 var networks = require('./networks')
9811 var scripts = require('./scripts')
9813 function findScriptTypeByVersion (version) {
9814 for (var networkName in networks) {
9815 var network = networks[networkName]
9817 if (version === network.pubKeyHash) return 'pubkeyhash'
9818 if (version === network.scriptHash) return 'scripthash'
9822 function Address (hash, version) {
9823 typeForce('Buffer', hash)
9825 assert.strictEqual(hash.length,
20, 'Invalid hash length')
9826 assert.strictEqual(version &
0xff, version, 'Invalid version byte')
9829 this.version = version
9832 Address.fromBase58Check = function (string) {
9833 var payload = base58check.decode(string)
9834 var version = payload.readUInt8(
0)
9835 var hash = payload.slice(
1)
9837 return new Address(hash, version)
9840 Address.fromOutputScript = function (script, network) {
9841 network = network || networks.bitcoin
9843 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[
2], network.pubKeyHash)
9844 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[
1], network.scriptHash)
9846 assert(false, script.toASM() + ' has no matching Address')
9849 Address.prototype.toBase58Check = function () {
9850 var payload = new Buffer(
21)
9851 payload.writeUInt8(this.version,
0)
9852 this.hash.copy(payload,
1)
9854 return base58check.encode(payload)
9857 Address.prototype.toOutputScript = function () {
9858 var scriptType = findScriptTypeByVersion(this.version)
9860 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
9861 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
9863 assert(false, this.toString() + ' has no matching Script')
9866 Address.prototype.toString = Address.prototype.toBase58Check
9868 module.exports = Address
9870 }).call(this,require("buffer").Buffer)
9871 },{"./networks":
66,"./scripts":
69,"assert":
5,"bs58check":
31,"buffer":
7,"typeforce":
53}],
55:[function(require,module,exports){
9872 var bs58check = require('bs58check')
9874 function decode () {
9875 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
9877 return bs58check.decode.apply(undefined, arguments)
9880 function encode () {
9881 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
9883 return bs58check.encode.apply(undefined, arguments)
9891 },{"bs58check":
31}],
56:[function(require,module,exports){
9893 var assert = require('assert')
9894 var bufferutils = require('./bufferutils')
9895 var crypto = require('./crypto')
9897 var Transaction = require('./transaction')
9901 this.prevHash = null
9902 this.merkleRoot = null
9908 Block.fromBuffer = function (buffer) {
9909 assert(buffer.length
>=
80, 'Buffer too small (<
80 bytes)')
9912 function readSlice (n) {
9914 return buffer.slice(offset - n, offset)
9917 function readUInt32 () {
9918 var i = buffer.readUInt32LE(offset)
9923 var block = new Block()
9924 block.version = readUInt32()
9925 block.prevHash = readSlice(
32)
9926 block.merkleRoot = readSlice(
32)
9927 block.timestamp = readUInt32()
9928 block.bits = readUInt32()
9929 block.nonce = readUInt32()
9931 if (buffer.length ===
80) return block
9933 function readVarInt () {
9934 var vi = bufferutils.readVarInt(buffer, offset)
9939 // FIXME: poor performance
9940 function readTransaction () {
9941 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
9943 offset += tx.toBuffer().length
9947 var nTransactions = readVarInt()
9948 block.transactions = []
9950 for (var i =
0; i < nTransactions; ++i) {
9951 var tx = readTransaction()
9952 block.transactions.push(tx)
9958 Block.fromHex = function (hex) {
9959 return Block.fromBuffer(new Buffer(hex, 'hex'))
9962 Block.prototype.getHash = function () {
9963 return crypto.hash256(this.toBuffer(true))
9966 Block.prototype.getId = function () {
9967 return bufferutils.reverse(this.getHash()).toString('hex')
9970 Block.prototype.getUTCDate = function () {
9971 var date = new Date(
0) // epoch
9972 date.setUTCSeconds(this.timestamp)
9977 Block.prototype.toBuffer = function (headersOnly) {
9978 var buffer = new Buffer(
80)
9981 function writeSlice (slice) {
9982 slice.copy(buffer, offset)
9983 offset += slice.length
9986 function writeUInt32 (i) {
9987 buffer.writeUInt32LE(i, offset)
9991 writeUInt32(this.version)
9992 writeSlice(this.prevHash)
9993 writeSlice(this.merkleRoot)
9994 writeUInt32(this.timestamp)
9995 writeUInt32(this.bits)
9996 writeUInt32(this.nonce)
9998 if (headersOnly || !this.transactions) return buffer
10000 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10001 var txBuffers = this.transactions.map(function (tx) {
10002 return tx.toBuffer()
10005 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10008 Block.prototype.toHex = function (headersOnly) {
10009 return this.toBuffer(headersOnly).toString('hex')
10012 module.exports = Block
10014 }).call(this,require("buffer").Buffer)
10015 },{"./bufferutils":
57,"./crypto":
58,"./transaction":
70,"assert":
5,"buffer":
7}],
57:[function(require,module,exports){
10016 (function (Buffer){
10017 var assert = require('assert')
10018 var opcodes = require('./opcodes')
10020 // https://github.com/feross/buffer/blob/master/index.js#L1127
10021 function verifuint (value, max) {
10022 assert(typeof value === 'number', 'cannot write a non-number as a number')
10023 assert(value
>=
0, 'specified a negative value for writing an unsigned value')
10024 assert(value <= max, 'value is larger than maximum value for type')
10025 assert(Math.floor(value) === value, 'value has a fractional component')
10028 function pushDataSize (i) {
10029 return i < opcodes.OP_PUSHDATA1 ?
1
10035 function readPushDataInt (buffer, offset) {
10036 var opcode = buffer.readUInt8(offset)
10040 if (opcode < opcodes.OP_PUSHDATA1) {
10045 } else if (opcode === opcodes.OP_PUSHDATA1) {
10046 if (offset +
2 > buffer.length) return null
10047 number = buffer.readUInt8(offset +
1)
10051 } else if (opcode === opcodes.OP_PUSHDATA2) {
10052 if (offset +
3 > buffer.length) return null
10053 number = buffer.readUInt16LE(offset +
1)
10058 if (offset +
5 > buffer.length) return null
10059 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10061 number = buffer.readUInt32LE(offset +
1)
10072 function readUInt64LE (buffer, offset) {
10073 var a = buffer.readUInt32LE(offset)
10074 var b = buffer.readUInt32LE(offset +
4)
10077 verifuint(b + a,
0x001fffffffffffff)
10082 function readVarInt (buffer, offset) {
10083 var t = buffer.readUInt8(offset)
10092 } else if (t <
254) {
10093 number = buffer.readUInt16LE(offset +
1)
10097 } else if (t <
255) {
10098 number = buffer.readUInt32LE(offset +
1)
10103 number = readUInt64LE(buffer, offset +
1)
10113 function writePushDataInt (buffer, number, offset) {
10114 var size = pushDataSize(number)
10118 buffer.writeUInt8(number, offset)
10121 } else if (size ===
2) {
10122 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10123 buffer.writeUInt8(number, offset +
1)
10126 } else if (size ===
3) {
10127 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10128 buffer.writeUInt16LE(number, offset +
1)
10132 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10133 buffer.writeUInt32LE(number, offset +
1)
10139 function writeUInt64LE (buffer, value, offset) {
10140 verifuint(value,
0x001fffffffffffff)
10142 buffer.writeInt32LE(value & -
1, offset)
10143 buffer.writeUInt32LE(Math.floor(value /
0x100000000), offset +
4)
10146 function varIntSize (i) {
10149 : i <
0x100000000 ?
5
10153 function writeVarInt (buffer, number, offset) {
10154 var size = varIntSize(number)
10158 buffer.writeUInt8(number, offset)
10161 } else if (size ===
3) {
10162 buffer.writeUInt8(
253, offset)
10163 buffer.writeUInt16LE(number, offset +
1)
10166 } else if (size ===
5) {
10167 buffer.writeUInt8(
254, offset)
10168 buffer.writeUInt32LE(number, offset +
1)
10172 buffer.writeUInt8(
255, offset)
10173 writeUInt64LE(buffer, number, offset +
1)
10179 function varIntBuffer (i) {
10180 var size = varIntSize(i)
10181 var buffer = new Buffer(size)
10182 writeVarInt(buffer, i,
0)
10187 function reverse (buffer) {
10188 var buffer2 = new Buffer(buffer)
10189 Array.prototype.reverse.call(buffer2)
10194 pushDataSize: pushDataSize,
10195 readPushDataInt: readPushDataInt,
10196 readUInt64LE: readUInt64LE,
10197 readVarInt: readVarInt,
10199 varIntBuffer: varIntBuffer,
10200 varIntSize: varIntSize,
10201 writePushDataInt: writePushDataInt,
10202 writeUInt64LE: writeUInt64LE,
10203 writeVarInt: writeVarInt
10206 }).call(this,require("buffer").Buffer)
10207 },{"./opcodes":
67,"assert":
5,"buffer":
7}],
58:[function(require,module,exports){
10208 var createHash = require('create-hash')
10210 function hash160 (buffer) {
10211 return ripemd160(sha256(buffer))
10214 function hash256 (buffer) {
10215 return sha256(sha256(buffer))
10218 function ripemd160 (buffer) {
10219 return createHash('rmd160').update(buffer).digest()
10222 function sha1 (buffer) {
10223 return createHash('sha1').update(buffer).digest()
10226 function sha256 (buffer) {
10227 return createHash('sha256').update(buffer).digest()
10230 // FIXME: Name not consistent with others
10231 var createHmac = require('create-hmac')
10233 function HmacSHA256 (buffer, secret) {
10234 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10235 return createHmac('sha256', secret).update(buffer).digest()
10238 function HmacSHA512 (buffer, secret) {
10239 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10240 return createHmac('sha512', secret).update(buffer).digest()
10244 ripemd160: ripemd160,
10249 HmacSHA256: HmacSHA256,
10250 HmacSHA512: HmacSHA512
10253 },{"create-hash":
32,"create-hmac":
45}],
59:[function(require,module,exports){
10254 (function (Buffer){
10255 var assert = require('assert')
10256 var createHmac = require('create-hmac')
10257 var typeForce = require('typeforce')
10259 var BigInteger = require('bigi')
10260 var ECSignature = require('./ecsignature')
10262 var ZERO = new Buffer([
0])
10263 var ONE = new Buffer([
1])
10265 // https://tools.ietf.org/html/rfc6979#section-
3.2
10266 function deterministicGenerateK (curve, hash, d, checkSig) {
10267 typeForce('Buffer', hash)
10268 typeForce('BigInteger', d)
10270 // FIXME: remove/uncomment for
2.0.0
10271 // typeForce('Function', checkSig)
10273 if (typeof checkSig !== 'function') {
10274 console.warn('deterministicGenerateK requires a checkSig callback in
2.0.0, see #
337 for more information')
10276 checkSig = function (k) {
10279 var e = BigInteger.fromBuffer(hash)
10281 var Q = G.multiply(k)
10283 if (curve.isInfinity(Q))
10286 var r = Q.affineX.mod(n)
10287 if (r.signum() ===
0)
10290 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10291 if (s.signum() ===
0)
10299 assert.equal(hash.length,
32, 'Hash must be
256 bit')
10301 var x = d.toBuffer(
32)
10302 var k = new Buffer(
32)
10303 var v = new Buffer(
32)
10305 // Step A, ignored as hash already provided
10313 k = createHmac('sha256', k)
10321 v = createHmac('sha256', k).update(v).digest()
10324 k = createHmac('sha256', k)
10332 v = createHmac('sha256', k).update(v).digest()
10334 // Step H1/H2a, ignored as tlen === qlen (
256 bit)
10336 v = createHmac('sha256', k).update(v).digest()
10338 var T = BigInteger.fromBuffer(v)
10340 // Step H3, repeat until T is within the interval [
1, n -
1] and is suitable for ECDSA
10341 while ((T.signum() <=
0) || (T.compareTo(curve.n)
>=
0) || !checkSig(T)) {
10342 k = createHmac('sha256', k)
10347 v = createHmac('sha256', k).update(v).digest()
10349 // Step H1/H2a, again, ignored as tlen === qlen (
256 bit)
10351 v = createHmac('sha256', k).update(v).digest()
10352 T = BigInteger.fromBuffer(v)
10358 function sign (curve, hash, d) {
10361 var e = BigInteger.fromBuffer(hash)
10365 deterministicGenerateK(curve, hash, d, function (k) {
10366 var Q = G.multiply(k)
10368 if (curve.isInfinity(Q))
10371 r = Q.affineX.mod(n)
10372 if (r.signum() ===
0)
10375 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10376 if (s.signum() ===
0)
10382 var N_OVER_TWO = n.shiftRight(
1)
10384 // enforce low S values, see bip62: 'low s values in signatures'
10385 if (s.compareTo(N_OVER_TWO)
> 0) {
10389 return new ECSignature(r, s)
10392 function verifyRaw (curve, e, signature, Q) {
10396 var r = signature.r
10397 var s = signature.s
10399 //
1.4.1 Enforce r and s are both integers in the interval [
1, n −
1]
10400 if (r.signum() <=
0 || r.compareTo(n)
>=
0) return false
10401 if (s.signum() <=
0 || s.compareTo(n)
>=
0) return false
10404 var c = s.modInverse(n)
10406 //
1.4.4 Compute u1 = es^−
1 mod n
10407 // u2 = rs^−
1 mod n
10408 var u1 = e.multiply(c).mod(n)
10409 var u2 = r.multiply(c).mod(n)
10411 //
1.4.5 Compute R = (xR, yR) = u1G + u2Q
10412 var R = G.multiplyTwo(u1, Q, u2)
10413 var v = R.affineX.mod(n)
10415 //
1.4.5 (cont.) Enforce R is not at infinity
10416 if (curve.isInfinity(R)) return false
10418 //
1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10422 function verify (curve, hash, signature, Q) {
10423 //
1.4.2 H = Hash(M), already done by the user
10425 var e = BigInteger.fromBuffer(hash)
10427 return verifyRaw(curve, e, signature, Q)
10431 * Recover a public key from a signature.
10433 * See SEC
1: Elliptic Curve Cryptography, section
4.1.6, "Public
10434 * Key Recovery Operation".
10436 * http://www.secg.org/download/aid-
780/sec1-v2.pdf
10438 function recoverPubKey (curve, e, signature, i) {
10439 assert.strictEqual(i &
3, i, 'Recovery param is more than two bits')
10444 var r = signature.r
10445 var s = signature.s
10447 assert(r.signum()
> 0 && r.compareTo(n) <
0, 'Invalid r value')
10448 assert(s.signum()
> 0 && s.compareTo(n) <
0, 'Invalid s value')
10450 // A set LSB signifies that the y-coordinate is odd
10453 // The more significant bit specifies whether we should use the
10454 // first or second candidate key.
10455 var isSecondKey = i
>> 1
10457 //
1.1 Let x = r + jn
10458 var x = isSecondKey ? r.add(n) : r
10459 var R = curve.pointFromX(isYOdd, x)
10461 //
1.4 Check that nR is at infinity
10462 var nR = R.multiply(n)
10463 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10465 // Compute -e from e
10466 var eNeg = e.negate().mod(n)
10468 //
1.6.1 Compute Q = r^-
1 (sR - eG)
10469 // Q = r^-
1 (sR + -eG)
10470 var rInv = r.modInverse(n)
10472 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10479 * Calculate pubkey extraction parameter.
10481 * When extracting a pubkey from a signature, we have to
10482 * distinguish four different cases. Rather than putting this
10483 * burden on the verifier, Bitcoin includes a
2-bit value with the
10486 * This function simply tries all four cases and returns the value
10487 * that resulted in a successful pubkey recovery.
10489 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10490 for (var i =
0; i <
4; i++) {
10491 var Qprime = recoverPubKey(curve, e, signature, i)
10494 if (Qprime.equals(Q)) {
10499 throw new Error('Unable to find valid recovery factor')
10503 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10504 deterministicGenerateK: deterministicGenerateK,
10505 recoverPubKey: recoverPubKey,
10508 verifyRaw: verifyRaw
10511 }).call(this,require(
"buffer").Buffer)
10512 },{
"./ecsignature":
62,
"assert":
5,
"bigi":
3,
"buffer":
7,
"create-hmac":
45,
"typeforce":
53}],
60:[function(require,module,exports){
10513 (function (Buffer){
10514 var assert = require('assert')
10515 var base58check = require('bs58check')
10516 var ecdsa = require('./ecdsa')
10517 var networks = require('./networks')
10518 var randomBytes = require('randombytes')
10519 var typeForce = require('typeforce')
10521 var BigInteger = require('bigi')
10522 var ECPubKey = require('./ecpubkey')
10524 var ecurve = require('ecurve')
10525 var secp256k1 = ecurve.getCurveByName('secp256k1')
10527 function ECKey (d, compressed) {
10528 assert(d.signum()
> 0, 'Private key must be greater than
0')
10529 assert(d.compareTo(ECKey.curve.n) <
0, 'Private key must be less than the curve order')
10531 var Q = ECKey.curve.G.multiply(d)
10534 this.pub = new ECPubKey(Q, compressed)
10538 ECKey.curve = secp256k1
10540 // Static constructors
10541 ECKey.fromWIF = function (string) {
10542 var payload = base58check.decode(string)
10543 var compressed = false
10545 // Ignore the version byte
10546 payload = payload.slice(
1)
10548 if (payload.length ===
33) {
10549 assert.strictEqual(payload[
32],
0x01, 'Invalid compression flag')
10551 // Truncate the compression flag
10552 payload = payload.slice(
0, -
1)
10556 assert.equal(payload.length,
32, 'Invalid WIF payload length')
10558 var d = BigInteger.fromBuffer(payload)
10559 return new ECKey(d, compressed)
10562 ECKey.makeRandom = function (compressed, rng) {
10563 rng = rng || randomBytes
10565 var buffer = rng(
32)
10566 typeForce('Buffer', buffer)
10567 assert.equal(buffer.length,
32, 'Expected
256-bit Buffer from RNG')
10569 var d = BigInteger.fromBuffer(buffer)
10570 d = d.mod(ECKey.curve.n)
10572 return new ECKey(d, compressed)
10575 // Export functions
10576 ECKey.prototype.toWIF = function (network) {
10577 network = network || networks.bitcoin
10579 var bufferLen = this.pub.compressed ?
34 :
33
10580 var buffer = new Buffer(bufferLen)
10582 buffer.writeUInt8(network.wif,
0)
10583 this.d.toBuffer(
32).copy(buffer,
1)
10585 if (this.pub.compressed) {
10586 buffer.writeUInt8(
0x01,
33)
10589 return base58check.encode(buffer)
10593 ECKey.prototype.sign = function (hash) {
10594 return ecdsa.sign(ECKey.curve, hash, this.d)
10597 module.exports = ECKey
10599 }).call(this,require(
"buffer").Buffer)
10600 },{
"./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){
10601 (function (Buffer){
10602 var crypto = require('./crypto')
10603 var ecdsa = require('./ecdsa')
10604 var typeForce = require('typeforce')
10605 var networks = require('./networks')
10607 var Address = require('./address')
10609 var ecurve = require('ecurve')
10610 var secp256k1 = ecurve.getCurveByName('secp256k1')
10612 function ECPubKey (Q, compressed) {
10613 if (compressed === undefined) {
10617 typeForce('Point', Q)
10618 typeForce('Boolean', compressed)
10620 this.compressed = compressed
10625 ECPubKey.curve = secp256k1
10627 // Static constructors
10628 ECPubKey.fromBuffer = function (buffer) {
10629 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10630 return new ECPubKey(Q, Q.compressed)
10633 ECPubKey.fromHex = function (hex) {
10634 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10638 ECPubKey.prototype.getAddress = function (network) {
10639 network = network || networks.bitcoin
10641 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10644 ECPubKey.prototype.verify = function (hash, signature) {
10645 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10648 // Export functions
10649 ECPubKey.prototype.toBuffer = function () {
10650 return this.Q.getEncoded(this.compressed)
10653 ECPubKey.prototype.toHex = function () {
10654 return this.toBuffer().toString('hex')
10657 module.exports = ECPubKey
10659 }).call(this,require(
"buffer").Buffer)
10660 },{
"./address":
54,
"./crypto":
58,
"./ecdsa":
59,
"./networks":
66,
"buffer":
7,
"ecurve":
49,
"typeforce":
53}],
62:[function(require,module,exports){
10661 (function (Buffer){
10662 var assert = require('assert')
10663 var typeForce = require('typeforce')
10665 var BigInteger = require('bigi')
10667 function ECSignature (r, s) {
10668 typeForce('BigInteger', r)
10669 typeForce('BigInteger', s)
10675 ECSignature.parseCompact = function (buffer) {
10676 assert.equal(buffer.length,
65, 'Invalid signature length')
10677 var i = buffer.readUInt8(
0) -
27
10680 assert.equal(i, i &
7, 'Invalid signature parameter')
10681 var compressed = !!(i &
4)
10683 // Recovery param only
10686 var r = BigInteger.fromBuffer(buffer.slice(
1,
33))
10687 var s = BigInteger.fromBuffer(buffer.slice(
33))
10690 compressed: compressed,
10692 signature: new ECSignature(r, s)
10696 ECSignature.fromDER = function (buffer) {
10697 assert.equal(buffer.readUInt8(
0),
0x30, 'Not a DER sequence')
10698 assert.equal(buffer.readUInt8(
1), buffer.length -
2, 'Invalid sequence length')
10699 assert.equal(buffer.readUInt8(
2),
0x02, 'Expected a DER integer')
10701 var rLen = buffer.readUInt8(
3)
10702 assert(rLen
> 0, 'R length is zero')
10704 var offset =
4 + rLen
10705 assert.equal(buffer.readUInt8(offset),
0x02, 'Expected a DER integer (
2)')
10707 var sLen = buffer.readUInt8(offset +
1)
10708 assert(sLen
> 0, 'S length is zero')
10710 var rB = buffer.slice(
4, offset)
10711 var sB = buffer.slice(offset +
2)
10714 if (rLen
> 1 && rB.readUInt8(
0) ===
0x00) {
10715 assert(rB.readUInt8(
1) &
0x80, 'R value excessively padded')
10718 if (sLen
> 1 && sB.readUInt8(
0) ===
0x00) {
10719 assert(sB.readUInt8(
1) &
0x80, 'S value excessively padded')
10722 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10723 var r = BigInteger.fromDERInteger(rB)
10724 var s = BigInteger.fromDERInteger(sB)
10726 assert(r.signum()
>=
0, 'R value is negative')
10727 assert(s.signum()
>=
0, 'S value is negative')
10729 return new ECSignature(r, s)
10732 // BIP62:
1 byte hashType flag (only
0x01,
0x02,
0x03,
0x81,
0x82 and
0x83 are allowed)
10733 ECSignature.parseScriptSignature = function (buffer) {
10734 var hashType = buffer.readUInt8(buffer.length -
1)
10735 var hashTypeMod = hashType & ~
0x80
10737 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
10740 signature: ECSignature.fromDER(buffer.slice(
0, -
1)),
10745 ECSignature.prototype.toCompact = function (i, compressed) {
10752 var buffer = new Buffer(
65)
10753 buffer.writeUInt8(i,
0)
10755 this.r.toBuffer(
32).copy(buffer,
1)
10756 this.s.toBuffer(
32).copy(buffer,
33)
10761 ECSignature.prototype.toDER = function () {
10762 var rBa = this.r.toDERInteger()
10763 var sBa = this.s.toDERInteger()
10768 sequence.push(
0x02, rBa.length)
10769 sequence = sequence.concat(rBa)
10772 sequence.push(
0x02, sBa.length)
10773 sequence = sequence.concat(sBa)
10776 sequence.unshift(
0x30, sequence.length)
10778 return new Buffer(sequence)
10781 ECSignature.prototype.toScriptSignature = function (hashType) {
10782 var hashTypeMod = hashType & ~
0x80
10783 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
10785 var hashTypeBuffer = new Buffer(
1)
10786 hashTypeBuffer.writeUInt8(hashType,
0)
10788 return Buffer.concat([this.toDER(), hashTypeBuffer])
10791 module.exports = ECSignature
10793 }).call(this,require(
"buffer").Buffer)
10794 },{
"assert":
5,
"bigi":
3,
"buffer":
7,
"typeforce":
53}],
63:[function(require,module,exports){
10795 (function (Buffer){
10796 var assert = require('assert')
10797 var base58check = require('bs58check')
10798 var bcrypto = require('./crypto')
10799 var createHmac = require('create-hmac')
10800 var typeForce = require('typeforce')
10801 var networks = require('./networks')
10803 var BigInteger = require('bigi')
10804 var ECKey = require('./eckey')
10805 var ECPubKey = require('./ecpubkey')
10807 var ecurve = require('ecurve')
10808 var curve = ecurve.getCurveByName('secp256k1')
10810 function findBIP32NetworkByVersion (version) {
10811 for (var name in networks) {
10812 var network = networks[name]
10814 if (version === network.bip32.private || version === network.bip32.public) {
10819 assert(false, 'Could not find network for ' + version.toString(
16))
10822 function HDNode (K, chainCode, network) {
10823 network = network || networks.bitcoin
10825 typeForce('Buffer', chainCode)
10827 assert.equal(chainCode.length,
32, 'Expected chainCode length of
32, got ' + chainCode.length)
10828 assert(network.bip32, 'Unknown BIP32 constants for network')
10830 this.chainCode = chainCode
10833 this.parentFingerprint =
0x00000000
10834 this.network = network
10836 if (K instanceof BigInteger) {
10837 this.privKey = new ECKey(K, true)
10838 this.pubKey = this.privKey.pub
10839 } else if (K instanceof ECKey) {
10840 assert(K.pub.compressed, 'ECKey must be compressed')
10842 this.pubKey = K.pub
10843 } else if (K instanceof ECPubKey) {
10844 assert(K.compressed, 'ECPubKey must be compressed')
10847 this.pubKey = new ECPubKey(K, true)
10851 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
10852 HDNode.HIGHEST_BIT =
0x80000000
10855 HDNode.fromSeedBuffer = function (seed, network) {
10856 typeForce('Buffer', seed)
10858 assert(seed.length
>=
16, 'Seed should be at least
128 bits')
10859 assert(seed.length <=
64, 'Seed should be at most
512 bits')
10861 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
10862 var IL = I.slice(
0,
32)
10863 var IR = I.slice(
32)
10865 // In case IL is
0 or
>= n, the master key is invalid
10866 // This is handled by `new ECKey` in the HDNode constructor
10867 var pIL = BigInteger.fromBuffer(IL)
10869 return new HDNode(pIL, IR, network)
10872 HDNode.fromSeedHex = function (hex, network) {
10873 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
10876 HDNode.fromBase58 = function (string, network) {
10877 return HDNode.fromBuffer(base58check.decode(string), network, true)
10880 // FIXME: remove in
2.x.y
10881 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
10882 if (!__ignoreDeprecation) {
10883 console.warn('HDNode.fromBuffer() is deprecated for removal in
2.x.y, use fromBase58 instead')
10886 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
10888 //
4 byte: version bytes
10889 var version = buffer.readUInt32BE(
0)
10892 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
10896 network = findBIP32NetworkByVersion(version)
10899 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ...
10900 var depth = buffer.readUInt8(
4)
10902 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
10903 var parentFingerprint = buffer.readUInt32BE(
5)
10905 assert.strictEqual(parentFingerprint,
0x00000000, 'Invalid parent fingerprint')
10908 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
10909 // This is encoded in MSB order. (
0x00000000 if master key)
10910 var index = buffer.readUInt32BE(
9)
10911 assert(depth
> 0 || index ===
0, 'Invalid index')
10913 //
32 bytes: the chain code
10914 var chainCode = buffer.slice(
13,
45)
10917 //
33 bytes: private key data (
0x00 + k)
10918 if (version === network.bip32.private) {
10919 assert.strictEqual(buffer.readUInt8(
45),
0x00, 'Invalid private key')
10920 data = buffer.slice(
46,
78)
10921 var d = BigInteger.fromBuffer(data)
10922 hd = new HDNode(d, chainCode, network)
10924 //
33 bytes: public key data (
0x02 + X or
0x03 + X)
10926 data = buffer.slice(
45,
78)
10927 var Q = ecurve.Point.decodeFrom(curve, data)
10928 assert.equal(Q.compressed, true, 'Invalid public key')
10930 // Verify that the X coordinate in the public point corresponds to a point on the curve.
10931 // If not, the extended public key is invalid.
10934 hd = new HDNode(Q, chainCode, network)
10939 hd.parentFingerprint = parentFingerprint
10944 // FIXME: remove in
2.x.y
10945 HDNode.fromHex = function (hex, network) {
10946 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
10949 HDNode.prototype.getIdentifier = function () {
10950 return bcrypto.hash160(this.pubKey.toBuffer())
10953 HDNode.prototype.getFingerprint = function () {
10954 return this.getIdentifier().slice(
0,
4)
10957 HDNode.prototype.getAddress = function () {
10958 return this.pubKey.getAddress(this.network)
10961 HDNode.prototype.neutered = function () {
10962 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
10963 neutered.depth = this.depth
10964 neutered.index = this.index
10965 neutered.parentFingerprint = this.parentFingerprint
10970 HDNode.prototype.toBase58 = function (isPrivate) {
10971 return base58check.encode(this.toBuffer(isPrivate, true))
10974 // FIXME: remove in
2.x.y
10975 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
10976 if (isPrivate === undefined) {
10977 isPrivate = !!this.privKey
10979 // FIXME: remove in
2.x.y
10981 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
10984 if (!__ignoreDeprecation) {
10985 console.warn('HDNode.toBuffer() is deprecated for removal in
2.x.y, use toBase58 instead')
10989 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
10990 var buffer = new Buffer(HDNode.LENGTH)
10992 //
4 bytes: version bytes
10993 buffer.writeUInt32BE(version,
0)
10996 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ....
10997 buffer.writeUInt8(this.depth,
4)
10999 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11000 buffer.writeUInt32BE(this.parentFingerprint,
5)
11002 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11003 // This is encoded in Big endian. (
0x00000000 if master key)
11004 buffer.writeUInt32BE(this.index,
9)
11006 //
32 bytes: the chain code
11007 this.chainCode.copy(buffer,
13)
11009 //
33 bytes: the public key or private key data
11011 // FIXME: remove in
2.x.y
11012 assert(this.privKey, 'Missing private key')
11014 //
0x00 + k for private keys
11015 buffer.writeUInt8(
0,
45)
11016 this.privKey.d.toBuffer(
32).copy(buffer,
46)
11018 // X9.62 encoding for public keys
11019 this.pubKey.toBuffer().copy(buffer,
45)
11025 // FIXME: remove in
2.x.y
11026 HDNode.prototype.toHex = function (isPrivate) {
11027 return this.toBuffer(isPrivate).toString('hex')
11030 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#child-key-derivation-ckd-functions
11031 HDNode.prototype.derive = function (index) {
11032 var isHardened = index
>= HDNode.HIGHEST_BIT
11033 var indexBuffer = new Buffer(
4)
11034 indexBuffer.writeUInt32BE(index,
0)
11040 assert(this.privKey, 'Could not derive hardened child key')
11042 // data =
0x00 || ser256(kpar) || ser32(index)
11043 data = Buffer.concat([
11044 this.privKey.d.toBuffer(
33),
11050 // data = serP(point(kpar)) || ser32(index)
11051 // = serP(Kpar) || ser32(index)
11052 data = Buffer.concat([
11053 this.pubKey.toBuffer(),
11058 var I = createHmac('sha512', this.chainCode).update(data).digest()
11059 var IL = I.slice(
0,
32)
11060 var IR = I.slice(
32)
11062 var pIL = BigInteger.fromBuffer(IL)
11064 // In case parse256(IL)
>= n, proceed with the next value for i
11065 if (pIL.compareTo(curve.n)
>=
0) {
11066 return this.derive(index +
1)
11069 // Private parent key -
> private child key
11071 if (this.privKey) {
11072 // ki = parse256(IL) + kpar (mod n)
11073 var ki = pIL.add(this.privKey.d).mod(curve.n)
11075 // In case ki ==
0, proceed with the next value for i
11076 if (ki.signum() ===
0) {
11077 return this.derive(index +
1)
11080 hd = new HDNode(ki, IR, this.network)
11082 // Public parent key -
> public child key
11084 // Ki = point(parse256(IL)) + Kpar
11086 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11088 // In case Ki is the point at infinity, proceed with the next value for i
11089 if (curve.isInfinity(Ki)) {
11090 return this.derive(index +
1)
11093 hd = new HDNode(Ki, IR, this.network)
11096 hd.depth = this.depth +
1
11098 hd.parentFingerprint = this.getFingerprint().readUInt32BE(
0)
11103 HDNode.prototype.deriveHardened = function (index) {
11104 // Only derives hardened private keys by default
11105 return this.derive(index + HDNode.HIGHEST_BIT)
11108 HDNode.prototype.toString = HDNode.prototype.toBase58
11110 module.exports = HDNode
11112 }).call(this,require("buffer").Buffer)
11113 },{"./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){
11115 Address: require('./address'),
11116 base58check: require('./base58check'),
11117 Block: require('./block'),
11118 bufferutils: require('./bufferutils'),
11119 crypto: require('./crypto'),
11120 ecdsa: require('./ecdsa'),
11121 ECKey: require('./eckey'),
11122 ECPubKey: require('./ecpubkey'),
11123 ECSignature: require('./ecsignature'),
11124 Message: require('./message'),
11125 opcodes: require('./opcodes'),
11126 HDNode: require('./hdnode'),
11127 Script: require('./script'),
11128 scripts: require('./scripts'),
11129 Transaction: require('./transaction'),
11130 TransactionBuilder: require('./transaction_builder'),
11131 networks: require('./networks'),
11132 Wallet: require('./wallet')
11135 },{"./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){
11136 (function (Buffer){
11137 var bufferutils = require('./bufferutils')
11138 var crypto = require('./crypto')
11139 var ecdsa = require('./ecdsa')
11140 var networks = require('./networks')
11142 var BigInteger = require('bigi')
11143 var ECPubKey = require('./ecpubkey')
11144 var ECSignature = require('./ecsignature')
11146 var ecurve = require('ecurve')
11147 var ecparams = ecurve.getCurveByName('secp256k1')
11149 function magicHash (message, network) {
11150 var magicPrefix = new Buffer(network.magicPrefix)
11151 var messageBuffer = new Buffer(message)
11152 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11154 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11155 return crypto.hash256(buffer)
11158 function sign (privKey, message, network) {
11159 network = network || networks.bitcoin
11161 var hash = magicHash(message, network)
11162 var signature = privKey.sign(hash)
11163 var e = BigInteger.fromBuffer(hash)
11164 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11166 return signature.toCompact(i, privKey.pub.compressed)
11169 // TODO: network could be implied from address
11170 function verify (address, signature, message, network) {
11171 if (!Buffer.isBuffer(signature)) {
11172 signature = new Buffer(signature, 'base64')
11175 network = network || networks.bitcoin
11177 var hash = magicHash(message, network)
11178 var parsed = ECSignature.parseCompact(signature)
11179 var e = BigInteger.fromBuffer(hash)
11180 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11182 var pubKey = new ECPubKey(Q, parsed.compressed)
11183 return pubKey.getAddress(network).toString() === address.toString()
11187 magicHash: magicHash,
11192 }).call(this,require("buffer").Buffer)
11193 },{"./bufferutils":
57,"./crypto":
58,"./ecdsa":
59,"./ecpubkey":
61,"./ecsignature":
62,"./networks":
66,"bigi":
3,"buffer":
7,"ecurve":
49}],
66:[function(require,module,exports){
11194 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11195 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=
409731
11199 magicPrefix: '\x18Bitcoin Signed Message:\n',
11201 public:
0x0488b21e,
11202 private:
0x0488ade4
11207 dustThreshold:
546, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/core.h#L151-L162
11208 feePerKb:
10000, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/main.cpp#L53
11209 estimateFee: estimateFee('bitcoin')
11212 magicPrefix: '\x18Bitcoin Signed Message:\n',
11214 public:
0x043587cf,
11215 private:
0x04358394
11220 dustThreshold:
546,
11222 estimateFee: estimateFee('testnet')
11225 magicPrefix: '\x19Litecoin Signed Message:\n',
11227 public:
0x019da462,
11228 private:
0x019d9cfe
11233 dustThreshold:
0, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L360-L365
11234 dustSoftThreshold:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.h#L53
11235 feePerKb:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L56
11236 estimateFee: estimateFee('litecoin')
11239 magicPrefix: '\x19Dogecoin Signed Message:\n',
11241 public:
0x02facafd,
11242 private:
0x02fac398
11247 dustThreshold:
0, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/core.h#L155-L160
11248 dustSoftThreshold:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.h#L62
11249 feePerKb:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.cpp#L58
11250 estimateFee: estimateFee('dogecoin')
11253 magicPrefix: '\x18Viacoin Signed Message:\n',
11255 public:
0x0488b21e,
11256 private:
0x0488ade4
11261 dustThreshold:
560,
11262 dustSoftThreshold:
100000,
11263 feePerKb:
100000, //
11264 estimateFee: estimateFee('viacoin')
11267 magicPrefix: '\x18Viacoin Signed Message:\n',
11269 public:
0x043587cf,
11270 private:
0x04358394
11275 dustThreshold:
560,
11276 dustSoftThreshold:
100000,
11278 estimateFee: estimateFee('viacointestnet')
11281 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11283 public:
0x019da462,
11284 private:
0x019d9cfe
11289 dustThreshold:
0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11290 dustSoftThreshold:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11291 feePerKb:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11292 estimateFee: estimateFee('gamerscoin')
11295 magicPrefix: '\x19Jumbucks Signed Message:\n',
11297 public:
0x037a689a,
11298 private:
0x037a6460
11304 dustSoftThreshold:
10000,
11306 estimateFee: estimateFee('jumbucks')
11309 magicPrefix: '\x18Zetacoin Signed Message:\n',
11311 public:
0x0488b21e,
11312 private:
0x0488ade4
11317 dustThreshold:
546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11318 feePerKb:
10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11319 estimateFee: estimateFee('zetacoin')
11323 function estimateFee (type) {
11324 return function (tx) {
11325 var network = networks[type]
11326 var baseFee = network.feePerKb
11327 var byteSize = tx.toBuffer().length
11329 var fee = baseFee * Math.ceil(byteSize /
1000)
11330 if (network.dustSoftThreshold === undefined) return fee
11332 tx.outs.forEach(function (e) {
11333 if (e.value < network.dustSoftThreshold) {
11342 module.exports = networks
11344 },{}],
67:[function(require,module,exports){
11385 OP_TOALTSTACK:
107,
11386 OP_FROMALTSTACK:
108,
11418 OP_EQUALVERIFY:
136,
11443 OP_NUMEQUALVERIFY:
157,
11444 OP_NUMNOTEQUAL:
158,
11446 OP_GREATERTHAN:
160,
11447 OP_LESSTHANOREQUAL:
161,
11448 OP_GREATERTHANOREQUAL:
162,
11460 OP_CODESEPARATOR:
171,
11462 OP_CHECKSIGVERIFY:
173,
11463 OP_CHECKMULTISIG:
174,
11464 OP_CHECKMULTISIGVERIFY:
175,
11478 // template matching params
11479 OP_PUBKEYHASH:
253,
11481 OP_INVALIDOPCODE:
255
11484 },{}],
68:[function(require,module,exports){
11485 (function (Buffer){
11486 var assert = require('assert')
11487 var bufferutils = require('./bufferutils')
11488 var crypto = require('./crypto')
11489 var typeForce = require('typeforce')
11490 var opcodes = require('./opcodes')
11492 function Script (buffer, chunks) {
11493 typeForce('Buffer', buffer)
11494 typeForce('Array', chunks)
11496 this.buffer = buffer
11497 this.chunks = chunks
11500 Script.fromASM = function (asm) {
11501 var strChunks = asm.split(' ')
11502 var chunks = strChunks.map(function (strChunk) {
11504 if (strChunk in opcodes) {
11505 return opcodes[strChunk]
11509 return new Buffer(strChunk, 'hex')
11513 return Script.fromChunks(chunks)
11516 Script.fromBuffer = function (buffer) {
11520 while (i < buffer.length) {
11521 var opcode = buffer.readUInt8(i)
11524 if ((opcode
> opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11525 var d = bufferutils.readPushDataInt(buffer, i)
11527 // did reading a pushDataInt fail? return non-chunked script
11528 if (d === null) return new Script(buffer, [])
11531 // attempt to read too much data?
11532 if (i + d.number
> buffer.length) return new Script(buffer, [])
11534 var data = buffer.slice(i, i + d.number)
11541 chunks.push(opcode)
11547 return new Script(buffer, chunks)
11550 Script.fromChunks = function (chunks) {
11551 typeForce('Array', chunks)
11553 var bufferSize = chunks.reduce(function (accum, chunk) {
11555 if (Buffer.isBuffer(chunk)) {
11556 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11563 var buffer = new Buffer(bufferSize)
11566 chunks.forEach(function (chunk) {
11568 if (Buffer.isBuffer(chunk)) {
11569 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11571 chunk.copy(buffer, offset)
11572 offset += chunk.length
11576 buffer.writeUInt8(chunk, offset)
11581 assert.equal(offset, buffer.length, 'Could not decode chunks')
11582 return new Script(buffer, chunks)
11585 Script.fromHex = function (hex) {
11586 return Script.fromBuffer(new Buffer(hex, 'hex'))
11589 Script.EMPTY = Script.fromChunks([])
11591 Script.prototype.getHash = function () {
11592 return crypto.hash160(this.buffer)
11595 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11596 Script.prototype.without = function (needle) {
11597 return Script.fromChunks(this.chunks.filter(function (op) {
11598 return op !== needle
11602 var reverseOps = []
11603 for (var op in opcodes) {
11604 var code = opcodes[op]
11605 reverseOps[code] = op
11608 Script.prototype.toASM = function () {
11609 return this.chunks.map(function (chunk) {
11611 if (Buffer.isBuffer(chunk)) {
11612 return chunk.toString('hex')
11616 return reverseOps[chunk]
11621 Script.prototype.toBuffer = function () {
11625 Script.prototype.toHex = function () {
11626 return this.toBuffer().toString('hex')
11629 module.exports = Script
11631 }).call(this,require("buffer").Buffer)
11632 },{"./bufferutils":
57,"./crypto":
58,"./opcodes":
67,"assert":
5,"buffer":
7,"typeforce":
53}],
69:[function(require,module,exports){
11633 (function (Buffer){
11634 var assert = require('assert')
11635 var ops = require('./opcodes')
11636 var typeForce = require('typeforce')
11638 var ecurve = require('ecurve')
11639 var curve = ecurve.getCurveByName('secp256k1')
11641 var ECSignature = require('./ecsignature')
11642 var Script = require('./script')
11644 function isCanonicalPubKey (buffer) {
11645 if (!Buffer.isBuffer(buffer)) return false
11648 ecurve.Point.decodeFrom(curve, buffer)
11650 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11659 function isCanonicalSignature (buffer) {
11660 if (!Buffer.isBuffer(buffer)) return false
11663 ECSignature.parseScriptSignature(buffer)
11665 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/))) {
11675 function isPubKeyHashInput (script) {
11676 return script.chunks.length ===
2 &&
11677 isCanonicalSignature(script.chunks[
0]) &&
11678 isCanonicalPubKey(script.chunks[
1])
11681 function isPubKeyHashOutput (script) {
11682 return script.chunks.length ===
5 &&
11683 script.chunks[
0] === ops.OP_DUP &&
11684 script.chunks[
1] === ops.OP_HASH160 &&
11685 Buffer.isBuffer(script.chunks[
2]) &&
11686 script.chunks[
2].length ===
20 &&
11687 script.chunks[
3] === ops.OP_EQUALVERIFY &&
11688 script.chunks[
4] === ops.OP_CHECKSIG
11691 function isPubKeyInput (script) {
11692 return script.chunks.length ===
1 &&
11693 isCanonicalSignature(script.chunks[
0])
11696 function isPubKeyOutput (script) {
11697 return script.chunks.length ===
2 &&
11698 isCanonicalPubKey(script.chunks[
0]) &&
11699 script.chunks[
1] === ops.OP_CHECKSIG
11702 function isScriptHashInput (script, allowIncomplete) {
11703 if (script.chunks.length <
2) return false
11705 var lastChunk = script.chunks[script.chunks.length -
1]
11706 if (!Buffer.isBuffer(lastChunk)) return false
11708 var scriptSig = Script.fromChunks(script.chunks.slice(
0, -
1))
11709 var redeemScript = Script.fromBuffer(lastChunk)
11711 // is redeemScript a valid script?
11712 if (redeemScript.chunks.length ===
0) return false
11714 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11717 function isScriptHashOutput (script) {
11718 return script.chunks.length ===
3 &&
11719 script.chunks[
0] === ops.OP_HASH160 &&
11720 Buffer.isBuffer(script.chunks[
1]) &&
11721 script.chunks[
1].length ===
20 &&
11722 script.chunks[
2] === ops.OP_EQUAL
11725 // allowIncomplete is to account for combining signatures
11726 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11727 function isMultisigInput (script, allowIncomplete) {
11728 if (script.chunks.length <
2) return false
11729 if (script.chunks[
0] !== ops.OP_0) return false
11731 if (allowIncomplete) {
11732 return script.chunks.slice(
1).every(function (chunk) {
11733 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11737 return script.chunks.slice(
1).every(isCanonicalSignature)
11740 function isMultisigOutput (script) {
11741 if (script.chunks.length <
4) return false
11742 if (script.chunks[script.chunks.length -
1] !== ops.OP_CHECKMULTISIG) return false
11744 var mOp = script.chunks[
0]
11745 if (mOp === ops.OP_0) return false
11746 if (mOp < ops.OP_1) return false
11747 if (mOp
> ops.OP_16) return false
11749 var nOp = script.chunks[script.chunks.length -
2]
11750 if (nOp === ops.OP_0) return false
11751 if (nOp < ops.OP_1) return false
11752 if (nOp
> ops.OP_16) return false
11754 var m = mOp - (ops.OP_1 -
1)
11755 var n = nOp - (ops.OP_1 -
1)
11756 if (n < m) return false
11758 var pubKeys = script.chunks.slice(
1, -
2)
11759 if (n < pubKeys.length) return false
11761 return pubKeys.every(isCanonicalPubKey)
11764 function isNullDataOutput (script) {
11765 return script.chunks[
0] === ops.OP_RETURN
11768 function classifyOutput (script) {
11769 typeForce('Script', script)
11771 if (isPubKeyHashOutput(script)) {
11772 return 'pubkeyhash'
11773 } else if (isScriptHashOutput(script)) {
11774 return 'scripthash'
11775 } else if (isMultisigOutput(script)) {
11777 } else if (isPubKeyOutput(script)) {
11779 } else if (isNullDataOutput(script)) {
11783 return 'nonstandard'
11786 function classifyInput (script, allowIncomplete) {
11787 typeForce('Script', script)
11789 if (isPubKeyHashInput(script)) {
11790 return 'pubkeyhash'
11791 } else if (isMultisigInput(script, allowIncomplete)) {
11793 } else if (isScriptHashInput(script, allowIncomplete)) {
11794 return 'scripthash'
11795 } else if (isPubKeyInput(script)) {
11799 return 'nonstandard'
11802 // Standard Script Templates
11803 // {pubKey} OP_CHECKSIG
11804 function pubKeyOutput (pubKey) {
11805 return Script.fromChunks([
11811 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
11812 function pubKeyHashOutput (hash) {
11813 typeForce('Buffer', hash)
11815 return Script.fromChunks([
11819 ops.OP_EQUALVERIFY,
11824 // OP_HASH160 {scriptHash} OP_EQUAL
11825 function scriptHashOutput (hash) {
11826 typeForce('Buffer', hash)
11828 return Script.fromChunks([
11835 // m [pubKeys ...] n OP_CHECKMULTISIG
11836 function multisigOutput (m, pubKeys) {
11837 typeForce(['ECPubKey'], pubKeys)
11839 assert(pubKeys.length
>= m, 'Not enough pubKeys provided')
11841 var pubKeyBuffers = pubKeys.map(function (pubKey) {
11842 return pubKey.toBuffer()
11844 var n = pubKeys.length
11846 return Script.fromChunks([].concat(
11847 (ops.OP_1 -
1) + m,
11849 (ops.OP_1 -
1) + n,
11850 ops.OP_CHECKMULTISIG
11855 function pubKeyInput (signature) {
11856 typeForce('Buffer', signature)
11858 return Script.fromChunks([signature])
11861 // {signature} {pubKey}
11862 function pubKeyHashInput (signature, pubKey) {
11863 typeForce('Buffer', signature)
11865 return Script.fromChunks([signature, pubKey.toBuffer()])
11868 //
<scriptSig> {serialized scriptPubKey script}
11869 function scriptHashInput (scriptSig, scriptPubKey) {
11870 return Script.fromChunks([].concat(
11872 scriptPubKey.toBuffer()
11876 // OP_0 [signatures ...]
11877 function multisigInput (signatures, scriptPubKey) {
11878 if (scriptPubKey) {
11879 assert(isMultisigOutput(scriptPubKey))
11881 var mOp = scriptPubKey.chunks[
0]
11882 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length -
2]
11883 var m = mOp - (ops.OP_1 -
1)
11884 var n = nOp - (ops.OP_1 -
1)
11886 assert(signatures.length
>= m, 'Not enough signatures provided')
11887 assert(signatures.length <= n, 'Too many signatures provided')
11890 return Script.fromChunks([].concat(ops.OP_0, signatures))
11893 function nullDataOutput (data) {
11894 return Script.fromChunks([ops.OP_RETURN, data])
11898 isCanonicalPubKey: isCanonicalPubKey,
11899 isCanonicalSignature: isCanonicalSignature,
11900 isPubKeyHashInput: isPubKeyHashInput,
11901 isPubKeyHashOutput: isPubKeyHashOutput,
11902 isPubKeyInput: isPubKeyInput,
11903 isPubKeyOutput: isPubKeyOutput,
11904 isScriptHashInput: isScriptHashInput,
11905 isScriptHashOutput: isScriptHashOutput,
11906 isMultisigInput: isMultisigInput,
11907 isMultisigOutput: isMultisigOutput,
11908 isNullDataOutput: isNullDataOutput,
11909 classifyOutput: classifyOutput,
11910 classifyInput: classifyInput,
11911 pubKeyOutput: pubKeyOutput,
11912 pubKeyHashOutput: pubKeyHashOutput,
11913 scriptHashOutput: scriptHashOutput,
11914 multisigOutput: multisigOutput,
11915 pubKeyInput: pubKeyInput,
11916 pubKeyHashInput: pubKeyHashInput,
11917 scriptHashInput: scriptHashInput,
11918 multisigInput: multisigInput,
11919 dataOutput: function (data) {
11920 console.warn('dataOutput is deprecated, use nullDataOutput by
2.0.0')
11921 return nullDataOutput(data)
11923 nullDataOutput: nullDataOutput
11926 }).call(this,require("buffer").Buffer)
11927 },{"./ecsignature":
62,"./opcodes":
67,"./script":
68,"assert":
5,"buffer":
7,"ecurve":
49,"typeforce":
53}],
70:[function(require,module,exports){
11928 (function (Buffer){
11929 var assert = require('assert')
11930 var bufferutils = require('./bufferutils')
11931 var crypto = require('./crypto')
11932 var typeForce = require('typeforce')
11933 var opcodes = require('./opcodes')
11934 var scripts = require('./scripts')
11936 var Address = require('./address')
11937 var ECSignature = require('./ecsignature')
11938 var Script = require('./script')
11940 function Transaction () {
11947 Transaction.DEFAULT_SEQUENCE =
0xffffffff
11948 Transaction.SIGHASH_ALL =
0x01
11949 Transaction.SIGHASH_NONE =
0x02
11950 Transaction.SIGHASH_SINGLE =
0x03
11951 Transaction.SIGHASH_ANYONECANPAY =
0x80
11953 Transaction.fromBuffer = function (buffer, __disableAssert) {
11955 function readSlice (n) {
11957 return buffer.slice(offset - n, offset)
11960 function readUInt32 () {
11961 var i = buffer.readUInt32LE(offset)
11966 function readUInt64 () {
11967 var i = bufferutils.readUInt64LE(buffer, offset)
11972 function readVarInt () {
11973 var vi = bufferutils.readVarInt(buffer, offset)
11978 function readScript () {
11979 return Script.fromBuffer(readSlice(readVarInt()))
11982 function readGenerationScript () {
11983 return new Script(readSlice(readVarInt()), [])
11986 var tx = new Transaction()
11987 tx.version = readUInt32()
11989 var vinLen = readVarInt()
11990 for (var i =
0; i < vinLen; ++i) {
11991 var hash = readSlice(
32)
11993 if (Transaction.isCoinbaseHash(hash)) {
11996 index: readUInt32(),
11997 script: readGenerationScript(),
11998 sequence: readUInt32()
12003 index: readUInt32(),
12004 script: readScript(),
12005 sequence: readUInt32()
12010 var voutLen = readVarInt()
12011 for (i =
0; i < voutLen; ++i) {
12013 value: readUInt64(),
12014 script: readScript()
12018 tx.locktime = readUInt32()
12020 if (!__disableAssert) {
12021 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12027 Transaction.fromHex = function (hex) {
12028 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12031 Transaction.isCoinbaseHash = function (buffer) {
12032 return Array.prototype.every.call(buffer, function (x) {
12038 * Create a new txIn.
12040 * Can be called with any of:
12042 * - A transaction and an index
12043 * - A transaction hash and an index
12045 * Note that this method does not sign the created input.
12047 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12048 if (sequence === undefined || sequence === null) {
12049 sequence = Transaction.DEFAULT_SEQUENCE
12052 script = script || Script.EMPTY
12054 if (typeof hash === 'string') {
12055 // TxId hex is big-endian, we need little-endian
12056 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12057 } else if (hash instanceof Transaction) {
12058 hash = hash.getHash()
12061 typeForce('Buffer', hash)
12062 typeForce('Number', index)
12063 typeForce('Number', sequence)
12064 typeForce('Script', script)
12066 assert.equal(hash.length,
32, 'Expected hash length of
32, got ' + hash.length)
12068 // Add the input and return the input's index
12069 return (this.ins.push({
12078 * Create a new txOut.
12080 * Can be called with:
12082 * - A base58 address string and a value
12083 * - An Address object and a value
12084 * - A scriptPubKey Script and a value
12086 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12087 // Attempt to get a valid address if it's a base58 address string
12088 if (typeof scriptPubKey === 'string') {
12089 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12092 // Attempt to get a valid script if it's an Address object
12093 if (scriptPubKey instanceof Address) {
12094 scriptPubKey = scriptPubKey.toOutputScript()
12097 typeForce('Script', scriptPubKey)
12098 typeForce('Number', value)
12100 // Add the output and return the output's index
12101 return (this.outs.push({
12102 script: scriptPubKey,
12107 Transaction.prototype.clone = function () {
12108 var newTx = new Transaction()
12109 newTx.version = this.version
12110 newTx.locktime = this.locktime
12112 newTx.ins = this.ins.map(function (txIn) {
12116 script: txIn.script,
12117 sequence: txIn.sequence
12121 newTx.outs = this.outs.map(function (txOut) {
12123 script: txOut.script,
12132 * Hash transaction for signing a specific input.
12134 * Bitcoin uses a different hash for each signed transaction input. This
12135 * method copies the transaction, makes the necessary changes based on the
12136 * hashType, serializes and finally hashes the result. This hash can then be
12137 * used to sign the transaction input in question.
12139 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12140 // FIXME: remove in
2.x.y
12141 if (arguments[
0] instanceof Script) {
12142 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12144 // swap the arguments (must be stored in tmp, arguments is special)
12145 var tmp = arguments[
0]
12146 inIndex = arguments[
1]
12147 prevOutScript = tmp
12150 typeForce('Number', inIndex)
12151 typeForce('Script', prevOutScript)
12152 typeForce('Number', hashType)
12154 assert(inIndex
>=
0, 'Invalid vin index')
12155 assert(inIndex < this.ins.length, 'Invalid vin index')
12157 var txTmp = this.clone()
12158 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12160 // Blank out other inputs' signatures
12161 txTmp.ins.forEach(function (txIn) {
12162 txIn.script = Script.EMPTY
12164 txTmp.ins[inIndex].script = hashScript
12166 var hashTypeModifier = hashType &
0x1f
12168 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12169 assert(false, 'SIGHASH_NONE not yet supported')
12170 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12171 assert(false, 'SIGHASH_SINGLE not yet supported')
12174 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12175 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12178 var hashTypeBuffer = new Buffer(
4)
12179 hashTypeBuffer.writeInt32LE(hashType,
0)
12181 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12182 return crypto.hash256(buffer)
12185 Transaction.prototype.getHash = function () {
12186 return crypto.hash256(this.toBuffer())
12189 Transaction.prototype.getId = function () {
12190 // TxHash is little-endian, we need big-endian
12191 return bufferutils.reverse(this.getHash()).toString('hex')
12194 Transaction.prototype.toBuffer = function () {
12195 function scriptSize (script) {
12196 var length = script.buffer.length
12198 return bufferutils.varIntSize(length) + length
12201 var buffer = new Buffer(
12203 bufferutils.varIntSize(this.ins.length) +
12204 bufferutils.varIntSize(this.outs.length) +
12205 this.ins.reduce(function (sum, input) { return sum +
40 + scriptSize(input.script) },
0) +
12206 this.outs.reduce(function (sum, output) { return sum +
8 + scriptSize(output.script) },
0)
12210 function writeSlice (slice) {
12211 slice.copy(buffer, offset)
12212 offset += slice.length
12215 function writeUInt32 (i) {
12216 buffer.writeUInt32LE(i, offset)
12220 function writeUInt64 (i) {
12221 bufferutils.writeUInt64LE(buffer, i, offset)
12225 function writeVarInt (i) {
12226 var n = bufferutils.writeVarInt(buffer, i, offset)
12230 writeUInt32(this.version)
12231 writeVarInt(this.ins.length)
12233 this.ins.forEach(function (txIn) {
12234 writeSlice(txIn.hash)
12235 writeUInt32(txIn.index)
12236 writeVarInt(txIn.script.buffer.length)
12237 writeSlice(txIn.script.buffer)
12238 writeUInt32(txIn.sequence)
12241 writeVarInt(this.outs.length)
12242 this.outs.forEach(function (txOut) {
12243 writeUInt64(txOut.value)
12244 writeVarInt(txOut.script.buffer.length)
12245 writeSlice(txOut.script.buffer)
12248 writeUInt32(this.locktime)
12253 Transaction.prototype.toHex = function () {
12254 return this.toBuffer().toString('hex')
12257 Transaction.prototype.setInputScript = function (index, script) {
12258 typeForce('Number', index)
12259 typeForce('Script', script)
12261 this.ins[index].script = script
12264 // FIXME: remove in
2.x.y
12265 Transaction.prototype.sign = function (index, privKey, hashType) {
12266 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12268 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12269 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12271 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12272 this.setInputScript(index, scriptSig)
12275 // FIXME: remove in
2.x.y
12276 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12277 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12279 hashType = hashType || Transaction.SIGHASH_ALL
12281 var hash = this.hashForSignature(index, prevOutScript, hashType)
12282 var signature = privKey.sign(hash)
12284 return signature.toScriptSignature(hashType)
12287 // FIXME: remove in
2.x.y
12288 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12289 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12291 var parsed = ECSignature.parseScriptSignature(buffer)
12292 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12294 return pubKey.verify(hash, parsed.signature)
12297 module.exports = Transaction
12299 }).call(this,require("buffer").Buffer)
12300 },{"./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){
12301 (function (Buffer){
12302 var assert = require('assert')
12303 var ops = require('./opcodes')
12304 var scripts = require('./scripts')
12306 var ECPubKey = require('./ecpubkey')
12307 var ECSignature = require('./ecsignature')
12308 var Script = require('./script')
12309 var Transaction = require('./transaction')
12311 function extractInput (txIn) {
12313 var scriptSig = txIn.script
12315 var prevOutType = scripts.classifyInput(scriptSig, true)
12318 // Re-classify if scriptHash
12319 if (prevOutType === 'scripthash') {
12320 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-
1)[
0])
12321 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12323 scriptSig = Script.fromChunks(scriptSig.chunks.slice(
0, -
1))
12324 scriptType = scripts.classifyInput(scriptSig, true)
12326 scriptType = prevOutType
12329 // Extract hashType, pubKeys and signatures
12330 var hashType, parsed, pubKeys, signatures
12332 switch (scriptType) {
12333 case 'pubkeyhash': {
12334 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12335 hashType = parsed.hashType
12336 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[
1])]
12337 signatures = [parsed.signature]
12338 prevOutScript = pubKeys[
0].getAddress().toOutputScript()
12344 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12345 hashType = parsed.hashType
12346 signatures = [parsed.signature]
12348 if (redeemScript) {
12349 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[
0])]
12356 signatures = scriptSig.chunks.slice(
1).map(function (chunk) {
12357 if (chunk === ops.OP_0) return chunk
12359 var parsed = ECSignature.parseScriptSignature(chunk)
12360 hashType = parsed.hashType
12362 return parsed.signature
12365 if (redeemScript) {
12366 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12374 hashType: hashType,
12375 prevOutScript: prevOutScript,
12376 prevOutType: prevOutType,
12378 redeemScript: redeemScript,
12379 scriptType: scriptType,
12380 signatures: signatures
12384 function TransactionBuilder () {
12385 this.prevTxMap = {}
12386 this.prevOutScripts = {}
12387 this.prevOutTypes = {}
12390 this.tx = new Transaction()
12393 TransactionBuilder.fromTransaction = function (transaction) {
12394 var txb = new TransactionBuilder()
12396 // Copy other transaction fields
12397 txb.tx.version = transaction.version
12398 txb.tx.locktime = transaction.locktime
12400 // Extract/add inputs
12401 transaction.ins.forEach(function (txIn) {
12402 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12405 // Extract/add outputs
12406 transaction.outs.forEach(function (txOut) {
12407 txb.addOutput(txOut.script, txOut.value)
12410 // Extract/add signatures
12411 txb.inputs = transaction.ins.map(function (txIn) {
12412 // TODO: remove me after testcase added
12413 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12415 // Ignore empty scripts
12416 if (txIn.script.buffer.length ===
0) return {}
12418 return extractInput(txIn)
12424 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12428 if (typeof prevTx === 'string') {
12429 prevOutHash = new Buffer(prevTx, 'hex')
12431 // TxId hex is big-endian, we want little-endian hash
12432 Array.prototype.reverse.call(prevOutHash)
12435 } else if (prevTx instanceof Transaction) {
12436 prevOutHash = prevTx.getHash()
12437 prevOutScript = prevTx.outs[index].script
12441 prevOutHash = prevTx
12445 if (prevOutScript) {
12446 var prevOutType = scripts.classifyOutput(prevOutScript)
12448 // if we can, extract pubKey information
12449 switch (prevOutType) {
12451 input.pubKeys = prevOutScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12456 input.pubKeys = prevOutScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12461 if (prevOutType !== 'scripthash') {
12462 input.scriptType = prevOutType
12465 input.prevOutScript = prevOutScript
12466 input.prevOutType = prevOutType
12469 assert(this.inputs.every(function (input2) {
12470 if (input2.hashType === undefined) return true
12472 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12473 }), 'No, this would invalidate signatures')
12475 var prevOut = prevOutHash.toString('hex') + ':' + index
12476 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12478 var vin = this.tx.addInput(prevOutHash, index, sequence)
12479 this.inputs[vin] = input
12480 this.prevTxMap[prevOut] = vin
12485 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12486 assert(this.inputs.every(function (input) {
12487 if (input.hashType === undefined) return true
12489 return (input.hashType &
0x1f) === Transaction.SIGHASH_SINGLE
12490 }), 'No, this would invalidate signatures')
12492 return this.tx.addOutput(scriptPubKey, value)
12495 TransactionBuilder.prototype.build = function () {
12496 return this.__build(false)
12498 TransactionBuilder.prototype.buildIncomplete = function () {
12499 return this.__build(true)
12502 var canSignTypes = {
12503 'pubkeyhash': true,
12508 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12509 if (!allowIncomplete) {
12510 assert(this.tx.ins.length
> 0, 'Transaction has no inputs')
12511 assert(this.tx.outs.length
> 0, 'Transaction has no outputs')
12514 var tx = this.tx.clone()
12516 // Create script signatures from signature meta-data
12517 this.inputs.forEach(function (input, index) {
12518 var scriptType = input.scriptType
12521 if (!allowIncomplete) {
12522 assert(!!scriptType, 'Transaction is not complete')
12523 assert(scriptType in canSignTypes, scriptType + ' not supported')
12524 assert(input.signatures, 'Transaction is missing signatures')
12527 if (input.signatures) {
12528 switch (scriptType) {
12529 case 'pubkeyhash': {
12530 var pkhSignature = input.signatures[
0].toScriptSignature(input.hashType)
12531 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[
0])
12536 // Array.prototype.map is sparse-compatible
12537 var msSignatures = input.signatures.map(function (signature) {
12538 return signature && signature.toScriptSignature(input.hashType)
12541 // fill in blanks with OP_0
12542 if (allowIncomplete) {
12543 for (var i =
0; i < msSignatures.length; ++i) {
12544 if (msSignatures[i]) continue
12546 msSignatures[i] = ops.OP_0
12549 // Array.prototype.filter returns non-sparse array
12550 msSignatures = msSignatures.filter(function (x) { return x })
12553 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12554 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12559 var pkSignature = input.signatures[
0].toScriptSignature(input.hashType)
12560 scriptSig = scripts.pubKeyInput(pkSignature)
12566 // did we build a scriptSig?
12568 // wrap as scriptHash if necessary
12569 if (input.prevOutType === 'scripthash') {
12570 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12573 tx.setInputScript(index, scriptSig)
12580 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12581 assert(index in this.inputs, 'No input at index: ' + index)
12582 hashType = hashType || Transaction.SIGHASH_ALL
12584 var input = this.inputs[index]
12585 var canSign = input.hashType &&
12586 input.prevOutScript &&
12587 input.prevOutType &&
12589 input.scriptType &&
12592 // are we almost ready to sign?
12594 // if redeemScript was provided, enforce consistency
12595 if (redeemScript) {
12596 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12599 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12603 // must be pay-to-scriptHash?
12604 if (redeemScript) {
12605 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12606 if (input.prevOutScript) {
12607 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12609 var scriptHash = input.prevOutScript.chunks[
1]
12610 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12613 var scriptType = scripts.classifyOutput(redeemScript)
12614 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12617 switch (scriptType) {
12619 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12623 case 'pubkeyhash': {
12624 var pkh1 = redeemScript.chunks[
2]
12625 var pkh2 = privKey.pub.getAddress().hash
12627 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12628 pubKeys = [privKey.pub]
12633 pubKeys = redeemScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12638 if (!input.prevOutScript) {
12639 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12640 input.prevOutType = 'scripthash'
12643 input.pubKeys = pubKeys
12644 input.redeemScript = redeemScript
12645 input.scriptType = scriptType
12647 // cannot be pay-to-scriptHash
12649 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12651 // can we otherwise sign this?
12652 if (input.scriptType) {
12653 assert(input.pubKeys, input.scriptType + ' not supported')
12655 // we know nothin' Jon Snow, assume pubKeyHash
12657 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12658 input.prevOutType = 'pubkeyhash'
12659 input.pubKeys = [privKey.pub]
12660 input.scriptType = input.prevOutType
12664 input.hashType = hashType
12665 input.signatures = input.signatures || []
12668 var signatureScript = input.redeemScript || input.prevOutScript
12669 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12671 // enforce signature order matches public keys
12672 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12673 // maintain a local copy of unmatched signatures
12674 var unmatched = input.signatures.slice()
12676 input.signatures = input.pubKeys.map(function (pubKey) {
12679 // check for any matching signatures
12680 unmatched.some(function (signature, i) {
12681 if (!pubKey.verify(signatureHash, signature)) return false
12684 // remove matched signature from unmatched
12685 unmatched.splice(i,
1)
12690 return match || undefined
12694 // enforce in order signing of public keys
12695 assert(input.pubKeys.some(function (pubKey, i) {
12696 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12698 assert(!input.signatures[i], 'Signature already exists')
12699 var signature = privKey.sign(signatureHash)
12700 input.signatures[i] = signature
12703 }, this), 'privateKey cannot sign for this input')
12706 module.exports = TransactionBuilder
12708 }).call(this,require(
"buffer").Buffer)
12709 },{
"./ecpubkey":
61,
"./ecsignature":
62,
"./opcodes":
67,
"./script":
68,
"./scripts":
69,
"./transaction":
70,
"assert":
5,
"buffer":
7}],
72:[function(require,module,exports){
12710 (function (Buffer){
12711 var assert = require('assert')
12712 var bufferutils = require('./bufferutils')
12713 var typeForce = require('typeforce')
12714 var networks = require('./networks')
12715 var randomBytes = require('randombytes')
12717 var Address = require('./address')
12718 var HDNode = require('./hdnode')
12719 var TransactionBuilder = require('./transaction_builder')
12720 var Script = require('./script')
12722 function Wallet (seed, network) {
12723 console.warn('Wallet is deprecated and will be removed in
2.0.0, see #
296')
12725 seed = seed || randomBytes(
32)
12726 network = network || networks.bitcoin
12728 // Stored in a closure to make accidental serialization less likely
12729 var masterKey = HDNode.fromSeedBuffer(seed, network)
12731 // HD first-level child derivation method should be hardened
12732 // See https://bitcointalk.org/index.php?topic=
405179.msg4415254#msg4415254
12733 var accountZero = masterKey.deriveHardened(
0)
12734 var externalAccount = accountZero.derive(
0)
12735 var internalAccount = accountZero.derive(
1)
12737 this.addresses = []
12738 this.changeAddresses = []
12739 this.network = network
12742 // FIXME: remove in
2.0.0
12743 this.unspentMap = {}
12745 // FIXME: remove in
2.0.0
12747 this.newMasterKey = function (seed) {
12748 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12750 seed = seed || randomBytes(
32)
12751 masterKey = HDNode.fromSeedBuffer(seed, network)
12753 accountZero = masterKey.deriveHardened(
0)
12754 externalAccount = accountZero.derive(
0)
12755 internalAccount = accountZero.derive(
1)
12758 me.changeAddresses = []
12764 this.getMasterKey = function () {
12767 this.getAccountZero = function () {
12770 this.getExternalAccount = function () {
12771 return externalAccount
12773 this.getInternalAccount = function () {
12774 return internalAccount
12778 Wallet.prototype.createTransaction = function (to, value, options) {
12779 // FIXME: remove in
2.0.0
12780 if (typeof options !== 'object') {
12781 if (options !== undefined) {
12782 console.warn('Non options object parameters are deprecated, use options object instead')
12785 fixedFee: arguments[
2],
12786 changeAddress: arguments[
3]
12791 options = options || {}
12793 assert(value
> this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
12795 var changeAddress = options.changeAddress
12796 var fixedFee = options.fixedFee
12797 var minConf = options.minConf === undefined ?
0 : options.minConf // FIXME: change minConf:
1 by default in
2.0.0
12799 // filter by minConf, then pending and sort by descending value
12800 var unspents = this.unspents.filter(function (unspent) {
12801 return unspent.confirmations
>= minConf
12802 }).filter(function (unspent) {
12803 return !unspent.pending
12804 }).sort(function (o1, o2) {
12805 return o2.value - o1.value
12810 var subTotal = value
12812 var txb = new TransactionBuilder()
12813 txb.addOutput(to, value)
12815 for (var i =
0; i < unspents.length; ++i) {
12816 var unspent = unspents[i]
12817 addresses.push(unspent.address)
12819 txb.addInput(unspent.txHash, unspent.index)
12821 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
12823 accum += unspent.value
12824 subTotal = value + fee
12826 if (accum
>= subTotal) {
12827 var change = accum - subTotal
12829 if (change
> this.network.dustThreshold) {
12830 txb.addOutput(changeAddress || this.getChangeAddress(), change)
12837 assert(accum
>= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
12839 return this.signWith(txb, addresses).build()
12842 // FIXME: remove in
2.0.0
12843 Wallet.prototype.processPendingTx = function (tx) {
12844 this.__processTx(tx, true)
12847 // FIXME: remove in
2.0.0
12848 Wallet.prototype.processConfirmedTx = function (tx) {
12849 this.__processTx(tx, false)
12852 // FIXME: remove in
2.0.0
12853 Wallet.prototype.__processTx = function (tx, isPending) {
12854 console.warn('processTransaction is considered harmful, see issue #
260 for more information')
12856 var txId = tx.getId()
12857 var txHash = tx.getHash()
12859 tx.outs.forEach(function (txOut, i) {
12863 address = Address.fromOutputScript(txOut.script, this.network).toString()
12865 if (!(e.message.match(/has no matching Address/)))
12869 var myAddresses = this.addresses.concat(this.changeAddresses)
12870 if (myAddresses.indexOf(address)
> -
1) {
12871 var lookup = txId + ':' + i
12872 if (lookup in this.unspentMap) return
12874 // its unique, add it
12877 confirmations:
0, // no way to determine this without more information
12881 value: txOut.value,
12885 this.unspentMap[lookup] = unspent
12886 this.unspents.push(unspent)
12890 tx.ins.forEach(function (txIn) {
12891 // copy and convert to big-endian hex
12892 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
12894 var lookup = txInId + ':' + txIn.index
12895 if (!(lookup in this.unspentMap)) return
12897 var unspent = this.unspentMap[lookup]
12900 unspent.pending = true
12901 unspent.spent = true
12903 delete this.unspentMap[lookup]
12905 this.unspents = this.unspents.filter(function (unspent2) {
12906 return unspent !== unspent2
12912 Wallet.prototype.generateAddress = function () {
12913 var k = this.addresses.length
12914 var address = this.getExternalAccount().derive(k).getAddress()
12916 this.addresses.push(address.toString())
12918 return this.getReceiveAddress()
12921 Wallet.prototype.generateChangeAddress = function () {
12922 var k = this.changeAddresses.length
12923 var address = this.getInternalAccount().derive(k).getAddress()
12925 this.changeAddresses.push(address.toString())
12927 return this.getChangeAddress()
12930 Wallet.prototype.getAddress = function () {
12931 if (this.addresses.length ===
0) {
12932 this.generateAddress()
12935 return this.addresses[this.addresses.length -
1]
12938 Wallet.prototype.getBalance = function (minConf) {
12939 minConf = minConf ||
0
12941 return this.unspents.filter(function (unspent) {
12942 return unspent.confirmations
>= minConf
12944 // FIXME: remove spent filter in
2.0.0
12945 }).filter(function (unspent) {
12946 return !unspent.spent
12947 }).reduce(function (accum, unspent) {
12948 return accum + unspent.value
12952 Wallet.prototype.getChangeAddress = function () {
12953 if (this.changeAddresses.length ===
0) {
12954 this.generateChangeAddress()
12957 return this.changeAddresses[this.changeAddresses.length -
1]
12960 Wallet.prototype.getInternalPrivateKey = function (index) {
12961 return this.getInternalAccount().derive(index).privKey
12964 Wallet.prototype.getPrivateKey = function (index) {
12965 return this.getExternalAccount().derive(index).privKey
12968 Wallet.prototype.getPrivateKeyForAddress = function (address) {
12971 if ((index = this.addresses.indexOf(address))
> -
1) {
12972 return this.getPrivateKey(index)
12975 if ((index = this.changeAddresses.indexOf(address))
> -
1) {
12976 return this.getInternalPrivateKey(index)
12979 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
12982 Wallet.prototype.getUnspentOutputs = function (minConf) {
12983 minConf = minConf ||
0
12985 return this.unspents.filter(function (unspent) {
12986 return unspent.confirmations
>= minConf
12988 // FIXME: remove spent filter in
2.0.0
12989 }).filter(function (unspent) {
12990 return !unspent.spent
12991 }).map(function (unspent) {
12993 address: unspent.address,
12994 confirmations: unspent.confirmations,
12995 index: unspent.index,
12996 txId: unspent.txId,
12997 value: unspent.value,
12999 // FIXME: remove in
2.0.0
13000 hash: unspent.txId,
13001 pending: unspent.pending
13006 Wallet.prototype.setUnspentOutputs = function (unspents) {
13007 this.unspentMap = {}
13008 this.unspents = unspents.map(function (unspent) {
13009 // FIXME: remove unspent.hash in
2.0.0
13010 var txId = unspent.txId || unspent.hash
13011 var index = unspent.index
13013 // FIXME: remove in
2.0.0
13014 if (unspent.hash !== undefined) {
13015 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13018 // FIXME: remove in
2.0.0
13019 if (index === undefined) {
13020 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13021 index = unspent.outputIndex
13024 typeForce('String', txId)
13025 typeForce('Number', index)
13026 typeForce('Number', unspent.value)
13028 assert.equal(txId.length,
64, 'Expected valid txId, got ' + txId)
13029 assert.doesNotThrow(function () {
13030 Address.fromBase58Check(unspent.address)
13031 }, 'Expected Base58 Address, got ' + unspent.address)
13032 assert(isFinite(index), 'Expected finite index, got ' + index)
13034 // FIXME: remove branch in
2.0.0
13035 if (unspent.confirmations !== undefined) {
13036 typeForce('Number', unspent.confirmations)
13039 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13042 address: unspent.address,
13043 confirmations: unspent.confirmations ||
0,
13047 value: unspent.value,
13049 // FIXME: remove in
2.0.0
13050 pending: unspent.pending || false
13053 // FIXME: remove in
2.0.0
13054 this.unspentMap[txId + ':' + index] = unspent
13060 Wallet.prototype.signWith = function (tx, addresses) {
13061 addresses.forEach(function (address, i) {
13062 var privKey = this.getPrivateKeyForAddress(address)
13064 tx.sign(i, privKey)
13070 function estimatePaddedFee (tx, network) {
13071 var tmpTx = tx.clone()
13072 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold ||
0)
13074 return network.estimateFee(tmpTx)
13077 // FIXME:
1.0.0 shims, remove in
2.0.0
13078 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13079 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13081 module.exports = Wallet
13083 }).call(this,require("buffer").Buffer)
13084 },{"./address":
54,"./bufferutils":
57,"./hdnode":
63,"./networks":
66,"./script":
68,"./transaction_builder":
71,"assert":
5,"buffer":
7,"randombytes":
52,"typeforce":
53}]},{},[
64])(
64)
13086 <script>bitcoin.networks.shadow = {
13087 magicPrefix: '\x19ShadowCash Signed Message:\n',
13089 public:
0xEE80286A,
13090 private:
0xEE8031E8
13097 estimateFee: function() { return "unused in this app" },
13100 bitcoin.networks.shadowtn = {
13101 magicPrefix: '\x19ShadowCash Signed Message:\n',
13103 public:
0x76C0FDFB,
13104 private:
0x76C1077A
13111 estimateFee: function() { return "unused in this app" },
13114 bitcoin.networks.clam = {
13116 public:
0xa8c26d64,
13117 private:
0xa8c17826
13123 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13127 /** @fileOverview Javascript cryptography implementation.
13129 * Crush to remove comments, shorten variable names and
13130 * generally reduce transmission size.
13132 * @author Emily Stark
13133 * @author Mike Hamburg
13134 * @author Dan Boneh
13138 /*jslint indent:
2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13139 /*global document, window, escape, unescape, module, require, Uint32Array */
13141 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13143 /** @namespace Symmetric ciphers. */
13146 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13149 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13152 /** @namespace Block cipher modes of operation. */
13155 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13159 * @namespace Bit array encoders and decoders.
13162 * The members of this namespace are functions which translate between
13163 * SJCL's bitArrays and other objects (usually strings). Because it
13164 * isn't always clear which direction is encoding and which is decoding,
13165 * the method names are "fromBits" and "toBits".
13169 /** @namespace Exceptions. */
13171 /** @constructor Ciphertext is corrupt. */
13172 corrupt: function(message) {
13173 this.toString = function() { return "CORRUPT: "+this.message; };
13174 this.message = message;
13177 /** @constructor Invalid parameter. */
13178 invalid: function(message) {
13179 this.toString = function() { return "INVALID: "+this.message; };
13180 this.message = message;
13183 /** @constructor Bug or missing feature in SJCL. @constructor */
13184 bug: function(message) {
13185 this.toString = function() { return "BUG: "+this.message; };
13186 this.message = message;
13189 /** @constructor Something isn't ready. */
13190 notReady: function(message) {
13191 this.toString = function() { return "NOT READY: "+this.message; };
13192 this.message = message;
13197 if(typeof module !== 'undefined' && module.exports){
13198 module.exports = sjcl;
13200 if (typeof define === "function") {
13201 define([], function () {
13209 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13211 * @author Emily Stark
13212 * @author Mike Hamburg
13213 * @author Dan Boneh
13216 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13220 * These objects are the currency accepted by SJCL's crypto functions.
13224 * Most of our crypto primitives operate on arrays of
4-byte words internally,
13225 * but many of them can take arguments that are not a multiple of
4 bytes.
13226 * This library encodes arrays of bits (whose size need not be a multiple of
8
13227 * bits) as arrays of
32-bit words. The bits are packed, big-endian, into an
13228 * array of words,
32 bits at a time. Since the words are double-precision
13229 * floating point numbers, they fit some extra data. We use this (in a private,
13230 * possibly-changing manner) to encode the number of bits actually present
13231 * in the last word of the array.
13235 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13236 * to ciphers like AES which want arrays of words.
13241 * Array slices in units of bits.
13242 * @param {bitArray} a The array to slice.
13243 * @param {Number} bstart The offset to the start of the slice, in bits.
13244 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13245 * slice until the end of the array.
13246 * @return {bitArray} The requested slice.
13248 bitSlice: function (a, bstart, bend) {
13249 a = sjcl.bitArray._shiftRight(a.slice(bstart/
32),
32 - (bstart &
31)).slice(
1);
13250 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13254 * Extract a number packed into a bit array.
13255 * @param {bitArray} a The array to slice.
13256 * @param {Number} bstart The offset to the start of the slice, in bits.
13257 * @param {Number} length The length of the number to extract.
13258 * @return {Number} The requested slice.
13260 extract: function(a, bstart, blength) {
13261 // FIXME: this Math.floor is not necessary at all, but for some reason
13262 // seems to suppress a bug in the Chromium JIT.
13263 var x, sh = Math.floor((-bstart-blength) &
31);
13264 if ((bstart + blength -
1 ^ bstart) & -
32) {
13265 // it crosses a boundary
13266 x = (a[bstart/
32|
0] << (
32 - sh)) ^ (a[bstart/
32+
1|
0]
>>> sh);
13268 // within a single word
13269 x = a[bstart/
32|
0]
>>> sh;
13271 return x & ((
1<
<blength) -
1);
13275 * Concatenate two bit arrays.
13276 * @param {bitArray} a1 The first array.
13277 * @param {bitArray} a2 The second array.
13278 * @return {bitArray} The concatenation of a1 and a2.
13280 concat: function (a1, a2) {
13281 if (a1.length ===
0 || a2.length ===
0) {
13282 return a1.concat(a2);
13285 var last = a1[a1.length-
1], shift = sjcl.bitArray.getPartial(last);
13286 if (shift ===
32) {
13287 return a1.concat(a2);
13289 return sjcl.bitArray._shiftRight(a2, shift, last|
0, a1.slice(
0,a1.length-
1));
13294 * Find the length of an array of bits.
13295 * @param {bitArray} a The array.
13296 * @return {Number} The length of a, in bits.
13298 bitLength: function (a) {
13299 var l = a.length, x;
13300 if (l ===
0) { return
0; }
13302 return (l-
1) *
32 + sjcl.bitArray.getPartial(x);
13306 * Truncate an array.
13307 * @param {bitArray} a The array.
13308 * @param {Number} len The length to truncate to, in bits.
13309 * @return {bitArray} A new array, truncated to len bits.
13311 clamp: function (a, len) {
13312 if (a.length *
32 < len) { return a; }
13313 a = a.slice(
0, Math.ceil(len /
32));
13316 if (l
> 0 && len) {
13317 a[l-
1] = sjcl.bitArray.partial(len, a[l-
1] &
0x80000000 >> (len-
1),
1);
13323 * Make a partial word for a bit array.
13324 * @param {Number} len The number of bits in the word.
13325 * @param {Number} x The bits.
13326 * @param {Number} [
0] _end Pass
1 if x has already been shifted to the high side.
13327 * @return {Number} The partial word.
13329 partial: function (len, x, _end) {
13330 if (len ===
32) { return x; }
13331 return (_end ? x|
0 : x << (
32-len)) + len *
0x10000000000;
13335 * Get the number of bits used by a partial word.
13336 * @param {Number} x The partial word.
13337 * @return {Number} The number of bits used by the partial word.
13339 getPartial: function (x) {
13340 return Math.round(x/
0x10000000000) ||
32;
13344 * Compare two arrays for equality in a predictable amount of time.
13345 * @param {bitArray} a The first array.
13346 * @param {bitArray} b The second array.
13347 * @return {boolean} true if a == b; false otherwise.
13349 equal: function (a, b) {
13350 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13354 for (i=
0; i
<a.length; i++) {
13360 /** Shift an array right.
13361 * @param {bitArray} a The array to shift.
13362 * @param {Number} shift The number of bits to shift.
13363 * @param {Number} [carry=
0] A byte to carry in
13364 * @param {bitArray} [out=[]] An array to prepend to the output.
13367 _shiftRight: function (a, shift, carry, out) {
13368 var i, last2=
0, shift2;
13369 if (out === undefined) { out = []; }
13371 for (; shift
>=
32; shift -=
32) {
13376 return out.concat(a);
13379 for (i=
0; i
<a.length; i++) {
13380 out.push(carry | a[i]
>>>shift);
13381 carry = a[i] << (
32-shift);
13383 last2 = a.length ? a[a.length-
1] :
0;
13384 shift2 = sjcl.bitArray.getPartial(last2);
13385 out.push(sjcl.bitArray.partial(shift+shift2 &
31, (shift + shift2
> 32) ? carry : out.pop(),
1));
13389 /** xor a block of
4 words together.
13392 _xor4: function(x,y) {
13393 return [x[
0]^y[
0],x[
1]^y[
1],x[
2]^y[
2],x[
3]^y[
3]];
13396 /** byteswap a word array inplace.
13397 * (does not handle partial words)
13398 * @param {sjcl.bitArray} a word array
13399 * @return {sjcl.bitArray} byteswapped array
13401 byteswapM: function(a) {
13402 var i, v, m =
0xff00;
13403 for (i =
0; i < a.length; ++i) {
13405 a[i] = (v
>>> 24) | ((v
>>> 8) & m) | ((v & m) <<
8) | (v <<
24);
13412 //// codecString.js
13414 /** @fileOverview Bit array codec implementations.
13416 * @author Emily Stark
13417 * @author Mike Hamburg
13418 * @author Dan Boneh
13421 /** @namespace UTF-
8 strings */
13422 sjcl.codec.utf8String = {
13423 /** Convert from a bitArray to a UTF-
8 string. */
13424 fromBits: function (arr) {
13425 var out =
"", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13426 for (i=
0; i
<bl/
8; i++) {
13430 out += String.fromCharCode(tmp
>>> 24);
13433 return decodeURIComponent(escape(out));
13436 /** Convert from a UTF-
8 string to a bitArray. */
13437 toBits: function (str) {
13438 str = unescape(encodeURIComponent(str));
13439 var out = [], i, tmp=
0;
13440 for (i=
0; i
<str.length; i++) {
13441 tmp = tmp <<
8 | str.charCodeAt(i);
13448 out.push(sjcl.bitArray.partial(
8*(i&
3), tmp));
13457 /** @fileOverview Bit array codec implementations.
13459 * @author Emily Stark
13460 * @author Mike Hamburg
13461 * @author Dan Boneh
13464 /** @namespace Hexadecimal */
13466 /** Convert from a bitArray to a hex string. */
13467 fromBits: function (arr) {
13469 for (i=
0; i
<arr.length; i++) {
13470 out += ((arr[i]|
0)+
0xF00000000000).toString(
16).substr(
4);
13472 return out.substr(
0, sjcl.bitArray.bitLength(arr)/
4);//.replace(/(.{
8})/g,
"$1 ");
13474 /** Convert from a hex string to a bitArray. */
13475 toBits: function (str) {
13476 var i, out=[], len;
13477 str = str.replace(/\s|
0x/g,
"");
13479 str = str +
"00000000";
13480 for (i=
0; i
<str.length; i+=
8) {
13481 out.push(parseInt(str.substr(i,
8),
16)^
0);
13483 return sjcl.bitArray.clamp(out, len*
4);
13490 /** @fileOverview Javascript SHA-
512 implementation.
13492 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13493 * SJCL by Stefan Thomas.
13495 * CryptoJS (c)
2009–
2012 by Jeff Mott. All rights reserved.
13496 * Released with New BSD License
13498 * @author Emily Stark
13499 * @author Mike Hamburg
13500 * @author Dan Boneh
13501 * @author Jeff Mott
13502 * @author Stefan Thomas
13506 * Context for a SHA-
512 operation in progress.
13508 * @class Secure Hash Algorithm,
512 bits.
13510 sjcl.hash.sha512 = function (hash) {
13511 if (!this._key[
0]) { this._precompute(); }
13513 this._h = hash._h.slice(
0);
13514 this._buffer = hash._buffer.slice(
0);
13515 this._length = hash._length;
13522 * Hash a string or an array of words.
13524 * @param {bitArray|String} data the data to hash.
13525 * @return {bitArray} The hash value, an array of
16 big-endian words.
13527 sjcl.hash.sha512.hash = function (data) {
13528 return (new sjcl.hash.sha512()).update(data).finalize();
13531 sjcl.hash.sha512.prototype = {
13533 * The hash's block size, in bits.
13539 * Reset the hash state.
13542 reset:function () {
13543 this._h = this._init.slice(
0);
13550 * Input several words to the hash.
13551 * @param {bitArray|String} data the data to hash.
13554 update: function (data) {
13555 if (typeof data ===
"string") {
13556 data = sjcl.codec.utf8String.toBits(data);
13558 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13560 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13561 for (i =
1024+ol & -
1024; i <= nl; i+=
1024) {
13562 this._block(b.splice(
0,
32));
13568 * Complete hashing and output the hash value.
13569 * @return {bitArray} The hash value, an array of
16 big-endian words.
13571 finalize:function () {
13572 var i, b = this._buffer, h = this._h;
13574 // Round out and push the buffer
13575 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
13577 // Round out the buffer to a multiple of
32 words, less the
4 length words.
13578 for (i = b.length +
4; i &
31; i++) {
13582 // append the length
13585 b.push(Math.floor(this._length /
0x100000000));
13586 b.push(this._length |
0);
13589 this._block(b.splice(
0,
32));
13597 * The SHA-
512 initialization vector, to be precomputed.
13603 * Least significant
24 bits of SHA512 initialization values.
13605 * Javascript only has
53 bits of precision, so we compute the
40 most
13606 * significant bits and add the remaining
24 bits as constants.
13610 _initr: [
0xbcc908,
0xcaa73b,
0x94f82b,
0x1d36f1,
0xe682d1,
0x3e6c1f,
0x41bd6b,
0x7e2179 ],
13614 [
0x6a09e667,
0xf3bcc908,
0xbb67ae85,
0x84caa73b,
0x3c6ef372,
0xfe94f82b,
0xa54ff53a,
0x5f1d36f1,
13615 0x510e527f,
0xade682d1,
0x9b05688c,
0x2b3e6c1f,
0x1f83d9ab,
0xfb41bd6b,
0x5be0cd19,
0x137e2179],
13619 * The SHA-
512 hash key, to be precomputed.
13625 * Least significant
24 bits of SHA512 key values.
13629 [
0x28ae22,
0xef65cd,
0x4d3b2f,
0x89dbbc,
0x48b538,
0x05d019,
0x194f9b,
0x6d8118,
13630 0x030242,
0x706fbe,
0xe4b28c,
0xffb4e2,
0x7b896f,
0x1696b1,
0xc71235,
0x692694,
13631 0xf14ad2,
0x4f25e3,
0x8cd5b5,
0xac9c65,
0x2b0275,
0xa6e483,
0x41fbd4,
0x1153b5,
13632 0x66dfab,
0xb43210,
0xfb213f,
0xef0ee4,
0xa88fc2,
0x0aa725,
0x03826f,
0x0e6e70,
13633 0xd22ffc,
0x26c926,
0xc42aed,
0x95b3df,
0xaf63de,
0x77b2a8,
0xedaee6,
0x82353b,
13634 0xf10364,
0x423001,
0xf89791,
0x54be30,
0xef5218,
0x65a910,
0x71202a,
0xbbd1b8,
13635 0xd2d0c8,
0x41ab53,
0x8eeb99,
0x9b48a8,
0xc95a63,
0x418acb,
0x63e373,
0xb2b8a3,
13636 0xefb2fc,
0x172f60,
0xf0ab72,
0x6439ec,
0x631e28,
0x82bde9,
0xc67915,
0x72532b,
13637 0x26619c,
0xc0c207,
0xe0eb1e,
0x6ed178,
0x176fba,
0xc898a6,
0xf90dae,
0x1c471b,
13638 0x047d84,
0xc72493,
0xc9bebc,
0x100d4c,
0x3e42b6,
0x657e2a,
0xd6faec,
0x475817],
13642 [
0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
13643 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
13644 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
13645 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
13646 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
13647 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
13648 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
13649 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
13650 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
13651 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
13652 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
13653 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
13654 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
13655 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
13656 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
13657 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
13658 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
13659 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
13660 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
13661 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817],
13665 * Function to precompute _init and _key.
13668 _precompute: function () {
13669 // XXX: This code is for precomputing the SHA256 constants, change for
13670 // SHA512 and re-enable.
13671 var i =
0, prime =
2, factor;
13673 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
13674 function frac2(x) { return (x-Math.floor(x)) *
0x10000000000 &
0xff; }
13676 outer: for (; i
<80; prime++) {
13677 for (factor=
2; factor*factor <= prime; factor++) {
13678 if (prime % factor ===
0) {
13685 this._init[i*
2] = frac(Math.pow(prime,
1/
2));
13686 this._init[i*
2+
1] = (frac2(Math.pow(prime,
1/
2)) <<
24) | this._initr[i];
13688 this._key[i*
2] = frac(Math.pow(prime,
1/
3));
13689 this._key[i*
2+
1] = (frac2(Math.pow(prime,
1/
3)) <<
24) | this._keyr[i];
13695 * Perform one cycle of SHA-
512.
13696 * @param {bitArray} words one block of words.
13699 _block:function (words) {
13701 w = words.slice(
0),
13704 h0h = h[
0], h0l = h[
1], h1h = h[
2], h1l = h[
3],
13705 h2h = h[
4], h2l = h[
5], h3h = h[
6], h3l = h[
7],
13706 h4h = h[
8], h4l = h[
9], h5h = h[
10], h5l = h[
11],
13707 h6h = h[
12], h6l = h[
13], h7h = h[
14], h7l = h[
15];
13709 // Working variables
13710 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13711 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13712 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13713 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13715 for (i=
0; i
<80; i++) {
13716 // load up the input word for this round
13719 wrl = w[i *
2 +
1];
13722 var gamma0xh = w[(i-
15) *
2];
13723 var gamma0xl = w[(i-
15) *
2 +
1];
13725 ((gamma0xl <<
31) | (gamma0xh
>>> 1)) ^
13726 ((gamma0xl <<
24) | (gamma0xh
>>> 8)) ^
13729 ((gamma0xh <<
31) | (gamma0xl
>>> 1)) ^
13730 ((gamma0xh <<
24) | (gamma0xl
>>> 8)) ^
13731 ((gamma0xh <<
25) | (gamma0xl
>>> 7));
13734 var gamma1xh = w[(i-
2) *
2];
13735 var gamma1xl = w[(i-
2) *
2 +
1];
13737 ((gamma1xl <<
13) | (gamma1xh
>>> 19)) ^
13738 ((gamma1xh <<
3) | (gamma1xl
>>> 29)) ^
13741 ((gamma1xh <<
13) | (gamma1xl
>>> 19)) ^
13742 ((gamma1xl <<
3) | (gamma1xh
>>> 29)) ^
13743 ((gamma1xh <<
26) | (gamma1xl
>>> 6));
13746 var wr7h = w[(i-
7) *
2];
13747 var wr7l = w[(i-
7) *
2 +
1];
13749 var wr16h = w[(i-
16) *
2];
13750 var wr16l = w[(i-
16) *
2 +
1];
13752 // W(round) = gamma0 + W(round -
7) + gamma1 + W(round -
16)
13753 wrl = gamma0l + wr7l;
13754 wrh = gamma0h + wr7h + ((wrl
>>> 0) < (gamma0l
>>> 0) ?
1 :
0);
13756 wrh += gamma1h + ((wrl
>>> 0) < (gamma1l
>>> 0) ?
1 :
0);
13758 wrh += wr16h + ((wrl
>>> 0) < (wr16l
>>> 0) ?
1 :
0);
13762 w[i*
2 +
1] = wrl |=
0;
13765 var chh = (eh & fh) ^ (~eh & gh);
13766 var chl = (el & fl) ^ (~el & gl);
13769 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
13770 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
13773 var sigma0h = ((al <<
4) | (ah
>>> 28)) ^ ((ah <<
30) | (al
>>> 2)) ^ ((ah <<
25) | (al
>>> 7));
13774 var sigma0l = ((ah <<
4) | (al
>>> 28)) ^ ((al <<
30) | (ah
>>> 2)) ^ ((al <<
25) | (ah
>>> 7));
13777 var sigma1h = ((el <<
18) | (eh
>>> 14)) ^ ((el <<
14) | (eh
>>> 18)) ^ ((eh <<
23) | (el
>>> 9));
13778 var sigma1l = ((eh <<
18) | (el
>>> 14)) ^ ((eh <<
14) | (el
>>> 18)) ^ ((el <<
23) | (eh
>>> 9));
13782 var krl = k[i*
2+
1];
13784 // t1 = h + sigma1 + ch + K(round) + W(round)
13785 var t1l = hl + sigma1l;
13786 var t1h = hh + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0);
13788 t1h += chh + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0);
13790 t1h += krh + ((t1l
>>> 0) < (krl
>>> 0) ?
1 :
0);
13791 t1l = t1l + wrl|
0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=
1054972
13792 t1h += wrh + ((t1l
>>> 0) < (wrl
>>> 0) ?
1 :
0);
13794 // t2 = sigma0 + maj
13795 var t2l = sigma0l + majl;
13796 var t2h = sigma0h + majh + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0);
13798 // Update working variables
13805 el = (dl + t1l) |
0;
13806 eh = (dh + t1h + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
13813 al = (t1l + t2l) |
0;
13814 ah = (t1h + t2h + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0;
13817 // Intermediate hash
13818 h0l = h[
1] = (h0l + al) |
0;
13819 h[
0] = (h0h + ah + ((h0l
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0;
13820 h1l = h[
3] = (h1l + bl) |
0;
13821 h[
2] = (h1h + bh + ((h1l
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0;
13822 h2l = h[
5] = (h2l + cl) |
0;
13823 h[
4] = (h2h + ch + ((h2l
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0;
13824 h3l = h[
7] = (h3l + dl) |
0;
13825 h[
6] = (h3h + dh + ((h3l
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
13826 h4l = h[
9] = (h4l + el) |
0;
13827 h[
8] = (h4h + eh + ((h4l
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0;
13828 h5l = h[
11] = (h5l + fl) |
0;
13829 h[
10] = (h5h + fh + ((h5l
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0;
13830 h6l = h[
13] = (h6l + gl) |
0;
13831 h[
12] = (h6h + gh + ((h6l
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0;
13832 h7l = h[
15] = (h7l + hl) |
0;
13833 h[
14] = (h7h + hh + ((h7l
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0;
13840 /** @fileOverview HMAC implementation.
13842 * @author Emily Stark
13843 * @author Mike Hamburg
13844 * @author Dan Boneh
13847 /** HMAC with the specified hash function.
13849 * @param {bitArray} key the key for HMAC.
13850 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
13852 sjcl.misc.hmac = function (key, Hash) {
13853 this._hash = Hash = Hash || sjcl.hash.sha256;
13854 var exKey = [[],[]], i,
13855 bs = Hash.prototype.blockSize /
32;
13856 this._baseHash = [new Hash(), new Hash()];
13858 if (key.length
> bs) {
13859 key = Hash.hash(key);
13862 for (i=
0; i
<bs; i++) {
13863 exKey[
0][i] = key[i]^
0x36363636;
13864 exKey[
1][i] = key[i]^
0x5C5C5C5C;
13867 this._baseHash[
0].update(exKey[
0]);
13868 this._baseHash[
1].update(exKey[
1]);
13869 this._resultHash = new Hash(this._baseHash[
0]);
13872 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
13873 * @param {bitArray|String} data The data to mac.
13875 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
13876 if (!this._updated) {
13878 return this.digest(data);
13880 throw new sjcl.exception.invalid(
"encrypt on already updated hmac called!");
13884 sjcl.misc.hmac.prototype.reset = function () {
13885 this._resultHash = new this._hash(this._baseHash[
0]);
13886 this._updated = false;
13889 sjcl.misc.hmac.prototype.update = function (data) {
13890 this._updated = true;
13891 this._resultHash.update(data);
13894 sjcl.misc.hmac.prototype.digest = function () {
13895 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[
1]).update(w).finalize();
13906 /** @fileOverview Password-based key-derivation function, version
2.0.
13908 * @author Emily Stark
13909 * @author Mike Hamburg
13910 * @author Dan Boneh
13913 /** Password-Based Key-Derivation Function, version
2.0.
13915 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
13917 * This is the method specified by RSA's PKCS #
5 standard.
13919 * @param {bitArray|String} password The password.
13920 * @param {bitArray|String} salt The salt. Should have lots of entropy.
13921 * @param {Number} [count=
1000] The number of iterations. Higher numbers make the function slower but more secure.
13922 * @param {Number} [length] The length of the derived key. Defaults to the
13923 output size of the hash function.
13924 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
13925 * @return {bitArray} the derived key.
13927 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
13928 count = count ||
1000;
13930 if (length <
0 || count <
0) {
13931 throw sjcl.exception.invalid(
"invalid params to pbkdf2");
13934 if (typeof password ===
"string") {
13935 password = sjcl.codec.utf8String.toBits(password);
13938 if (typeof salt ===
"string") {
13939 salt = sjcl.codec.utf8String.toBits(salt);
13942 Prff = Prff || sjcl.misc.hmac;
13944 var prf = new Prff(password),
13945 u, ui, i, j, k, out = [], b = sjcl.bitArray;
13947 for (k =
1;
32 * out.length < (length ||
1); k++) {
13948 u = ui = prf.encrypt(b.concat(salt,[k]));
13950 for (i=
1; i
<count; i++) {
13951 ui = prf.encrypt(ui);
13952 for (j=
0; j
<ui.length; j++) {
13957 out = out.concat(u);
13960 if (length) { out = b.clamp(out, length); }
13968 /** @fileOverview Javascript SHA-
256 implementation.
13970 * An older version of this implementation is available in the public
13971 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
13972 * Stanford University
2008-
2010 and BSD-licensed for liability
13975 * Special thanks to Aldo Cortesi for pointing out several bugs in
13978 * @author Emily Stark
13979 * @author Mike Hamburg
13980 * @author Dan Boneh
13984 * Context for a SHA-
256 operation in progress.
13986 * @class Secure Hash Algorithm,
256 bits.
13988 sjcl.hash.sha256 = function (hash) {
13989 if (!this._key[
0]) { this._precompute(); }
13991 this._h = hash._h.slice(
0);
13992 this._buffer = hash._buffer.slice(
0);
13993 this._length = hash._length;
14000 * Hash a string or an array of words.
14002 * @param {bitArray|String} data the data to hash.
14003 * @return {bitArray} The hash value, an array of
16 big-endian words.
14005 sjcl.hash.sha256.hash = function (data) {
14006 return (new sjcl.hash.sha256()).update(data).finalize();
14009 sjcl.hash.sha256.prototype = {
14011 * The hash's block size, in bits.
14017 * Reset the hash state.
14020 reset:function () {
14021 this._h = this._init.slice(
0);
14028 * Input several words to the hash.
14029 * @param {bitArray|String} data the data to hash.
14032 update: function (data) {
14033 if (typeof data ===
"string") {
14034 data = sjcl.codec.utf8String.toBits(data);
14036 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14038 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14039 for (i =
512+ol & -
512; i <= nl; i+=
512) {
14040 this._block(b.splice(
0,
16));
14046 * Complete hashing and output the hash value.
14047 * @return {bitArray} The hash value, an array of
8 big-endian words.
14049 finalize:function () {
14050 var i, b = this._buffer, h = this._h;
14052 // Round out and push the buffer
14053 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
14055 // Round out the buffer to a multiple of
16 words, less the
2 length words.
14056 for (i = b.length +
2; i &
15; i++) {
14060 // append the length
14061 b.push(Math.floor(this._length /
0x100000000));
14062 b.push(this._length |
0);
14065 this._block(b.splice(
0,
16));
14073 * The SHA-
256 initialization vector, to be precomputed.
14078 _init:[
0x6a09e667,
0xbb67ae85,
0x3c6ef372,
0xa54ff53a,
0x510e527f,
0x9b05688c,
0x1f83d9ab,
0x5be0cd19],
14082 * The SHA-
256 hash key, to be precomputed.
14088 [
0x428a2f98,
0x71374491,
0xb5c0fbcf,
0xe9b5dba5,
0x3956c25b,
0x59f111f1,
0x923f82a4,
0xab1c5ed5,
14089 0xd807aa98,
0x12835b01,
0x243185be,
0x550c7dc3,
0x72be5d74,
0x80deb1fe,
0x9bdc06a7,
0xc19bf174,
14090 0xe49b69c1,
0xefbe4786,
0x0fc19dc6,
0x240ca1cc,
0x2de92c6f,
0x4a7484aa,
0x5cb0a9dc,
0x76f988da,
14091 0x983e5152,
0xa831c66d,
0xb00327c8,
0xbf597fc7,
0xc6e00bf3,
0xd5a79147,
0x06ca6351,
0x14292967,
14092 0x27b70a85,
0x2e1b2138,
0x4d2c6dfc,
0x53380d13,
0x650a7354,
0x766a0abb,
0x81c2c92e,
0x92722c85,
14093 0xa2bfe8a1,
0xa81a664b,
0xc24b8b70,
0xc76c51a3,
0xd192e819,
0xd6990624,
0xf40e3585,
0x106aa070,
14094 0x19a4c116,
0x1e376c08,
0x2748774c,
0x34b0bcb5,
0x391c0cb3,
0x4ed8aa4a,
0x5b9cca4f,
0x682e6ff3,
14095 0x748f82ee,
0x78a5636f,
0x84c87814,
0x8cc70208,
0x90befffa,
0xa4506ceb,
0xbef9a3f7,
0xc67178f2],
14100 * Function to precompute _init and _key.
14103 _precompute: function () {
14104 var i =
0, prime =
2, factor;
14106 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
14108 outer: for (; i
<64; prime++) {
14109 for (factor=
2; factor*factor <= prime; factor++) {
14110 if (prime % factor ===
0) {
14117 this._init[i] = frac(Math.pow(prime,
1/
2));
14119 this._key[i] = frac(Math.pow(prime,
1/
3));
14125 * Perform one cycle of SHA-
256.
14126 * @param {bitArray} words one block of words.
14129 _block:function (words) {
14131 w = words.slice(
0),
14134 h0 = h[
0], h1 = h[
1], h2 = h[
2], h3 = h[
3],
14135 h4 = h[
4], h5 = h[
5], h6 = h[
6], h7 = h[
7];
14137 /* Rationale for placement of |
0 :
14138 * If a value can overflow is original
32 bits by a factor of more than a few
14139 * million (
2^
23 ish), there is a possibility that it might overflow the
14140 *
53-bit mantissa and lose precision.
14142 * To avoid this, we clamp back to
32 bits by |'ing with
0 on any value that
14143 * propagates around the loop, and on the hash state h[]. I don't believe
14144 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14145 * (for h4 anyway), and better safe than sorry.
14147 * The clamps on h[] are necessary for the output to be correct even in the
14148 * common case and for short inputs.
14150 for (i=
0; i
<64; i++) {
14151 // load up the input word for this round
14155 a = w[(i+
1 ) &
15];
14156 b = w[(i+
14) &
15];
14157 tmp = w[i&
15] = ((a
>>>7 ^ a
>>>18 ^ a
>>>3 ^ a<
<25 ^ a<
<14) +
14158 (b
>>>17 ^ b
>>>19 ^ b
>>>10 ^ b<
<15 ^ b<
<13) +
14159 w[i&
15] + w[(i+
9) &
15]) |
0;
14162 tmp = (tmp + h7 + (h4
>>>6 ^ h4
>>>11 ^ h4
>>>25 ^ h4<
<26 ^ h4<
<21 ^ h4<
<7) + (h6 ^ h4&(h5^h6)) + k[i]); // |
0;
14165 h7 = h6; h6 = h5; h5 = h4;
14167 h3 = h2; h2 = h1; h1 = h0;
14169 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1
>>>2 ^ h1
>>>13 ^ h1
>>>22 ^ h1<
<30 ^ h1<
<19 ^ h1<
<10)) |
0;
14172 h[
0] = h[
0]+h0 |
0;
14173 h[
1] = h[
1]+h1 |
0;
14174 h[
2] = h[
2]+h2 |
0;
14175 h[
3] = h[
3]+h3 |
0;
14176 h[
4] = h[
4]+h4 |
0;
14177 h[
5] = h[
5]+h5 |
0;
14178 h[
6] = h[
6]+h6 |
0;
14179 h[
7] = h[
7]+h7 |
0;
14183 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14184 WORDLISTS["english"] = [
14185 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14186 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14187 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14188 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14189 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14190 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14191 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14192 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14193 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14194 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14195 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14196 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14197 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14198 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14199 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14200 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14201 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14202 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14203 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14204 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14205 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14206 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14207 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14208 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14209 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14210 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14211 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14212 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14213 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14214 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14215 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14216 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14217 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14218 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14219 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14220 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14221 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14222 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14223 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14224 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14225 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14226 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14227 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14228 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14229 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14230 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14231 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14232 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14233 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14234 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14235 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14236 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14237 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14238 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14239 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14240 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14241 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14242 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14243 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14244 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14245 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14246 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14247 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14248 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14249 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14250 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14251 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14252 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14253 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14254 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14255 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14256 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14257 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14258 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14259 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14260 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14261 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14262 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14263 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14264 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14265 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14266 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14267 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14268 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14269 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14270 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14271 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14272 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14273 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14274 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14275 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14276 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14277 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14278 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14279 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14280 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14281 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14282 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14283 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14284 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14285 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14286 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14287 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14288 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14289 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14290 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14291 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14292 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14293 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14294 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14295 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14296 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14297 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14298 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14299 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14300 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14301 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14302 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14303 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14304 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14305 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14306 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14307 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14308 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14309 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14310 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14311 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14312 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14313 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14314 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14315 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14316 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14317 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14318 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14319 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14320 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14321 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14322 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14323 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14324 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14325 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14326 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14327 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14328 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14329 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14330 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14331 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14332 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14333 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14334 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14335 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14336 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14337 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14338 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14339 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14340 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14341 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14342 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14343 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14344 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14345 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14346 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14347 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14348 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14349 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14350 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14351 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14352 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14353 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14354 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14355 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14356 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14357 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14358 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14359 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14360 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14361 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14362 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14363 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14364 "thank","that","theme","then","theory","there","they","thing","this","thought",
14365 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14366 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14367 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14368 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14369 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14370 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14371 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14372 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14373 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14374 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14375 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14376 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14377 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14378 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14379 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14380 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14381 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14382 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14383 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14384 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14385 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14386 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14387 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14388 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14389 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14392 * Copyright (c)
2013 Pavol Rusnak
14394 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14395 * this software and associated documentation files (the "Software"), to deal in
14396 * the Software without restriction, including without limitation the rights to
14397 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14398 * of the Software, and to permit persons to whom the Software is furnished to do
14399 * so, subject to the following conditions:
14401 * The above copyright notice and this permission notice shall be included in all
14402 * copies or substantial portions of the Software.
14404 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14405 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14406 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14407 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14408 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14409 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14413 * Javascript port from python by Ian Coleman
14415 * Requires code from sjcl
14416 * https://github.com/bitwiseshiftleft/sjcl
14419 var Mnemonic = function(language) {
14421 var PBKDF2_ROUNDS =
2048;
14427 var hmacSHA512 = function(key) {
14428 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14429 this.encrypt = function() {
14430 return hasher.encrypt.apply(hasher, arguments);
14435 wordlist = WORDLISTS[language];
14436 if (wordlist.length != RADIX) {
14437 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14442 self.generate = function(strength) {
14443 strength = strength ||
128;
14444 var r = strength %
32;
14446 throw 'Strength should be divisible by
32, but it is not (' + r + ').';
14448 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14449 if (!hasStrongCrypto) {
14450 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14452 var buffer = new Uint8Array(strength /
8);
14453 var data = crypto.getRandomValues(buffer);
14454 return self.toMnemonic(data);
14457 self.toMnemonic = function(byteArray) {
14458 if (byteArray.length %
4 > 0) {
14459 throw 'Data length in bits should be divisible by
32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*
8 + ' bits).'
14462 //h = hashlib.sha256(data).hexdigest()
14463 var data = byteArrayToWordArray(byteArray);
14464 var hash = sjcl.hash.sha256.hash(data);
14465 var h = sjcl.codec.hex.fromBits(hash);
14467 // b is a binary string, eg '
00111010101100...'
14468 //b = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8) + \
14469 // bin(int(h,
16))[
2:].zfill(
256)[:len(data) *
8 /
32]
14471 // a = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8)
14472 // c = bin(int(h,
16))[
2:].zfill(
256)
14473 // d = c[:len(data) *
8 /
32]
14474 var a = byteArrayToBinaryString(byteArray);
14475 var c = zfill(hexStringToBinaryString(h),
256);
14476 var d = c.substring(
0, byteArray.length *
8 /
32);
14477 // b = line1 + line2
14481 var blen = b.length /
11;
14482 for (var i=
0; i
<blen; i++) {
14483 var idx = parseInt(b.substring(i *
11, (i +
1) *
11),
2);
14484 result.push(wordlist[idx]);
14486 return result.join(' ');
14489 self.check = function(mnemonic) {
14490 var mnemonic = mnemonic.split(' ')
14491 if (mnemonic.length %
3 > 0) {
14494 // idx = map(lambda x: bin(self.wordlist.index(x))[
2:].zfill(
11), mnemonic)
14496 for (var i=
0; i
<mnemonic.length; i++) {
14497 var word = mnemonic[i];
14498 var wordIndex = wordlist.indexOf(word);
14499 if (wordIndex == -
1) {
14502 var binaryIndex = zfill(wordIndex.toString(
2),
11);
14503 idx.push(binaryIndex);
14505 var b = idx.join('');
14507 //d = b[:l /
33 *
32]
14509 var d = b.substring(
0, l /
33 *
32);
14510 var h = b.substring(l - l /
33, l);
14511 //nd = binascii.unhexlify(hex(int(d,
2))[
2:].rstrip('L').zfill(l /
33 *
8))
14512 var nd = binaryStringToWordArray(d);
14513 //nh = bin(int(hashlib.sha256(nd).hexdigest(),
16))[
2:].zfill(
256)[:l /
33]
14514 var ndHash = sjcl.hash.sha256.hash(nd);
14515 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14516 var ndBstr = zfill(hexStringToBinaryString(ndHex),
256);
14517 var nh = ndBstr.substring(
0,l/
33);
14521 self.toSeed = function(mnemonic, passphrase) {
14522 passphrase = passphrase || '';
14523 mnemonic = self.normalizeString(mnemonic)
14524 passphrase = self.normalizeString(passphrase)
14525 passphrase =
"mnemonic" + passphrase;
14526 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14527 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14528 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS,
512, hmacSHA512);
14529 var hashHex = sjcl.codec.hex.fromBits(result);
14533 self.normalizeString = function(str) {
14534 if (typeof str.normalize ==
"function") {
14535 return str.normalize(
"NFKD");
14538 // TODO decide how to handle this in the future.
14539 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14544 function byteArrayToWordArray(data) {
14546 for (var i=
0; i
<data.length/
4; i++) {
14548 v += data[i*
4 +
0] <<
8 *
3;
14549 v += data[i*
4 +
1] <<
8 *
2;
14550 v += data[i*
4 +
2] <<
8 *
1;
14551 v += data[i*
4 +
3] <<
8 *
0;
14557 function byteArrayToBinaryString(data) {
14559 for (var i=
0; i
<data.length; i++) {
14560 bin += zfill(data[i].toString(
2),
8);
14565 function hexStringToBinaryString(hexString) {
14567 for (var i=
0; i
<hexString.length; i++) {
14568 binaryString += zfill(parseInt(hexString[i],
16).toString(
2),
4);
14570 return binaryString;
14573 function binaryStringToWordArray(binary) {
14574 var aLen = binary.length /
32;
14576 for (var i=
0; i
<aLen; i++) {
14577 var valueStr = binary.substring(
0,
32);
14578 var value = parseInt(valueStr,
2);
14580 binary = binary.slice(
32);
14585 // Pad a numeric string on the left with zero digits until the given width
14587 // Note this differs to the python implementation because it does not
14588 // handle numbers starting with a sign.
14589 function zfill(source, length) {
14590 source = source.toString();
14591 while (source.length < length) {
14592 source = '
0' + source;
14601 <script>(function() {
14603 var mnemonic = new Mnemonic("english");
14604 var bip32RootKey = null;
14605 var bip32ExtendedKey = null;
14606 var network = bitcoin.networks.bitcoin;
14607 var addressRowTemplate = $("#address-row-template");
14609 var showIndex = true;
14610 var showAddress = true;
14611 var showPrivKey = true;
14613 var phraseChangeTimeoutEvent = null;
14616 DOM.network = $(".network");
14617 DOM.phraseNetwork = $("#network-phrase");
14618 DOM.phrase = $(".phrase");
14619 DOM.passphrase = $(".passphrase");
14620 DOM.generate = $(".generate");
14621 DOM.rootKey = $(".root-key");
14622 DOM.extendedPrivKey = $(".extended-priv-key");
14623 DOM.extendedPubKey = $(".extended-pub-key");
14624 DOM.bip32tab = $("#bip32-tab");
14625 DOM.bip44tab = $("#bip44-tab");
14626 DOM.bip32panel = $("#bip32");
14627 DOM.bip44panel = $("#bip44");
14628 DOM.bip32path = $("#bip32-path");
14629 DOM.bip44path = $("#bip44-path");
14630 DOM.bip44purpose = $("#bip44 .purpose");
14631 DOM.bip44coin = $("#bip44 .coin");
14632 DOM.bip44account = $("#bip44 .account");
14633 DOM.bip44change = $("#bip44 .change");
14634 DOM.strength = $(".strength");
14635 DOM.addresses = $(".addresses");
14636 DOM.rowsToAdd = $(".rows-to-add");
14637 DOM.more = $(".more");
14638 DOM.feedback = $(".feedback");
14639 DOM.tab = $(".derivation-type a");
14640 DOM.indexToggle = $(".index-toggle");
14641 DOM.addressToggle = $(".address-toggle");
14642 DOM.privateKeyToggle = $(".private-key-toggle");
14644 var derivationPath = $(".tab-pane.active .path").val();
14648 DOM.network.on("change", networkChanged);
14649 DOM.phrase.on("input", delayedPhraseChanged);
14650 DOM.passphrase.on("input", delayedPhraseChanged);
14651 DOM.generate.on("click", generateClicked);
14652 DOM.more.on("click", showMore);
14653 DOM.bip32path.on("input", bip32Changed);
14654 DOM.bip44purpose.on("input", bip44Changed);
14655 DOM.bip44coin.on("input", bip44Changed);
14656 DOM.bip44account.on("input", bip44Changed);
14657 DOM.bip44change.on("input", bip44Changed);
14658 DOM.tab.on("click", tabClicked);
14659 DOM.indexToggle.on("click", toggleIndexes);
14660 DOM.addressToggle.on("click", toggleAddresses);
14661 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14664 hideValidationError();
14665 populateNetworkSelect();
14670 function networkChanged(e) {
14671 var network = e.target.value;
14672 networks[network].onSelect();
14673 setBip44DerivationPath();
14674 delayedPhraseChanged();
14677 function delayedPhraseChanged() {
14678 hideValidationError();
14680 if (phraseChangeTimeoutEvent != null) {
14681 clearTimeout(phraseChangeTimeoutEvent);
14683 phraseChangeTimeoutEvent = setTimeout(phraseChanged,
400);
14686 function phraseChanged() {
14688 hideValidationError();
14689 // Get the mnemonic phrase
14690 var phrase = DOM.phrase.val();
14691 var passphrase = DOM.passphrase.val();
14692 var errorText = findPhraseErrors(phrase);
14694 showValidationError(errorText);
14697 // Get the derivation path
14698 var errorText = findDerivationPathErrors();
14700 showValidationError(errorText);
14703 // Calculate and display
14704 calcBip32Seed(phrase, passphrase, derivationPath);
14705 displayBip32Info();
14709 function generateClicked() {
14712 setTimeout(function() {
14713 var phrase = generateRandomPhrase();
14721 function tabClicked(e) {
14722 var activePath = $(e.target.getAttribute("href") + " .path");
14723 derivationPath = activePath.val();
14724 derivationChanged();
14727 function derivationChanged() {
14728 delayedPhraseChanged();
14731 function bip32Changed() {
14732 derivationPath = DOM.bip32path.val();
14733 derivationChanged();
14736 function bip44Changed() {
14737 setBip44DerivationPath();
14738 derivationChanged();
14741 function toggleIndexes() {
14742 showIndex = !showIndex;
14743 $("td.index span").toggleClass("invisible");
14746 function toggleAddresses() {
14747 showAddress = !showAddress;
14748 $("td.address span").toggleClass("invisible");
14751 function togglePrivateKeys() {
14752 showPrivKey = !showPrivKey;
14753 $("td.privkey span").toggleClass("invisible");
14758 function generateRandomPhrase() {
14759 if (!hasStrongRandom()) {
14760 var errorText = "This browser does not support strong randomness";
14761 showValidationError(errorText);
14764 var numWords = parseInt(DOM.strength.val());
14765 var strength = numWords /
3 *
32;
14766 var words = mnemonic.generate(strength);
14767 DOM.phrase.val(words);
14771 function calcBip32Seed(phrase, passphrase, path) {
14772 var seed = mnemonic.toSeed(phrase, passphrase);
14773 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
14774 bip32ExtendedKey = bip32RootKey;
14775 // Derive the key from the path
14776 var pathBits = path.split("/");
14777 for (var i=
0; i
<pathBits.length; i++) {
14778 var bit = pathBits[i];
14779 var index = parseInt(bit);
14780 if (isNaN(index)) {
14783 var hardened = bit[bit.length-
1] ==
"'";
14785 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
14788 bip32ExtendedKey = bip32ExtendedKey.derive(index);
14793 function showValidationError(errorText) {
14799 function hideValidationError() {
14805 function findPhraseErrors(phrase) {
14806 // TODO make this right
14807 // Preprocess the words
14808 phrase = mnemonic.normalizeString(phrase);
14809 var parts = phrase.split(
" ");
14811 for (var i=
0; i
<parts.length; i++) {
14812 var part = parts[i];
14813 if (part.length
> 0) {
14814 // TODO check that lowercasing is always valid to do
14815 proper.push(part.toLowerCase());
14818 // TODO some levenstein on the words
14819 var properPhrase = proper.join(' ');
14820 // Check the words are valid
14821 var isValid = mnemonic.check(properPhrase);
14823 return
"Invalid mnemonic";
14828 function findDerivationPathErrors(path) {
14833 function displayBip32Info() {
14835 var rootKey = bip32RootKey.toBase58();
14836 DOM.rootKey.val(rootKey);
14837 var extendedPrivKey = bip32ExtendedKey.toBase58();
14838 DOM.extendedPrivKey.val(extendedPrivKey);
14839 var extendedPubKey = bip32ExtendedKey.toBase58(false);
14840 DOM.extendedPubKey.val(extendedPubKey);
14841 // Display the addresses and privkeys
14842 clearAddressesList();
14843 displayAddresses(
0,
20);
14846 function displayAddresses(start, total) {
14847 for (var i=
0; i
<total; i++) {
14848 var index = i + start;
14849 new TableRow(index);
14853 function TableRow(index) {
14859 function calculateValues() {
14860 setTimeout(function() {
14861 var key = bip32ExtendedKey.derive(index);
14862 var address = key.getAddress().toString();
14863 var privkey = key.privKey.toWIF(network);
14864 addAddressToList(index, address, privkey);
14872 function showMore() {
14873 var start = DOM.addresses.children().length;
14874 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
14875 if (isNaN(rowsToAdd)) {
14877 DOM.rowsToAdd.val(
"20");
14879 if (rowsToAdd
> 200) {
14880 var msg =
"Generating " + rowsToAdd +
" rows could take a while. ";
14881 msg +=
"Do you want to continue?";
14882 if (!confirm(msg)) {
14886 displayAddresses(start, rowsToAdd);
14889 function clearDisplay() {
14890 clearAddressesList();
14892 hideValidationError();
14895 function clearAddressesList() {
14896 DOM.addresses.empty();
14899 function clearKey() {
14900 DOM.rootKey.val(
"");
14901 DOM.extendedPrivKey.val(
"");
14902 DOM.extendedPubKey.val(
"");
14905 function addAddressToList(index, address, privkey) {
14906 var row = $(addressRowTemplate.html());
14908 var indexCell = row.find(
".index span");
14909 var addressCell = row.find(
".address span");
14910 var privkeyCell = row.find(
".privkey span");
14912 var indexText = derivationPath +
"/" + index;
14913 indexCell.text(indexText);
14914 addressCell.text(address);
14915 privkeyCell.text(privkey);
14918 indexCell.addClass(
"invisible");
14920 if (!showAddress) {
14921 addressCell.addClass(
"invisible");
14923 if (!showPrivKey) {
14924 privkeyCell.addClass(
"invisible");
14926 DOM.addresses.append(row);
14929 function hasStrongRandom() {
14930 return 'crypto' in window && window['crypto'] !== null;
14933 function disableForms() {
14934 $(
"form").on(
"submit", function(e) {
14935 e.preventDefault();
14939 function setBip44DerivationPath() {
14940 var purpose = parseIntNoNaN(DOM.bip44purpose.val(),
44);
14941 var coin = parseIntNoNaN(DOM.bip44coin.val(),
0);
14942 var account = parseIntNoNaN(DOM.bip44account.val(),
0);
14943 var change = parseIntNoNaN(DOM.bip44change.val(),
0);
14945 path += purpose +
"'/";
14946 path += coin +
"'/";
14947 path += account +
"'/";
14949 DOM.bip44path.val(path);
14950 derivationPath = DOM.bip44path.val();
14953 function parseIntNoNaN(val, defaultVal) {
14954 var v = parseInt(val);
14961 function showPending() {
14963 .text(
"Calculating...")
14967 function hidePending() {
14973 function populateNetworkSelect() {
14974 for (var i=
0; i
<networks.length; i++) {
14975 var network = networks[i];
14976 var option = $(
"<option>");
14977 option.attr(
"value", i);
14978 option.text(network.name);
14979 DOM.phraseNetwork.append(option);
14986 onSelect: function() {
14987 network = bitcoin.networks.bitcoin;
14988 DOM.bip44coin.val(
0);
14992 name:
"Bitcoin Testnet",
14993 onSelect: function() {
14994 network = bitcoin.networks.testnet;
14995 DOM.bip44coin.val(
1);
15000 onSelect: function() {
15001 network = bitcoin.networks.litecoin;
15002 DOM.bip44coin.val(
2);
15007 onSelect: function() {
15008 network = bitcoin.networks.dogecoin;
15009 DOM.bip44coin.val(
3);
15013 name:
"ShadowCash",
15014 onSelect: function() {
15015 network = bitcoin.networks.shadow;
15016 DOM.bip44coin.val(
35);
15020 name:
"ShadowCash Testnet",
15021 onSelect: function() {
15022 network = bitcoin.networks.shadowtn;
15023 DOM.bip44coin.val(
1);
15028 onSelect: function() {
15029 network = bitcoin.networks.viacoin;
15030 DOM.bip44coin.val(
14);
15034 name:
"Viacoin Testnet",
15035 onSelect: function() {
15036 network = bitcoin.networks.viacointestnet;
15037 DOM.bip44coin.val(
1);
15042 onSelect: function() {
15043 network = bitcoin.networks.jumbucks;
15044 DOM.bip44coin.val(
26);
15049 onSelect: function() {
15050 network = bitcoin.networks.clam;
15051 DOM.bip44coin.val(
23);