]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Release v0.2.9
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
CommitLineData
ebd8d4e8
IC
1<!DOCTYPE html>
2<html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
ab78acc6 6 <style>/*!
ebd8d4e8
IC
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)
ab78acc6
IC
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" />
b630f83d 14 <meta content="Ian Coleman" name="author" />
18f16009 15 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
3af2954a 16
ab78acc6
IC
17 <style>
18 body {
19 padding-bottom: 32px;
20 }
21 .form-control[readonly] {
22 cursor: text;
23 }
24 .feedback-container {
25 position: fixed;
26 top: 0;
27 width: 100%;
28 text-align: center;
29 z-index: 4;
30 }
31 .feedback {
32 display: table;
33 padding: 0.5em 1em;
34 background-color: orange;
35 margin: 0 auto;
36 font-size: 2em;
37 color: #444;
38 border: 2px solid #555;
39 border-top: 0;
40 border-bottom-left-radius: 20px 20px;
41 border-bottom-right-radius: 20px 20px;
42 }
d5dc92fd
IC
43 .no-border {
44 border: 0;
45 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
47 }
0515eeec
IC
48 .phrase {
49 word-break: keep-all;
50 }
2a6dd137 51 .generate-container .strength {
b0818b31
IC
52 /* override mobile width from bootstrap */
53 width: auto!important;
54 display: inline-block;
55 }
ea87f1d3 56 .languages a {
0515eeec
IC
57 padding-left: 10px;
58 }
ea87f1d3
IC
59 .languages a:nth-of-type(1) {
60 margin-left: -12px;
61 padding-left: 0;
62 }
d737abf6
IC
63 .monospace {
64 font-family: monospace;
65 }
2a6dd137
IC
66 .entropy-container .filtered,
67 .entropy-container .binary {
68 word-wrap: break-word;
69 }
70 .entropy-container li {
71 padding-bottom: 5px;
72 }
73 .card-suit {
74 font-size: 19px;
75 line-height: 0;
76 }
77 .card-suit.club {
78 color: #009F00;
79 }
80 .card-suit.diamond {
81 color: #3D5DC4;
82 }
83 .card-suit.heart {
84 color: #F00;
85 }
86 .card-suit.spade {
87 color: #000;
88 }
e00964cc
IC
89 .qr-container {
90 position: fixed;
91 top: 0;
92 right: 0;
93 text-align: center;
94 background-color: #FFF;
95 border: 1px solid #CCC;
96 }
97 .qr-image {
98 margin: 5px;
99 }
52da415f
IC
100 .qr-hint,
101 .qr-warning {
e00964cc 102 padding: 2px;
52da415f
IC
103 max-width: 150px;
104 }
105 .more-info {
106 cursor: help;
107 border-bottom: 1px dashed #000;
108 text-decoration: none;
e00964cc 109 }
920eb591
IC
110 .version {
111 position: absolute;
112 top: 5px;
113 right: 5px;
114 }
ab78acc6
IC
115 </style>
116 </head>
117 <body>
118 <div class="container">
3af2954a 119
ab78acc6 120 <h1 class="text-center">Mnemonic Code Converter</h1>
924727ed 121 <p class="version">v0.2.9</p>
ab78acc6
IC
122 <hr>
123 <div class="row">
124 <div class="col-md-12">
125 <h2>Mnemonic</h2>
126 <form class="form-horizontal" role="form">
ab78acc6 127 <div class="form-group">
c6624d51
IC
128 <div class="col-sm-2"></div>
129 <div class="col-sm-10">
1102f201
IC
130 <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>
131 <p>
ea87f1d3
IC
132 For more info see the
133 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
134 </p>
c6624d51
IC
135 </div>
136 </div>
137 <div class="form-group generate-container">
b0818b31 138 <label class="col-sm-2 control-label"></label>
ab78acc6 139 <div class="col-sm-10">
b0818b31
IC
140 <div class="form-inline">
141 <div class="input-group-inline">
1102f201 142 <span>Generate a random mnemonic, or enter your own below</span>:
b0818b31 143 <button class="btn generate">Generate</button>
b0818b31
IC
144 <select id="strength" class="strength form-control">
145 <option value="3">3</option>
146 <option value="6">6</option>
147 <option value="9">9</option>
148 <option value="12">12</option>
149 <option value="15" selected>15</option>
150 <option value="18">18</option>
151 <option value="21">21</option>
152 <option value="24">24</option>
153 </select>
1102f201 154 <span>words</span>
b0818b31
IC
155 </div>
156 </div>
ab78acc6 157 </div>
0515eeec 158 </div>
c6624d51 159 <div class="entropy-container hidden">
2a6dd137 160 <div class="form-group text-danger">
1102f201 161 <label class="col-sm-2 control-label">Warning</label>
2a6dd137 162 <div class="col-sm-10 form-control-static">
1102f201
IC
163 <span>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
164 <a href="#entropy-notes">Read more</a>
18abe53b
IC
165 </div>
166 </div>
2a6dd137 167 <div class="form-group">
1102f201 168 <label for="entropy" class="col-sm-2 control-label">Entropy</label>
2a6dd137 169 <div class="col-sm-7">
1102f201 170 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts either binary, base 6, 6-sided dice, base 10, hexadecimal or cards"></textarea>
9ff30bab
IC
171 <div class="row filter-warning text-danger hidden">
172 <p class="col-sm-12">
173 <strong>
174 Some characters have been discarded
175 </strong>
176 </p>
177 </div>
95f04905 178 <div class="row">
1102f201 179 <label class="col-sm-3 control-label"><span class="more-info" title="Based on estimates from zxcvbn using Filtered Entropy">Time To Crack</span></label>
f1e5d484 180 <div class="crack-time col-sm-3 form-control-static"></div>
1102f201 181 <label class="col-sm-3 control-label">Event Count</label>
95f04905
IC
182 <div class="event-count col-sm-3 form-control-static"></div>
183 </div>
184 <div class="row">
1102f201 185 <label class="col-sm-3 control-label">Entropy Type</label>
95f04905 186 <div class="type col-sm-3 form-control-static"></div>
1102f201 187 <label class="col-sm-3 control-label">Bits Per Event</label>
95f04905
IC
188 <div class="bits-per-event col-sm-3 form-control-static"></div>
189 </div>
190 <div class="row">
1102f201 191 <label class="col-sm-3 control-label">Raw Entropy Words</label>
95f04905 192 <div class="word-count col-sm-3 form-control-static"></div>
1102f201 193 <label class="col-sm-3 control-label"><span class="more-info" title="Total bits of entropy may be less than indicated if any entropy event uses a weak source.">Total Bits</span></label>
95f04905
IC
194 <div class="bits col-sm-3 form-control-static"></div>
195 </div>
1102f201 196 <label class="col-sm-3 control-label">Filtered Entropy</label>
2a6dd137 197 <div class="filtered col-sm-9 form-control-static"></div>
1102f201 198 <label class="col-sm-3 control-label">Raw Binary</label>
2a6dd137 199 <div class="binary col-sm-9 form-control-static"></div>
1102f201 200 <label class="col-sm-3 control-label">Mnemonic Length</label>
2a6dd137 201 <div class="col-sm-9">
18abe53b 202 <select class="mnemonic-length form-control">
1102f201
IC
203 <option value="raw" selected>Use Raw Entropy (3 words per 32 bits)</option>
204 <option value="12">12 <span>Words</span></option>
205 <option value="15">15 <span>Words</option>
206 <option value="18">18 <span>Words</span></option>
207 <option value="21">21 <span>Words</span></option>
208 <option value="24">24 <span>Words</span></option>
18abe53b 209 </select>
c6624d51 210 </div>
18abe53b 211 </div>
2a6dd137 212 <div class="col-sm-3">
1102f201 213 <p>Valid entropy values include:</p>
2a6dd137 214 <ul>
1102f201
IC
215 <li><strong>Binary</strong> [0-1]<br>101010011</li>
216 <li><strong>Base 6</strong> [0-5]<br>123434014</li>
217 <li><strong>Dice</strong> [1-6]<br>62535634</li>
218 <li><strong>Base 10</strong> [0-9]<br>90834528</li>
219 <li><strong>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
220 <li><strong>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
2a6dd137
IC
221 </ul>
222 </div>
c6624d51
IC
223 </div>
224 </div>
225 <div class="form-group">
226 <div class="col-sm-2"></div>
227 <div class="col-sm-10 checkbox">
228 <label>
229 <input type="checkbox" class="use-entropy">
1102f201 230 <span>Supply my own source of entropy</span>
c6624d51
IC
231 </label>
232 </div>
233 </div>
234 <div class="form-group">
1102f201 235 <label class="col-sm-2 control-label">Mnemonic Language</label>
0515eeec 236 <div class="col-sm-10 languages">
ea87f1d3
IC
237 <div class="form-control no-border">
238 <a href="#english">English</a>
239 <a href="#japanese" title="Japanese">日本語</a>
240 <a href="#spanish" title="Spanish">Español</a>
241 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
242 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
243 <a href="#french" title="French">Français</a>
244 <a href="#italian" title="Italian">Italiano</a>
245 </div>
0515eeec 246 </div>
ab78acc6
IC
247 </div>
248 <div class="form-group">
1102f201 249 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
ab78acc6 250 <div class="col-sm-10">
e00964cc 251 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
ab78acc6
IC
252 </div>
253 </div>
254 <div class="form-group">
1102f201 255 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
ab78acc6
IC
256 <div class="col-sm-10">
257 <textarea id="passphrase" class="passphrase form-control"></textarea>
258 </div>
259 </div>
73161a92 260 <div class="form-group">
1102f201 261 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
73161a92 262 <div class="col-sm-10">
e00964cc 263 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
73161a92
IC
264 </div>
265 </div>
ab78acc6 266 <div class="form-group">
1102f201 267 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
ab78acc6
IC
268 <div class="col-sm-10">
269 <select id="network-phrase" class="network form-control">
270 <!-- populated by javascript -->
271 </select>
272 </div>
273 </div>
274 <div class="form-group">
1102f201 275 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
ab78acc6 276 <div class="col-sm-10">
e00964cc 277 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
ab78acc6
IC
278 </div>
279 </div>
8d18f379 280 <div class="form-group litecoin-ltub-container hidden">
1102f201 281 <label for="litecoin-use-ltub" class="col-sm-2 control-label">Prefixes</label>
8d18f379
IC
282 <div class="col-sm-10 checkbox">
283 <label>
284 <input type="checkbox" id="litecoin-use-ltub" class="litecoin-use-ltub">
285 Use <code>Ltpv / Ltub</code> instead of <code>xprv / xpub</code>
286 </label>
287 </div>
288 </div>
ab78acc6
IC
289 </form>
290 </div>
291 </div>
3af2954a 292
ab78acc6 293 <hr>
3af2954a 294
ab78acc6
IC
295 <div class="row">
296 <div class="col-md-12">
297 <h2>Derivation Path</h2>
298 <ul class="derivation-type nav nav-tabs" role="tablist">
9987f0c1
IC
299 <li id="bip32-tab">
300 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
301 </li>
d5dc92fd 302 <li id="bip44-tab" class="active">
ab78acc6
IC
303 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
304 </li>
9987f0c1
IC
305 <li id="bip49-tab">
306 <a href="#bip49" role="tab" data-toggle="tab">BIP49</a>
ab78acc6
IC
307 </li>
308 </ul>
309 <div class="derivation-type tab-content">
d5dc92fd 310 <div id="bip44" class="tab-pane active">
ab78acc6
IC
311 <form class="form-horizontal" role="form">
312 <br>
313 <div class="col-sm-2"></div>
314 <div class="col-sm-10">
1102f201 315 <p>
ea87f1d3
IC
316 For more info see the
317 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
318 </p>
ab78acc6
IC
319 </div>
320 <div class="form-group">
321 <label for="purpose" class="col-sm-2 control-label">
1102f201 322 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
ab78acc6
IC
323 </label>
324 <div class="col-sm-10">
9987f0c1 325 <input id="purpose" type="text" class="purpose form-control" value="44" readonly>
ab78acc6
IC
326 </div>
327 </div>
328 <div class="form-group">
329 <label for="coin" class="col-sm-2 control-label">
1102f201 330 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
ab78acc6
IC
331 </label>
332 <div class="col-sm-10">
9987f0c1 333 <input id="coin" type="text" class="coin form-control" value="0" readonly>
ab78acc6
IC
334 </div>
335 </div>
336 <div class="form-group">
337 <label for="account" class="col-sm-2 control-label">
1102f201 338 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
ab78acc6
IC
339 </label>
340 <div class="col-sm-10">
341 <input id="account" type="text" class="account form-control" value="0">
342 </div>
343 </div>
344 <div class="form-group">
345 <label for="change" class="col-sm-2 control-label">
1102f201 346 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
ab78acc6
IC
347 </label>
348 <div class="col-sm-10">
349 <input id="change" type="text" class="change form-control" value="0">
350 </div>
351 </div>
20083ab9
IC
352 <div class="form-group">
353 <label class="col-sm-2 control-label">
354 </label>
355 <div class="col-sm-10">
1102f201 356 <p>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
20083ab9
IC
357 </div>
358 </div>
359 <div class="form-group">
360 <label for="account-xprv" class="col-sm-2 control-label">
1102f201 361 <span>Account Extended Private Key</span>
20083ab9
IC
362 </label>
363 <div class="col-sm-10">
364 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
365 </div>
366 </div>
367 <div class="form-group">
368 <label for="account-xpub" class="col-sm-2 control-label">
1102f201 369 <span>Account Extended Public Key</span>
20083ab9
IC
370 </label>
371 <div class="col-sm-10">
372 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
373 </div>
374 </div>
375 <div class="form-group">
376 <label class="col-sm-2 control-label">
377 </label>
378 <div class="col-sm-10">
1102f201 379 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
20083ab9
IC
380 </div>
381 </div>
ab78acc6 382 <div class="form-group">
1102f201 383 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
ab78acc6
IC
384 <div class="col-sm-10">
385 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
386 </div>
387 </div>
388 </form>
389 </div>
390 <div id="bip32" class="tab-pane">
391 <form class="form-horizontal" role="form">
392 <br>
393 <div class="col-sm-2"></div>
394 <div class="col-sm-10">
1102f201 395 <p>
ea87f1d3
IC
396 For more info see the
397 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
398 </p>
ab78acc6 399 </div>
56530adc 400 <div class="form-group">
1102f201 401 <label for="bip32-client" class="col-sm-2 control-label">Client</label>
56530adc
IC
402 <div class="col-sm-10">
403 <select id="bip32-client" class="client form-control">
404 <option value="custom">Custom derivation path</option>
405 <!-- populated by javascript -->
406 </select>
407 </div>
408 </div>
ab78acc6 409 <div class="form-group">
1102f201 410 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
ab78acc6
IC
411 <div class="col-sm-10">
412 <input id="bip32-path" type="text" class="path form-control" value="m/0">
413 </div>
414 </div>
1975bfbc
IC
415 <div class="form-group">
416 <div class="col-sm-2"></div>
417 <label class="col-sm-10">
418 <input class="hardened-addresses" type="checkbox">
1102f201 419 <span>Use hardened addresses</span>
1975bfbc
IC
420 </label>
421 </div>
0a8d06d0
IC
422 <div class="form-group">
423 <div class="col-sm-2"></div>
424 <label class="col-sm-10">
425 <input class="p2wpkh-nested-in-p2sh" type="checkbox">
1102f201 426 <span>Use SegWit addresses (ie P2WPKH Nested In P2SH)</span>
0a8d06d0
IC
427 </label>
428 </div>
1975bfbc 429 <div class="form-group">
1102f201 430 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
1975bfbc 431 <div class="col-sm-10">
1102f201 432 <p class="form-control no-border">
1975bfbc 433 Use path <code>m/0'/0'</code> with hardened addresses.
c866242d 434 </p>
1102f201 435 <p class="form-control no-border">
ea87f1d3
IC
436 For more info see the
437 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
1975bfbc
IC
438 </p>
439 </div>
440 </div>
56530adc 441 <div class="form-group">
1102f201 442 <label for="core-path" class="col-sm-2 control-label">Multibit</label>
56530adc
IC
443 <div class="col-sm-10">
444 <p class="form-control no-border">
1102f201 445 <span>Use path <code>m/0'/0</code>.</span>
56530adc
IC
446 </p>
447 <p class="form-control no-border">
1102f201 448 <span>For more info see</span>
56530adc
IC
449 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
450 </p>
451 </div>
452 </div>
aa51da11 453 <div class="form-group">
1102f201 454 <label class="col-sm-2 control-label">Block Explorers</label>
aa51da11
IC
455 <div class="col-sm-10">
456 <p class="form-control no-border">
1102f201
IC
457 <span>Use path <code>m/44'/0'/0'</code>.</span>
458 <span>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
c866242d
IC
459 </p>
460 <p class="form-control no-border">
1102f201 461 <span>Can be used with</span>:
ea87f1d3 462 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
aa51da11
IC
463 </p>
464 </div>
465 </div>
ab78acc6
IC
466 </form>
467 </div>
9987f0c1
IC
468 <div id="bip49" class="tab-pane">
469 <form class="form-horizontal" role="form">
470 <br>
471 <div class="unavailable hidden">
472 <div class="form-group">
473 <div class="col-sm-2"></div>
474 <div class="col-sm-10">
1102f201 475 <p>BIP49 is unavailable for this coin.</p>
9987f0c1
IC
476 </div>
477 </div>
478 </div>
479 <div class="available">
480 <div class="col-sm-2"></div>
481 <div class="col-sm-10">
1102f201 482 <p>
9987f0c1
IC
483 For more info see the
484 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">BIP49 spec</a>.
485 </p>
486 </div>
487 <div class="form-group">
488 <label for="purpose" class="col-sm-2 control-label">
1102f201 489 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
9987f0c1
IC
490 </label>
491 <div class="col-sm-10">
492 <input id="purpose" type="text" class="purpose form-control" value="49" readonly>
493 </div>
494 </div>
495 <div class="form-group">
496 <label for="coin" class="col-sm-2 control-label">
1102f201 497 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
9987f0c1
IC
498 </label>
499 <div class="col-sm-10">
500 <input id="coin" type="text" class="coin form-control" value="0" readonly>
501 </div>
502 </div>
503 <div class="form-group">
504 <label for="account" class="col-sm-2 control-label">
1102f201 505 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
9987f0c1
IC
506 </label>
507 <div class="col-sm-10">
508 <input id="account" type="text" class="account form-control" value="0">
509 </div>
510 </div>
511 <div class="form-group">
512 <label for="change" class="col-sm-2 control-label">
1102f201 513 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
9987f0c1
IC
514 </label>
515 <div class="col-sm-10">
516 <input id="change" type="text" class="change form-control" value="0">
517 </div>
518 </div>
519 <div class="form-group">
520 <label class="col-sm-2 control-label">
521 </label>
522 <div class="col-sm-10">
1102f201 523 <p>The account extended keys can be used for importing to most BIP49 compatible wallets.</p>
9987f0c1
IC
524 </div>
525 </div>
526 <div class="form-group">
527 <label for="account-xprv" class="col-sm-2 control-label">
1102f201 528 <span>Account Extended Private Key</span>
9987f0c1
IC
529 </label>
530 <div class="col-sm-10">
531 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
532 </div>
533 </div>
534 <div class="form-group">
535 <label for="account-xpub" class="col-sm-2 control-label">
1102f201 536 <span>Account Extended Public Key</span>
9987f0c1
IC
537 </label>
538 <div class="col-sm-10">
539 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
540 </div>
541 </div>
542 <div class="form-group">
543 <label class="col-sm-2 control-label">
544 </label>
545 <div class="col-sm-10">
1102f201 546 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
9987f0c1
IC
547 </div>
548 </div>
549 <div class="form-group">
1102f201 550 <label for="bip49-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
9987f0c1
IC
551 <div class="col-sm-10">
552 <input id="bip49-path" type="text" class="path form-control" value="m/49'/0'/0'/0" readonly="readonly">
553 </div>
554 </div>
555 </div>
556 </form>
557 </div>
ab78acc6
IC
558 </div>
559 <form class="form-horizontal" role="form">
560 <div class="form-group">
1102f201 561 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Private Key</label>
ab78acc6 562 <div class="col-sm-10">
e00964cc 563 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
564 </div>
565 </div>
566 <div class="form-group">
1102f201 567 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Public Key</label>
ab78acc6 568 <div class="col-sm-10">
e00964cc 569 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
570 </div>
571 </div>
572 </form>
573 </div>
574 </div>
3af2954a 575
ab78acc6 576 <hr>
3af2954a 577
ab78acc6
IC
578 <div class="row">
579 <div class="col-md-12">
580 <h2>Derived Addresses</h2>
1102f201 581 <p>Note these addreses are derived from the BIP32 Extended Key</p>
0f6b34d6
IC
582 </div>
583 <div class="col-md-12 use-bitpay-addresses-container hidden">
584 <div class="checkbox">
585 <label>
586 <input type="checkbox" class="use-bitpay-addresses">
587 <span>Use BitPay-style addresses for Bitcoin Cash (ie starting with 'C' instead of '1')</span>
588 </label>
589 </div>
590 </div>
591 <div class="col-md-12">
ab78acc6
IC
592 <table class="table table-striped">
593 <thead>
594 <th>
595 <div class="input-group">
1102f201
IC
596 <span>Path</span>&nbsp;&nbsp;
597 <button class="index-toggle">Toggle</button>
ab78acc6
IC
598 </div>
599 </th>
600 <th>
601 <div class="input-group">
1102f201
IC
602 <span>Address</span>&nbsp;&nbsp;
603 <button class="address-toggle">Toggle</button>
ab78acc6
IC
604 </div>
605 </th>
1b12b2f5
IC
606 <th>
607 <div class="input-group">
1102f201
IC
608 <span>Public Key</span>&nbsp;&nbsp;
609 <button class="public-key-toggle">Toggle</button>
1b12b2f5
IC
610 </div>
611 </th>
ab78acc6
IC
612 <th>
613 <div class="input-group">
1102f201
IC
614 <span>Private Key</span>&nbsp;&nbsp;
615 <button class="private-key-toggle">Toggle</button>
ab78acc6
IC
616 </div>
617 </th>
618 </thead>
d737abf6 619 <tbody class="addresses monospace">
c866242d
IC
620 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
621 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
622 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
623 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
624 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
ab78acc6
IC
625 </tbody>
626 </table>
627 </div>
628 </div>
924727ed 629 <span>Show</span>
ab78acc6 630 <input type="number" class="rows-to-add" value="20">
924727ed
IC
631 <button class="more">more rows</button>
632 <span>starting from index</span>
633 <input type="number" class="more-rows-start-index">
634 <span>(leave blank to generate from next index)</span>
3af2954a 635
ab78acc6 636 <hr>
3af2954a 637
ab78acc6
IC
638 <div class="row">
639 <div class="col-md-12">
1102f201
IC
640 <h2>More info</h2>
641 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
642 <p>
ab78acc6
IC
643 Read more at the
644 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
645 </p>
1102f201
IC
646 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
647 <p>
ab78acc6
IC
648 Read more at the
649 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
ea87f1d3 650 </p>
1102f201 651 <p>
ea87f1d3 652 See the demo at
ab78acc6
IC
653 <a href="http://bip32.org/" target="_blank">bip32.org</a>
654 </p>
1102f201
IC
655 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
656 <p>
ab78acc6
IC
657 Read more at the
658 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
659 </p>
1102f201
IC
660 <h3>BIP49 <span class="small">Derivation scheme for P2WPKH-nested-in-P2SH based accounts</span></h3>
661 <p>
861750ae
JC
662 Read more at the
663 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">official BIP49 spec</a>
664 </p>
1102f201 665 <h3>Private Keys</h3>
ab78acc6 666 <p>
1102f201 667 <span>
ea87f1d3
IC
668 Use private keys at
669 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
670 </span>
1102f201 671 <span>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
ab78acc6 672 </p>
1102f201 673 <h3 id="entropy-notes">Entropy</h3>
c6624d51 674 <p>
1102f201 675 <span>
ea87f1d3
IC
676 Entropy values must be sourced from a
677 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
678 </span>
1102f201
IC
679 <span>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
680 <span>
ea87f1d3
IC
681 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address,
682 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
683 random enough for the needs of this tool.
684 </span>
c6624d51 685 </p>
434caecd 686 <p>
1102f201 687 <strong><span>Do not store entropy.</span></strong>
434caecd
IC
688 </p>
689 <p>
1102f201
IC
690 <span>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
691 <span>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
692 <span><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
434caecd 693 </p>
c6624d51 694 <p>
1102f201 695 <span>
ea87f1d3
IC
696 The random mnemonic generator on this page uses a
697 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
698 </span>
1102f201
IC
699 <span>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
700 <span>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
701 <span>In that case you might choose to use your own source of entropy.</span>
c6624d51
IC
702 </p>
703 <p>
1102f201 704 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank">You are not a good source of entropy.</a>
c6624d51 705 </p>
1102f201 706 <h3>License</h3>
52da415f 707 <p>
1102f201 708 <span>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
52da415f
IC
709 </span>
710 </p>
1102f201
IC
711 <p>The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.</p>
712 </div>
713 </div>
714
715 <hr>
716
717 <div class="row">
718 <div class="col-md-12">
719 <h2>Alternative Tools</h2>
720 <p>This tool is interoperable with any BIP39 wallet.</p>
721 <p>Some similar tools to this one (ie not consumer wallets) are</p>
722 <p>
723 <a href="https://bip32jp.github.io/english/">
724 https://bip32jp.github.io/english/
725 </a>
726 </p>
ab78acc6
IC
727 </div>
728 </div>
3af2954a 729
ab78acc6 730 <hr>
3af2954a 731
ab78acc6
IC
732 <div class="row">
733 <div class="col-md-12">
3af2954a 734
1102f201 735 <h2>Offline Usage</h2>
3af2954a 736
1102f201 737 <p>
ab78acc6
IC
738 You can use this tool without having to be online.
739 </p>
1102f201 740 <p>
ab78acc6
IC
741 In your browser, select file save-as, and save this page
742 as a file.
743 </p>
1102f201 744 <p>
ab78acc6
IC
745 Double-click that file to open it in a browser
746 on any offline computer.
747 </p>
748 <p>
1102f201 749 <span>Alternatively, download the file from the repository</span>
ea87f1d3
IC
750 -
751 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
752 </p>
3af2954a 753
ab78acc6
IC
754 </div>
755 </div>
3af2954a 756
ab78acc6 757 <hr>
3af2954a 758
ab78acc6
IC
759 <div class="row">
760 <div class="col-md-12">
3af2954a 761
1102f201 762 <h2>This project is 100% open-source code</h2>
3af2954a 763
ab78acc6 764 <p>
1102f201 765 <span>Get the source code from the repository</span>
ea87f1d3 766 -
b630f83d
IC
767 <a href="https://github.com/iancoleman/bip39" target="_blank">
768 https://github.com/iancoleman/bip39
ab78acc6
IC
769 </a>
770 </p>
3af2954a 771
1102f201 772 <h3>Libraries</h3>
3af2954a 773
ab78acc6
IC
774 <p>
775 <span>BitcoinJS - </span>
776 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
777 https://github.com/bitcoinjs/bitcoinjs-lib
778 </a>
779 </p>
3af2954a 780
ab78acc6
IC
781 <p>
782 <span>jsBIP39 - </span>
783 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
784 https://github.com/iancoleman/jsbip39
785 </a>
786 </p>
3af2954a 787
ab78acc6
IC
788 <p>
789 <span>sjcl - </span>
790 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
791 https://github.com/bitwiseshiftleft/sjcl
792 </a>
793 </p>
3af2954a 794
ab78acc6
IC
795 <p>
796 <span>jQuery - </span>
797 <a href="https://jquery.com/" target="_blank">
798 https://jquery.com/
799 </a>
800 </p>
3af2954a 801
ab78acc6
IC
802 <p>
803 <span>Twitter Bootstrap - </span>
804 <a href="http://getbootstrap.com/" target="_blank">
805 http://getbootstrap.com/
806 </a>
807 </p>
3af2954a 808
ab78acc6
IC
809 </div>
810 </div>
3af2954a 811
ab78acc6 812 </div>
3af2954a 813
e00964cc 814 <div class="qr-container hidden">
1102f201
IC
815 <div class="qr-hint bg-primary hidden">Click field to hide QR</div>
816 <div class="qr-hint bg-primary">Click field to show QR</div>
52da415f
IC
817 <div class="qr-hider hidden">
818 <div class="qr-image"></div>
1102f201 819 <div class="qr-warning bg-primary">Caution: Scanner may keep history</div>
52da415f 820 </div>
e00964cc
IC
821 </div>
822
ab78acc6
IC
823 <div class="feedback-container">
824 <div class="feedback">Loading...</div>
825 </div>
3af2954a 826
ab78acc6
IC
827 <script type="text/template" id="address-row-template">
828 <tr>
829 <td class="index"><span></span></td>
e00964cc
IC
830 <td class="address"><span data-show-qr></span></td>
831 <td class="pubkey"><span data-show-qr></span></td>
832 <td class="privkey"><span data-show-qr></span></td>
ab78acc6
IC
833 </tr>
834 </script>
8b095871
IC
835 <script>// From
836// https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
837// Required for ethereumjs-utils.js when run in phantomjs-2.1.1
838// but is not required in any modern browsers.
839// For more information, see
840// https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
841
842//----------------------------------------------------------------------
843//
844// ECMAScript 2015 Polyfills
845//
846//----------------------------------------------------------------------
563e401a 847
8b095871
IC
848(function (global) {
849 "use strict";
850
851 // Set this to always override native implementations, for testing
852 // the polyfill in browsers with partial/full ES2015 support.
853 var OVERRIDE_NATIVE_FOR_TESTING = false;
854
855 var undefined = (void 0); // Paranoia
856
857 // Helpers
858
859 function strict(o) {
860 return o === global ? undefined : o;
861 }
862
863 function hook(o, p, f) {
864 var op = o[p];
865 console.assert(typeof op === 'function', 'Hooking a non-function');
866 o[p] = function() {
867 var o = strict(this);
868 var r = f.apply(o, arguments);
869 return r !== undefined ? r : op.apply(o, arguments);
870 };
871 }
872
873 function isSymbol(s) {
874 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
875 }
876
877 function getPropertyDescriptor(target, name) {
878 var desc = Object.getOwnPropertyDescriptor(target, name);
879 var proto = Object.getPrototypeOf(target);
880 while (!desc && proto) {
881 desc = Object.getOwnPropertyDescriptor(proto, name);
882 proto = Object.getPrototypeOf(proto);
563e401a 883 }
8b095871
IC
884 return desc;
885 }
563e401a 886
8b095871
IC
887 var enqueue = (function(nativePromise, nativeSetImmediate) {
888 if (nativePromise)
889 return function(job) { nativePromise.resolve().then(function() { job(); }); };
890 if (nativeSetImmediate)
891 return function(job) { nativeSetImmediate(job); };
892 return function(job) { setTimeout(job, 0); };
893 }(global['Promise'], global['setImmediate']));
563e401a 894
8b095871
IC
895 function define(o, p, v, override) {
896 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
897 return;
898
899 if (typeof v === 'function') {
900 // Sanity check that functions are appropriately named (where possible)
901 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
902 Object.defineProperty(o, p, {
903 value: v,
904 configurable: true,
905 enumerable: false,
906 writable: true
907 });
563e401a 908 } else {
8b095871
IC
909 Object.defineProperty(o, p, {
910 value: v,
911 configurable: false,
912 enumerable: false,
913 writable: false
914 });
563e401a 915 }
8b095871 916 }
563e401a 917
8b095871
IC
918 function set_internal(o, p, v) {
919 Object.defineProperty(o, p, {
920 value: v,
921 configurable: false,
922 enumerable: false,
923 writable: true
924 });
925 }
563e401a 926
8b095871
IC
927 // Snapshot intrinsic functions
928 var $isNaN = global.isNaN,
929 $parseInt = global.parseInt,
930 $parseFloat = global.parseFloat;
931
932 var E = Math.E,
933 LOG10E = Math.LOG10E,
934 LOG2E = Math.LOG2E,
935 abs = Math.abs,
936 ceil = Math.ceil,
937 exp = Math.exp,
938 floor = Math.floor,
939 log = Math.log,
940 max = Math.max,
941 min = Math.min,
942 pow = Math.pow,
943 random = Math.random,
944 sqrt = Math.sqrt;
945
946 var orig_match = String.prototype.match,
947 orig_replace = String.prototype.replace,
948 orig_search = String.prototype.search,
949 orig_split = String.prototype.split;
950
951 // These are used for implementing the polyfills, but not exported.
952
953 // Inspired by https://gist.github.com/1638059
954 /** @constructor */
955 function EphemeronTable() {
956 var secretKey = ObjectCreate(null);
957
958 function conceal(o) {
959 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
960 Object.defineProperty(o, 'valueOf', {
961 value: (function(secretKey) {
962 return function (k) {
963 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
964 };
965 }(secretKey)),
966 configurable: true,
967 writeable: true,
968 enumerable: false
969 });
970 return secrets;
971 }
563e401a 972
8b095871
IC
973 function reveal(o) {
974 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
975 return v === o ? null : v;
976 }
977
978 return {
979 clear: function() {
980 secretKey = ObjectCreate(null);
981 },
982 remove: function(key) {
983 var secrets = reveal(key);
984 if (secrets && HasOwnProperty(secrets, 'value')) {
985 delete secrets.value;
986 return true;
987 }
988 return false;
989 },
990 get: function(key, defaultValue) {
991 var secrets = reveal(key);
992 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
993 },
994 has: function(key) {
995 var secrets = reveal(key);
996 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
997 },
998 set: function(key, value) {
999 var secrets = reveal(key) || conceal(key);
1000 secrets.value = value;
563e401a 1001 }
8b095871
IC
1002 };
1003 }
563e401a 1004
8b095871 1005 var empty = Object.create(null);
563e401a 1006
8b095871
IC
1007 //----------------------------------------------------------------------
1008 //
1009 // ECMAScript 2015
1010 // http://www.ecma-international.org/ecma-262/6.0/
1011 //
1012 //----------------------------------------------------------------------
563e401a 1013
8b095871
IC
1014 // ---------------------------------------
1015 // 19.4 Symbol Objects
1016 // ---------------------------------------
563e401a 1017
8b095871
IC
1018 // NOTE: Symbols are defined here - out of spec order - since we need the
1019 // properties and prototype to be populated for other polyfills.
563e401a 1020
8b095871 1021 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
563e401a 1022
8b095871
IC
1023 var symbolForKey;
1024 (function() {
1025 var secret = Object.create(null);
1026 var symbolMap = {};
1027 symbolForKey = function(k) {
1028 return symbolMap[k];
1029 };
563e401a 1030
8b095871 1031 var GlobalSymbolRegistry = [];
563e401a 1032
8b095871
IC
1033 function unique(bits) {
1034 return Array(bits + 1).join('x').replace(/x/g, function() {
1035 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
1036 });
1037 }
563e401a 1038
8b095871
IC
1039 // 19.4.1 The Symbol Constructor
1040 // 19.4.1.1 Symbol ( description=undefined )
1041 function Symbol(description) {
1042 if (!(this instanceof Symbol)) return new Symbol(description, secret);
1043 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
563e401a 1044
8b095871
IC
1045 var descString = description === undefined ? undefined : String(description);
1046
1047 set_internal(this, '[[SymbolData]]', unique(128));
1048 set_internal(this, '[[Description]]', descString);
1049
1050 symbolMap[this] = this;
1051 return this;
1052 }
1053
1054 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
1055 global.Symbol = Symbol;
1056
1057 // 19.4.2 Properties of the Symbol Constructor
1058
1059 // 19.4.2.1 Symbol.for (key)
1060 define(Symbol, 'for', function for_(key) {
1061 var stringKey = String(key);
1062 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
1063 var e = GlobalSymbolRegistry[i];
1064 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
563e401a 1065 }
8b095871
IC
1066 var newSymbol = Symbol(key);
1067 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
1068 return newSymbol;
1069 });
563e401a 1070
8b095871
IC
1071 // 19.4.2.2 Symbol.hasInstance
1072 // 19.4.2.3 Symbol.isConcatSpreadable
563e401a 1073
8b095871
IC
1074 // 19.4.2.4 Symbol.iterator
1075 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
563e401a 1076
8b095871
IC
1077 // 19.4.2.5 Symbol.keyFor (sym)
1078 define(Symbol, 'keyFor', function keyFor(sym) {
1079 if (!(sym instanceof Symbol)) throw TypeError();
1080 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
1081 var e = GlobalSymbolRegistry[i];
1082 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
1083 }
1084 return undefined;
1085 });
563e401a 1086
8b095871
IC
1087 // 19.4.2.6 Symbol.match
1088 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
563e401a 1089
8b095871 1090 // 19.4.2.7 Symbol.prototype
563e401a 1091
8b095871
IC
1092 // 19.4.2.8 Symbol.replace
1093 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
563e401a 1094
8b095871
IC
1095 // 19.4.2.9 Symbol.search
1096 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
563e401a 1097
8b095871 1098 // 19.4.2.10 Symbol.species
563e401a 1099
8b095871
IC
1100 // 19.4.2.11 Symbol.search
1101 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
563e401a 1102
8b095871 1103 // 19.4.2.12 Symbol.toPrimitive
563e401a 1104
8b095871
IC
1105 // 19.4.2.13 Symbol.toStringTag
1106 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
1107
1108 // 19.4.2.14 Symbol.unscopables
1109
1110 // 19.4.3 Properties of the Symbol Prototype Object
1111 // 19.4.3.1 Symbol.prototype.constructor
1112
1113 // 19.4.3.2 Symbol.prototype.toString ( )
1114 Object.defineProperty(Symbol.prototype, 'toString', {
1115 value: function toString() {
1116 var s = strict(this);
1117 var desc = s['[[Description]]'];
1118 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
1119 },
1120 configurable: true, writeable: true, enumerable: false });
1121
1122 // 19.4.3.3 Symbol.prototype.valueOf ( )
1123 Object.defineProperty(Symbol.prototype, 'valueOf', {
1124 value: function valueOf() {
1125 // To prevent automatic string conversion:
1126 throw TypeError();
1127
1128 // Spec has approximately the following:
1129 //var s = strict(this);
1130 //if (Type(s) === 'symbol') return s;
1131 //if (Type(s) !== 'object') throw TypeError();
1132 //if (!('[[SymbolData]]' in s)) throw TypeError();
1133 //return s['[[SymbolData]]'];
1134 },
1135 configurable: true, writeable: true, enumerable: false });
1136
1137 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1138 // (Done later to polyfill partial implementations)
1139
1140 // 19.4.4 Properties of Symbol Instances
1141 }());
1142
1143 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
1144
1145 // Defined here so that other prototypes can reference it
1146 // 25.1.2 The %IteratorPrototype% Object
1147 var $IteratorPrototype$ = {};
1148
1149 //----------------------------------------
1150 // 6 ECMAScript Data Types and Values
1151 //----------------------------------------
1152
1153 // 6.1 ECMAScript Language Types
1154
1155 // "Type(x)" is used as shorthand for "the type of x"...
1156 function Type(v) {
1157 switch (typeof v) {
1158 case 'undefined': return 'undefined';
1159 case 'boolean': return 'boolean';
1160 case 'number': return 'number';
1161 case 'string': return 'string';
1162 case 'symbol': return 'symbol';
1163 default:
1164 if (v === null) return 'null';
1165 if (v instanceof global.Symbol) return 'symbol';
1166 return 'object';
563e401a 1167 }
8b095871 1168 }
563e401a 1169
8b095871
IC
1170 // 6.1.5.1 Well-Known Symbols
1171 var $$iterator = global.Symbol.iterator,
1172 $$match = global.Symbol.match,
1173 $$replace = global.Symbol.replace,
1174 $$search = global.Symbol.search,
1175 $$split = global.Symbol.split,
1176 $$toStringTag = global.Symbol.toStringTag;
563e401a 1177
8b095871
IC
1178 //----------------------------------------
1179 // 7 Abstract Operations
1180 //----------------------------------------
1181
1182 //----------------------------------------
1183 // 7.1 Type Conversion
1184 //----------------------------------------
1185
1186 // 7.1.1 ToPrimitive ( input [, PreferredType] )
1187 // just use valueOf()
1188
1189 // 7.1.2 ToBoolean ( argument )
1190 // just use Boolean()
1191
1192 // 7.1.3 ToNumber ( argument )
1193 // just use Number()
1194
1195 // 7.1.4 ToInteger ( argument )
1196 function ToInteger(n) {
1197 n = Number(n);
1198 if ($isNaN(n)) return 0;
1199 if (n === 0 || n === Infinity || n === -Infinity) return n;
1200 return ((n < 0) ? -1 : 1) * floor(abs(n));
563e401a 1201 }
8b095871
IC
1202
1203 // 7.1.5 ToInt32 ( argument )
1204 function ToInt32(v) { return v >> 0; }
1205
1206 // 7.1.6 ToUint32 ( argument )
1207 function ToUint32(v) { return v >>> 0; }
1208
1209 // 7.1.7 ToInt16 ( argument )
1210 function ToInt16(v) { return (v << 16) >> 16; }
1211
1212 // 7.1.8 ToUint16 ( argument )
1213 function ToUint16(v) { return v & 0xFFFF; }
1214
1215 // 7.1.9 ToInt8 ( argument )
1216 function ToInt8(v) { return (v << 24) >> 24; }
1217
1218 // 7.1.10 ToUint8 ( argument )
1219 function ToUint8(v) { return v & 0xFF; }
1220
1221 // 7.1.11 ToUint8Clamp ( argument )
1222 function ToUint8Clamp(argument) {
1223 var number = Number(argument);
1224 if ($isNaN(number)) return 0;
1225 if (number <= 0) return 0;
1226 if (number >= 255) return 255;
1227 var f = floor(number);
1228 if ((f + 0.5) < number) return f + 1;
1229 if (number < (f + 0.5)) return f;
1230 if (f % 2) return f + 1;
1231 return f;
563e401a 1232 }
8b095871
IC
1233
1234 // 7.1.12 ToString ( argument )
1235 // just use String()
1236
1237 // 7.1.13 ToObject ( argument )
1238 function ToObject(v) {
1239 if (v === null || v === undefined) throw TypeError();
1240 return Object(v);
563e401a 1241 }
563e401a 1242
8b095871
IC
1243 // 7.1.14 ToPropertyKey ( argument )
1244 function ToPropertyKey(v) {
1245 return String(v);
1246 }
3af2954a 1247
8b095871
IC
1248 // 7.1.15 ToLength ( argument )
1249 function ToLength(v) {
1250 var len = ToInteger(v);
1251 if (len <= 0) return 0;
1252 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
1253 return min(len, 0x20000000000000 - 1); // 2^53-1
ab78acc6 1254 }
3af2954a 1255
8b095871 1256 // 7.1.16 CanonicalNumericIndexString ( argument )
3af2954a 1257
8b095871
IC
1258 //----------------------------------------
1259 // 7.2 Testing and Comparison Operations
1260 //----------------------------------------
3af2954a 1261
8b095871
IC
1262 // 7.2.1 RequireObjectCoercible ( argument )
1263 // 7.2.2 IsArray ( argument )
3af2954a 1264
8b095871
IC
1265 // 7.2.3 IsCallable ( argument )
1266 function IsCallable(o) { return typeof o === 'function'; }
3af2954a 1267
8b095871
IC
1268 // 7.2.4 IsConstructor ( argument )
1269 function IsConstructor(o) {
1270 // Hacks for Safari 7 TypedArray XXXConstructor objects
1271 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
1272 if (/Function/.test(Object.prototype.toString.call(o))) return true;
1273 // TODO: Can this be improved on?
1274 return typeof o === 'function';
3af2954a 1275 }
8b095871
IC
1276
1277 // 7.2.5 IsExtensible (O)
1278 // 7.2.6 IsInteger ( argument )
1279
1280 // 7.2.7 IsPropertyKey ( argument )
1281 function IsPropertyKey(argument) {
1282 if (Type(argument) === 'string') return true;
1283 if (Type(argument) === 'symbol') return true;
1284 return false;
3af2954a
IC
1285 }
1286
8b095871
IC
1287 // 7.2.8 IsRegExp ( argument )
1288 // 7.2.5 IsConstructor ( argument )
3af2954a 1289
8b095871
IC
1290 // 7.2.9 SameValue(x, y)
1291 function SameValue(x, y) {
1292 if (typeof x !== typeof y) return false;
1293 switch (typeof x) {
1294 case 'undefined':
1295 return true;
1296 case 'number':
1297 if (x !== x && y !== y) return true;
1298 if (x === 0 && y === 0) return 1/x === 1/y;
1299 return x === y;
1300 case 'boolean':
1301 case 'string':
1302 case 'object':
1303 default:
1304 return x === y;
1305 }
1306 }
3af2954a 1307
8b095871
IC
1308 // 7.2.10 SameValueZero(x, y)
1309 function SameValueZero(x, y) {
1310 if (typeof x !== typeof y) return false;
1311 switch (typeof x) {
1312 case 'undefined':
1313 return true;
1314 case 'number':
1315 if (x !== x && y !== y) return true;
1316 return x === y;
1317 case 'boolean':
1318 case 'string':
1319 case 'object':
1320 default:
1321 return x === y;
1322 }
1323 }
3af2954a 1324
8b095871
IC
1325 //----------------------------------------
1326 // 7.3 Operations on Objects
1327 //----------------------------------------
3af2954a 1328
8b095871
IC
1329 // 7.3.1 Get (O, P)
1330 // - just use o.p or o[p]
3af2954a 1331
8b095871
IC
1332 // 7.3.2 GetV (V, P)
1333 function GetV(v, p) {
1334 var o = ToObject(v);
1335 return o[p];
1336 }
3af2954a 1337
8b095871
IC
1338 // 7.3.3 Set (O, P, V, Throw)
1339 // - just use o.p = v or o[p] = v
3af2954a 1340
3af2954a 1341
3af2954a 1342
3af2954a 1343
8b095871
IC
1344 // 7.3.9 GetMethod (O, P)
1345 function GetMethod(o, p) {
1346 var func = GetV(o, p);
1347 if (func === undefined || func === null) return undefined;
1348 if (!IsCallable(func)) throw TypeError();
1349 return func;
ab78acc6 1350 }
8b095871
IC
1351
1352 // 7.3.10 HasProperty (O, P)
1353 function HasProperty(o, p) {
1354 while (o) {
1355 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
1356 if (Type(o) !== 'object') return false;
1357 o = Object.getPrototypeOf(o);
ab78acc6 1358 }
8b095871 1359 return false;
ab78acc6 1360 }
8b095871
IC
1361
1362 // 7.3.11 HasOwnProperty (O, P)
1363 function HasOwnProperty(o, p) {
1364 return Object.prototype.hasOwnProperty.call(o, p);
ab78acc6 1365 }
3af2954a 1366
8b095871
IC
1367 //----------------------------------------
1368 // 7.4 Operations on Iterator Objects
1369 //----------------------------------------
3af2954a 1370
8b095871
IC
1371 // 7.4.1 GetIterator ( obj, method )
1372 function GetIterator(obj, method) {
1373 if (arguments.length < 2)
1374 method = GetMethod(obj, $$iterator);
1375 var iterator = method.call(obj);
1376 if (Type(iterator) !== 'object') throw TypeError();
1377 return iterator;
3af2954a
IC
1378 }
1379
8b095871
IC
1380 // 7.4.2 IteratorNext ( iterator, value )
1381 function IteratorNext(iterator, value) {
1382 if (arguments.length < 2)
1383 var result = iterator.next();
1384 else
1385 result = iterator.next(value);
1386 if (Type(result) !== 'object') throw TypeError();
1387 return result;
1388 }
3af2954a 1389
8b095871
IC
1390 // 7.4.3 IteratorComplete ( iterResult )
1391 function IteratorComplete(iterResult) {
1392 console.assert(Type(iterResult) === 'object');
1393 return Boolean(iterResult.done);
1394 }
3af2954a 1395
8b095871
IC
1396 // 7.4.4 IteratorValue ( iterResult )
1397 function IteratorValue(iterResult) {
1398 console.assert(Type(iterResult) === 'object');
1399 return iterResult.value;
1400 }
1401
1402 // 7.4.5 IteratorStep ( iterator )
1403 function IteratorStep( iterator, value ) {
1404 var result = IteratorNext(iterator, value);
1405 var done = result['done'];
1406 if (Boolean(done) === true) return false;
1407 return result;
1408 }
1409
1410 // 7.4.6 IteratorClose( iterator, completion )
1411 function IteratorClose( iterator, completion ) {
1412 console.assert(Type(iterator) === 'object');
1413 var _return = GetMethod(iterator, 'return');
1414 if (_return === undefined) return completion;
1415 try {
1416 var innerResult = _return[iterator]();
1417 } catch (result) {
1418 // TODO: If completion.[[type]] is throw, return completion
1419 return result;
1420 }
1421 if (Type(innerResult) !== 'object') throw TypeError();
1422 return completion;
1423 }
1424
1425 // 7.4.7 CreateIterResultObject (value, done)
1426 function CreateIterResultObject(value, done) {
1427 console.assert(Type(done) === 'boolean');
1428 var obj = {};
1429 obj["value"] = value;
1430 obj["done"] = done;
1431 return obj;
1432 }
1433
1434 // 7.4.8 CreateListIterator (list)
1435 // 7.4.8.1 ListIterator next( )
1436 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
1437 // 7.4.9.1 CompoundIterator next( )
1438
1439 //----------------------------------------
1440 // 8 Executable Code and Execution Contexts
1441 //----------------------------------------
1442
1443 //----------------------------------------
1444 // 8.4 Jobs and Job Queues
1445 //----------------------------------------
1446
1447 // 8.4.1 EnqueueJob ( queueName, job, arguments)
1448 function EnqueueJob(queueName, job, args) {
1449 var fn = function() { job.apply(undefined, args); };
1450 enqueue(fn);
1451 }
1452
1453 // 8.4.2 NextJob result
1454 function NextJob(result) {
1455 // no-op
1456 }
1457
1458 //----------------------------------------
1459 // 9 Ordinary and Exotic Objects Behaviors
1460 //----------------------------------------
1461
1462 // 9.1.11 [[Enumerate]] ()
1463 function Enumerate(obj) {
1464 var e = [];
1465 if (Object(obj) !== obj) return e;
1466 var visited = new Set;
1467 while (obj !== null) {
1468 Object.getOwnPropertyNames(obj).forEach(function(name) {
1469 if (!visited.has(name)) {
1470 var desc = Object.getOwnPropertyDescriptor(obj, name);
1471 if (desc) {
1472 visited.add(name);
1473 if (desc.enumerable) e.push(name);
1474 }
1475 }
1476 });
1477 obj = Object.getPrototypeOf(obj);
1478 }
1479 return e[$$iterator]();
1480 }
1481
1482 // 9.1.12 [[OwnPropertyKeys]] ( )
1483 function OwnPropertyKeys(o) {
1484 return Object.getOwnPropertyNames(o);
1485 }
1486
1487 // 9.1.13 ObjectCreate(proto, internalSlotsList)
1488 function ObjectCreate(proto, internalSlotsList) {
1489 return Object.create(proto, internalSlotsList);
1490 }
1491
1492 // ---------------------------------------
1493 // 19 Fundamental Objects
1494 // ---------------------------------------
1495
1496 // ---------------------------------------
1497 // 19.1 Object Objects
1498 // ---------------------------------------
1499
1500 // 19.1.1 The Object Constructor
1501 // 19.1.1.1 Object ( [ value ] )
1502 // 19.1.2 Properties of the Object Constructor
1503 // 19.1.2.1 Object.assign ( target, ...sources )
1504 define(
1505 Object, 'assign',
1506 function assign(target, /*...*/sources) {
1507 var to = ToObject(target);
1508 if (arguments.length < 2) return to;
1509
1510 var sourcesIndex = 1;
1511 while (sourcesIndex < arguments.length) {
1512 var nextSource = arguments[sourcesIndex++];
1513 if (nextSource === undefined || nextSource === null) {
1514 var keys = [];
1515 } else {
1516 var from = ToObject(nextSource);
1517 keys = OwnPropertyKeys(from);
1518 }
1519 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
1520 var nextKey = keys[keysIndex];
1521 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
1522 if (desc !== undefined && desc.enumerable) {
1523 var propValue = from[nextKey];
1524 to[nextKey] = propValue;
1525 }
1526 }
1527 }
1528 return to;
1529 });
1530
1531 // 19.1.2.2 Object.create ( O [ , Properties ] )
1532 // 19.1.2.3 Object.defineProperties ( O, Properties )
1533 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
1534 // 19.1.2.5 Object.freeze ( O )
1535 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
1536
1537 (function() {
1538 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
1539 $getOwnPropertyNames = Object.getOwnPropertyNames,
1540 $keys = Object.keys,
1541 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
1542
1543 function isStringKey(k) { return !symbolForKey(k); }
1544
1545 // 19.1.2.7 Object.getOwnPropertyNames ( O )
1546 define(
1547 Object, 'getOwnPropertyNames',
1548 function getOwnPropertyNames(o) {
1549 if (Object.prototype.toString.call(o) === '[object Window]') {
1550 // Workaround for cross-realm calling by IE itself.
1551 // https://github.com/inexorabletash/polyfill/issues/96
1552 try {
1553 return $getOwnPropertyNames(o).filter(isStringKey);
1554 } catch (_) {
1555 return $window_names.slice();
1556 }
1557 }
1558 return $getOwnPropertyNames(o).filter(isStringKey);
1559 }, !nativeSymbols);
1560
1561 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
1562 define(
1563 Object, 'getOwnPropertySymbols',
1564 function getOwnPropertySymbols(o) {
1565 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
1566 }, !nativeSymbols);
1567
1568 // 19.1.2.14 Object.keys ( O )
1569 define(
1570 Object, 'keys',
1571 function keys(o) {
1572 return $keys(o).filter(isStringKey);
1573 }, !nativeSymbols);
1574 }());
1575
1576 // 19.1.2.9 Object.getPrototypeOf ( O )
1577 // 19.1.2.10 Object.is ( value1, value2 )
1578 define(
1579 Object, 'is',
1580 function is(value1, value2) {
1581 return SameValue(value1, value2);
1582 });
1583
1584 // 19.1.2.11 Object.isExtensible ( O )
1585 // 19.1.2.12 Object.isFrozen ( O )
1586 // 19.1.2.13 Object.isSealed ( O )
1587
1588 // 19.1.2.14 Object.keys ( O )
1589 // see above
1590
1591 // 19.1.2.15 Object.preventExtensions ( O )
1592 // 19.1.2.16 Object.prototype
1593 // 19.1.2.17 Object.seal ( O )
1594
1595 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
1596 define(
1597 Object, 'setPrototypeOf',
1598 function setPrototypeOf(o, proto) {
1599 if (Type(o) !== 'object') throw TypeError();
1600 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
1601 o.__proto__ = proto;
1602 return o;
1603 }
1604 );
1605
1606 // 19.1.3 Properties of the Object Prototype Object
1607 // 19.1.3.1 Object.prototype.constructor
1608 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
1609 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
1610 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
1611 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1612 // 19.1.3.6 Object.prototype.toString ( )
1613 hook(Object.prototype, 'toString',
1614 function() {
1615 var o = strict(this);
1616 if (o === Object(o) && $$toStringTag in o) {
1617 return '[object ' + o[$$toStringTag] + ']';
1618 }
1619 return undefined;
1620 });
1621
1622 // 19.1.3.7 Object.prototype.valueOf ( )
1623 // 19.1.4 Properties of Object Instances
1624
1625 // ---------------------------------------
1626 // 19.2 Function Objects
1627 // ---------------------------------------
1628
1629 // 19.2.1 The Function Constructor
1630 // 19.2.1.1 Function ( p1, p2, … , pn, body )
1631 // 19.2.2 Properties of the Function Constructor
1632 // 19.2.2.1 Function.length
1633 // 19.2.2.2 Function.prototype
1634 // 19.2.3 Properties of the Function Prototype Object
1635 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
1636 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
1637 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
1638 // 19.2.3.4 Function.prototype.constructor
1639 // 19.2.3.5 Function.prototype.toString ( )
1640 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
1641 // 19.2.4 Function Instances
1642 // 19.2.4.1 length
1643 // 19.2.4.2 name
1644 // 19.2.4.3 prototype
1645
1646 // (No polyfillable changes from ES5)
1647
1648 // ---------------------------------------
1649 // 19.3 Boolean Objects
1650 // ---------------------------------------
1651
1652 // 19.3.1 The Boolean Constructor
1653 // 19.3.1.1 Boolean ( value )
1654 // 19.3.2 Properties of the Boolean Constructor
1655 // 19.3.2.1 Boolean.prototype
1656 // 19.3.3 Properties of the Boolean Prototype Object
1657 // 19.3.3.1 Boolean.prototype.constructor
1658 // 19.3.3.2 Boolean.prototype.toString ( )
1659 // 19.3.3.3 Boolean.prototype.valueOf ( )
1660 // 19.3.4 Properties of Boolean Instances
1661
1662 // (No polyfillable changes from ES5)
1663
1664 // ---------------------------------------
1665 // 19.4 Symbol Objects
1666 // ---------------------------------------
1667
1668 // Moved earlier in this script, so that other polyfills can depend on them.
1669
1670 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1671 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
1672
1673 // ---------------------------------------
1674 // 19.5 Error Objects
1675 // ---------------------------------------
1676
1677 // 19.5.1 The Error Constructor
1678 // 19.5.1.1 Error ( message )
1679 // 19.5.1.2 new Error( ...argumentsList )
1680 // 19.5.2 Properties of the Error Constructor
1681 // 19.5.2.1 Error.prototype
1682 // 19.5.3 Properties of the Error Prototype Object
1683 // 19.5.3.1 Error.prototype.constructor
1684 // 19.5.3.2 Error.prototype.message
1685 // 19.5.3.3 Error.prototype.name
1686 // 19.5.3.4 Error.prototype.toString ( )
1687 // 19.5.4 Properties of Error Instances
1688 // 19.5.5 Native Error Types Used in This Standard
1689 // 19.5.5.1 EvalError
1690 // 19.5.5.2 RangeError
1691 // 19.5.5.3 ReferenceError
1692 // 19.5.5.4 SyntaxError
1693 // 19.5.5.5 TypeError
1694 // 19.5.5.6 URIError
1695 // 19.5.6 NativeError Object Structure
1696 // 19.5.6.1 NativeError Constructors
1697 // 19.5.6.1.1 NativeError ( message )
1698 // 19.5.6.1.2 new NativeError ( ...argumentsList )
1699 // 19.5.6.2 Properties of the NativeError Constructors
1700 // 19.5.6.2.1 NativeError.prototype
1701 // 19.5.6.3 Properties of the NativeError Prototype Objects
1702 // 19.5.6.4 Properties of NativeError Instances
1703
1704 // (No polyfillable changes from ES5)
1705
1706 // ---------------------------------------
1707 // 20 Numbers and Dates
1708 // ---------------------------------------
1709
1710 // ---------------------------------------
1711 // 20.1 Number Objects
1712 // ---------------------------------------
1713
1714 // 20.1.1 The Number Constructor
1715 // 20.1.1.1 Number ( [ value ] )
1716 // 20.1.1.2 new Number ( ...argumentsList )
1717 // 20.1.2 Properties of the Number Constructor
1718
1719 // 20.1.2.1 Number.EPSILON
1720 define(
1721 Number, 'EPSILON',
1722 (function () {
1723 var next, result;
1724 for (next = 1; 1 + next !== 1; next = next / 2)
1725 result = next;
1726 return result;
1727 }()));
1728
1729 // 20.1.2.2 Number.isFinite ( number )
1730 define(
1731 Number, 'isFinite',
1732 function isFinite(number) {
1733 if (Type(number) !== 'number') return false;
1734 if (number !== number || number === +Infinity || number === -Infinity) return false;
1735 return true;
1736 });
1737
1738 // 20.1.2.3 Number.isInteger ( number )
1739 define(
1740 Number, 'isInteger',
1741 function isInteger(number) {
1742 if (Type(number) !== 'number') return false;
1743 if (number !== number || number === +Infinity || number === -Infinity) return false;
1744 var integer = ToInteger(number);
1745 if (integer !== number) return false;
1746 return true;
1747 });
1748
1749 // 20.1.2.4 Number.isNaN ( number )
1750 define(
1751 Number, 'isNaN',
1752 function isNaN(number) {
1753 if (Type(number) !== 'number') return false;
1754 if (number !== number) return true;
1755 return false;
1756 });
1757
1758 // 20.1.2.5 Number.isSafeInteger ( number )
1759 define(
1760 Number, 'isSafeInteger',
1761 function isSafeInteger(number) {
1762 if (Type(number) !== 'number') return false;
1763 if (number !== number || number === +Infinity || number === -Infinity) return false;
1764 var integer = ToInteger(number);
1765 if (integer !== number) return false;
1766 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
1767 return true;
1768 return false;
1769 });
1770
1771 // 20.1.2.6 Number.MAX_SAFE_INTEGER
1772 define(
1773 Number, 'MAX_SAFE_INTEGER',
1774 9007199254740991); // 2^53-1
1775
1776 // 20.1.2.7 Number.MAX_VALUE
1777
1778 // 20.1.2.8 Number.MIN_SAFE_INTEGER
1779 define(
1780 Number, 'MIN_SAFE_INTEGER',
1781 -9007199254740991); // -2^53+1
1782
1783 // 20.1.2.9 Number.MIN_VALUE
1784 // 20.1.2.10 Number.NaN
1785 // 20.1.2.11 Number.NEGATIVE_INFINITY
1786
1787 // 20.1.2.12 Number.parseFloat ( string )
1788 define(Number, 'parseFloat', $parseFloat);
1789
1790 // 20.1.2.13 Number.parseInt ( string, radix )
1791 define(Number, 'parseInt', $parseInt);
1792
1793 // 20.1.2.14 Number.POSITIVE_INFINITY
1794 // 20.1.2.15 Number.prototype
1795
1796 // 20.1.3 Properties of the Number Prototype Object
1797 // 20.1.3.1 Number.prototype.constructor
1798 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
1799 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
1800 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
1801 // 20.1.3.5 Number.prototype.toPrecision ( precision )
1802 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
1803 // 20.1.3.7 Number.prototype.valueOf ( )
1804 // 20.1.4 Properties of Number Instances
1805
1806 // ---------------------------------------
1807 // 20.2 The Math Object
1808 // ---------------------------------------
1809
1810 // 20.2.1 Value Properties of the Math Object
1811 // 20.2.1.1 Math.E
1812 // 20.2.1.2 Math.LN10
1813 // 20.2.1.3 Math.LN2
1814 // 20.2.1.4 Math.LOG10E
1815 // 20.2.1.5 Math.LOG2E
1816 // 20.2.1.6 Math.PI
1817 // 20.2.1.7 Math.SQRT1_2
1818 // 20.2.1.8 Math.SQRT2
1819
1820 // 20.2.1.9 Math [ @@toStringTag ]
1821 define(Math, $$toStringTag, 'Math');
1822
1823 // 20.2.2 Function Properties of the Math Object
1824 // 20.2.2.1 Math.abs ( x )
1825 // 20.2.2.2 Math.acos ( x )
1826
1827 // 20.2.2.3 Math.acosh(x)
1828 define(
1829 Math, 'acosh',
1830 function acosh(x) {
1831 x = Number(x);
1832 return log(x + sqrt(x * x - 1));
1833 });
1834
1835 // 20.2.2.4 Math.asin ( x )
1836
1837 // 20.2.2.5 Math.asinh( x )
1838 define(
1839 Math, 'asinh',
1840 function asinh(x) {
1841 x = Number(x);
1842 if (SameValue(x, -0)) {
1843 return x;
1844 }
1845 var s = sqrt(x * x + 1);
1846 return (s === -x) ? log(0) : log(x + s);
1847 });
1848
1849 // 20.2.2.6 Math.atan ( x )
1850
1851 // 20.2.2.7 Math.atanh( x )
1852 define(
1853 Math, 'atanh',
1854 function atanh(x) {
1855 x = Number(x);
1856 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
1857 });
1858
1859 // 20.2.2.8 Math.atan2 ( y, x )
1860
1861 // 20.2.2.9 Math.cbrt ( x )
1862 define(
1863 Math, 'cbrt',
1864 function cbrt(x) {
1865 x = Number(x);
1866 if ($isNaN(x/x)) {
1867 return x;
1868 }
1869 var r = pow(abs(x), 1/3);
1870 var t = x/r/r;
1871 return r + (r * (t-r) / (2*r + t));
1872 });
1873
1874 // 20.2.2.10 Math.ceil ( x )
1875
1876 // 20.2.2.11 Math.clz32 ( x )
1877 define(
1878 Math, 'clz32',
1879 function clz32(x) {
1880 function clz8(x) {
1881 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
1882 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
1883 }
1884 x = ToUint32(x);
1885 return x & 0xff000000 ? clz8(x >> 24) :
1886 x & 0xff0000 ? clz8(x >> 16) + 8 :
1887 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
1888 });
1889
1890
1891
1892 // 20.2.2.12 Math.cos ( x )
1893
1894 // 20.2.2.13 Math.cosh ( x )
1895 define(
1896 Math, 'cosh',
1897 function cosh(x) {
1898 x = Number(x);
1899 return (pow(E, x) + pow(E, -x)) / 2;
1900 });
1901
1902 // 20.2.2.14 Math.exp ( x )
1903
1904 // 20.2.2.15 Math.expm1 ( x )
1905 define(
1906 Math, 'expm1',
1907 function expm1(x) {
1908 x = Number(x);
1909 // from: http://www.johndcook.com/cpp_log1p.html
1910 if (SameValue(x, -0)) {
1911 return -0;
1912 } else if (abs(x) < 1e-5) {
1913 return x + 0.5 * x * x; // two terms of Taylor expansion
1914 } else {
1915 return exp(x) - 1;
1916 }
1917 });
1918
1919 // 20.2.2.16 Math.floor ( x )
1920
1921 // 20.2.2.17 Math.fround ( x )
1922 define(
1923 Math, 'fround',
1924 function fround(x) {
1925 if ($isNaN(x)) {
1926 return NaN;
1927 }
1928 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
1929 return x;
1930 }
1931 return (new Float32Array([x]))[0];
1932 });
1933
1934 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
1935 define(
1936 Math, 'hypot',
1937 function hypot() {
1938 var values = [];
1939 var m = 0, sawNaN = false;
1940 for (var i = 0; i < arguments.length; ++i) {
1941 var n = abs(Number(arguments[i]));
1942 if (n === Infinity) return n;
1943 if (n !== n) sawNaN = true;
1944 if (n > m) m = n;
1945 values[i] = n;
1946 }
1947 if (sawNaN) return NaN;
1948 if (m === 0) return +0;
1949 var sum = +0;
1950 for (i = 0; i < values.length; ++i) {
1951 var r = values[i] / m;
1952 sum = sum + r * r;
1953 }
1954 return m * sqrt(sum);
1955 });
1956
1957 // 20.2.2.19 Math.imul ( x, y )
1958 define(
1959 Math, 'imul',
1960 function imul(x, y) {
1961 var a = ToUint32(x);
1962 var b = ToUint32(y);
1963 // (slow but accurate)
1964 var ah = (a >>> 16) & 0xffff;
1965 var al = a & 0xffff;
1966 var bh = (b >>> 16) & 0xffff;
1967 var bl = b & 0xffff;
1968 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
1969 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
1970 );
1971
1972 // 20.2.2.20 Math.log ( x )
1973
1974 // 20.2.2.21 Math.log1p ( x )
1975 define(
1976 Math, 'log1p',
1977 function log1p(x) {
1978 x = Number(x);
1979 // from: http://www.johndcook.com/cpp_expm1.html
1980 if (x < -1) {
1981 return NaN;
1982 } else if (SameValue(x, -0)) {
1983 return -0;
1984 } else if (abs(x) > 1e-4) {
1985 return log(1 + x);
1986 } else {
1987 return (-0.5 * x + 1) * x;
1988 }
1989 });
1990
1991 // 20.2.2.22 Math.log10 ( x )
1992 define(
1993 Math, 'log10',
1994 function log10(x) {
1995 x = Number(x);
1996 return log(x) * LOG10E;
1997 });
1998
1999 // 20.2.2.23 Math.log2 ( x )
2000 define(
2001 Math, 'log2',
2002 function log2(x) {
2003 x = Number(x);
2004 return log(x) * LOG2E;
2005 });
2006
2007 // 20.2.2.24 Math.max ( value1, value2 , ...values )
2008 // 20.2.2.25 Math.min ( value1, value2 , ...values )
2009 // 20.2.2.26 Math.pow ( x, y )
2010 // 20.2.2.27 Math.random ( )
2011 // 20.2.2.28 Math.round ( x )
2012
2013 // 20.2.2.29 Math.sign(x)
2014 define(
2015 Math, 'sign',
2016 function sign(x) {
2017 x = Number(x);
2018 return x < 0 ? -1 : x > 0 ? 1 : x;
2019 });
2020
2021 // 20.2.2.30 Math.sin ( x )
2022
2023 // 20.2.2.31 Math.sinh( x )
2024 define(
2025 Math, 'sinh',
2026 function sinh(x) {
2027 x = Number(x);
2028 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
2029 });
2030
2031 // 20.2.2.32 Math.sqrt ( x )
2032 // 20.2.2.33 Math.tan ( x )
2033
2034 // 20.2.2.34 Math.tanh ( x )
2035 define(
2036 Math, 'tanh',
2037 function tanh(x) {
2038 x = Number(x);
2039 var n = pow(E, 2 * x) - 1,
2040 d = pow(E, 2 * x) + 1;
2041 if (SameValue(x, -0))
2042 return x;
2043 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
2044 });
2045
2046 // 20.2.2.35 Math.trunc ( x )
2047 define(
2048 Math, 'trunc',
2049 function trunc(x) {
2050 x = Number(x);
2051 return $isNaN(x) ? NaN :
2052 x < 0 ? ceil(x) : floor(x);
2053 });
2054
2055 // ---------------------------------------
2056 // 20.3 Date Objects
2057 // ---------------------------------------
2058
2059 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
2060 // 20.3.1.1 Time Values and Time Range
2061 // 20.3.1.2 Day Number and Time within Day
2062 // 20.3.1.3 Year Number
2063 // 20.3.1.4 Month Number
2064 // 20.3.1.5 Date Number
2065 // 20.3.1.6 Week Day
2066 // 20.3.1.7 Local Time Zone Adjustment
2067 // 20.3.1.8 Daylight Saving Time Adjustment
2068 // 20.3.1.9 Local Time
2069 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
2070 // 20.3.1.11 MakeTime (hour, min, sec, ms)
2071 // 20.3.1.12 MakeDay (year, month, date)
2072 // 20.3.1.13 MakeDate (day, time)
2073 // 20.3.1.14 TimeClip (time)
2074 // 20.3.1.15 Date Time String Format
2075 // 20.3.1.15.1 Extended years
2076 // 20.3.2 The Date Constructor
2077 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
2078 // 20.3.2.2 Date ( value )
2079 // 20.3.2.3 Date ( )
2080 // 20.3.3 Properties of the Date Constructor
2081 // 20.3.3.1 Date.now ( )
2082 // 20.3.3.2 Date.parse (string)
2083 // 20.3.3.3 Date.prototype
2084 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
2085 // 20.3.4 Properties of the Date Prototype Object
2086 // 20.3.4.1 Date.prototype.constructor
2087 // 20.3.4.2 Date.prototype.getDate ( )
2088 // 20.3.4.3 Date.prototype.getDay ( )
2089 // 20.3.4.4 Date.prototype.getFullYear ( )
2090 // 20.3.4.5 Date.prototype.getHours ( )
2091 // 20.3.4.6 Date.prototype.getMilliseconds ( )
2092 // 20.3.4.7 Date.prototype.getMinutes ( )
2093 // 20.3.4.8 Date.prototype.getMonth ( )
2094 // 20.3.4.9 Date.prototype.getSeconds ( )
2095 // 20.3.4.10 Date.prototype.getTime ( )
2096 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
2097 // 20.3.4.12 Date.prototype.getUTCDate ( )
2098 // 20.3.4.13 Date.prototype.getUTCDay ( )
2099 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
2100 // 20.3.4.15 Date.prototype.getUTCHours ( )
2101 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
2102 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
2103 // 20.3.4.18 Date.prototype.getUTCMonth ( )
2104 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
2105 // 20.3.4.20 Date.prototype.setDate ( date )
2106 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
2107 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
2108 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
2109 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
2110 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
2111 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
2112 // 20.3.4.27 Date.prototype.setTime ( time )
2113 // 20.3.4.28 Date.prototype.setUTCDate ( date )
2114 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
2115 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
2116 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
2117 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
2118 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
2119 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
2120 // 20.3.4.35 Date.prototype.toDateString ( )
2121 // 20.3.4.36 Date.prototype.toISOString ( )
2122 // 20.3.4.37 Date.prototype.toJSON ( key )
2123 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
2124 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2125 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
2126 // 20.3.4.41 Date.prototype.toString ( )
2127 // 20.3.4.42 Date.prototype.toTimeString ( )
2128 // 20.3.4.43 Date.prototype.toUTCString ( )
2129 // 20.3.4.44 Date.prototype.valueOf ( )
2130 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
2131 // 20.3.5 Properties of Date Instances
2132
2133 // (No polyfillable changes from ES5)
2134
2135 // ---------------------------------------
2136 // 21 Text Processing
2137 // ---------------------------------------
2138
2139 var string_regexp_dispatch = (function() {
2140 var faux = {}, secret = Symbol();
2141 faux[Symbol.match] = function() { return secret; };
2142 return ("").match(faux) === secret;
2143 }());
2144
2145 // 21.1 String Objects
2146 // 21.1.1 The String Constructor
2147 // 21.1.1.1 String ( value )
2148 // 21.1.2 Properties of the String Constructor
2149 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
2150
2151 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
2152 define(
2153 String, 'fromCodePoint',
2154 function fromCodePoint(/*...codePoints*/) {
2155 var codePoints = arguments,
2156 length = codePoints.length,
2157 elements = [],
2158 nextIndex = 0;
2159 while (nextIndex < length) {
2160 var next = codePoints[nextIndex];
2161 var nextCP = Number(next);
2162 if (!SameValue(nextCP, ToInteger(nextCP)) ||
2163 nextCP < 0 || nextCP > 0x10FFFF) {
2164 throw RangeError('Invalid code point ' + nextCP);
2165 }
2166 if (nextCP < 0x10000) {
2167 elements.push(String.fromCharCode(nextCP));
2168 } else {
2169 nextCP -= 0x10000;
2170 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
2171 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
2172 }
2173 nextIndex += 1;
2174 }
2175 return elements.join('');
2176 });
2177
2178 // 21.1.2.3 String.prototype
2179
2180 // 21.1.2.4 String.raw ( template , ...substitutions )
2181 define(
2182 String, 'raw',
2183 function raw(template /*, ...substitutions*/) {
2184 var substitutions = [].slice.call(arguments, 1);
2185
2186 var cooked = Object(template);
2187 var rawValue = cooked['raw'];
2188 var raw = Object(rawValue);
2189 var len = raw['length'];
2190 var literalSegments = ToLength(len);
2191 if (literalSegments <= 0) return '';
2192 var stringElements = [];
2193 var nextIndex = 0;
2194 while (true) {
2195 var next = raw[nextIndex];
2196 var nextSeg = String(next);
2197 stringElements.push(nextSeg);
2198 if (nextIndex + 1 === literalSegments)
2199 return stringElements.join('');
2200 next = substitutions[nextIndex];
2201 var nextSub = String(next);
2202 stringElements.push(nextSub);
2203 nextIndex = nextIndex + 1;
2204 }
2205 });
2206
2207 // See https://githib.com/inexorabletash/uate for a more useful version.
2208
2209 // 21.1.3 Properties of the String Prototype Object
2210 // 21.1.3.1 String.prototype.charAt ( pos )
2211 // 21.1.3.2 String.prototype.charCodeAt ( pos )
2212
2213 // 21.1.3.3 String.prototype.codePointAt ( pos )
2214 define(
2215 String.prototype, 'codePointAt',
2216 function codePointAt(pos) {
2217 var o = strict(this);
2218 var s = String(o);
2219 var position = ToInteger(pos);
2220 var size = s.length;
2221 if (position < 0 || position >= size) return undefined;
2222 var first = s.charCodeAt(position);
2223 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
2224 var second = s.charCodeAt(position + 1);
2225 if (second < 0xDC00 || second > 0xDFFF) return first;
2226 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
2227 });
2228
2229 // 21.1.3.4 String.prototype.concat ( ...args )
2230 // 21.1.3.5 String.prototype.constructor
2231
2232 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
2233 define(
2234 String.prototype, 'endsWith',
2235 function endsWith(searchString) {
2236 var endPosition = arguments[1];
2237
2238 var o = strict(this);
2239 var s = String(o);
2240 var searchStr = String(searchString);
2241 var len = s.length;
2242 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
2243 var end = min(max(pos, 0), len);
2244 var searchLength = searchStr.length;
2245 var start = end - searchLength;
2246 if (start < 0) return false;
2247 if (s.substring(start, start + searchLength) === searchStr) return true;
2248 return false;
2249 });
2250
2251 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
2252 define(
2253 String.prototype, 'includes',
2254 function includes(searchString) {
2255 var position = arguments[1];
2256
2257 var o = strict(this);
2258 var s = String(o);
2259 var searchStr = String(searchString);
2260 var pos = ToInteger(position);
2261 var len = s.length;
2262 var start = min(max(pos, 0), len);
2263 return s.indexOf(searchStr, start) !== -1;
2264 });
2265
2266 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
2267 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
2268 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
2269 // 21.1.3.11 String.prototype.match ( regexp )
2270 define(
2271 String.prototype, 'match',
2272 function match(regexp) {
2273 var o = strict(this);
2274 var s = String(o);
2275 if (HasProperty(regexp, $$match)) var rx = regexp;
2276 else rx = new RegExp(regexp);
2277 return rx[$$match](s);
2278 }, !string_regexp_dispatch);
2279
2280 // 21.1.3.12 String.prototype.normalize ( [ form ] )
2281
2282 // Not practical due to table sizes; if needed, pull in:
2283 // https://github.com/walling/unorm/
2284
2285 // 21.1.3.13 String.prototype.repeat ( count )
2286 define(
2287 String.prototype, 'repeat',
2288 function repeat(count) {
2289 var o = strict(this);
2290 var s = String(o);
2291 var n = ToInteger(count);
2292 if (n < 0) throw RangeError();
2293 if (n === Infinity) throw RangeError();
2294 var t = new Array(n + 1).join(s);
2295 return t;
2296 });
2297
2298 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
2299 define(
2300 String.prototype, 'replace',
2301 function replace(searchValue, replaceValue) {
2302 var o = strict(this);
2303 if (HasProperty(searchValue, $$replace))
2304 return searchValue[$$replace](o, replaceValue);
2305 return orig_replace.call(o, searchValue, replaceValue);
2306 }, !string_regexp_dispatch);
2307
2308 // 21.1.3.15 String.prototype.search ( regexp )
2309 define(
2310 String.prototype, 'search',
2311 function search(regexp) {
2312 var o = strict(this);
2313 var string = String(o);
2314 if (HasProperty(regexp, $$search)) var rx = regexp;
2315 else rx = new RegExp(regexp);
2316 return rx[$$search](string);
2317 }, !string_regexp_dispatch);
2318
2319 // 21.1.3.16 String.prototype.slice ( start, end )
2320 // 21.1.3.17 String.prototype.split ( separator, limit )
2321 define(
2322 String.prototype, 'split',
2323 function split(separator, limit) {
2324 var o = strict(this);
2325 if (HasProperty(separator, $$split))
2326 return separator[$$split](o, limit);
2327 return orig_split.call(o, separator, limit);
2328 }, !string_regexp_dispatch);
2329
2330 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
2331 define(
2332 String.prototype, 'startsWith',
2333 function startsWith(searchString) {
2334 var position = arguments[1];
2335
2336 var o = strict(this);
2337 var s = String(o);
2338 var searchStr = String(searchString);
2339 var pos = ToInteger(position);
2340 var len = s.length;
2341 var start = min(max(pos, 0), len);
2342 var searchLength = searchStr.length;
2343 if (searchLength + start > len) return false;
2344 if (s.substring(start, start + searchLength) === searchStr) return true;
2345 return false;
2346 });
2347
2348 // 21.1.3.19 String.prototype.substring ( start, end )
2349 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
2350 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
2351 // 21.1.3.22 String.prototype.toLowerCase ( )
2352 // 21.1.3.23 String.prototype.toString ( )
2353 // 21.1.3.24 String.prototype.toUpperCase ( )
2354 // 21.1.3.25 String.prototype.trim ( )
2355 // 21.1.3.26 String.prototype.valueOf ( )
2356
2357 // 21.1.3.27 String.prototype [ @@iterator ]( )
2358 define(
2359 String.prototype, $$iterator,
2360 function entries() {
2361 return CreateStringIterator(this, 'value');
2362 });
2363
2364 // 21.1.4 Properties of String Instances
2365 // 21.1.4.1 length
2366
2367 // 21.1.5 String Iterator Objects
2368 /** @constructor */
2369 function StringIterator() {}
2370
2371 // 21.1.5.1 CreateStringIterator Abstract Operation
2372 function CreateStringIterator(string, kind) {
2373 var s = String(string);
2374 var iterator = new StringIterator;
2375 set_internal(iterator, '[[IteratedString]]', s);
2376 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
2377 set_internal(iterator, '[[StringIterationKind]]', kind);
2378 return iterator;
2379 }
2380
2381 // 21.1.5.2 The %StringIteratorPrototype% Object
2382 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
2383 StringIterator.prototype = $StringIteratorPrototype$;
2384
2385 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
2386 define(
2387 $StringIteratorPrototype$, 'next',
2388 function next() {
2389 var o = ToObject(this);
2390 var s = String(o['[[IteratedString]]']),
2391 index = o['[[StringIteratorNextIndex]]'],
2392 len = s.length;
2393 if (index >= len) {
2394 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
2395 return CreateIterResultObject(undefined, true);
2396 }
2397 var cp = s.codePointAt(index);
2398 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
2399 return CreateIterResultObject(String.fromCodePoint(cp), false);
2400 });
2401
2402 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
2403 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
2404
2405 // 21.1.5.3 Properties of String Iterator Instances
2406
2407 // ---------------------------------------
2408 // 21.2 RegExp (Regular Expression) Objects
2409 // ---------------------------------------
2410
2411 // 21.2.1 Patterns
2412 // 21.2.2 Pattern Semantics
2413 // 21.2.2.1 Notation
2414 // 21.2.2.2 Pattern
2415 // 21.2.2.3 Disjunction
2416 // 21.2.2.4 Alternative
2417 // 21.2.2.5 Term
2418 // 21.2.2.6 Assertion
2419 // 21.2.2.7 Quantifier
2420 // 21.2.2.8 Atom
2421 // 21.2.2.9 AtomEscape
2422 // 21.2.2.10 CharacterEscape
2423 // 21.2.2.11 DecimalEscape
2424 // 21.2.2.12 CharacterClassEscape
2425 // 21.2.2.13 CharacterClass
2426 // 21.2.2.14 ClassRanges
2427 // 21.2.2.15 NonemptyClassRanges
2428 // 21.2.2.16 NonemptyClassRangesNoDash
2429 // 21.2.2.17 ClassAtom
2430 // 21.2.2.18 ClassAtomNoDash
2431 // 21.2.2.19 ClassEscape
2432 // 21.2.3 The RegExp Constructor
2433 // 21.2.3.1 RegExp ( pattern, flags )
2434 // 21.2.3.2 new RegExp( ...argumentsList )
2435 // 21.2.3.3 Abstract Operations for the RegExp Constructor
2436 // 21.2.4 Properties of the RegExp Constructor
2437 // 21.2.4.1 RegExp.prototype
2438 // 21.2.5 Properties of the RegExp Prototype Object
2439 // 21.2.5.1 RegExp.prototype.constructor
2440 // 21.2.5.2 RegExp.prototype.exec ( string )
2441
2442 // 21.2.5.3 get RegExp.prototype.flags
2443 if (!('flags' in RegExp.prototype)) {
2444 Object.defineProperty(
2445 RegExp.prototype, 'flags', {
2446 get: function() {
2447 var s = String(this);
2448 return s.substring(s.lastIndexOf('/') + 1);
2449 }
2450 });
2451 }
2452
2453 // 21.2.5.4 get RegExp.prototype.global
2454 // 21.2.5.5 get RegExp.prototype.ignoreCase
2455
2456 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
2457 define(RegExp.prototype, $$match, function(string) {
2458 var o = strict(this);
2459 return orig_match.call(string, o);
2460 });
2461
2462 // 21.2.5.7 get RegExp.prototype.multiline
2463
2464 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
2465 define(RegExp.prototype, $$replace, function(string, replaceValue) {
2466 var o = strict(this);
2467 return orig_replace.call(string, o, replaceValue);
2468 });
2469
2470 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
2471 define(RegExp.prototype, $$search, function(string) {
2472 var o = strict(this);
2473 return orig_search.call(string, o);
2474 });
2475
2476 // 21.2.5.10 get RegExp.prototype.source
2477
2478 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
2479 define(RegExp.prototype, $$split, function(string, limit) {
2480 var o = strict(this);
2481 return orig_split.call(string, o, limit);
2482 });
2483
2484 // 21.2.5.12 get RegExp.prototype.sticky
2485 // 21.2.5.13 RegExp.prototype.test( S )
2486 // 21.2.5.14 RegExp.prototype.toString ( )
2487 // 21.2.5.15 get RegExp.prototype.unicode
2488
2489 // 21.2.6 Properties of RegExp Instances
2490 // 21.2.6.1 lastIndex
2491
2492 // (No polyfillable changes from ES5)
2493
2494 // ---------------------------------------
2495 // 22 Indexed Collections
2496 // ---------------------------------------
2497
2498 // ---------------------------------------
2499 // 22.1 Array Objects
2500 // ---------------------------------------
2501
2502 // 22.1.1 The Array Constructor
2503 // 22.1.1.1 Array ( )
2504 // 22.1.1.2 Array (len)
2505 // 22.1.1.3 Array (...items )
2506
2507 // 22.1.2 Properties of the Array Constructor
2508
2509 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
2510 define(
2511 Array, 'from',
2512 function from(items) {
2513 var mapfn = arguments[1];
2514 var thisArg = arguments[2];
2515
2516 var c = strict(this);
2517 if (mapfn === undefined) {
2518 var mapping = false;
2519 } else {
2520 if (!IsCallable(mapfn)) throw TypeError();
2521 var t = thisArg;
2522 mapping = true;
2523 }
2524 var usingIterator = GetMethod(items, $$iterator);
2525 if (usingIterator !== undefined) {
2526 if (IsConstructor(c)) {
2527 var a = new c();
2528 } else {
2529 a = new Array(0);
2530 }
2531 var iterator = GetIterator(items, usingIterator);
2532 var k = 0;
2533 while (true) {
2534 var next = IteratorStep(iterator);
2535 if (next === false) {
2536 a.length = k;
2537 return a;
2538 }
2539 var nextValue = IteratorValue(next);
2540 if (mapping)
2541 var mappedValue = mapfn.call(t, nextValue);
2542 else
2543 mappedValue = nextValue;
2544 a[k] = mappedValue;
2545 k += 1;
2546 }
2547 }
2548 var arrayLike = ToObject(items);
2549 var lenValue = arrayLike.length;
2550 var len = ToLength(lenValue);
2551 if (IsConstructor(c)) {
2552 a = new c(len);
2553 } else {
2554 a = new Array(len);
2555 }
2556 k = 0;
2557 while (k < len) {
2558 var kValue = arrayLike[k];
2559 if (mapping)
2560 mappedValue = mapfn.call(t, kValue, k);
2561 else
2562 mappedValue = kValue;
2563 a[k] = mappedValue;
2564 k += 1;
2565 }
2566 a.length = len;
2567 return a;
2568 });
2569
2570 // 22.1.2.2 Array.isArray ( arg )
2571
2572 // 22.1.2.3 Array.of ( ...items )
2573 define(
2574 Array, 'of',
2575 function of() {
2576 var items = arguments;
2577
2578 var lenValue = items.length;
2579 var len = ToUint32(lenValue);
2580 var c = strict(this), a;
2581 if (IsConstructor(c)) {
2582 a = new c(len);
2583 a = ToObject(a);
2584 } else {
2585 a = new Array(len);
2586 }
2587 var k = 0;
2588 while (k < len) {
2589 a[k] = items[k];
2590 k += 1;
2591 }
2592 a.length = len;
2593 return a;
2594 });
2595
2596 // 22.1.2.4 Array.prototype
2597 // 22.1.2.5 get Array [ @@species ]
2598 // 22.1.3 Properties of the Array Prototype Object
2599 // 22.1.3.1 Array.prototype.concat ( ...arguments )
2600 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
2601 // 22.1.3.2 Array.prototype.constructor
2602 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
2603 define(
2604 Array.prototype, 'copyWithin',
2605 function copyWithin(target, start/*, end*/) {
2606 var end = arguments[2];
2607
2608 var o = ToObject(this);
2609 var lenVal = o.length;
2610 var len = ToLength(lenVal);
2611 len = max(len, 0);
2612 var relativeTarget = ToInteger(target);
2613 var to;
2614 if (relativeTarget < 0)
2615 to = max(len + relativeTarget, 0);
2616 else
2617 to = min(relativeTarget, len);
2618 var relativeStart = ToInteger(start);
2619 var from;
2620 if (relativeStart < 0)
2621 from = max(len + relativeStart, 0);
2622 else
2623 from = min(relativeStart, len);
2624 var relativeEnd;
2625 if (end === undefined)
2626 relativeEnd = len;
2627 else
2628 relativeEnd = ToInteger(end);
2629 var final;
2630 if (relativeEnd < 0)
2631 final = max(len + relativeEnd, 0);
2632 else
2633 final = min(relativeEnd, len);
2634 var count = min(final - from, len - to);
2635 var direction;
2636 if (from < to && to < from + count) {
2637 direction = -1;
2638 from = from + count - 1;
2639 to = to + count - 1;
2640 } else {
2641 direction = 1;
2642 }
2643 while (count > 0) {
2644 var fromKey = String(from);
2645 var toKey = String(to);
2646 var fromPresent = HasProperty(o, fromKey);
2647 if (fromPresent) {
2648 var fromVal = o[fromKey];
2649 o[toKey] = fromVal;
2650 } else {
2651 delete o[toKey];
2652 }
2653 from = from + direction;
2654 to = to + direction;
2655 count = count - 1;
2656 }
2657 return o;
2658 });
2659
2660 // 22.1.3.4 Array.prototype.entries ( )
2661 var nativeArrayIteratorMethods =
2662 ('entries' in Array.prototype && 'next' in [].entries());
2663
2664 define(
2665 Array.prototype, 'entries',
2666 function entries() {
2667 return CreateArrayIterator(this, 'key+value');
2668 }, !nativeArrayIteratorMethods);
2669
2670 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
2671
2672 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
2673 define(
2674 Array.prototype, 'fill',
2675 function fill(value/*, start, end*/) {
2676 var start = arguments[1],
2677 end = arguments[2];
2678
2679 var o = ToObject(this);
2680 var lenVal = o.length;
2681 var len = ToLength(lenVal);
2682 len = max(len, 0);
2683 var relativeStart = ToInteger(start);
2684 var k;
2685 if (relativeStart < 0)
2686 k = max((len + relativeStart), 0);
2687 else
2688 k = min(relativeStart, len);
2689 var relativeEnd;
2690 if (end === undefined)
2691 relativeEnd = len;
2692 else
2693 relativeEnd = ToInteger(end);
2694 var final;
2695 if (relativeEnd < 0)
2696 final = max((len + relativeEnd), 0);
2697 else
2698 final = min(relativeEnd, len);
2699 while (k < final) {
2700 var pk = String(k);
2701 o[pk] = value;
2702 k += 1;
2703 }
2704 return o;
2705 });
2706
2707 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
2708
2709 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
2710 define(
2711 Array.prototype, 'find',
2712 function find(predicate) {
2713 var o = ToObject(this);
2714 var lenValue = o.length;
2715 var len = ToInteger(lenValue);
2716 if (!IsCallable(predicate)) throw TypeError();
2717 var t = arguments.length > 1 ? arguments[1] : undefined;
2718 var k = 0;
2719 while (k < len) {
2720 var pk = String(k);
2721 var kPresent = HasProperty(o, pk);
2722 if (kPresent) {
2723 var kValue = o[pk];
2724 var testResult = predicate.call(t, kValue, k, o);
2725 if (Boolean(testResult)) {
2726 return kValue;
2727 }
2728 }
2729 ++k;
2730 }
2731 return undefined;
2732 });
2733
2734 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
2735 define(
2736 Array.prototype, 'findIndex',
2737 function findIndex(predicate) {
2738 var o = ToObject(this);
2739 var lenValue = o.length;
2740 var len = ToLength(lenValue);
2741 if (!IsCallable(predicate)) throw TypeError();
2742 var t = arguments.length > 1 ? arguments[1] : undefined;
2743 var k = 0;
2744 while (k < len) {
2745 var pk = String(k);
2746 var kPresent = HasProperty(o, pk);
2747 if (kPresent) {
2748 var kValue = o[pk];
2749 var testResult = predicate.call(t, kValue, k, o);
2750 if (Boolean(testResult)) {
2751 return k;
2752 }
2753 }
2754 ++k;
2755 }
2756 return -1;
2757 });
2758
2759 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
2760 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
2761 // 22.1.3.12 Array.prototype.join (separator)
2762
2763 // 22.1.3.13 Array.prototype.keys ( )
2764 define(
2765 Array.prototype, 'keys',
2766 function keys() {
2767 return CreateArrayIterator(this, 'key');
2768 }, !nativeArrayIteratorMethods);
2769
2770 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2771 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
2772 // 22.1.3.16 Array.prototype.pop ( )
2773 // 22.1.3.17 Array.prototype.push ( ...items )
2774 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
2775 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
2776 // 22.1.3.20 Array.prototype.reverse ( )
2777 // 22.1.3.21 Array.prototype.shift ( )
2778 // 22.1.3.22 Array.prototype.slice (start, end)
2779 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
2780 // 22.1.3.24 Array.prototype.sort (comparefn)
2781 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
2782 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2783 // 22.1.3.27 Array.prototype.toString ( )
2784 // 22.1.3.28 Array.prototype.unshift ( ...items )
2785
2786 // 22.1.3.29 Array.prototype.values ( )
2787 define(
2788 Array.prototype, 'values',
2789 function values() {
2790 return CreateArrayIterator(this, 'value');
2791 }, !nativeArrayIteratorMethods);
2792
2793 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
2794 define(
2795 Array.prototype, $$iterator,
2796 Array.prototype.values
2797 );
2798
2799 // 22.1.3.31 Array.prototype [ @@unscopables ]
2800 // 22.1.4 Properties of Array Instances
2801 // 22.1.4.1 length
2802
2803 // 22.1.5 Array Iterator Objects
2804 function ArrayIterator() {}
2805
2806 // 22.1.5.1 CreateArrayIterator Abstract Operation
2807 function CreateArrayIterator(array, kind) {
2808 var o = ToObject(array);
2809 var iterator = new ArrayIterator;
2810 set_internal(iterator, '[[IteratedObject]]', o);
2811 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
2812 set_internal(iterator, '[[ArrayIterationKind]]', kind);
2813 return iterator;
2814 }
2815
2816 // 22.1.5.2 The %ArrayIteratorPrototype% Object
2817 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
2818 ArrayIterator.prototype = $ArrayIteratorPrototype$;
2819
2820 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
2821 define(
2822 $ArrayIteratorPrototype$, 'next',
2823 function next() {
2824 var o = strict(this);
2825 if (Type(o) !== 'object') throw TypeError();
2826 var a = o['[[IteratedObject]]'],
2827 index = o['[[ArrayIteratorNextIndex]]'],
2828 itemKind = o['[[ArrayIterationKind]]'],
2829 lenValue = a.length,
2830 len = ToUint32(lenValue),
2831 elementKey,
2832 elementValue;
2833 if (itemKind.indexOf('sparse') !== -1) {
2834 var found = false;
2835 while (!found && index < len) {
2836 elementKey = String(index);
2837 found = HasProperty(a, elementKey);
2838 if (!found) {
2839 index += 1;
2840 }
2841 }
2842 }
2843 if (index >= len) {
2844 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
2845 return CreateIterResultObject(undefined, true);
2846 }
2847 elementKey = index;
2848 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
2849 if (itemKind.indexOf('value') !== -1)
2850 elementValue = a[elementKey];
2851 if (itemKind.indexOf('key+value') !== -1)
2852 return CreateIterResultObject([elementKey, elementValue], false);
2853 if (itemKind.indexOf('key') !== -1)
2854 return CreateIterResultObject(elementKey, false);
2855 if (itemKind === 'value')
2856 return CreateIterResultObject(elementValue, false);
2857 throw Error('Internal error');
2858 });
2859
2860 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
2861 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
2862
2863 // 22.1.5.3 Properties of Array Iterator Instances
2864
2865
2866 // ---------------------------------------
2867 // 22.2 TypedArray Objects
2868 // ---------------------------------------
2869
2870 // See typedarray.js for TypedArray polyfill
2871
2872 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
2873 'Int16Array', 'Uint16Array',
2874 'Int32Array', 'Uint32Array',
2875 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
2876 if (!($TypedArrayName$ in global))
2877 return;
2878 var $TypedArray$ = global[$TypedArrayName$];
2879
2880 // 22.2.1 The %TypedArray% Intrinsic Object
2881 // 22.2.1.1 %TypedArray% ( length )
2882 // 22.2.1.2 %TypedArray% ( typedArray )
2883 // 22.2.1.3 %TypedArray% ( object )
2884 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
2885 // 22.2.1.5 %TypedArray% ( all other argument combinations )
2886 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
2887
2888 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
2889 define(
2890 $TypedArray$, 'from',
2891 function from(source) {
2892 var mapfn = arguments[1];
2893 var thisArg = arguments[2];
2894
2895 var c = strict(this);
2896 if (!IsConstructor(c)) throw TypeError();
2897 if (mapfn === undefined) {
2898 var mapping = false;
2899 } else {
2900 if (IsCallable(mapfn)) throw TypeError();
2901 var t = thisArg;
2902 mapping = true;
2903 }
2904 var usingIterator = GetMethod(source, $$iterator);
2905 if (usingIterator !== undefined) {
2906 var iterator = GetIterator(source, usingIterator);
2907 var values = [];
2908 var next = true;
2909 while (next !== false) {
2910 next = IteratorStep(iterator);
2911 if (next !== false) {
2912 var nextValue = IteratorValue(next);
2913 values.push(nextValue);
2914 }
2915 }
2916 var len = values.length;
2917 var newObj = new c(len);
2918 var k = 0;
2919 while (k < len) {
2920 var kValue = values.shift();
2921 if (mapping) {
2922 var mappedValue = mapfn.call(t, kValue);
2923 } else {
2924 mappedValue = kValue;
2925 }
2926 newObj[k] = mappedValue;
2927 ++k;
2928 }
2929 console.assert(values.length === 0);
2930 return newObj;
2931 }
2932 var arrayLike = ToObject(source);
2933 var lenValue = arrayLike.length;
2934 len = ToLength(lenValue);
2935 newObj = new c(len);
2936 k = 0;
2937 while (k < len) {
2938 kValue = arrayLike[k];
2939 if (mapping) {
2940 mappedValue = mapfn.call(t, kValue, k);
2941 } else {
2942 mappedValue = kValue;
2943 }
2944 newObj[k] = mappedValue;
2945 ++k;
2946 }
2947 return newObj;
2948 });
2949
2950 // 22.2.2.2 %TypedArray%.of ( ...items )
2951 define(
2952 $TypedArray$, 'of',
2953 function of() {
2954 var items = arguments;
2955
2956 var len = items.length;
2957 var c = strict(this);
2958 var newObj = new c(len);
2959 var k = 0;
2960 while (k < len) {
2961 newObj[k] = items[k];
2962 ++k;
2963 }
2964 return newObj;
2965 });
2966
2967 // 22.2.2.3 %TypedArray%.prototype
2968 // 22.2.2.4 get %TypedArray% [ @@species ]
2969 // 22.2.3 Properties of the %TypedArrayPrototype% Object
2970 // 22.2.3.1 get %TypedArray%.prototype.buffer
2971 // 22.2.3.2 get %TypedArray%.prototype.byteLength
2972 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
2973 // 22.2.3.4 %TypedArray%.prototype.constructor
2974
2975 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
2976 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
2977
2978 // 22.2.3.6 %TypedArray%.prototype.entries ( )
2979 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
2980
2981 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
2982 define($TypedArray$.prototype, 'every', Array.prototype.every);
2983
2984 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
2985 define(
2986 $TypedArray$.prototype, 'fill',
2987 //Array.prototype.fill // Doesn't work in Safari 7
2988 function fill(value/*, start, end*/) {
2989 var start = arguments[1],
2990 end = arguments[2];
2991
2992 var o = ToObject(this);
2993 var lenVal = o.length;
2994 var len = ToLength(lenVal);
2995 len = max(len, 0);
2996 var relativeStart = ToInteger(start);
2997 var k;
2998 if (relativeStart < 0) k = max((len + relativeStart), 0);
2999 else k = min(relativeStart, len);
3000 var relativeEnd;
3001 if (end === undefined) relativeEnd = len;
3002 else relativeEnd = ToInteger(end);
3003 var final;
3004 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
3005 else final = min(relativeEnd, len);
3006 while (k < final) {
3007 var pk = String(k);
3008 o[pk] = value;
3009 k += 1;
3010 }
3011 return o;
3012 });
3013
3014 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
3015 define(
3016 $TypedArray$.prototype, 'filter',
3017 function filter(callbackfn) {
3018 var thisArg = arguments[1];
3019
3020 var o = ToObject(this);
3021 var lenVal = o.length;
3022 var len = ToLength(lenVal);
3023 if (!IsCallable(callbackfn)) throw TypeError();
3024 var t = thisArg;
3025 var c = o.constructor;
3026 var kept = [];
3027 var k = 0;
3028 var captured = 0;
3029 while (k < len) {
3030 var kValue = o[k];
3031 var selected = callbackfn.call(t, kValue, k, o);
3032 if (selected) {
3033 kept.push(kValue);
3034 ++captured;
3035 }
3036 ++k;
3037 }
3038 var a = new c(captured);
3039 var n = 0;
3040 for (var i = 0; i < kept.length; ++i) {
3041 var e = kept[i];
3042 a[n] = e;
3043 ++n;
3044 }
3045 return a;
3046 });
3047
3048 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
3049 define($TypedArray$.prototype, 'find', Array.prototype.find);
3050
3051 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
3052 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
3053
3054 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
3055 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
3056
3057 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
3058 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
3059
3060 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
3061 define($TypedArray$.prototype, 'join', Array.prototype.join);
3062
3063 // 22.2.3.15 %TypedArray%.prototype.keys ( )
3064 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
3065
3066 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
3067 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
3068
3069 // 22.2.3.17 get %TypedArray%.prototype.length
3070
3071 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
3072 define(
3073 $TypedArray$.prototype, 'map',
3074 function map(callbackfn) {
3075 var thisArg = arguments[1];
3076
3077 var o = ToObject(this);
3078 var lenValue = o.length;
3079 var len = ToLength(lenValue);
3080 if (!IsCallable(callbackfn)) throw TypeError();
3081 var t = thisArg;
3082 var a = undefined;
3083 var c = o.constructor;
3084 if (IsConstructor(c))
3085 a = new c(len);
3086 if (a === undefined)
3087 a = new Array(len);
3088 var k = 0;
3089 while (k < len) {
3090 var kPresent = HasProperty(o, k);
3091 if (kPresent) {
3092 var kValue = o[k];
3093 var mappedValue = callbackfn.call(t, kValue, k, o);
3094 a[k] = mappedValue;
3095 }
3096 ++k;
3097 }
3098 return a;
3099 });
3100
3101 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
3102 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
3103
3104 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
3105 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
3106
3107 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
3108 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
3109
3110 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
3111 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
3112 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
3113
3114 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
3115 define(
3116 $TypedArray$.prototype, 'slice',
3117 function slice(start, end) {
3118 var o = ToObject(this);
3119 var lenVal = o.length;
3120 var len = ToLength(lenVal);
3121 var relativeStart = ToInteger(start);
3122 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
3123 var relativeEnd = (end === undefined) ? len : ToInteger(end);
3124 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
3125 var count = final - k;
3126 var c = o.constructor;
3127 if (IsConstructor(c)) {
3128 var a = new c(count);
3129 } else {
3130 throw TypeError();
3131 }
3132 var n = 0;
3133 while (k < final) {
3134 var kValue = o[k];
3135 a[n] = kValue;
3136 ++k;
3137 ++n;
3138 }
3139 return a;
3140 });
3141
3142 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
3143 define($TypedArray$.prototype, 'some', Array.prototype.some);
3144
3145 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
3146 define(
3147 $TypedArray$.prototype, 'sort',
3148 function sort() {
3149 var comparefn = arguments[0];
3150
3151 function sortCompare(x, y) {
3152 console.assert(Type(x) === 'number' && Type(y) === 'number');
3153 if (x !== x && y !== y) return +0;
3154 if (x !== x) return 1;
3155 if (y !== y) return -1;
3156 if (comparefn !== undefined) {
3157 return comparefn(x, y);
3158 }
3159 if (x < y) return -1;
3160 if (x > y) return 1;
3161 return +0;
3162 }
3163 return Array.prototype.sort.call(this, sortCompare);
3164 });
3165
3166 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
3167 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
3168 // 22.2.3.28 %TypedArray%.prototype.toString ( )
3169
3170 // 22.2.3.29 %TypedArray%.prototype.values ( )
3171 define($TypedArray$.prototype, 'values', Array.prototype.values);
3172
3173 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
3174 define(
3175 $TypedArray$.prototype, $$iterator,
3176 $TypedArray$.prototype.values
3177 );
3178
3179 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
3180 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
3181
3182 // 22.2.4 The TypedArray Constructors
3183 // 22.2.4.1TypedArray( ... argumentsList)
3184 // 22.2.5 Properties of the TypedArray Constructors
3185 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
3186 // 22.2.5.2 TypedArray.prototype
3187 // 22.2.6 Properties of TypedArray Prototype Objects
3188 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
3189 // 22.2.6.2 TypedArray.prototype.constructor
3190 // 22.2.7 Properties of TypedArray Instances
3191 });
3192
3193 // ---------------------------------------
3194 // 23 Keyed Collection
3195 // ---------------------------------------
3196
3197 // ---------------------------------------
3198 // 23.1 Map Objects
3199 // ---------------------------------------
3200
3201 (function() {
3202 // 23.1.1 The Map Constructor
3203
3204 // 23.1.1.1 Map ( [ iterable ] )
3205 /** @constructor */
3206 function Map(/*iterable*/) {
3207 var map = strict(this);
3208 var iterable = arguments[0];
3209
3210 if (Type(map) !== 'object') throw TypeError();
3211 if ('[[MapData]]' in map) throw TypeError();
3212
3213 if (iterable !== undefined) {
3214 var adder = map['set'];
3215 if (!IsCallable(adder)) throw TypeError();
3216 var iter = GetIterator(ToObject(iterable));
3217 }
3218 set_internal(map, '[[MapData]]', { keys: [], values: [] });
3219 if (iter === undefined) return map;
3220 while (true) {
3221 var next = IteratorStep(iter);
3222 if (next === false)
3223 return map;
3224 var nextItem = IteratorValue(next);
3225 if (Type(nextItem) !== 'object') throw TypeError();
3226 var k = nextItem[0];
3227 var v = nextItem[1];
3228 adder.call(map, k, v);
3229 }
3230
3231 return map;
3232 }
3233
3234 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3235 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
3236 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
3237 (new global.Map([['a', 1]]).size !== 1))
3238 global.Map = Map;
3239
3240
3241 function MapDataIndexOf(mapData, key) {
3242 var i;
3243 if (key === key) return mapData.keys.indexOf(key);
3244 // Slow case for NaN
3245 for (i = 0; i < mapData.keys.length; i += 1)
3246 if (SameValueZero(mapData.keys[i], key)) return i;
3247 return -1;
3248 }
3249
3250 // 23.1.1.2 new Map ( ... argumentsList )
3251 // 23.1.2 Properties of the Map Constructor
3252 // 23.1.2.1 Map.prototype
3253 var $MapPrototype$ = {};
3254 Map.prototype = $MapPrototype$;
3255
3256 // 23.1.2.2 get Map [ @@species ]
3257
3258 // 23.1.3 Properties of the Map Prototype Object
3259 // 23.1.3.1 Map.prototype.clear ()
3260 define(
3261 Map.prototype, 'clear',
3262 function clear() {
3263 var m = strict(this);
3264 if (Type(m) !== 'object') throw TypeError();
3265 if (!('[[MapData]]' in m)) throw TypeError();
3266 if (m['[[MapData]]'] === undefined) throw TypeError();
3267 var entries = m['[[MapData]]'];
3268 entries.keys.length = 0;
3269 entries.values.length = 0;
3270 return undefined;
3271 });
3272
3273 // 23.1.3.2 Map.prototype.constructor
3274
3275 // 23.1.3.3 Map.prototype.delete ( key )
3276 define(
3277 Map.prototype, 'delete',
3278 function delete_(key) {
3279 var m = strict(this);
3280 if (Type(m) !== 'object') throw TypeError();
3281 if (!('[[MapData]]' in m)) throw TypeError();
3282 if (m['[[MapData]]'] === undefined) throw TypeError();
3283 var entries = m['[[MapData]]'];
3284 var i = MapDataIndexOf(entries, key);
3285 if (i < 0) return false;
3286 entries.keys[i] = empty;
3287 entries.values[i] = empty;
3288 return true;
3289 });
3290
3291 // 23.1.3.4 Map.prototype.entries ( )
3292 define(
3293 Map.prototype, 'entries',
3294 function entries() {
3295 var m = strict(this);
3296 if (Type(m) !== 'object') throw TypeError();
3297 return CreateMapIterator(m, 'key+value');
3298 });
3299
3300 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
3301 define(
3302 Map.prototype, 'forEach',
3303 function forEach(callbackfn /*, thisArg*/) {
3304 var thisArg = arguments[1];
3305
3306 var m = strict(this);
3307 if (Type(m) !== 'object') throw TypeError();
3308 if (!('[[MapData]]' in m)) throw TypeError();
3309 if (m['[[MapData]]'] === undefined) throw TypeError();
3310 var entries = m['[[MapData]]'];
3311
3312 if (!IsCallable(callbackfn)) {
3313 throw TypeError('First argument to forEach is not callable.');
3314 }
3315 for (var i = 0; i < entries.keys.length; ++i) {
3316 if (entries.keys[i] !== empty) {
3317 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
3318 }
3319 }
3320 return undefined;
3321 });
3322
3323 // 23.1.3.6 Map.prototype.get ( key )
3324 define(
3325 Map.prototype, 'get',
3326 function get(key) {
3327 var m = strict(this);
3328 if (Type(m) !== 'object') throw TypeError();
3329 if (!('[[MapData]]' in m)) throw TypeError();
3330 if (m['[[MapData]]'] === undefined) throw TypeError();
3331 var entries = m['[[MapData]]'];
3332 var i = MapDataIndexOf(entries, key);
3333 if (i >= 0) return entries.values[i];
3334 return undefined;
3335 });
3336
3337 // 23.1.3.7 Map.prototype.has ( key )
3338 define(
3339 Map.prototype, 'has',
3340 function has(key) {
3341 var m = strict(this);
3342 if (Type(m) !== 'object') throw TypeError();
3343 if (!('[[MapData]]' in m)) throw TypeError();
3344 if (m['[[MapData]]'] === undefined) throw TypeError();
3345 var entries = m['[[MapData]]'];
3346 if (MapDataIndexOf(entries, key) >= 0) return true;
3347 return false;
3348 });
3349
3350 // 23.1.3.8 Map.prototype.keys ( )
3351 define(
3352 Map.prototype, 'keys',
3353 function keys() {
3354 var m = strict(this);
3355 if (Type(m) !== 'object') throw TypeError();
3356 return CreateMapIterator(m, 'key');
3357 });
3358
3359 // 23.1.3.9 Map.prototype.set ( key , value )
3360 define(
3361 Map.prototype, 'set',
3362 function set(key, value) {
3363 var m = strict(this);
3364 if (Type(m) !== 'object') throw TypeError();
3365 if (!('[[MapData]]' in m)) throw TypeError();
3366 if (m['[[MapData]]'] === undefined) throw TypeError();
3367 var entries = m['[[MapData]]'];
3368 var i = MapDataIndexOf(entries, key);
3369 if (i < 0) i = entries.keys.length;
3370 if (SameValue(key, -0)) key = 0;
3371 entries.keys[i] = key;
3372 entries.values[i] = value;
3373 return m;
3374 });
3375
3376 // 23.1.3.10 get Map.prototype.size
3377 Object.defineProperty(
3378 Map.prototype, 'size', {
3379 get: function() {
3380 var m = strict(this);
3381 if (Type(m) !== 'object') throw TypeError();
3382 if (!('[[MapData]]' in m)) throw TypeError();
3383 if (m['[[MapData]]'] === undefined) throw TypeError();
3384 var entries = m['[[MapData]]'];
3385 var count = 0;
3386 for (var i = 0; i < entries.keys.length; ++i) {
3387 if (entries.keys[i] !== empty)
3388 count = count + 1;
3389 }
3390 return count;
3391 }
3392 });
3393
3394 // 23.1.3.11 Map.prototype.values ( )
3395 define(
3396 Map.prototype, 'values',
3397 function values() {
3398 var m = strict(this);
3399 if (Type(m) !== 'object') throw TypeError();
3400 return CreateMapIterator(m, 'value');
3401 });
3402
3403 // 23.1.3.12 Map.prototype [ @@iterator ]( )
3404 define(
3405 Map.prototype, $$iterator,
3406 function() {
3407 var m = strict(this);
3408 if (Type(m) !== 'object') throw TypeError();
3409 return CreateMapIterator(m, 'key+value');
3410 });
3411
3412 // 23.1.3.13 Map.prototype [ @@toStringTag ]
3413 define(global.Map.prototype, $$toStringTag, 'Map');
3414
3415 // 23.1.4 Properties of Map Instances
3416 // 23.1.5 Map Iterator Objects
3417
3418 /** @constructor */
3419 function MapIterator() {}
3420
3421 // 23.1.5.1 CreateMapIterator Abstract Operation
3422 function CreateMapIterator(map, kind) {
3423 if (Type(map) !== 'object') throw TypeError();
3424 if (!('[[MapData]]' in map)) throw TypeError();
3425 if (map['[[MapData]]'] === undefined) throw TypeError();
3426 var iterator = new MapIterator;
3427 set_internal(iterator, '[[Map]]', map);
3428 set_internal(iterator, '[[MapNextIndex]]', 0);
3429 set_internal(iterator, '[[MapIterationKind]]', kind);
3430 return iterator;
3431 }
3432
3433 // 23.1.5.2 The %MapIteratorPrototype% Object
3434 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
3435 MapIterator.prototype = $MapIteratorPrototype$;
3436
3437 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
3438 define(
3439 $MapIteratorPrototype$, 'next',
3440 function next() {
3441 var o = strict(this);
3442 if (Type(o) !== 'object') throw TypeError();
3443 var m = o['[[Map]]'],
3444 index = o['[[MapNextIndex]]'],
3445 itemKind = o['[[MapIterationKind]]'],
3446 entries = m['[[MapData]]'];
3447 while (index < entries.keys.length) {
3448 var e = {key: entries.keys[index], value: entries.values[index]};
3449 index = index += 1;
3450 set_internal(o, '[[MapNextIndex]]', index);
3451 if (e.key !== empty) {
3452 if (itemKind === 'key') {
3453 return CreateIterResultObject(e.key, false);
3454 } else if (itemKind === 'value') {
3455 return CreateIterResultObject(e.value, false);
3456 } else {
3457 return CreateIterResultObject([e.key, e.value], false);
3458 }
3459 }
3460 }
3461 return CreateIterResultObject(undefined, true);
3462 });
3463
3464 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
3465 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
3466
3467 // 23.1.5.3 Properties of Map Iterator Instances
3468 }());
3469
3470 // ---------------------------------------
3471 // 23.2 Set Objects
3472 // ---------------------------------------
3473
3474 (function() {
3475 // 23.2.1 The Set Constructor
3476 // 23.2.1.1 Set ( [ iterable ] )
3477
3478 /** @constructor */
3479 function Set(/*iterable*/) {
3480 var set = strict(this);
3481 var iterable = arguments[0];
3482
3483 if (Type(set) !== 'object') throw TypeError();
3484 if ('[[SetData]]' in set) throw TypeError();
3485
3486 if (iterable !== undefined) {
3487 var adder = set['add'];
3488 if (!IsCallable(adder)) throw TypeError();
3489 var iter = GetIterator(ToObject(iterable));
3490 }
3491 set_internal(set, '[[SetData]]', []);
3492 if (iter === undefined) return set;
3493 while (true) {
3494 var next = IteratorStep(iter);
3495 if (next === false)
3496 return set;
3497 var nextValue = IteratorValue(next);
3498 adder.call(set, nextValue);
3499 }
3500
3501 return set;
3502 }
3503
3504 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3505 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
3506 (new global.Set([1]).size !== 1))
3507 global.Set = Set;
3508
3509 function SetDataIndexOf(setData, key) {
3510 var i;
3511 if (key === key)
3512 return setData.indexOf(key);
3513 // Slow case for NaN
3514 for (i = 0; i < setData.length; i += 1)
3515 if (SameValueZero(setData[i], key)) return i;
3516 return -1;
3517 }
3518
3519 // 23.2.1.2 new Set ( ...argumentsList )
3520 // 23.2.2 Properties of the Set Constructor
3521
3522 // 23.2.2.1 Set.prototype
3523 var $SetPrototype$ = {};
3524 Set.prototype = $SetPrototype$;
3525
3526 // 23.2.2.2 get Set [ @@species ]
3527 // 23.2.3 Properties of the Set Prototype Object
3528
3529 // 23.2.3.1 Set.prototype.add (value )
3530 define(
3531 Set.prototype, 'add',
3532 function add(value) {
3533 var s = strict(this);
3534 if (Type(s) !== 'object') throw TypeError();
3535 if (!('[[SetData]]' in s)) throw TypeError();
3536 if (s['[[SetData]]'] === undefined) throw TypeError();
3537 if (SameValue(value, -0)) value = 0;
3538 var entries = s['[[SetData]]'];
3539 var i = SetDataIndexOf(entries, value);
3540 if (i < 0) i = s['[[SetData]]'].length;
3541 s['[[SetData]]'][i] = value;
3542
3543 return s;
3544 });
3545
3546 // 23.2.3.2 Set.prototype.clear ()
3547 define(
3548 Set.prototype, 'clear',
3549 function clear() {
3550 var s = strict(this);
3551 if (Type(s) !== 'object') throw TypeError();
3552 if (!('[[SetData]]' in s)) throw TypeError();
3553 if (s['[[SetData]]'] === undefined) throw TypeError();
3554 var entries = s['[[SetData]]'];
3555 entries.length = 0;
3556 return undefined;
3557 });
3558
3559 // 23.2.3.3 Set.prototype.constructor
3560 // 23.2.3.4 Set.prototype.delete ( value )
3561 define(
3562 Set.prototype, 'delete',
3563 function delete_(value) {
3564 var s = strict(this);
3565 if (Type(s) !== 'object') throw TypeError();
3566 if (!('[[SetData]]' in s)) throw TypeError();
3567 if (s['[[SetData]]'] === undefined) throw TypeError();
3568 var entries = s['[[SetData]]'];
3569 var i = SetDataIndexOf(entries, value);
3570 if (i < 0) return false;
3571 entries[i] = empty;
3572 return true;
3573 });
3574
3575 // 23.2.3.5 Set.prototype.entries ( )
3576 define(
3577 Set.prototype, 'entries',
3578 function entries() {
3579 var s = strict(this);
3580 if (Type(s) !== 'object') throw TypeError();
3581 return CreateSetIterator(s, 'key+value');
3582 });
3583
3584 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
3585 define(
3586 Set.prototype, 'forEach',
3587 function forEach(callbackfn/*, thisArg*/) {
3588 var thisArg = arguments[1];
3589
3590 var s = strict(this);
3591 if (Type(s) !== 'object') throw TypeError();
3592 if (!('[[SetData]]' in s)) throw TypeError();
3593 if (s['[[SetData]]'] === undefined) throw TypeError();
3594 var entries = s['[[SetData]]'];
3595
3596 if (!IsCallable(callbackfn)) {
3597 throw TypeError('First argument to forEach is not callable.');
3598 }
3599 for (var i = 0; i < entries.length; ++i) {
3600 if (entries[i] !== empty) {
3601 callbackfn.call(thisArg, entries[i], entries[i], s);
3602 }
3603 }
3604 });
3605
3606 // 23.2.3.7 Set.prototype.has ( value )
3607 define(
3608 Set.prototype, 'has',
3609 function has(key) {
3610 var s = strict(this);
3611 if (Type(s) !== 'object') throw TypeError();
3612 if (!('[[SetData]]' in s)) throw TypeError();
3613 if (s['[[SetData]]'] === undefined) throw TypeError();
3614 var entries = s['[[SetData]]'];
3615 return SetDataIndexOf(entries, key) !== -1;
3616 });
3617
3618 // 23.2.3.8 Set.prototype.keys ( )
3619 // See Set.prototype.values
3620
3621 // 23.2.3.9 get Set.prototype.size
3622 Object.defineProperty(
3623 Set.prototype, 'size', {
3624 get: function() {
3625 var s = strict(this);
3626 if (Type(s) !== 'object') throw TypeError();
3627 if (!('[[SetData]]' in s)) throw TypeError();
3628 if (s['[[SetData]]'] === undefined) throw TypeError();
3629 var entries = s['[[SetData]]'];
3630 var count = 0;
3631 for (var i = 0; i < entries.length; ++i) {
3632 if (entries[i] !== empty)
3633 count = count + 1;
3634 }
3635 return count;
3636 }
3637 });
3638
3639 // 23.2.3.10 Set.prototype.values ( )
3640 define(
3641 Set.prototype, 'values',
3642 function values() {
3643 var s = strict(this);
3644 if (Type(s) !== 'object') throw TypeError();
3645 return CreateSetIterator(s, 'value');
3646 });
3647 // NOTE: function name is still 'values':
3648 Set.prototype.keys = Set.prototype.values;
3649
3650 // 23.2.3.11 Set.prototype [@@iterator ] ( )
3651 define(
3652 Set.prototype, $$iterator,
3653 function() {
3654 var s = strict(this);
3655 if (Type(s) !== 'object') throw TypeError();
3656 return CreateSetIterator(s);
3657 });
3658
3659 // 23.2.3.12 Set.prototype [ @@toStringTag ]
3660 define(global.Set.prototype, $$toStringTag, 'Set');
3661
3662 // 23.2.4 Properties of Set Instances
3663 // 23.2.5 Set Iterator Objects
3664 /** @constructor */
3665 function SetIterator() {}
3666
3667 // 23.2.5.1 CreateSetIterator Abstract Operation
3668 function CreateSetIterator(set, kind) {
3669 if (Type(set) !== 'object') throw TypeError();
3670 if (!('[[SetData]]' in set)) throw TypeError();
3671 if (set['[[SetData]]'] === undefined) throw TypeError();
3672 var iterator = new SetIterator;
3673 set_internal(iterator, '[[IteratedSet]]', set);
3674 set_internal(iterator, '[[SetNextIndex]]', 0);
3675 set_internal(iterator, '[[SetIterationKind]]', kind);
3676 return iterator;
3677 }
3678
3679 // 23.2.5.2 The %SetIteratorPrototype% Object
3680 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
3681 SetIterator.prototype = $SetIteratorPrototype$;
3682
3683 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
3684 define(
3685 $SetIteratorPrototype$, 'next',
3686 function next() {
3687 var o = strict(this);
3688 if (Type(o) !== 'object') throw TypeError();
3689 var s = o['[[IteratedSet]]'],
3690 index = o['[[SetNextIndex]]'],
3691 itemKind = o['[[SetIterationKind]]'],
3692 entries = s['[[SetData]]'];
3693 while (index < entries.length) {
3694 var e = entries[index];
3695 index = index += 1;
3696 set_internal(o, '[[SetNextIndex]]', index);
3697 if (e !== empty) {
3698 if (itemKind === 'key+value')
3699 return CreateIterResultObject([e, e], false);
3700 return CreateIterResultObject(e, false);
3701 }
3702 }
3703 return CreateIterResultObject(undefined, true);
3704 });
3705
3706 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
3707 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
3708
3709 // 23.2.5.3 Properties of Set Iterator Instances
3710
3711 }());
3712
3713 // ---------------------------------------
3714 // 23.3 WeakMap Objects
3715 // ---------------------------------------
3716
3717 (function() {
3718 // 23.3.1 The WeakMap Constructor
3719 // 23.3.1.1 WeakMap ( [ iterable ] )
3720 /** @constructor */
3721 function WeakMap(/*iterable*/) {
3722 var map = strict(this);
3723 var iterable = arguments[0];
3724
3725 if (Type(map) !== 'object') throw TypeError();
3726 if ('[[WeakMapData]]' in map) throw TypeError();
3727
3728 if (iterable !== undefined) {
3729 var adder = map['set'];
3730 if (!IsCallable(adder)) throw TypeError();
3731 var iter = GetIterator(ToObject(iterable));
3732 }
3733 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
3734 if (iter === undefined) return map;
3735 while (true) {
3736 var next = IteratorStep(iter);
3737 if (next === false)
3738 return map;
3739 var nextValue = IteratorValue(next);
3740 if (Type(nextValue) !== 'object') throw TypeError();
3741 var k = nextValue[0];
3742 var v = nextValue[1];
3743 adder.call(map, k, v);
3744 }
3745
3746 return map;
3747 }
3748
3749 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3750 global.WeakMap = WeakMap;
3751
3752 // 23.3.2 Properties of the WeakMap Constructor
3753 // 23.3.2.1 WeakMap.prototype
3754 var $WeakMapPrototype$ = {};
3755 WeakMap.prototype = $WeakMapPrototype$;
3756
3757
3758
3759 // 23.3.2.2 WeakMap[ @@create ] ( )
3760 // 23.3.3 Properties of the WeakMap Prototype Object
3761
3762 // 23.3.3.1 WeakMap.prototype.constructor
3763
3764 // 23.3.3.2 WeakMap.prototype.delete ( key )
3765 define(
3766 WeakMap.prototype, 'delete',
3767 function delete_(key) {
3768 var M = strict(this);
3769 if (Type(M) !== 'object') throw TypeError();
3770 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3771 if (Type(key) !== 'object') throw TypeError('Expected object');
3772 return M['[[WeakMapData]]'].remove(key);
3773 });
3774
3775 // 23.3.3.3 WeakMap.prototype.get ( key )
3776 define(
3777 WeakMap.prototype, 'get',
3778 function get(key, defaultValue) {
3779 var M = strict(this);
3780 if (Type(M) !== 'object') throw TypeError();
3781 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3782 if (Type(key) !== 'object') throw TypeError('Expected object');
3783 return M['[[WeakMapData]]'].get(key, defaultValue);
3784 });
3785
3786 // 23.3.3.4 WeakMap.prototype.has ( key )
3787 define(
3788 WeakMap.prototype, 'has',
3789 function has(key) {
3790 var M = strict(this);
3791 if (Type(M) !== 'object') throw TypeError();
3792 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3793 if (Type(key) !== 'object') throw TypeError('Expected object');
3794 return M['[[WeakMapData]]'].has(key);
3795 });
3796
3797 // 23.3.3.5 WeakMap.prototype.set ( key , value )
3798 define(
3799 WeakMap.prototype, 'set',
3800 function set(key, value) {
3801 var M = strict(this);
3802 if (Type(M) !== 'object') throw TypeError();
3803 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3804 if (Type(key) !== 'object') throw TypeError('Expected object');
3805 M['[[WeakMapData]]'].set(key, value);
3806 return M;
3807 });
3808
3809 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
3810 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
3811
3812 // 23.3.4 Properties of WeakMap Instances
3813
3814 // Polyfills for incomplete native implementations:
3815 (function() {
3816 var wm = new global.WeakMap();
3817 var orig = global.WeakMap.prototype.set;
3818 define(global.WeakMap.prototype, 'set', function set() {
3819 orig.apply(this, arguments);
3820 return this;
3821 }, wm.set({}, 0) !== wm);
3822 }());
3823 }());
3824
3825 // ---------------------------------------
3826 // 23.4 WeakSet Objects
3827 // ---------------------------------------
3828
3829 (function() {
3830 // 23.4.1 The WeakSet Constructor
3831 // 23.4.1.1 WeakSet ( [ iterable ] )
3832 /** @constructor */
3833 function WeakSet(/*iterable*/) {
3834 var set = strict(this);
3835 var iterable = arguments[0];
3836
3837 if (Type(set) !== 'object') throw TypeError();
3838 if ('[[WeakSetData]]' in set) throw TypeError();
3839
3840 if (iterable !== undefined) {
3841 var adder = set['add'];
3842 if (!IsCallable(adder)) throw TypeError();
3843 var iter = GetIterator(ToObject(iterable));
3844 }
3845 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
3846 if (iter === undefined) return set;
3847 while (true) {
3848 var next = IteratorStep(iter);
3849 if (next === false)
3850 return set;
3851 var nextValue = IteratorValue(next);
3852 adder.call(set, nextValue);
3853 }
3854
3855 return set;
3856 }
3857
3858 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3859 global.WeakSet = WeakSet;
3860
3861 // 23.4.2 Properties of the WeakSet Constructor
3862 // 23.4.2.1 WeakSet.prototype
3863 var $WeakSetPrototype$ = {};
3864 WeakSet.prototype = $WeakSetPrototype$;
3865
3866 // 23.4.3 Properties of the WeakSet Prototype Object
3867 // 23.4.3.1 WeakSet.prototype.add (value )
3868 define(
3869 WeakSet.prototype, 'add',
3870 function add(value) {
3871 var S = strict(this);
3872 if (Type(S) !== 'object') throw TypeError();
3873 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3874 if (Type(value) !== 'object') throw TypeError('Expected object');
3875 S['[[WeakSetData]]'].set(value, true);
3876 return S;
3877 });
3878
3879 // 23.4.3.2 WeakSet.prototype.constructor
3880 // 23.4.3.3 WeakSet.prototype.delete ( value )
3881 define(
3882 WeakSet.prototype, 'delete',
3883 function delete_(value) {
3884 var S = strict(this);
3885 if (Type(S) !== 'object') throw TypeError();
3886 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3887 if (Type(value) !== 'object') throw TypeError('Expected object');
3888 return S['[[WeakSetData]]'].remove(value);
3889 });
3890
3891 // 23.4.3.4 WeakSet.prototype.has ( value )
3892 define(
3893 WeakSet.prototype, 'has',
3894 function has(key) {
3895 var S = strict(this);
3896 if (Type(S) !== 'object') throw TypeError();
3897 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3898 if (Type(key) !== 'object') throw TypeError('Expected object');
3899 return S['[[WeakSetData]]'].has(key);
3900 });
3901
3902 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
3903 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
3904
3905 // 23.4.4 Properties of WeakSet Instances
3906
3907 // Polyfills for incomplete native implementations:
3908 (function() {
3909 var ws = new global.WeakSet();
3910 var orig = global.WeakSet.prototype.add;
3911 define(global.WeakSet.prototype, 'add', function add() {
3912 orig.apply(this, arguments);
3913 return this;
3914 }, ws.add({}) !== ws);
3915 }());
3916 }());
3917
3918 // ---------------------------------------
3919 // 24 Structured Data
3920 // ---------------------------------------
3921
3922 // ---------------------------------------
3923 // 24.1 ArrayBuffer Objects
3924 // ---------------------------------------
3925
3926 // See typedarray.js for TypedArray polyfill
3927
3928 (function() {
3929 if (!('ArrayBuffer' in global))
3930 return;
3931
3932 // 24.1.1 Abstract Operations For ArrayBuffer Objects
3933 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
3934 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
3935 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
3936 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
3937 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
3938 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
3939 // 24.1.2 The ArrayBuffer Constructor
3940 // 24.1.2.1 ArrayBuffer( length )
3941 // 24.1.3 Properties of the ArrayBuffer Constructor
3942
3943 // 24.1.3.1 ArrayBuffer.isView ( arg )
3944 define(
3945 ArrayBuffer, 'isView',
3946 function isView(arg) {
3947 if (Type(arg) !== 'object') return false;
3948 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
3949 return false;
3950 });
3951
3952 // 24.1.3.2 ArrayBuffer.prototype
3953 // 24.1.3.3 get ArrayBuffer [ @@species ]
3954 // 24.1.4 Properties of the ArrayBuffer Prototype Object
3955 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
3956 // 24.1.4.2 ArrayBuffer.prototype.constructor
3957 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
3958
3959 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
3960 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
3961
3962 // 24.1.5 Properties of the ArrayBuffer Instances
3963 }());
3964
3965 // ---------------------------------------
3966 // 24.2 DataView Objects
3967 // ---------------------------------------
3968
3969 // See typedarray.js for TypedArray polyfill
3970
3971 (function() {
3972 if (!('DataView' in global))
3973 return;
3974
3975 // 24.2.1 Abstract Operations For DataView Objects
3976 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
3977 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
3978 // 24.2.2 The DataView Constructor
3979 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
3980 // 24.2.3 Properties of the DataView Constructor
3981 // 24.2.3.1 DataView.prototype
3982 // 24.2.4 Properties of the DataView Prototype Object
3983 // 24.2.4.1 get DataView.prototype.buffer
3984 // 24.2.4.2 get DataView.prototype.byteLength
3985 // 24.2.4.3 get DataView.prototype.byteOffset
3986 // 24.2.4.4 DataView.prototype.constructor
3987 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
3988 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
3989 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
3990 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
3991 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
3992 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
3993 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
3994 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
3995 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
3996 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
3997 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
3998 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
3999 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
4000 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
4001 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
4002 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
4003
4004 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
4005 define(DataView.prototype, $$toStringTag, 'DataView');
4006
4007 // 24.2.5 Properties of DataView Instances
4008 }());
4009
4010 // ---------------------------------------
4011 // 24.3 The JSON Object
4012 // ---------------------------------------
4013
4014 // 24.3.1 JSON.parse ( text [ , reviver ] )
4015 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
4016 // 24.3.3 JSON [ @@toStringTag ]
4017 define(JSON, $$toStringTag, 'JSON');
4018
4019 // ---------------------------------------
4020 // 25.1 Iteration
4021 // ---------------------------------------
4022
4023 // 25.1.1 Common Iteration Interfaces
4024 // 25.1.1.1 The Iterable Interface
4025 // 25.1.1.2 The Iterator Interface
4026 // 25.1.1.3 The IteratorResult Interface
4027
4028 // 25.1.2 The %IteratorPrototype% Object
4029 // Defined earlier, so other prototypes can reference it.
4030 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
4031 define($IteratorPrototype$, $$iterator, function() {
4032 return this;
4033 });
4034
4035
4036 // ---------------------------------------
4037 // 25.4 Promise Objects
4038 // ---------------------------------------
4039
4040 (function() {
4041 // 25.4 Promise Objects
4042
4043 // 25.4.1 Promise Abstract Operations
4044
4045 // 25.4.1.1 PromiseCapability Records
4046 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
4047
4048 function IfAbruptRejectPromise(value, capability) {
4049 var rejectResult = capability['[[Reject]]'].call(undefined, value);
4050 return capability['[[Promise]]'];
4051 }
4052
4053 // 25.4.1.2 PromiseReaction Records
4054
4055 // 25.4.1.3 CreateResolvingFunctions ( promise )
4056
4057 function CreateResolvingFunctions(promise) {
4058 var alreadyResolved = {'[[value]]': false};
4059 var resolve = PromiseResolveFunction();
4060 set_internal(resolve, '[[Promise]]', promise);
4061 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
4062 var reject = PromiseRejectFunction();
4063 set_internal(reject, '[[Promise]]', promise);
4064 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
4065 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
4066 }
4067
4068 // 25.4.1.3.1 Promise Reject Functions
4069
4070 function PromiseRejectFunction() {
4071 var F = function(reason) {
4072 console.assert(Type(F['[[Promise]]']) === 'object');
4073 var promise = F['[[Promise]]'];
4074 var alreadyResolved = F['[[AlreadyResolved]]'];
4075 if (alreadyResolved['[[value]]']) return undefined;
4076 set_internal(alreadyResolved, '[[value]]', true);
4077 return RejectPromise(promise, reason);
4078 };
4079 return F;
4080 }
4081
4082 // 25.4.1.3.2 Promise Resolve Functions
4083
4084 function PromiseResolveFunction() {
4085 var F = function(resolution) {
4086 console.assert(Type(F['[[Promise]]']) === 'object');
4087 var promise = F['[[Promise]]'];
4088 var alreadyResolved = F['[[AlreadyResolved]]'];
4089 if (alreadyResolved['[[value]]']) return undefined;
4090 set_internal(alreadyResolved, '[[value]]', true);
4091
4092 if (SameValue(resolution, promise)) {
4093 var selfResolutionError = TypeError();
4094 return RejectPromise(promise, selfResolutionError);
4095 }
4096 if (Type(resolution) !== 'object')
4097 return FulfillPromise(promise, resolution);
4098 try {
4099 var then = resolution['then'];
4100 } catch(then) {
4101 return RejectPromise(promise, then);
4102 }
4103 if (!IsCallable(then))
4104 return FulfillPromise(promise, resolution);
4105 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
4106 return undefined;
4107 };
4108 return F;
4109 }
4110
4111 // 25.4.1.4 FulfillPromise ( promise, value )
4112
4113 function FulfillPromise(promise, value) {
4114 console.assert(promise['[[PromiseState]]'] === 'pending');
4115 var reactions = promise['[[PromiseFulfillReactions]]'];
4116 set_internal(promise, '[[PromiseResult]]', value);
4117 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4118 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4119 set_internal(promise, '[[PromiseState]]', 'fulfilled');
4120 return TriggerPromiseReactions(reactions, value);
4121 }
4122
4123 // 25.4.1.5 NewPromiseCapability ( C )
4124
4125 function NewPromiseCapability(c) {
4126 // To keep Promise hermetic, this doesn't look much like the spec.
4127 return CreatePromiseCapabilityRecord(undefined, c);
4128 }
4129
4130 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
4131
4132 function CreatePromiseCapabilityRecord(promise, constructor) {
4133 // To keep Promise hermetic, this doesn't look much like the spec.
4134 console.assert(IsConstructor(constructor));
4135 var promiseCapability = {};
4136 set_internal(promiseCapability, '[[Promise]]', promise);
4137 set_internal(promiseCapability, '[[Resolve]]', undefined);
4138 set_internal(promiseCapability, '[[Reject]]', undefined);
4139 var executor = GetCapabilitiesExecutor();
4140 set_internal(executor, '[[Capability]]', promiseCapability);
4141
4142 // NOTE: Differs from spec; object is constructed here
4143 var constructorResult = promise = new constructor(executor);
4144 set_internal(promiseCapability, '[[Promise]]', promise);
4145
4146 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
4147 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
4148 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
4149 return promiseCapability;
4150 }
4151
4152 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
4153
4154 function GetCapabilitiesExecutor() {
4155 var F = function(resolve, reject) {
4156 console.assert(F['[[Capability]]']);
4157 var promiseCapability = F['[[Capability]]'];
4158 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
4159 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
4160 set_internal(promiseCapability, '[[Resolve]]', resolve);
4161 set_internal(promiseCapability, '[[Reject]]', reject);
4162 return undefined;
4163 };
4164 return F;
4165 }
4166
4167 // 25.4.1.6 IsPromise ( x )
4168
4169 function IsPromise(x) {
4170 if (Type(x) !== 'object') return false;
4171 if (!('[[PromiseState]]' in x)) return false;
4172 if (x['[[PromiseState]]'] === undefined) return false;
4173 return true;
4174 }
4175
4176 // 25.4.1.7 RejectPromise ( promise, reason )
4177
4178 function RejectPromise(promise, reason) {
4179 console.assert(promise['[[PromiseState]]'] === 'pending');
4180 var reactions = promise['[[PromiseRejectReactions]]'];
4181 set_internal(promise, '[[PromiseResult]]', reason);
4182 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4183 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4184 set_internal(promise, '[[PromiseState]]', 'rejected');
4185 return TriggerPromiseReactions(reactions, reason);
4186 }
4187
4188 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
4189
4190 function TriggerPromiseReactions(reactions, argument) {
4191 for (var i = 0, len = reactions.length; i < len; ++i)
4192 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
4193 return undefined;
4194 }
4195
4196 // 25.4.2 Promise Jobs
4197
4198 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
4199
4200 function PromiseReactionJob(reaction, argument) {
4201 var promiseCapability = reaction['[[Capabilities]]'];
4202 var handler = reaction['[[Handler]]'];
4203 var handlerResult, status;
4204 try {
4205 if (handler === 'Identity') handlerResult = argument;
4206 else if (handler === 'Thrower') throw argument;
4207 else handlerResult = handler.call(undefined, argument);
4208 } catch (handlerResult) {
4209 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
4210 NextJob(status); return;
4211 }
4212 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
4213 NextJob(status);
4214 }
4215
4216 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
4217
4218 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
4219 // SPEC BUG: promise vs. promiseToResolve
4220 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
4221 try {
4222 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
4223 resolvingFunctions['[[Reject]]']);
4224 } catch (thenCallResult) {
4225 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
4226 NextJob(status); return;
4227 }
4228 NextJob(thenCallResult);
4229 }
4230
4231 // 25.4.3 The Promise Constructor
4232
4233 // 25.4.3.1 Promise ( executor )
4234
4235 function Promise(executor) {
4236 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
4237 Object.defineProperty(this, '[[PromiseState]]', config);
4238 Object.defineProperty(this, '[[PromiseConstructor]]', config);
4239 Object.defineProperty(this, '[[PromiseResult]]', config);
4240 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
4241 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
4242
4243 var promise = this;
4244 if (Type(promise) !== 'object') throw new TypeError();
4245 if (!('[[PromiseState]]' in promise)) throw TypeError();
4246 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
4247 if (!IsCallable(executor)) throw TypeError();
4248
4249 set_internal(promise, '[[PromiseConstructor]]', Promise);
4250
4251 return InitializePromise(promise, executor);
4252 }
4253
4254 // 25.4.3.1.1 InitializePromise ( promise, executor )
4255
4256 function InitializePromise(promise, executor) {
4257 console.assert('[[PromiseState]]' in promise);
4258 console.assert(IsCallable(executor));
4259 set_internal(promise, '[[PromiseState]]', 'pending');
4260 set_internal(promise, '[[PromiseFulfillReactions]]', []);
4261 set_internal(promise, '[[PromiseRejectReactions]]', []);
4262 var resolvingFunctions = CreateResolvingFunctions(promise);
4263 try {
4264 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
4265 resolvingFunctions['[[Reject]]']);
4266 } catch (completion) {
4267 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
4268 }
4269 return promise;
4270 }
4271
4272 // 25.4.4 Properties of the Promise Constructor
4273 // 25.4.4.1 Promise.all ( iterable )
4274
4275 define(Promise, 'all', function all(iterable) {
4276 var c = strict(this);
4277 var promiseCapability = NewPromiseCapability(c);
4278 try {
4279 var iterator = GetIterator(iterable);
4280 } catch (value) {
4281 promiseCapability['[[Reject]]'].call(undefined, value);
4282 return promiseCapability['[[Promise]]'];
4283 }
4284 var values = [];
4285 var remainingElementsCount = { value: 1 };
4286 var index = 0;
4287 while (true) {
4288 try {
4289 var next = IteratorStep(iterator);
4290 } catch (value) {
4291 promiseCapability['[[Reject]]'].call(undefined, value);
4292 return promiseCapability['[[Promise]]'];
4293 }
4294 if (!next) {
4295 remainingElementsCount.value -= 1;
4296 if (remainingElementsCount.value === 0) {
4297 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
4298
4299
4300 }
4301 return promiseCapability['[[Promise]]'];
4302 }
4303 try {
4304 var nextValue = IteratorValue(next);
4305 } catch (value) {
4306 promiseCapability['[[Reject]]'].call(undefined, value);
4307 return promiseCapability['[[Promise]]'];
4308 }
4309 try {
4310 var nextPromise = c.resolve(nextValue);
4311 } catch (value) {
4312 promiseCapability['[[Reject]]'].call(undefined, value);
4313 return promiseCapability['[[Promise]]'];
4314 }
4315 var resolveElement = PromiseAllResolveElementFunction();
4316 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
4317 set_internal(resolveElement, '[[Index]]', index);
4318 set_internal(resolveElement, '[[Values]]', values);
4319 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
4320 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
4321 remainingElementsCount.value += 1;
4322 try {
4323 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
4324 } catch (value) {
4325 promiseCapability['[[Reject]]'].call(undefined, value);
4326 return promiseCapability['[[Promise]]'];
4327 }
4328 index += 1;
4329 }
4330 });
4331
4332 // 25.4.4.1.1 Promise.all Resolve Element Functions
4333
4334 function PromiseAllResolveElementFunction() {
4335 var F = function(x) {
4336 var alreadyCalled = F['[[AlreadyCalled]]'];
4337 if (alreadyCalled.value) return undefined;
4338 alreadyCalled.value = true;
4339 var index = F['[[Index]]'];
4340 var values = F['[[Values]]'];
4341 var promiseCapability = F['[[Capabilities]]'];
4342 var remainingElementsCount = F['[[RemainingElements]]'];
4343 try {
4344 values[index] = x;
4345 } catch (result) {
4346 promiseCapability['[[Reject]]'].call(undefined, result);
4347 return promiseCapability['[[Promise]]'];
4348 }
4349 remainingElementsCount.value -= 1;
4350 if (remainingElementsCount.value === 0)
4351 return promiseCapability['[[Resolve]]'].call(undefined, values);
4352 return undefined;
4353 };
4354 return F;
4355 }
4356
4357 // 25.4.4.2 Promise.prototype
4358
4359 Promise.prototype = {};
4360
4361 // 25.4.4.3 Promise.race ( iterable )
4362
4363 define(Promise, 'race', function race(iterable) {
4364 var c = strict(this);
4365 var promiseCapability = NewPromiseCapability(c);
4366 try {
4367 var iterator = GetIterator(iterable);
4368 } catch (value) {
4369 promiseCapability['[[Reject]]'].call(undefined, value);
4370 return promiseCapability['[[Promise]]'];
4371 }
4372 while (true) {
4373 try {
4374 var next = IteratorStep(iterator);
4375 } catch (value) {
4376 promiseCapability['[[Reject]]'].call(undefined, value);
4377 return promiseCapability['[[Promise]]'];
4378 }
4379 if (!next) return promiseCapability['[[Promise]]'];
4380 try {
4381 var nextValue = IteratorValue(next);
4382 } catch (value) {
4383 promiseCapability['[[Reject]]'].call(undefined, value);
4384 return promiseCapability['[[Promise]]'];
4385 }
4386 try {
4387 var nextPromise = c.resolve(nextValue);
4388 } catch (value) {
4389 promiseCapability['[[Reject]]'].call(undefined, value);
4390 return promiseCapability['[[Promise]]'];
4391 }
4392 try {
4393 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
4394 } catch (value) {
4395 promiseCapability['[[Reject]]'].call(undefined, value);
4396 return promiseCapability['[[Promise]]'];
4397 }
4398 }
4399 });
4400
4401 // 25.4.4.4 Promise.reject ( r )
4402
4403 define(Promise, 'reject', function reject(r) {
4404 var c = strict(this);
4405 var promiseCapability = NewPromiseCapability(c);
4406 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
4407 return promiseCapability['[[Promise]]'];
4408 });
4409
4410 // 25.4.4.5 Promise.resolve ( x )
4411
4412 define(Promise, 'resolve', function resolve(x) {
4413 var c = strict(this);
4414 if (IsPromise(x)) {
4415 var constructor = x['[[PromiseConstructor]]'];
4416 if (SameValue(constructor, c)) return x;
4417 }
4418 var promiseCapability = NewPromiseCapability(c);
4419 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
4420 return promiseCapability['[[Promise]]'];
4421 });
4422
4423 // 25.4.4.6 Promise [ @@create ] ( )
4424 // 25.4.4.6.1 AllocatePromise ( constructor )
4425 // 25.4.5 Properties of the Promise Prototype Object
4426 // 25.4.5.1 Promise.prototype.catch ( onRejected )
4427
4428 define(Promise.prototype, 'catch', function catch_(onRejected) {
4429 var promise = this;
4430 return promise.then(undefined, onRejected);
4431 });
4432
4433 // 25.4.5.2 Promise.prototype.constructor
4434
4435 Promise.prototype.constructor = Promise;
4436
4437 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
4438
4439 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
4440 var promise = this;
4441 if (!IsPromise(promise)) throw TypeError();
4442 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
4443 if (!IsCallable(onRejected)) onRejected = 'Thrower';
4444 var c = promise.constructor;
4445 var promiseCapability = NewPromiseCapability(c);
4446 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
4447 '[[Handler]]': onFulfilled };
4448 var rejectReaction = { '[[Capabilities]]': promiseCapability,
4449 '[[Handler]]': onRejected };
4450 if (promise['[[PromiseState]]'] === 'pending') {
4451 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
4452 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
4453 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
4454 var value = promise['[[PromiseResult]]'];
4455 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
4456 } else if (promise['[[PromiseState]]'] === 'rejected') {
4457 var reason = promise['[[PromiseResult]]'];
4458 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
4459 }
4460 return promiseCapability['[[Promise]]'];
4461 });
4462
4463 // 25.4.6 Properties of Promise Instances
4464
4465 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4466 global.Promise = Promise;
4467
4468 // Patch early Promise.cast vs. Promise.resolve implementations
4469 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
4470 }());
4471
4472 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
4473 define(Promise.prototype, $$toStringTag, 'Promise');
4474
4475 // ---------------------------------------
4476 // 26 Reflection
4477 // ---------------------------------------
4478
4479 (function() {
4480 // 26.1 The Reflect Object
4481 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4482 global.Reflect = {};
4483
4484 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
4485 define(
4486 Reflect, 'apply',
4487 function apply(target, thisArgument, argumentsList) {
4488 if (!IsCallable(target)) throw TypeError();
4489 return Function.prototype.apply.call(target, thisArgument, argumentsList);
4490 });
4491
4492 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
4493 define(
4494 Reflect, 'construct',
4495 function construct(target, argumentsList) {
4496 return __cons(target, argumentsList);
4497 });
4498
4499 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
4500 define(
4501 Reflect, 'defineProperty',
4502 function defineProperty(target, propertyKey, attributes) {
4503 try {
4504 Object.defineProperty(target, propertyKey, attributes);
4505 return true;
4506 } catch (_) {
4507 return false;
4508 }
4509 });
4510
4511 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
4512 define(
4513 Reflect, 'deleteProperty',
4514 function deleteProperty(target,name) {
4515 try {
4516 delete target[name];
4517 return !HasOwnProperty(target, name);
4518 } catch (_) {
4519 return false;
4520 }
4521 });
4522
4523 // 26.1.5 Reflect.enumerate ( target )
4524 define(
4525 Reflect, 'enumerate',
4526 function enumerate(target) {
4527 target = ToObject(target);
4528 var iterator = Enumerate(target);
4529 return iterator;
4530 });
4531
4532 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
4533 define(
4534 Reflect, 'get',
4535 function get(target, name, receiver) {
4536 target = ToObject(target);
4537 name = String(name);
4538 receiver = (receiver === undefined) ? target : ToObject(receiver);
4539 var desc = getPropertyDescriptor(target, name);
4540 if (desc && 'get' in desc)
4541 return Function.prototype.call.call(desc['get'], receiver);
4542 return target[name];
4543 });
4544
4545 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
4546 define(
4547 Reflect, 'getOwnPropertyDescriptor',
4548 Object.getOwnPropertyDescriptor);
4549
4550 // 26.1.8 Reflect.getPrototypeOf ( target )
4551 define(
4552 Reflect, 'getPrototypeOf',
4553 Object.getPrototypeOf);
4554
4555 // 26.1.9 Reflect.has ( target, propertyKey )
4556 define(
4557 Reflect, 'has',
4558 function has(target,name) {
4559 return String(name) in ToObject(target);
4560 });
4561
4562 // 26.1.10 Reflect.isExtensible (target)
4563 define(
4564 Reflect, 'isExtensible',
4565 Object.isExtensible);
4566
4567 // 26.1.11 Reflect.ownKeys ( target )
4568 define(
4569 Reflect, 'ownKeys',
4570 function ownKeys(target) {
4571 var obj = ToObject(target);
4572 return Object.getOwnPropertyNames(obj);
4573 });
4574
4575 // 26.1.12 Reflect.preventExtensions ( target )
4576 define(
4577 Reflect, 'preventExtensions',
4578 function preventExtensions(target) {
4579 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
4580 });
4581
4582 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
4583 define(
4584 Reflect, 'set',
4585 function set(target, name, value, receiver) {
4586 target = ToObject(target);
4587 name = String(name);
4588 receiver = (receiver === undefined) ? target : ToObject(receiver);
4589 var desc = getPropertyDescriptor(target, name);
4590 try {
4591 if (desc && 'set' in desc)
4592 Function.prototype.call.call(desc['set'], receiver, value);
4593 else
4594 target[name] = value;
4595 return true;
4596 } catch (_) {
4597 return false;
4598 }
4599 });
4600
4601 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
4602 define(
4603 Reflect, 'setPrototypeOf',
4604 function setPrototypeOf(target, proto) {
4605 try {
4606 target.__proto__ = proto;
4607 return Reflect.getPrototypeOf(target) === proto;
4608 } catch(_) {
4609 return false;
4610 }
4611 });
4612
4613 }());
4614
4615 // ---------------------------------------
4616 // 26.2 Proxy Objects
4617 // ---------------------------------------
4618
4619 // Not polyfillable.
4620
4621}(self));
4622
4623// This helper is defined outside the main scope so that the use of
4624// 'eval' does not taint the scope for minifiers.
4625function __cons(t, a) {
4626 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
4627}
6e0f24b1 4628</script>
8a1f452d 4629 <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.foo = 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){
4630'use strict'
4631
4632exports.byteLength = byteLength
4633exports.toByteArray = toByteArray
4634exports.fromByteArray = fromByteArray
4635
4636var lookup = []
4637var revLookup = []
4638var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
4639
4640var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
4641for (var i = 0, len = code.length; i < len; ++i) {
4642 lookup[i] = code[i]
4643 revLookup[code.charCodeAt(i)] = i
4644}
4645
4646revLookup['-'.charCodeAt(0)] = 62
4647revLookup['_'.charCodeAt(0)] = 63
4648
4649function placeHoldersCount (b64) {
4650 var len = b64.length
4651 if (len % 4 > 0) {
4652 throw new Error('Invalid string. Length must be a multiple of 4')
4653 }
4654
4655 // the number of equal signs (place holders)
4656 // if there are two placeholders, than the two characters before it
4657 // represent one byte
4658 // if there is only one, then the three characters before it represent 2 bytes
4659 // this is just a cheap hack to not do indexOf twice
4660 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
4661}
4662
4663function byteLength (b64) {
4664 // base64 is 4/3 + up to two characters of the original data
4665 return b64.length * 3 / 4 - placeHoldersCount(b64)
4666}
4667
4668function toByteArray (b64) {
4669 var i, j, l, tmp, placeHolders, arr
4670 var len = b64.length
4671 placeHolders = placeHoldersCount(b64)
4672
4673 arr = new Arr(len * 3 / 4 - placeHolders)
4674
4675 // if there are placeholders, only get up to the last complete 4 chars
4676 l = placeHolders > 0 ? len - 4 : len
4677
4678 var L = 0
4679
4680 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4681 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
4682 arr[L++] = (tmp >> 16) & 0xFF
4683 arr[L++] = (tmp >> 8) & 0xFF
4684 arr[L++] = tmp & 0xFF
4685 }
4686
4687 if (placeHolders === 2) {
4688 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
4689 arr[L++] = tmp & 0xFF
4690 } else if (placeHolders === 1) {
4691 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
4692 arr[L++] = (tmp >> 8) & 0xFF
4693 arr[L++] = tmp & 0xFF
4694 }
4695
4696 return arr
4697}
4698
4699function tripletToBase64 (num) {
4700 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
4701}
4702
4703function encodeChunk (uint8, start, end) {
4704 var tmp
4705 var output = []
4706 for (var i = start; i < end; i += 3) {
4707 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4708 output.push(tripletToBase64(tmp))
4709 }
4710 return output.join('')
4711}
4712
4713function fromByteArray (uint8) {
4714 var tmp
4715 var len = uint8.length
4716 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
4717 var output = ''
4718 var parts = []
4719 var maxChunkLength = 16383 // must be multiple of 3
4720
4721 // go through the array every three bytes, we'll deal with trailing stuff later
4722 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
4723 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
4724 }
4725
4726 // pad the end with zeros, but make sure to not forget the extra bytes
4727 if (extraBytes === 1) {
4728 tmp = uint8[len - 1]
4729 output += lookup[tmp >> 2]
4730 output += lookup[(tmp << 4) & 0x3F]
4731 output += '=='
4732 } else if (extraBytes === 2) {
4733 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
4734 output += lookup[tmp >> 10]
4735 output += lookup[(tmp >> 4) & 0x3F]
4736 output += lookup[(tmp << 2) & 0x3F]
4737 output += '='
4738 }
4739
4740 parts.push(output)
4741
4742 return parts.join('')
4743}
4744
4745},{}],2:[function(require,module,exports){
4746/*!
4747 * The buffer module from node.js, for the browser.
4748 *
4749 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
4750 * @license MIT
4751 */
4752/* eslint-disable no-proto */
4753
4754'use strict'
4755
4756var base64 = require('base64-js')
4757var ieee754 = require('ieee754')
4758
4759exports.Buffer = Buffer
4760exports.SlowBuffer = SlowBuffer
4761exports.INSPECT_MAX_BYTES = 50
4762
4763var K_MAX_LENGTH = 0x7fffffff
4764exports.kMaxLength = K_MAX_LENGTH
4765
4766/**
4767 * If `Buffer.TYPED_ARRAY_SUPPORT`:
4768 * === true Use Uint8Array implementation (fastest)
4769 * === false Print warning and recommend using `buffer` v4.x which has an Object
4770 * implementation (most compatible, even IE6)
4771 *
4772 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
4773 * Opera 11.6+, iOS 4.2+.
4774 *
4775 * We report that the browser does not support typed arrays if the are not subclassable
4776 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
4777 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
4778 * for __proto__ and has a buggy typed array implementation.
4779 */
4780Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
4781
4782if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
4783 typeof console.error === 'function') {
4784 console.error(
4785 'This browser lacks typed array (Uint8Array) support which is required by ' +
4786 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
4787 )
4788}
4789
4790function typedArraySupport () {
4791 // Can typed array instances can be augmented?
4792 try {
4793 var arr = new Uint8Array(1)
4794 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
4795 return arr.foo() === 42
4796 } catch (e) {
4797 return false
4798 }
4799}
4800
4801function createBuffer (length) {
4802 if (length > K_MAX_LENGTH) {
4803 throw new RangeError('Invalid typed array length')
4804 }
4805 // Return an augmented `Uint8Array` instance
4806 var buf = new Uint8Array(length)
4807 buf.__proto__ = Buffer.prototype
4808 return buf
4809}
4810
4811/**
4812 * The Buffer constructor returns instances of `Uint8Array` that have their
4813 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
4814 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
4815 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
4816 * returns a single octet.
4817 *
4818 * The `Uint8Array` prototype remains unmodified.
4819 */
4820
4821function Buffer (arg, encodingOrOffset, length) {
4822 // Common case.
4823 if (typeof arg === 'number') {
4824 if (typeof encodingOrOffset === 'string') {
4825 throw new Error(
4826 'If encoding is specified then the first argument must be a string'
4827 )
4828 }
4829 return allocUnsafe(arg)
4830 }
4831 return from(arg, encodingOrOffset, length)
4832}
4833
4834// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
4835if (typeof Symbol !== 'undefined' && Symbol.species &&
4836 Buffer[Symbol.species] === Buffer) {
4837 Object.defineProperty(Buffer, Symbol.species, {
4838 value: null,
4839 configurable: true,
4840 enumerable: false,
4841 writable: false
4842 })
4843}
4844
4845Buffer.poolSize = 8192 // not used by this implementation
4846
4847function from (value, encodingOrOffset, length) {
4848 if (typeof value === 'number') {
4849 throw new TypeError('"value" argument must not be a number')
4850 }
4851
4852 if (value instanceof ArrayBuffer) {
4853 return fromArrayBuffer(value, encodingOrOffset, length)
4854 }
4855
4856 if (typeof value === 'string') {
4857 return fromString(value, encodingOrOffset)
4858 }
4859
4860 return fromObject(value)
4861}
4862
4863/**
4864 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
4865 * if value is a number.
4866 * Buffer.from(str[, encoding])
4867 * Buffer.from(array)
4868 * Buffer.from(buffer)
4869 * Buffer.from(arrayBuffer[, byteOffset[, length]])
4870 **/
4871Buffer.from = function (value, encodingOrOffset, length) {
4872 return from(value, encodingOrOffset, length)
4873}
4874
4875// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
4876// https://github.com/feross/buffer/pull/148
4877Buffer.prototype.__proto__ = Uint8Array.prototype
4878Buffer.__proto__ = Uint8Array
4879
4880function assertSize (size) {
4881 if (typeof size !== 'number') {
4882 throw new TypeError('"size" argument must be a number')
4883 } else if (size < 0) {
4884 throw new RangeError('"size" argument must not be negative')
4885 }
4886}
4887
4888function alloc (size, fill, encoding) {
4889 assertSize(size)
4890 if (size <= 0) {
4891 return createBuffer(size)
4892 }
4893 if (fill !== undefined) {
4894 // Only pay attention to encoding if it's a string. This
4895 // prevents accidentally sending in a number that would
4896 // be interpretted as a start offset.
4897 return typeof encoding === 'string'
4898 ? createBuffer(size).fill(fill, encoding)
4899 : createBuffer(size).fill(fill)
4900 }
4901 return createBuffer(size)
4902}
4903
4904/**
4905 * Creates a new filled Buffer instance.
4906 * alloc(size[, fill[, encoding]])
4907 **/
4908Buffer.alloc = function (size, fill, encoding) {
4909 return alloc(size, fill, encoding)
4910}
4911
4912function allocUnsafe (size) {
4913 assertSize(size)
4914 return createBuffer(size < 0 ? 0 : checked(size) | 0)
4915}
4916
4917/**
4918 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
4919 * */
4920Buffer.allocUnsafe = function (size) {
4921 return allocUnsafe(size)
4922}
4923/**
4924 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
4925 */
4926Buffer.allocUnsafeSlow = function (size) {
4927 return allocUnsafe(size)
4928}
4929
4930function fromString (string, encoding) {
4931 if (typeof encoding !== 'string' || encoding === '') {
4932 encoding = 'utf8'
4933 }
4934
4935 if (!Buffer.isEncoding(encoding)) {
4936 throw new TypeError('"encoding" must be a valid string encoding')
4937 }
4938
4939 var length = byteLength(string, encoding) | 0
4940 var buf = createBuffer(length)
4941
4942 var actual = buf.write(string, encoding)
4943
4944 if (actual !== length) {
4945 // Writing a hex string, for example, that contains invalid characters will
4946 // cause everything after the first invalid character to be ignored. (e.g.
4947 // 'abxxcd' will be treated as 'ab')
4948 buf = buf.slice(0, actual)
4949 }
4950
4951 return buf
4952}
4953
4954function fromArrayLike (array) {
4955 var length = array.length < 0 ? 0 : checked(array.length) | 0
4956 var buf = createBuffer(length)
4957 for (var i = 0; i < length; i += 1) {
4958 buf[i] = array[i] & 255
4959 }
4960 return buf
4961}
4962
4963function fromArrayBuffer (array, byteOffset, length) {
4964 if (byteOffset < 0 || array.byteLength < byteOffset) {
4965 throw new RangeError('\'offset\' is out of bounds')
4966 }
4967
4968 if (array.byteLength < byteOffset + (length || 0)) {
4969 throw new RangeError('\'length\' is out of bounds')
4970 }
4971
4972 var buf
4973 if (byteOffset === undefined && length === undefined) {
4974 buf = new Uint8Array(array)
4975 } else if (length === undefined) {
4976 buf = new Uint8Array(array, byteOffset)
4977 } else {
4978 buf = new Uint8Array(array, byteOffset, length)
4979 }
4980
4981 // Return an augmented `Uint8Array` instance
4982 buf.__proto__ = Buffer.prototype
4983 return buf
4984}
4985
4986function fromObject (obj) {
4987 if (Buffer.isBuffer(obj)) {
4988 var len = checked(obj.length) | 0
4989 var buf = createBuffer(len)
4990
4991 if (buf.length === 0) {
4992 return buf
4993 }
4994
4995 obj.copy(buf, 0, 0, len)
4996 return buf
4997 }
4998
4999 if (obj) {
5000 if (isArrayBufferView(obj) || 'length' in obj) {
5001 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
5002 return createBuffer(0)
5003 }
5004 return fromArrayLike(obj)
5005 }
5006
5007 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
5008 return fromArrayLike(obj.data)
5009 }
5010 }
5011
5012 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
5013}
5014
5015function checked (length) {
5016 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
5017 // length is NaN (which is otherwise coerced to zero.)
5018 if (length >= K_MAX_LENGTH) {
5019 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
5020 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
5021 }
5022 return length | 0
5023}
5024
5025function SlowBuffer (length) {
5026 if (+length != length) { // eslint-disable-line eqeqeq
5027 length = 0
5028 }
5029 return Buffer.alloc(+length)
5030}
5031
5032Buffer.isBuffer = function isBuffer (b) {
5033 return b != null && b._isBuffer === true
5034}
5035
5036Buffer.compare = function compare (a, b) {
5037 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
5038 throw new TypeError('Arguments must be Buffers')
5039 }
5040
5041 if (a === b) return 0
5042
5043 var x = a.length
5044 var y = b.length
5045
5046 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
5047 if (a[i] !== b[i]) {
5048 x = a[i]
5049 y = b[i]
5050 break
5051 }
5052 }
5053
5054 if (x < y) return -1
5055 if (y < x) return 1
5056 return 0
5057}
5058
5059Buffer.isEncoding = function isEncoding (encoding) {
5060 switch (String(encoding).toLowerCase()) {
5061 case 'hex':
5062 case 'utf8':
5063 case 'utf-8':
5064 case 'ascii':
5065 case 'latin1':
5066 case 'binary':
5067 case 'base64':
5068 case 'ucs2':
5069 case 'ucs-2':
5070 case 'utf16le':
5071 case 'utf-16le':
5072 return true
5073 default:
5074 return false
5075 }
5076}
5077
5078Buffer.concat = function concat (list, length) {
5079 if (!Array.isArray(list)) {
5080 throw new TypeError('"list" argument must be an Array of Buffers')
5081 }
5082
5083 if (list.length === 0) {
5084 return Buffer.alloc(0)
5085 }
5086
5087 var i
5088 if (length === undefined) {
5089 length = 0
5090 for (i = 0; i < list.length; ++i) {
5091 length += list[i].length
5092 }
5093 }
5094
5095 var buffer = Buffer.allocUnsafe(length)
5096 var pos = 0
5097 for (i = 0; i < list.length; ++i) {
5098 var buf = list[i]
5099 if (!Buffer.isBuffer(buf)) {
5100 throw new TypeError('"list" argument must be an Array of Buffers')
5101 }
5102 buf.copy(buffer, pos)
5103 pos += buf.length
5104 }
5105 return buffer
5106}
5107
5108function byteLength (string, encoding) {
5109 if (Buffer.isBuffer(string)) {
5110 return string.length
5111 }
5112 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
5113 return string.byteLength
5114 }
5115 if (typeof string !== 'string') {
5116 string = '' + string
5117 }
5118
5119 var len = string.length
5120 if (len === 0) return 0
5121
5122 // Use a for loop to avoid recursion
5123 var loweredCase = false
5124 for (;;) {
5125 switch (encoding) {
5126 case 'ascii':
5127 case 'latin1':
5128 case 'binary':
5129 return len
5130 case 'utf8':
5131 case 'utf-8':
5132 case undefined:
5133 return utf8ToBytes(string).length
5134 case 'ucs2':
5135 case 'ucs-2':
5136 case 'utf16le':
5137 case 'utf-16le':
5138 return len * 2
5139 case 'hex':
5140 return len >>> 1
5141 case 'base64':
5142 return base64ToBytes(string).length
5143 default:
5144 if (loweredCase) return utf8ToBytes(string).length // assume utf8
5145 encoding = ('' + encoding).toLowerCase()
5146 loweredCase = true
5147 }
5148 }
5149}
5150Buffer.byteLength = byteLength
5151
5152function slowToString (encoding, start, end) {
5153 var loweredCase = false
5154
5155 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
5156 // property of a typed array.
5157
5158 // This behaves neither like String nor Uint8Array in that we set start/end
5159 // to their upper/lower bounds if the value passed is out of range.
5160 // undefined is handled specially as per ECMA-262 6th Edition,
5161 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
5162 if (start === undefined || start < 0) {
5163 start = 0
5164 }
5165 // Return early if start > this.length. Done here to prevent potential uint32
5166 // coercion fail below.
5167 if (start > this.length) {
5168 return ''
5169 }
5170
5171 if (end === undefined || end > this.length) {
5172 end = this.length
5173 }
5174
5175 if (end <= 0) {
5176 return ''
5177 }
5178
5179 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
5180 end >>>= 0
5181 start >>>= 0
5182
5183 if (end <= start) {
5184 return ''
5185 }
5186
5187 if (!encoding) encoding = 'utf8'
5188
5189 while (true) {
5190 switch (encoding) {
5191 case 'hex':
5192 return hexSlice(this, start, end)
5193
5194 case 'utf8':
5195 case 'utf-8':
5196 return utf8Slice(this, start, end)
5197
5198 case 'ascii':
5199 return asciiSlice(this, start, end)
5200
5201 case 'latin1':
5202 case 'binary':
5203 return latin1Slice(this, start, end)
5204
5205 case 'base64':
5206 return base64Slice(this, start, end)
5207
5208 case 'ucs2':
5209 case 'ucs-2':
5210 case 'utf16le':
5211 case 'utf-16le':
5212 return utf16leSlice(this, start, end)
5213
5214 default:
5215 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5216 encoding = (encoding + '').toLowerCase()
5217 loweredCase = true
5218 }
5219 }
5220}
5221
5222// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
5223// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
5224// reliably in a browserify context because there could be multiple different
5225// copies of the 'buffer' package in use. This method works even for Buffer
5226// instances that were created from another copy of the `buffer` package.
5227// See: https://github.com/feross/buffer/issues/154
5228Buffer.prototype._isBuffer = true
5229
5230function swap (b, n, m) {
5231 var i = b[n]
5232 b[n] = b[m]
5233 b[m] = i
5234}
5235
5236Buffer.prototype.swap16 = function swap16 () {
5237 var len = this.length
5238 if (len % 2 !== 0) {
5239 throw new RangeError('Buffer size must be a multiple of 16-bits')
5240 }
5241 for (var i = 0; i < len; i += 2) {
5242 swap(this, i, i + 1)
5243 }
5244 return this
5245}
5246
5247Buffer.prototype.swap32 = function swap32 () {
5248 var len = this.length
5249 if (len % 4 !== 0) {
5250 throw new RangeError('Buffer size must be a multiple of 32-bits')
5251 }
5252 for (var i = 0; i < len; i += 4) {
5253 swap(this, i, i + 3)
5254 swap(this, i + 1, i + 2)
5255 }
5256 return this
5257}
5258
5259Buffer.prototype.swap64 = function swap64 () {
5260 var len = this.length
5261 if (len % 8 !== 0) {
5262 throw new RangeError('Buffer size must be a multiple of 64-bits')
5263 }
5264 for (var i = 0; i < len; i += 8) {
5265 swap(this, i, i + 7)
5266 swap(this, i + 1, i + 6)
5267 swap(this, i + 2, i + 5)
5268 swap(this, i + 3, i + 4)
5269 }
5270 return this
5271}
5272
5273Buffer.prototype.toString = function toString () {
5274 var length = this.length
5275 if (length === 0) return ''
5276 if (arguments.length === 0) return utf8Slice(this, 0, length)
5277 return slowToString.apply(this, arguments)
5278}
5279
5280Buffer.prototype.equals = function equals (b) {
5281 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
5282 if (this === b) return true
5283 return Buffer.compare(this, b) === 0
5284}
5285
5286Buffer.prototype.inspect = function inspect () {
5287 var str = ''
5288 var max = exports.INSPECT_MAX_BYTES
5289 if (this.length > 0) {
5290 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
5291 if (this.length > max) str += ' ... '
5292 }
5293 return '<Buffer ' + str + '>'
5294}
5295
5296Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
5297 if (!Buffer.isBuffer(target)) {
5298 throw new TypeError('Argument must be a Buffer')
5299 }
5300
5301 if (start === undefined) {
5302 start = 0
5303 }
5304 if (end === undefined) {
5305 end = target ? target.length : 0
5306 }
5307 if (thisStart === undefined) {
5308 thisStart = 0
5309 }
5310 if (thisEnd === undefined) {
5311 thisEnd = this.length
5312 }
5313
5314 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
5315 throw new RangeError('out of range index')
5316 }
5317
5318 if (thisStart >= thisEnd && start >= end) {
5319 return 0
5320 }
5321 if (thisStart >= thisEnd) {
5322 return -1
5323 }
5324 if (start >= end) {
5325 return 1
5326 }
5327
5328 start >>>= 0
5329 end >>>= 0
5330 thisStart >>>= 0
5331 thisEnd >>>= 0
5332
5333 if (this === target) return 0
5334
5335 var x = thisEnd - thisStart
5336 var y = end - start
5337 var len = Math.min(x, y)
5338
5339 var thisCopy = this.slice(thisStart, thisEnd)
5340 var targetCopy = target.slice(start, end)
5341
5342 for (var i = 0; i < len; ++i) {
5343 if (thisCopy[i] !== targetCopy[i]) {
5344 x = thisCopy[i]
5345 y = targetCopy[i]
5346 break
5347 }
5348 }
5349
5350 if (x < y) return -1
5351 if (y < x) return 1
5352 return 0
5353}
5354
5355// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
5356// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
5357//
5358// Arguments:
5359// - buffer - a Buffer to search
5360// - val - a string, Buffer, or number
5361// - byteOffset - an index into `buffer`; will be clamped to an int32
5362// - encoding - an optional encoding, relevant is val is a string
5363// - dir - true for indexOf, false for lastIndexOf
5364function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
5365 // Empty buffer means no match
5366 if (buffer.length === 0) return -1
5367
5368 // Normalize byteOffset
5369 if (typeof byteOffset === 'string') {
5370 encoding = byteOffset
5371 byteOffset = 0
5372 } else if (byteOffset > 0x7fffffff) {
5373 byteOffset = 0x7fffffff
5374 } else if (byteOffset < -0x80000000) {
5375 byteOffset = -0x80000000
5376 }
5377 byteOffset = +byteOffset // Coerce to Number.
5378 if (numberIsNaN(byteOffset)) {
5379 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
5380 byteOffset = dir ? 0 : (buffer.length - 1)
5381 }
5382
5383 // Normalize byteOffset: negative offsets start from the end of the buffer
5384 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
5385 if (byteOffset >= buffer.length) {
5386 if (dir) return -1
5387 else byteOffset = buffer.length - 1
5388 } else if (byteOffset < 0) {
5389 if (dir) byteOffset = 0
5390 else return -1
5391 }
5392
5393 // Normalize val
5394 if (typeof val === 'string') {
5395 val = Buffer.from(val, encoding)
5396 }
5397
5398 // Finally, search either indexOf (if dir is true) or lastIndexOf
5399 if (Buffer.isBuffer(val)) {
5400 // Special case: looking for empty string/buffer always fails
5401 if (val.length === 0) {
5402 return -1
5403 }
5404 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
5405 } else if (typeof val === 'number') {
5406 val = val & 0xFF // Search for a byte value [0-255]
5407 if (typeof Uint8Array.prototype.indexOf === 'function') {
5408 if (dir) {
5409 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
5410 } else {
5411 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
5412 }
5413 }
5414 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
5415 }
5416
5417 throw new TypeError('val must be string, number or Buffer')
5418}
5419
5420function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
5421 var indexSize = 1
5422 var arrLength = arr.length
5423 var valLength = val.length
5424
5425 if (encoding !== undefined) {
5426 encoding = String(encoding).toLowerCase()
5427 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
5428 encoding === 'utf16le' || encoding === 'utf-16le') {
5429 if (arr.length < 2 || val.length < 2) {
5430 return -1
5431 }
5432 indexSize = 2
5433 arrLength /= 2
5434 valLength /= 2
5435 byteOffset /= 2
5436 }
5437 }
5438
5439 function read (buf, i) {
5440 if (indexSize === 1) {
5441 return buf[i]
5442 } else {
5443 return buf.readUInt16BE(i * indexSize)
5444 }
5445 }
5446
5447 var i
5448 if (dir) {
5449 var foundIndex = -1
5450 for (i = byteOffset; i < arrLength; i++) {
5451 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
5452 if (foundIndex === -1) foundIndex = i
5453 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
5454 } else {
5455 if (foundIndex !== -1) i -= i - foundIndex
5456 foundIndex = -1
5457 }
5458 }
5459 } else {
5460 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
5461 for (i = byteOffset; i >= 0; i--) {
5462 var found = true
5463 for (var j = 0; j < valLength; j++) {
5464 if (read(arr, i + j) !== read(val, j)) {
5465 found = false
5466 break
5467 }
5468 }
5469 if (found) return i
5470 }
5471 }
5472
5473 return -1
5474}
5475
5476Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
5477 return this.indexOf(val, byteOffset, encoding) !== -1
5478}
5479
5480Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
5481 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
5482}
5483
5484Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
5485 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
5486}
5487
5488function hexWrite (buf, string, offset, length) {
5489 offset = Number(offset) || 0
5490 var remaining = buf.length - offset
5491 if (!length) {
5492 length = remaining
5493 } else {
5494 length = Number(length)
5495 if (length > remaining) {
5496 length = remaining
5497 }
5498 }
5499
5500 // must be an even number of digits
5501 var strLen = string.length
5502 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
5503
5504 if (length > strLen / 2) {
5505 length = strLen / 2
5506 }
5507 for (var i = 0; i < length; ++i) {
5508 var parsed = parseInt(string.substr(i * 2, 2), 16)
5509 if (numberIsNaN(parsed)) return i
5510 buf[offset + i] = parsed
5511 }
5512 return i
5513}
5514
5515function utf8Write (buf, string, offset, length) {
5516 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
5517}
5518
5519function asciiWrite (buf, string, offset, length) {
5520 return blitBuffer(asciiToBytes(string), buf, offset, length)
5521}
5522
5523function latin1Write (buf, string, offset, length) {
5524 return asciiWrite(buf, string, offset, length)
5525}
5526
5527function base64Write (buf, string, offset, length) {
5528 return blitBuffer(base64ToBytes(string), buf, offset, length)
5529}
5530
5531function ucs2Write (buf, string, offset, length) {
5532 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
5533}
5534
5535Buffer.prototype.write = function write (string, offset, length, encoding) {
5536 // Buffer#write(string)
5537 if (offset === undefined) {
5538 encoding = 'utf8'
5539 length = this.length
5540 offset = 0
5541 // Buffer#write(string, encoding)
5542 } else if (length === undefined && typeof offset === 'string') {
5543 encoding = offset
5544 length = this.length
5545 offset = 0
5546 // Buffer#write(string, offset[, length][, encoding])
5547 } else if (isFinite(offset)) {
5548 offset = offset >>> 0
5549 if (isFinite(length)) {
5550 length = length >>> 0
5551 if (encoding === undefined) encoding = 'utf8'
5552 } else {
5553 encoding = length
5554 length = undefined
5555 }
5556 } else {
5557 throw new Error(
5558 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
5559 )
5560 }
5561
5562 var remaining = this.length - offset
5563 if (length === undefined || length > remaining) length = remaining
5564
5565 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
5566 throw new RangeError('Attempt to write outside buffer bounds')
5567 }
5568
5569 if (!encoding) encoding = 'utf8'
5570
5571 var loweredCase = false
5572 for (;;) {
5573 switch (encoding) {
5574 case 'hex':
5575 return hexWrite(this, string, offset, length)
5576
5577 case 'utf8':
5578 case 'utf-8':
5579 return utf8Write(this, string, offset, length)
5580
5581 case 'ascii':
5582 return asciiWrite(this, string, offset, length)
5583
5584 case 'latin1':
5585 case 'binary':
5586 return latin1Write(this, string, offset, length)
5587
5588 case 'base64':
5589 // Warning: maxLength not taken into account in base64Write
5590 return base64Write(this, string, offset, length)
5591
5592 case 'ucs2':
5593 case 'ucs-2':
5594 case 'utf16le':
5595 case 'utf-16le':
5596 return ucs2Write(this, string, offset, length)
5597
5598 default:
5599 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5600 encoding = ('' + encoding).toLowerCase()
5601 loweredCase = true
5602 }
5603 }
5604}
5605
5606Buffer.prototype.toJSON = function toJSON () {
5607 return {
5608 type: 'Buffer',
5609 data: Array.prototype.slice.call(this._arr || this, 0)
5610 }
5611}
5612
5613function base64Slice (buf, start, end) {
5614 if (start === 0 && end === buf.length) {
5615 return base64.fromByteArray(buf)
5616 } else {
5617 return base64.fromByteArray(buf.slice(start, end))
5618 }
5619}
5620
5621function utf8Slice (buf, start, end) {
5622 end = Math.min(buf.length, end)
5623 var res = []
5624
5625 var i = start
5626 while (i < end) {
5627 var firstByte = buf[i]
5628 var codePoint = null
5629 var bytesPerSequence = (firstByte > 0xEF) ? 4
5630 : (firstByte > 0xDF) ? 3
5631 : (firstByte > 0xBF) ? 2
5632 : 1
5633
5634 if (i + bytesPerSequence <= end) {
5635 var secondByte, thirdByte, fourthByte, tempCodePoint
5636
5637 switch (bytesPerSequence) {
5638 case 1:
5639 if (firstByte < 0x80) {
5640 codePoint = firstByte
5641 }
5642 break
5643 case 2:
5644 secondByte = buf[i + 1]
5645 if ((secondByte & 0xC0) === 0x80) {
5646 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
5647 if (tempCodePoint > 0x7F) {
5648 codePoint = tempCodePoint
5649 }
5650 }
5651 break
5652 case 3:
5653 secondByte = buf[i + 1]
5654 thirdByte = buf[i + 2]
5655 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
5656 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
5657 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
5658 codePoint = tempCodePoint
5659 }
5660 }
5661 break
5662 case 4:
5663 secondByte = buf[i + 1]
5664 thirdByte = buf[i + 2]
5665 fourthByte = buf[i + 3]
5666 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
5667 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
5668 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
5669 codePoint = tempCodePoint
5670 }
5671 }
5672 }
5673 }
5674
5675 if (codePoint === null) {
5676 // we did not generate a valid codePoint so insert a
5677 // replacement char (U+FFFD) and advance only 1 byte
5678 codePoint = 0xFFFD
5679 bytesPerSequence = 1
5680 } else if (codePoint > 0xFFFF) {
5681 // encode to utf16 (surrogate pair dance)
5682 codePoint -= 0x10000
5683 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
5684 codePoint = 0xDC00 | codePoint & 0x3FF
5685 }
5686
5687 res.push(codePoint)
5688 i += bytesPerSequence
5689 }
5690
5691 return decodeCodePointsArray(res)
5692}
5693
5694// Based on http://stackoverflow.com/a/22747272/680742, the browser with
5695// the lowest limit is Chrome, with 0x10000 args.
5696// We go 1 magnitude less, for safety
5697var MAX_ARGUMENTS_LENGTH = 0x1000
5698
5699function decodeCodePointsArray (codePoints) {
5700 var len = codePoints.length
5701 if (len <= MAX_ARGUMENTS_LENGTH) {
5702 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
5703 }
5704
5705 // Decode in chunks to avoid "call stack size exceeded".
5706 var res = ''
5707 var i = 0
5708 while (i < len) {
5709 res += String.fromCharCode.apply(
5710 String,
5711 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
5712 )
5713 }
5714 return res
5715}
5716
5717function asciiSlice (buf, start, end) {
5718 var ret = ''
5719 end = Math.min(buf.length, end)
5720
5721 for (var i = start; i < end; ++i) {
5722 ret += String.fromCharCode(buf[i] & 0x7F)
5723 }
5724 return ret
5725}
5726
5727function latin1Slice (buf, start, end) {
5728 var ret = ''
5729 end = Math.min(buf.length, end)
5730
5731 for (var i = start; i < end; ++i) {
5732 ret += String.fromCharCode(buf[i])
5733 }
5734 return ret
5735}
5736
5737function hexSlice (buf, start, end) {
5738 var len = buf.length
5739
5740 if (!start || start < 0) start = 0
5741 if (!end || end < 0 || end > len) end = len
5742
5743 var out = ''
5744 for (var i = start; i < end; ++i) {
5745 out += toHex(buf[i])
5746 }
5747 return out
5748}
5749
5750function utf16leSlice (buf, start, end) {
5751 var bytes = buf.slice(start, end)
5752 var res = ''
5753 for (var i = 0; i < bytes.length; i += 2) {
5754 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
5755 }
5756 return res
5757}
5758
5759Buffer.prototype.slice = function slice (start, end) {
5760 var len = this.length
5761 start = ~~start
5762 end = end === undefined ? len : ~~end
5763
5764 if (start < 0) {
5765 start += len
5766 if (start < 0) start = 0
5767 } else if (start > len) {
5768 start = len
5769 }
5770
5771 if (end < 0) {
5772 end += len
5773 if (end < 0) end = 0
5774 } else if (end > len) {
5775 end = len
5776 }
5777
5778 if (end < start) end = start
5779
5780 var newBuf = this.subarray(start, end)
5781 // Return an augmented `Uint8Array` instance
5782 newBuf.__proto__ = Buffer.prototype
5783 return newBuf
5784}
5785
5786/*
5787 * Need to make sure that buffer isn't trying to write out of bounds.
5788 */
5789function checkOffset (offset, ext, length) {
5790 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
5791 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
5792}
5793
5794Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
5795 offset = offset >>> 0
5796 byteLength = byteLength >>> 0
5797 if (!noAssert) checkOffset(offset, byteLength, this.length)
5798
5799 var val = this[offset]
5800 var mul = 1
5801 var i = 0
5802 while (++i < byteLength && (mul *= 0x100)) {
5803 val += this[offset + i] * mul
5804 }
5805
5806 return val
5807}
5808
5809Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
5810 offset = offset >>> 0
5811 byteLength = byteLength >>> 0
5812 if (!noAssert) {
5813 checkOffset(offset, byteLength, this.length)
5814 }
5815
5816 var val = this[offset + --byteLength]
5817 var mul = 1
5818 while (byteLength > 0 && (mul *= 0x100)) {
5819 val += this[offset + --byteLength] * mul
5820 }
5821
5822 return val
5823}
5824
5825Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
5826 offset = offset >>> 0
5827 if (!noAssert) checkOffset(offset, 1, this.length)
5828 return this[offset]
5829}
5830
5831Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
5832 offset = offset >>> 0
5833 if (!noAssert) checkOffset(offset, 2, this.length)
5834 return this[offset] | (this[offset + 1] << 8)
5835}
5836
5837Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
5838 offset = offset >>> 0
5839 if (!noAssert) checkOffset(offset, 2, this.length)
5840 return (this[offset] << 8) | this[offset + 1]
5841}
5842
5843Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
5844 offset = offset >>> 0
5845 if (!noAssert) checkOffset(offset, 4, this.length)
5846
5847 return ((this[offset]) |
5848 (this[offset + 1] << 8) |
5849 (this[offset + 2] << 16)) +
5850 (this[offset + 3] * 0x1000000)
5851}
5852
5853Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
5854 offset = offset >>> 0
5855 if (!noAssert) checkOffset(offset, 4, this.length)
5856
5857 return (this[offset] * 0x1000000) +
5858 ((this[offset + 1] << 16) |
5859 (this[offset + 2] << 8) |
5860 this[offset + 3])
5861}
5862
5863Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
5864 offset = offset >>> 0
5865 byteLength = byteLength >>> 0
5866 if (!noAssert) checkOffset(offset, byteLength, this.length)
5867
5868 var val = this[offset]
5869 var mul = 1
5870 var i = 0
5871 while (++i < byteLength && (mul *= 0x100)) {
5872 val += this[offset + i] * mul
5873 }
5874 mul *= 0x80
5875
5876 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5877
5878 return val
5879}
5880
5881Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
5882 offset = offset >>> 0
5883 byteLength = byteLength >>> 0
5884 if (!noAssert) checkOffset(offset, byteLength, this.length)
5885
5886 var i = byteLength
5887 var mul = 1
5888 var val = this[offset + --i]
5889 while (i > 0 && (mul *= 0x100)) {
5890 val += this[offset + --i] * mul
5891 }
5892 mul *= 0x80
5893
5894 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5895
5896 return val
5897}
5898
5899Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
5900 offset = offset >>> 0
5901 if (!noAssert) checkOffset(offset, 1, this.length)
5902 if (!(this[offset] & 0x80)) return (this[offset])
5903 return ((0xff - this[offset] + 1) * -1)
5904}
5905
5906Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
5907 offset = offset >>> 0
5908 if (!noAssert) checkOffset(offset, 2, this.length)
5909 var val = this[offset] | (this[offset + 1] << 8)
5910 return (val & 0x8000) ? val | 0xFFFF0000 : val
5911}
5912
5913Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
5914 offset = offset >>> 0
5915 if (!noAssert) checkOffset(offset, 2, this.length)
5916 var val = this[offset + 1] | (this[offset] << 8)
5917 return (val & 0x8000) ? val | 0xFFFF0000 : val
5918}
5919
5920Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
5921 offset = offset >>> 0
5922 if (!noAssert) checkOffset(offset, 4, this.length)
5923
5924 return (this[offset]) |
5925 (this[offset + 1] << 8) |
5926 (this[offset + 2] << 16) |
5927 (this[offset + 3] << 24)
5928}
5929
5930Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
5931 offset = offset >>> 0
5932 if (!noAssert) checkOffset(offset, 4, this.length)
5933
5934 return (this[offset] << 24) |
5935 (this[offset + 1] << 16) |
5936 (this[offset + 2] << 8) |
5937 (this[offset + 3])
5938}
5939
5940Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
5941 offset = offset >>> 0
5942 if (!noAssert) checkOffset(offset, 4, this.length)
5943 return ieee754.read(this, offset, true, 23, 4)
5944}
5945
5946Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
5947 offset = offset >>> 0
5948 if (!noAssert) checkOffset(offset, 4, this.length)
5949 return ieee754.read(this, offset, false, 23, 4)
5950}
5951
5952Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
5953 offset = offset >>> 0
5954 if (!noAssert) checkOffset(offset, 8, this.length)
5955 return ieee754.read(this, offset, true, 52, 8)
5956}
5957
5958Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
5959 offset = offset >>> 0
5960 if (!noAssert) checkOffset(offset, 8, this.length)
5961 return ieee754.read(this, offset, false, 52, 8)
5962}
5963
5964function checkInt (buf, value, offset, ext, max, min) {
5965 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
5966 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
5967 if (offset + ext > buf.length) throw new RangeError('Index out of range')
5968}
5969
5970Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
5971 value = +value
5972 offset = offset >>> 0
5973 byteLength = byteLength >>> 0
5974 if (!noAssert) {
5975 var maxBytes = Math.pow(2, 8 * byteLength) - 1
5976 checkInt(this, value, offset, byteLength, maxBytes, 0)
5977 }
5978
5979 var mul = 1
5980 var i = 0
5981 this[offset] = value & 0xFF
5982 while (++i < byteLength && (mul *= 0x100)) {
5983 this[offset + i] = (value / mul) & 0xFF
5984 }
5985
5986 return offset + byteLength
5987}
5988
5989Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
5990 value = +value
5991 offset = offset >>> 0
5992 byteLength = byteLength >>> 0
5993 if (!noAssert) {
5994 var maxBytes = Math.pow(2, 8 * byteLength) - 1
5995 checkInt(this, value, offset, byteLength, maxBytes, 0)
5996 }
5997
5998 var i = byteLength - 1
5999 var mul = 1
6000 this[offset + i] = value & 0xFF
6001 while (--i >= 0 && (mul *= 0x100)) {
6002 this[offset + i] = (value / mul) & 0xFF
6003 }
6004
6005 return offset + byteLength
6006}
6007
6008Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
6009 value = +value
6010 offset = offset >>> 0
6011 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
6012 this[offset] = (value & 0xff)
6013 return offset + 1
6014}
6015
6016Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
6017 value = +value
6018 offset = offset >>> 0
6019 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
6020 this[offset] = (value & 0xff)
6021 this[offset + 1] = (value >>> 8)
6022 return offset + 2
6023}
6024
6025Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
6026 value = +value
6027 offset = offset >>> 0
6028 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
6029 this[offset] = (value >>> 8)
6030 this[offset + 1] = (value & 0xff)
6031 return offset + 2
6032}
6033
6034Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
6035 value = +value
6036 offset = offset >>> 0
6037 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
6038 this[offset + 3] = (value >>> 24)
6039 this[offset + 2] = (value >>> 16)
6040 this[offset + 1] = (value >>> 8)
6041 this[offset] = (value & 0xff)
6042 return offset + 4
6043}
6044
6045Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
6046 value = +value
6047 offset = offset >>> 0
6048 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
6049 this[offset] = (value >>> 24)
6050 this[offset + 1] = (value >>> 16)
6051 this[offset + 2] = (value >>> 8)
6052 this[offset + 3] = (value & 0xff)
6053 return offset + 4
6054}
6055
6056Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
6057 value = +value
6058 offset = offset >>> 0
6059 if (!noAssert) {
6060 var limit = Math.pow(2, (8 * byteLength) - 1)
6061
6062 checkInt(this, value, offset, byteLength, limit - 1, -limit)
6063 }
6064
6065 var i = 0
6066 var mul = 1
6067 var sub = 0
6068 this[offset] = value & 0xFF
6069 while (++i < byteLength && (mul *= 0x100)) {
6070 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
6071 sub = 1
6072 }
6073 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
6074 }
6075
6076 return offset + byteLength
6077}
6078
6079Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
6080 value = +value
6081 offset = offset >>> 0
6082 if (!noAssert) {
6083 var limit = Math.pow(2, (8 * byteLength) - 1)
6084
6085 checkInt(this, value, offset, byteLength, limit - 1, -limit)
6086 }
6087
6088 var i = byteLength - 1
6089 var mul = 1
6090 var sub = 0
6091 this[offset + i] = value & 0xFF
6092 while (--i >= 0 && (mul *= 0x100)) {
6093 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
6094 sub = 1
6095 }
6096 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
6097 }
6098
6099 return offset + byteLength
6100}
6101
6102Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
6103 value = +value
6104 offset = offset >>> 0
6105 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
6106 if (value < 0) value = 0xff + value + 1
6107 this[offset] = (value & 0xff)
6108 return offset + 1
6109}
6110
6111Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
6112 value = +value
6113 offset = offset >>> 0
6114 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
6115 this[offset] = (value & 0xff)
6116 this[offset + 1] = (value >>> 8)
6117 return offset + 2
6118}
6119
6120Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
6121 value = +value
6122 offset = offset >>> 0
6123 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
6124 this[offset] = (value >>> 8)
6125 this[offset + 1] = (value & 0xff)
6126 return offset + 2
6127}
6128
6129Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
6130 value = +value
6131 offset = offset >>> 0
6132 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
6133 this[offset] = (value & 0xff)
6134 this[offset + 1] = (value >>> 8)
6135 this[offset + 2] = (value >>> 16)
6136 this[offset + 3] = (value >>> 24)
6137 return offset + 4
6138}
6139
6140Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
6141 value = +value
6142 offset = offset >>> 0
6143 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
6144 if (value < 0) value = 0xffffffff + value + 1
6145 this[offset] = (value >>> 24)
6146 this[offset + 1] = (value >>> 16)
6147 this[offset + 2] = (value >>> 8)
6148 this[offset + 3] = (value & 0xff)
6149 return offset + 4
6150}
6151
6152function checkIEEE754 (buf, value, offset, ext, max, min) {
6153 if (offset + ext > buf.length) throw new RangeError('Index out of range')
6154 if (offset < 0) throw new RangeError('Index out of range')
6155}
6156
6157function writeFloat (buf, value, offset, littleEndian, noAssert) {
6158 value = +value
6159 offset = offset >>> 0
6160 if (!noAssert) {
6161 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
6162 }
6163 ieee754.write(buf, value, offset, littleEndian, 23, 4)
6164 return offset + 4
6165}
6166
6167Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
6168 return writeFloat(this, value, offset, true, noAssert)
6169}
6170
6171Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
6172 return writeFloat(this, value, offset, false, noAssert)
6173}
6174
6175function writeDouble (buf, value, offset, littleEndian, noAssert) {
6176 value = +value
6177 offset = offset >>> 0
6178 if (!noAssert) {
6179 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
6180 }
6181 ieee754.write(buf, value, offset, littleEndian, 52, 8)
6182 return offset + 8
6183}
6184
6185Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
6186 return writeDouble(this, value, offset, true, noAssert)
6187}
6188
6189Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
6190 return writeDouble(this, value, offset, false, noAssert)
6191}
6192
6193// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
6194Buffer.prototype.copy = function copy (target, targetStart, start, end) {
6195 if (!start) start = 0
6196 if (!end && end !== 0) end = this.length
6197 if (targetStart >= target.length) targetStart = target.length
6198 if (!targetStart) targetStart = 0
6199 if (end > 0 && end < start) end = start
6200
6201 // Copy 0 bytes; we're done
6202 if (end === start) return 0
6203 if (target.length === 0 || this.length === 0) return 0
6204
6205 // Fatal error conditions
6206 if (targetStart < 0) {
6207 throw new RangeError('targetStart out of bounds')
6208 }
6209 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
6210 if (end < 0) throw new RangeError('sourceEnd out of bounds')
6211
6212 // Are we oob?
6213 if (end > this.length) end = this.length
6214 if (target.length - targetStart < end - start) {
6215 end = target.length - targetStart + start
6216 }
6217
6218 var len = end - start
6219 var i
6220
6221 if (this === target && start < targetStart && targetStart < end) {
6222 // descending copy from end
6223 for (i = len - 1; i >= 0; --i) {
6224 target[i + targetStart] = this[i + start]
6225 }
6226 } else if (len < 1000) {
6227 // ascending copy from start
6228 for (i = 0; i < len; ++i) {
6229 target[i + targetStart] = this[i + start]
6230 }
6231 } else {
6232 Uint8Array.prototype.set.call(
6233 target,
6234 this.subarray(start, start + len),
6235 targetStart
6236 )
6237 }
6238
6239 return len
6240}
6241
6242// Usage:
6243// buffer.fill(number[, offset[, end]])
6244// buffer.fill(buffer[, offset[, end]])
6245// buffer.fill(string[, offset[, end]][, encoding])
6246Buffer.prototype.fill = function fill (val, start, end, encoding) {
6247 // Handle string cases:
6248 if (typeof val === 'string') {
6249 if (typeof start === 'string') {
6250 encoding = start
6251 start = 0
6252 end = this.length
6253 } else if (typeof end === 'string') {
6254 encoding = end
6255 end = this.length
6256 }
6257 if (val.length === 1) {
6258 var code = val.charCodeAt(0)
6259 if (code < 256) {
6260 val = code
6261 }
6262 }
6263 if (encoding !== undefined && typeof encoding !== 'string') {
6264 throw new TypeError('encoding must be a string')
6265 }
6266 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
6267 throw new TypeError('Unknown encoding: ' + encoding)
6268 }
6269 } else if (typeof val === 'number') {
6270 val = val & 255
6271 }
6272
6273 // Invalid ranges are not set to a default, so can range check early.
6274 if (start < 0 || this.length < start || this.length < end) {
6275 throw new RangeError('Out of range index')
6276 }
6277
6278 if (end <= start) {
6279 return this
6280 }
6281
6282 start = start >>> 0
6283 end = end === undefined ? this.length : end >>> 0
6284
6285 if (!val) val = 0
6286
6287 var i
6288 if (typeof val === 'number') {
6289 for (i = start; i < end; ++i) {
6290 this[i] = val
6291 }
6292 } else {
6293 var bytes = Buffer.isBuffer(val)
6294 ? val
6295 : new Buffer(val, encoding)
6296 var len = bytes.length
6297 for (i = 0; i < end - start; ++i) {
6298 this[i + start] = bytes[i % len]
6299 }
6300 }
6301
6302 return this
6303}
6304
6305// HELPER FUNCTIONS
6306// ================
6307
6308var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
6309
6310function base64clean (str) {
6311 // Node strips out invalid characters like \n and \t from the string, base64-js does not
6312 str = str.trim().replace(INVALID_BASE64_RE, '')
6313 // Node converts strings with length < 2 to ''
6314 if (str.length < 2) return ''
6315 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
6316 while (str.length % 4 !== 0) {
6317 str = str + '='
6318 }
6319 return str
6320}
6321
6322function toHex (n) {
6323 if (n < 16) return '0' + n.toString(16)
6324 return n.toString(16)
6325}
6326
6327function utf8ToBytes (string, units) {
6328 units = units || Infinity
6329 var codePoint
6330 var length = string.length
6331 var leadSurrogate = null
6332 var bytes = []
6333
6334 for (var i = 0; i < length; ++i) {
6335 codePoint = string.charCodeAt(i)
6336
6337 // is surrogate component
6338 if (codePoint > 0xD7FF && codePoint < 0xE000) {
6339 // last char was a lead
6340 if (!leadSurrogate) {
6341 // no lead yet
6342 if (codePoint > 0xDBFF) {
6343 // unexpected trail
6344 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6345 continue
6346 } else if (i + 1 === length) {
6347 // unpaired lead
6348 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6349 continue
6350 }
6351
6352 // valid lead
6353 leadSurrogate = codePoint
6354
6355 continue
6356 }
6357
6358 // 2 leads in a row
6359 if (codePoint < 0xDC00) {
6360 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6361 leadSurrogate = codePoint
6362 continue
6363 }
6364
6365 // valid surrogate pair
6366 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
6367 } else if (leadSurrogate) {
6368 // valid bmp char, but last char was a lead
6369 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6370 }
6371
6372 leadSurrogate = null
6373
6374 // encode utf8
6375 if (codePoint < 0x80) {
6376 if ((units -= 1) < 0) break
6377 bytes.push(codePoint)
6378 } else if (codePoint < 0x800) {
6379 if ((units -= 2) < 0) break
6380 bytes.push(
6381 codePoint >> 0x6 | 0xC0,
6382 codePoint & 0x3F | 0x80
6383 )
6384 } else if (codePoint < 0x10000) {
6385 if ((units -= 3) < 0) break
6386 bytes.push(
6387 codePoint >> 0xC | 0xE0,
6388 codePoint >> 0x6 & 0x3F | 0x80,
6389 codePoint & 0x3F | 0x80
6390 )
6391 } else if (codePoint < 0x110000) {
6392 if ((units -= 4) < 0) break
6393 bytes.push(
6394 codePoint >> 0x12 | 0xF0,
6395 codePoint >> 0xC & 0x3F | 0x80,
6396 codePoint >> 0x6 & 0x3F | 0x80,
6397 codePoint & 0x3F | 0x80
6398 )
6399 } else {
6400 throw new Error('Invalid code point')
6401 }
6402 }
6403
6404 return bytes
6405}
6406
6407function asciiToBytes (str) {
6408 var byteArray = []
6409 for (var i = 0; i < str.length; ++i) {
6410 // Node's code seems to be doing this and not & 0x7F..
6411 byteArray.push(str.charCodeAt(i) & 0xFF)
6412 }
6413 return byteArray
6414}
6415
6416function utf16leToBytes (str, units) {
6417 var c, hi, lo
6418 var byteArray = []
6419 for (var i = 0; i < str.length; ++i) {
6420 if ((units -= 2) < 0) break
6421
6422 c = str.charCodeAt(i)
6423 hi = c >> 8
6424 lo = c % 256
6425 byteArray.push(lo)
6426 byteArray.push(hi)
6427 }
6428
6429 return byteArray
6430}
6431
6432function base64ToBytes (str) {
6433 return base64.toByteArray(base64clean(str))
6434}
6435
6436function blitBuffer (src, dst, offset, length) {
6437 for (var i = 0; i < length; ++i) {
6438 if ((i + offset >= dst.length) || (i >= src.length)) break
6439 dst[i + offset] = src[i]
6440 }
6441 return i
6442}
6443
6444// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
6445function isArrayBufferView (obj) {
6446 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
6447}
6448
6449function numberIsNaN (obj) {
6450 return obj !== obj // eslint-disable-line no-self-compare
6451}
6452
6453},{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
6454exports.read = function (buffer, offset, isLE, mLen, nBytes) {
6455 var e, m
6456 var eLen = nBytes * 8 - mLen - 1
6457 var eMax = (1 << eLen) - 1
6458 var eBias = eMax >> 1
6459 var nBits = -7
6460 var i = isLE ? (nBytes - 1) : 0
6461 var d = isLE ? -1 : 1
6462 var s = buffer[offset + i]
6463
6464 i += d
6465
6466 e = s & ((1 << (-nBits)) - 1)
6467 s >>= (-nBits)
6468 nBits += eLen
6469 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6470
6471 m = e & ((1 << (-nBits)) - 1)
6472 e >>= (-nBits)
6473 nBits += mLen
6474 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6475
6476 if (e === 0) {
6477 e = 1 - eBias
6478 } else if (e === eMax) {
6479 return m ? NaN : ((s ? -1 : 1) * Infinity)
6480 } else {
6481 m = m + Math.pow(2, mLen)
6482 e = e - eBias
6483 }
6484 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
6485}
6486
6487exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
6488 var e, m, c
6489 var eLen = nBytes * 8 - mLen - 1
6490 var eMax = (1 << eLen) - 1
6491 var eBias = eMax >> 1
6492 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
6493 var i = isLE ? 0 : (nBytes - 1)
6494 var d = isLE ? 1 : -1
6495 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
6496
6497 value = Math.abs(value)
6498
6499 if (isNaN(value) || value === Infinity) {
6500 m = isNaN(value) ? 1 : 0
6501 e = eMax
6502 } else {
6503 e = Math.floor(Math.log(value) / Math.LN2)
6504 if (value * (c = Math.pow(2, -e)) < 1) {
6505 e--
6506 c *= 2
6507 }
6508 if (e + eBias >= 1) {
6509 value += rt / c
6510 } else {
6511 value += rt * Math.pow(2, 1 - eBias)
6512 }
6513 if (value * c >= 2) {
6514 e++
6515 c /= 2
6516 }
6517
6518 if (e + eBias >= eMax) {
6519 m = 0
6520 e = eMax
6521 } else if (e + eBias >= 1) {
6522 m = (value * c - 1) * Math.pow(2, mLen)
6523 e = e + eBias
6524 } else {
6525 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
6526 e = 0
6527 }
6528 }
6529
6530 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
6531
6532 e = (e << mLen) | m
6533 eLen += mLen
6534 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
6535
6536 buffer[offset + i - d] |= s * 128
6537}
6538
6539},{}],4:[function(require,module,exports){
6540window.basex = require('base-x')
6541},{"base-x":5}],5:[function(require,module,exports){
6542// base-x encoding
6543// Forked from https://github.com/cryptocoinjs/bs58
6544// Originally written by Mike Hearn for BitcoinJ
6545// Copyright (c) 2011 Google Inc
6546// Ported to JavaScript by Stefan Thomas
6547// Merged Buffer refactorings from base58-native by Stephen Pair
6548// Copyright (c) 2013 BitPay Inc
6549
6550var Buffer = require('safe-buffer').Buffer
6551
6552module.exports = function base (ALPHABET) {
6553 var ALPHABET_MAP = {}
6554 var BASE = ALPHABET.length
6555 var LEADER = ALPHABET.charAt(0)
6556
6557 // pre-compute lookup table
6558 for (var z = 0; z < ALPHABET.length; z++) {
6559 var x = ALPHABET.charAt(z)
6560
6561 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
6562 ALPHABET_MAP[x] = z
6563 }
6564
6565 function encode (source) {
6566 if (source.length === 0) return ''
6567
6568 var digits = [0]
6569 for (var i = 0; i < source.length; ++i) {
6570 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
6571 carry += digits[j] << 8
6572 digits[j] = carry % BASE
6573 carry = (carry / BASE) | 0
6574 }
6575
6576 while (carry > 0) {
6577 digits.push(carry % BASE)
6578 carry = (carry / BASE) | 0
6579 }
6580 }
6581
6582 var string = ''
6583
6584 // deal with leading zeros
6585 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
6586 // convert digits to a string
6587 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
6588
6589 return string
6590 }
6591
6592 function decodeUnsafe (string) {
6593 if (string.length === 0) return Buffer.allocUnsafe(0)
6594
6595 var bytes = [0]
6596 for (var i = 0; i < string.length; i++) {
6597 var value = ALPHABET_MAP[string[i]]
6598 if (value === undefined) return
6599
6600 for (var j = 0, carry = value; j < bytes.length; ++j) {
6601 carry += bytes[j] * BASE
6602 bytes[j] = carry & 0xff
6603 carry >>= 8
6604 }
6605
6606 while (carry > 0) {
6607 bytes.push(carry & 0xff)
6608 carry >>= 8
6609 }
6610 }
6611
6612 // deal with leading zeros
6613 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
6614 bytes.push(0)
6615 }
6616
6617 return Buffer.from(bytes.reverse())
6618 }
6619
6620 function decode (string) {
6621 var buffer = decodeUnsafe(string)
6622 if (buffer) return buffer
6623
6624 throw new Error('Non-base' + BASE + ' character')
6625 }
6626
6627 return {
6628 encode: encode,
6629 decodeUnsafe: decodeUnsafe,
6630 decode: decode
6631 }
6632}
6633
6634},{"safe-buffer":6}],6:[function(require,module,exports){
6635module.exports = require('buffer')
6636
6637},{"buffer":2}]},{},[4])(4)
6638});</script>
6e0f24b1
IC
6639 <script>(function (root) {
6640 "use strict";
6641
6642/***** unorm.js *****/
6643
6644/*
6645 * UnicodeNormalizer 1.0.0
6646 * Copyright (c) 2008 Matsuza
6647 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
6648 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
6649 * $Rev: 13309 $
6650 */
6651
6652 var DEFAULT_FEATURE = [null, 0, {}];
6653 var CACHE_THRESHOLD = 10;
6654 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
6655 var NCount = VCount * TCount; // 588
6656 var SCount = LCount * NCount; // 11172
6657
6658 var UChar = function(cp, feature){
6659 this.codepoint = cp;
6660 this.feature = feature;
6661 };
6662
6663 // Strategies
6664 var cache = {};
6665 var cacheCounter = [];
6666 for (var i = 0; i <= 0xFF; ++i){
6667 cacheCounter[i] = 0;
6668 }
6669
6670 function fromCache(next, cp, needFeature){
6671 var ret = cache[cp];
6672 if(!ret){
6673 ret = next(cp, needFeature);
6674 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
6675 cache[cp] = ret;
6676 }
6677 }
6678 return ret;
6679 }
6680
6681 function fromData(next, cp, needFeature){
6682 var hash = cp & 0xFF00;
6683 var dunit = UChar.udata[hash] || {};
6684 var f = dunit[cp];
6685 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
6686 }
6687 function fromCpOnly(next, cp, needFeature){
6688 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
6689 }
6690 function fromRuleBasedJamo(next, cp, needFeature){
6691 var j;
6692 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
6693 return next(cp, needFeature);
6694 }
6695 if(LBase <= cp && cp < LBase + LCount){
6696 var c = {};
6697 var base = (cp - LBase) * VCount;
6698 for (j = 0; j < VCount; ++j){
6699 c[VBase + j] = SBase + TCount * (j + base);
6700 }
6701 return new UChar(cp, [,,c]);
6702 }
6703
6704 var SIndex = cp - SBase;
6705 var TIndex = SIndex % TCount;
6706 var feature = [];
6707 if(TIndex !== 0){
6708 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
6709 } else {
6710 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
6711 feature[2] = {};
6712 for (j = 1; j < TCount; ++j){
6713 feature[2][TBase + j] = cp + j;
6714 }
6715 }
6716 return new UChar(cp, feature);
6717 }
6718 function fromCpFilter(next, cp, needFeature){
6719 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
6720 }
6721
6722 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
6723
6724 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
6725 return function (cp, needFeature) {
6726 return strategy(next, cp, needFeature);
6727 };
6728 }, null);
6729
6730 UChar.isHighSurrogate = function(cp){
6731 return cp >= 0xD800 && cp <= 0xDBFF;
6732 };
6733 UChar.isLowSurrogate = function(cp){
6734 return cp >= 0xDC00 && cp <= 0xDFFF;
6735 };
6736
6737 UChar.prototype.prepFeature = function(){
6738 if(!this.feature){
6739 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
6740 }
6741 };
6742
6743 UChar.prototype.toString = function(){
6744 if(this.codepoint < 0x10000){
6745 return String.fromCharCode(this.codepoint);
6746 } else {
6747 var x = this.codepoint - 0x10000;
6748 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
6749 }
6750 };
6751
6752 UChar.prototype.getDecomp = function(){
6753 this.prepFeature();
6754 return this.feature[0] || null;
6755 };
6756
6757 UChar.prototype.isCompatibility = function(){
6758 this.prepFeature();
6759 return !!this.feature[1] && (this.feature[1] & (1 << 8));
6760 };
6761 UChar.prototype.isExclude = function(){
6762 this.prepFeature();
6763 return !!this.feature[1] && (this.feature[1] & (1 << 9));
6764 };
6765 UChar.prototype.getCanonicalClass = function(){
6766 this.prepFeature();
6767 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
6768 };
6769 UChar.prototype.getComposite = function(following){
6770 this.prepFeature();
6771 if(!this.feature[2]){
6772 return null;
6773 }
6774 var cp = this.feature[2][following.codepoint];
6775 return cp ? UChar.fromCharCode(cp) : null;
6776 };
6777
6778 var UCharIterator = function(str){
6779 this.str = str;
6780 this.cursor = 0;
6781 };
6782 UCharIterator.prototype.next = function(){
6783 if(!!this.str && this.cursor < this.str.length){
6784 var cp = this.str.charCodeAt(this.cursor++);
6785 var d;
6786 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
6787 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
6788 ++this.cursor;
6789 }
6790 return UChar.fromCharCode(cp);
6791 } else {
6792 this.str = null;
6793 return null;
6794 }
6795 };
6796
6797 var RecursDecompIterator = function(it, cano){
6798 this.it = it;
6799 this.canonical = cano;
6800 this.resBuf = [];
6801 };
6802
6803 RecursDecompIterator.prototype.next = function(){
6804 function recursiveDecomp(cano, uchar){
6805 var decomp = uchar.getDecomp();
6806 if(!!decomp && !(cano && uchar.isCompatibility())){
6807 var ret = [];
6808 for(var i = 0; i < decomp.length; ++i){
6809 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
6810 ret = ret.concat(a);
6811 }
6812 return ret;
6813 } else {
6814 return [uchar];
6815 }
6816 }
6817 if(this.resBuf.length === 0){
6818 var uchar = this.it.next();
6819 if(!uchar){
6820 return null;
6821 }
6822 this.resBuf = recursiveDecomp(this.canonical, uchar);
6823 }
6824 return this.resBuf.shift();
6825 };
6826
6827 var DecompIterator = function(it){
6828 this.it = it;
6829 this.resBuf = [];
6830 };
6831
6832 DecompIterator.prototype.next = function(){
6833 var cc;
6834 if(this.resBuf.length === 0){
6835 do{
6836 var uchar = this.it.next();
6837 if(!uchar){
6838 break;
6839 }
6840 cc = uchar.getCanonicalClass();
6841 var inspt = this.resBuf.length;
6842 if(cc !== 0){
6843 for(; inspt > 0; --inspt){
6844 var uchar2 = this.resBuf[inspt - 1];
6845 var cc2 = uchar2.getCanonicalClass();
6846 if(cc2 <= cc){
6847 break;
6848 }
6849 }
6850 }
6851 this.resBuf.splice(inspt, 0, uchar);
6852 } while(cc !== 0);
6853 }
6854 return this.resBuf.shift();
6855 };
6856
6857 var CompIterator = function(it){
6858 this.it = it;
6859 this.procBuf = [];
6860 this.resBuf = [];
6861 this.lastClass = null;
6862 };
6863
6864 CompIterator.prototype.next = function(){
6865 while(this.resBuf.length === 0){
6866 var uchar = this.it.next();
6867 if(!uchar){
6868 this.resBuf = this.procBuf;
6869 this.procBuf = [];
6870 break;
6871 }
6872 if(this.procBuf.length === 0){
6873 this.lastClass = uchar.getCanonicalClass();
6874 this.procBuf.push(uchar);
6875 } else {
6876 var starter = this.procBuf[0];
6877 var composite = starter.getComposite(uchar);
6878 var cc = uchar.getCanonicalClass();
6879 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
6880 this.procBuf[0] = composite;
6881 } else {
6882 if(cc === 0){
6883 this.resBuf = this.procBuf;
6884 this.procBuf = [];
6885 }
6886 this.lastClass = cc;
6887 this.procBuf.push(uchar);
6888 }
6889 }
6890 }
6891 return this.resBuf.shift();
6892 };
6893
6894 var createIterator = function(mode, str){
6895 switch(mode){
6896 case "NFD":
6897 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
6898 case "NFKD":
6899 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
6900 case "NFC":
6901 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
6902 case "NFKC":
6903 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
6904 }
6905 throw mode + " is invalid";
6906 };
6907 var normalize = function(mode, str){
6908 var it = createIterator(mode, str);
6909 var ret = "";
6910 var uchar;
6911 while(!!(uchar = it.next())){
6912 ret += uchar.toString();
6913 }
6914 return ret;
6915 };
6916
6917 /* API functions */
6918 function nfd(str){
6919 return normalize("NFD", str);
6920 }
6921
6922 function nfkd(str){
6923 return normalize("NFKD", str);
6924 }
6925
6926 function nfc(str){
6927 return normalize("NFC", str);
6928 }
6929
6930 function nfkc(str){
6931 return normalize("NFKC", str);
6932 }
6933
6934/* Unicode data */
6935UChar.udata={
69360:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]},
6937256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]},
6938512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]},
6939768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]},
69401024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]},
69411280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]},
69421536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]},
69431792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]},
69442048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]},
69452304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]},
69462560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]},
69472816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]},
69483072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]},
69493328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]},
69503584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]},
69513840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]},
69524096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]},
69534352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]},
69544608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
69554864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]},
69565120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
69575376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
69585632:{71231:[,9],71350:[,9],71351:[,7]},
69595888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
69606144:{6313:[,228]},
69616400:{6457:[,222],6458:[,230],6459:[,220]},
69626656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]},
69636912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]},
69647168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]},
69657424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]},
69667680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]},
69677936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]},
69688192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]},
69698448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]},
69708704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]},
69718960:{9001:[[12296]],9002:[[12297]]},
69729216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]},
697310752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
697411264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
697511520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]},
697611776:{11935:[[27597],256],12019:[[40863],256]},
697712032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]},
697812288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]},
697912544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]},
698012800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]},
698113056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]},
698227136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
698327392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
698442496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]},
698542752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
698643008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]},
698743264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
698843520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
698943776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
699048128:{113822:[,1]},
699153504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]},
699253760:{119362:[,230],119363:[,230],119364:[,230]},
699354272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]},
699454528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]},
699554784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]},
699655040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]},
699759392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
699860928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]},
699961696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]},
700061952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]},
700163488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]},
700263744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]},
700364000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]},
700464256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]},
700564512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]},
700664768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]},
700765024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]},
700865280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]}
7009
7010};
7011
7012 /***** Module to export */
7013 var unorm = {
7014 nfc: nfc,
7015 nfd: nfd,
7016 nfkc: nfkc,
7017 nfkd: nfkd
7018 };
7019
7020 /*globals module:true,define:true*/
7021
7022 // CommonJS
7023 if (typeof module === "object") {
7024 module.exports = unorm;
7025
7026 // AMD
7027 } else if (typeof define === "function" && define.amd) {
7028 define("unorm", function () {
7029 return unorm;
7030 });
7031
7032 // Global
7033 } else {
7034 root.unorm = unorm;
7035 }
7036
7037 /***** Export as shim for String::normalize method *****/
7038 /*
7039 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
7040
7041 21.1.3.12 String.prototype.normalize(form="NFC")
7042 When the normalize method is called with one argument form, the following steps are taken:
7043
7044 1. Let O be CheckObjectCoercible(this value).
7045 2. Let S be ToString(O).
7046 3. ReturnIfAbrupt(S).
7047 4. If form is not provided or undefined let form be "NFC".
7048 5. Let f be ToString(form).
7049 6. ReturnIfAbrupt(f).
7050 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
7051 8. Let ns be the String value is the result of normalizing S into the normalization form named by f as specified in Unicode Standard Annex #15, UnicodeNormalizatoin Forms.
7052 9. Return ns.
7053
7054 The length property of the normalize method is 0.
7055
7056 *NOTE* The normalize function is intentionally generic; it does not require that its this value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.
7057 */
7058 unorm.shimApplied = false;
7059
7060 if (!String.prototype.normalize) {
7061 String.prototype.normalize = function(form) {
7062 var str = "" + this;
7063 form = form === undefined ? "NFC" : form;
7064
7065 if (form === "NFC") {
7066 return unorm.nfc(str);
7067 } else if (form === "NFD") {
7068 return unorm.nfd(str);
7069 } else if (form === "NFKC") {
7070 return unorm.nfkc(str);
7071 } else if (form === "NFKD") {
7072 return unorm.nfkd(str);
7073 } else {
7074 throw new RangeError("Invalid normalization form: " + form);
7075 }
7076 };
7077
7078 unorm.shimApplied = true;
7079 }
7080}(this));
8b095871
IC
7081</script>
7082 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
7083!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)
7084},_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))
7085},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});
7086</script>
7087 <script>/*!
7088 * Bootstrap v3.2.0 (http://getbootstrap.com)
7089 * Copyright 2011-2014 Twitter, Inc.
7090 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7091 */
7092if("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>
7093 <script>(function() {
7094 'use strict';
7095
7096 /**
7097 * Extend an Object with another Object's properties.
7098 *
7099 * The source objects are specified as additional arguments.
7100 *
7101 * @param dst Object the object to extend.
7102 *
7103 * @return Object the final object.
7104 */
7105 var _extend = function(dst) {
7106 var sources = Array.prototype.slice.call(arguments, 1);
7107 for (var i=0; i<sources.length; ++i) {
7108 var src = sources[i];
7109 for (var p in src) {
7110 if (src.hasOwnProperty(p)) dst[p] = src[p];
7111 }
7112 }
7113 return dst;
7114 };
7115
7116
7117 /**
7118 * Defer execution of given function.
7119 * @param {Function} func
7120 */
7121 var _defer = function(func) {
7122 if (typeof setImmediate === 'function') {
7123 return setImmediate(func);
7124 } else {
7125 return setTimeout(func, 0);
7126 }
7127 };
7128
7129 /**
7130 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
7131 */
7132 var Levenshtein = {
7133 /**
7134 * Calculate levenshtein distance of the two strings.
7135 *
7136 * @param str1 String the first string.
7137 * @param str2 String the second string.
7138 * @return Integer the levenshtein distance (0 and above).
7139 */
7140 get: function(str1, str2) {
7141 // base cases
7142 if (str1 === str2) return 0;
7143 if (str1.length === 0) return str2.length;
7144 if (str2.length === 0) return str1.length;
7145
7146 // two rows
7147 var prevRow = new Array(str2.length + 1),
7148 curCol, nextCol, i, j, tmp;
7149
7150 // initialise previous row
7151 for (i=0; i<prevRow.length; ++i) {
7152 prevRow[i] = i;
7153 }
7154
7155 // calculate current row distance from previous row
7156 for (i=0; i<str1.length; ++i) {
7157 nextCol = i + 1;
7158
7159 for (j=0; j<str2.length; ++j) {
7160 curCol = nextCol;
7161
7162 // substution
7163 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
7164 // insertion
7165 tmp = curCol + 1;
7166 if (nextCol > tmp) {
7167 nextCol = tmp;
7168 }
7169 // deletion
7170 tmp = prevRow[j + 1] + 1;
7171 if (nextCol > tmp) {
7172 nextCol = tmp;
7173 }
7174
7175 // copy current col value into previous (in preparation for next iteration)
7176 prevRow[j] = curCol;
7177 }
7178
7179 // copy last col value into previous (in preparation for next iteration)
7180 prevRow[j] = nextCol;
7181 }
7182
7183 return nextCol;
7184 },
7185
7186 /**
7187 * Asynchronously calculate levenshtein distance of the two strings.
7188 *
7189 * @param str1 String the first string.
7190 * @param str2 String the second string.
7191 * @param cb Function callback function with signature: function(Error err, int distance)
7192 * @param [options] Object additional options.
7193 * @param [options.progress] Function progress callback with signature: function(percentComplete)
7194 */
7195 getAsync: function(str1, str2, cb, options) {
7196 options = _extend({}, {
7197 progress: null
7198 }, options);
7199
7200 // base cases
7201 if (str1 === str2) return cb(null, 0);
7202 if (str1.length === 0) return cb(null, str2.length);
7203 if (str2.length === 0) return cb(null, str1.length);
7204
7205 // two rows
7206 var prevRow = new Array(str2.length + 1),
7207 curCol, nextCol,
7208 i, j, tmp,
7209 startTime, currentTime;
7210
7211 // initialise previous row
7212 for (i=0; i<prevRow.length; ++i) {
7213 prevRow[i] = i;
7214 }
7215
7216 nextCol = 1;
7217 i = 0;
7218 j = -1;
7219
7220 var __calculate = function() {
7221 // reset timer
7222 startTime = new Date().valueOf();
7223 currentTime = startTime;
7224
7225 // keep going until one second has elapsed
7226 while (currentTime - startTime < 1000) {
7227 // reached end of current row?
7228 if (str2.length <= (++j)) {
7229 // copy current into previous (in preparation for next iteration)
7230 prevRow[j] = nextCol;
7231
7232 // if already done all chars
7233 if (str1.length <= (++i)) {
7234 return cb(null, nextCol);
7235 }
7236 // else if we have more left to do
7237 else {
7238 nextCol = i + 1;
7239 j = 0;
7240 }
7241 }
7242
7243 // calculation
7244 curCol = nextCol;
7245
7246 // substution
7247 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
7248 // insertion
7249 tmp = curCol + 1;
7250 if (nextCol > tmp) {
7251 nextCol = tmp;
7252 }
7253 // deletion
7254 tmp = prevRow[j + 1] + 1;
7255 if (nextCol > tmp) {
7256 nextCol = tmp;
7257 }
7258
7259 // copy current into previous (in preparation for next iteration)
7260 prevRow[j] = curCol;
7261
7262 // get current time
7263 currentTime = new Date().valueOf();
7264 }
7265
7266 // send a progress update?
7267 if (null !== options.progress) {
7268 try {
7269 options.progress.call(null, (i * 100.0/ str1.length));
7270 } catch (err) {
7271 return cb('Progress callback: ' + err.toString());
7272 }
7273 }
7274
7275 // next iteration
7276 _defer(__calculate);
7277 };
7278
7279 __calculate();
7280 }
7281
7282 };
7283
7284 // amd
7285 if (typeof define !== "undefined" && define !== null && define.amd) {
7286 define(function() {
7287 return Levenshtein;
7288 });
7289 }
7290 // commonjs
7291 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
7292 module.exports = Levenshtein;
7293 }
7294 // web worker
7295 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
7296 self.Levenshtein = Levenshtein;
7297 }
7298 // browser main thread
7299 else if (typeof window !== "undefined" && window !== null) {
7300 window.Levenshtein = Levenshtein;
7301 }
7302}());
7303
7304</script>
7305 <script>(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;d<a.length&&0==a[d];)d++;this.num=Array(a.length-d+c);for(var b=0;b<a.length-d;b++)this.num[b]=a[b+d]}function p(a,c){this.totalCount=a;this.dataCount=c}function t(){this.buffer=[];this.length=0}u.prototype={getLength:function(){return this.data.length},
7306write:function(a){for(var c=0;c<this.data.length;c++)a.put(this.data.charCodeAt(c),8)}};o.prototype={addData:function(a){this.dataList.push(new u(a));this.dataCache=null},isDark:function(a,c){if(0>a||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e<c.length;e++)b+=c[e].dataCount;
7307for(e=0;e<this.dataList.length;e++)c=this.dataList[e],d.put(c.mode,4),d.put(c.getLength(),j.getLengthInBits(c.mode,a)),c.write(d);if(d.getLengthInBits()<=8*b)break}this.typeNumber=a}this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17;this.modules=Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=Array(this.moduleCount);for(var b=0;b<this.moduleCount;b++)this.modules[d][b]=null}this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-
73087,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(a,c);7<=this.typeNumber&&this.setupTypeNumber(a);null==this.dataCache&&(this.dataCache=o.createData(this.typeNumber,this.errorCorrectLevel,this.dataList));this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,c){for(var d=-1;7>=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]=
73090<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c<this.modules.length;c++)for(var d=1*c,b=0;b<this.modules[c].length;b++){var e=1*b;this.modules[c][b]&&(a.beginFill(0,100),a.moveTo(e,d),a.lineTo(e+1,d),a.lineTo(e+1,d+1),a.lineTo(e,d+1),a.endFill())}return a},
7310setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(a=8;a<this.moduleCount-8;a++)null==this.modules[6][a]&&(this.modules[6][a]=0==a%2)},setupPositionAdjustPattern:function(){for(var a=j.getPatternPosition(this.typeNumber),c=0;c<a.length;c++)for(var d=0;d<a.length;d++){var b=a[c],e=a[d];if(null==this.modules[b][e])for(var f=-2;2>=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c=
7311j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount-
7312b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0<i;i-=2)for(6==i&&i--;;){for(var g=0;2>g;g++)if(null==this.modules[b][i-g]){var n=!1;f<a.length&&(n=1==(a[f]>>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a,
7313c),b=new t,e=0;e<d.length;e++){var f=d[e];b.put(f.mode,4);b.put(f.getLength(),j.getLengthInBits(f.mode,a));f.write(b)}for(e=a=0;e<c.length;e++)a+=c[e].dataCount;if(b.getLengthInBits()>8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d=
73140,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g<c.length;g++){var n=c[g].dataCount,h=c[g].totalCount-n,b=Math.max(b,n),e=Math.max(e,h);f[g]=Array(n);for(var k=0;k<f[g].length;k++)f[g][k]=255&a.buffer[k+d];d+=n;k=j.getErrorCorrectPolynomial(h);n=(new q(f[g],k.getLength()-1)).mod(k);i[g]=Array(k.getLength()-1);for(k=0;k<i[g].length;k++)h=k+n.getLength()-i[g].length,i[g][k]=0<=h?n.get(h):0}for(k=g=0;k<c.length;k++)g+=c[k].totalCount;d=Array(g);for(k=n=0;k<b;k++)for(g=0;g<c.length;g++)k<f[g].length&&
7315(d[n++]=f[g][k]);for(k=0;k<e;k++)for(g=0;g<c.length;g++)k<i[g].length&&(d[n++]=i[g][k]);return d};s=4;for(var j={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,
731678,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var c=a<<10;0<=j.getBCHDigit(c)-j.getBCHDigit(j.G15);)c^=j.G15<<j.getBCHDigit(c)-j.getBCHDigit(j.G15);return(a<<10|c)^j.G15_MASK},getBCHTypeNumber:function(a){for(var c=a<<12;0<=j.getBCHDigit(c)-
7317j.getBCHDigit(j.G18);)c^=j.G18<<j.getBCHDigit(c)-j.getBCHDigit(j.G18);return a<<12|c},getBCHDigit:function(a){for(var c=0;0!=a;)c++,a>>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+
7318a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;d<a;d++)c=c.multiply(new q([1,l.gexp(d)],0));return c},getLengthInBits:function(a,c){if(1<=c&&10>c)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+
7319a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b<c;b++)for(var e=0;e<c;e++){for(var f=0,i=a.isDark(b,e),g=-1;1>=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5<f&&(d+=3+f-5)}for(b=0;b<c-1;b++)for(e=0;e<c-1;e++)if(f=0,a.isDark(b,e)&&f++,a.isDark(b+1,e)&&f++,a.isDark(b,e+1)&&f++,a.isDark(b+1,e+1)&&f++,0==f||4==f)d+=3;for(b=0;b<c;b++)for(e=0;e<c-6;e++)a.isDark(b,e)&&!a.isDark(b,e+1)&&a.isDark(b,e+
73202)&&a.isDark(b,e+3)&&a.isDark(b,e+4)&&!a.isDark(b,e+5)&&a.isDark(b,e+6)&&(d+=40);for(e=0;e<c;e++)for(b=0;b<c-6;b++)a.isDark(b,e)&&!a.isDark(b+1,e)&&a.isDark(b+2,e)&&a.isDark(b+3,e)&&a.isDark(b+4,e)&&!a.isDark(b+5,e)&&a.isDark(b+6,e)&&(d+=40);for(e=f=0;e<c;e++)for(b=0;b<c;b++)a.isDark(b,e)&&f++;a=Math.abs(100*f/c/c-50)/5;return d+10*a}},l={glog:function(a){if(1>a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256),
7321LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<<m;for(m=8;256>m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d<this.getLength();d++)for(var b=0;b<a.getLength();b++)c[d+b]^=l.gexp(l.glog(this.get(d))+l.glog(a.get(b)));return new q(c,0)},mod:function(a){if(0>
7322this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b<this.getLength();b++)d[b]=this.get(b);for(b=0;b<a.getLength();b++)d[b]^=l.gexp(l.glog(a.get(b))+c);return(new q(d,0)).mod(a)}};p.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],
7323[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,
7324116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,
732543,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,
73263,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,
732755,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,
732845,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];p.getRSBlocks=function(a,c){var d=p.getRsBlockTable(a,c);if(void 0==d)throw Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+c);for(var b=d.length/3,e=[],f=0;f<b;f++)for(var h=d[3*f+0],g=d[3*f+1],j=d[3*f+2],l=0;l<h;l++)e.push(new p(g,j));return e};p.getRsBlockTable=function(a,c){switch(c){case 1:return p.RS_BLOCK_TABLE[4*(a-1)+0];case 0:return p.RS_BLOCK_TABLE[4*(a-1)+1];case 3:return p.RS_BLOCK_TABLE[4*
7329(a-1)+2];case 2:return p.RS_BLOCK_TABLE[4*(a-1)+3]}};t.prototype={get:function(a){return 1==(this.buffer[Math.floor(a/8)]>>>7-a%8&1)},put:function(a,c){for(var d=0;d<c;d++)this.putBit(1==(a>>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1,
861750ae 7330correctLevel:3,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f<a.getModuleCount();f++)for(var i=0;i<a.getModuleCount();i++){d.fillStyle=a.isDark(f,i)?h.foreground:h.background;var g=Math.ceil((i+1)*b)-Math.floor(i*b),
8b095871
IC
7331j=Math.ceil((f+1)*b)-Math.floor(f*b);d.fillRect(Math.round(i*b),Math.round(f*e),g,j)}}else{a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();c=r("<table></table>").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e<a.getModuleCount();e++){f=r("<tr></tr>").css("height",b+"px").appendTo(c);for(i=0;i<a.getModuleCount();i++)r("<td></td>").css("width",
7332d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;$(a).appendTo(this)})}})($);
7333</script>
9987f0c1
IC
7334 <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.bitcoinjs = 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){
7335(function (global){
7336'use strict';
8b095871 7337
9987f0c1
IC
7338// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
7339// original notice:
8b095871 7340
9987f0c1
IC
7341/*!
7342 * The buffer module from node.js, for the browser.
7343 *
7344 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
7345 * @license MIT
7346 */
7347function compare(a, b) {
7348 if (a === b) {
7349 return 0;
7350 }
8b095871 7351
9987f0c1
IC
7352 var x = a.length;
7353 var y = b.length;
8b095871 7354
9987f0c1
IC
7355 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
7356 if (a[i] !== b[i]) {
7357 x = a[i];
7358 y = b[i];
7359 break;
7360 }
7361 }
8b095871 7362
9987f0c1
IC
7363 if (x < y) {
7364 return -1;
8b095871 7365 }
9987f0c1
IC
7366 if (y < x) {
7367 return 1;
8b095871 7368 }
9987f0c1 7369 return 0;
8b095871 7370}
9987f0c1
IC
7371function isBuffer(b) {
7372 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
7373 return global.Buffer.isBuffer(b);
8b095871 7374 }
9987f0c1 7375 return !!(b != null && b._isBuffer);
8b095871
IC
7376}
7377
9987f0c1 7378// based on node assert, original notice:
8b095871 7379
9987f0c1
IC
7380// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
7381//
7382// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
7383//
7384// Originally from narwhal.js (http://narwhaljs.org)
7385// Copyright (c) 2009 Thomas Robinson <280north.com>
7386//
7387// Permission is hereby granted, free of charge, to any person obtaining a copy
7388// of this software and associated documentation files (the 'Software'), to
7389// deal in the Software without restriction, including without limitation the
7390// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7391// sell copies of the Software, and to permit persons to whom the Software is
7392// furnished to do so, subject to the following conditions:
7393//
7394// The above copyright notice and this permission notice shall be included in
7395// all copies or substantial portions of the Software.
7396//
7397// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
7398// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7399// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
7400// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
7401// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
7402// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 7403
9987f0c1
IC
7404var util = require('util/');
7405var hasOwn = Object.prototype.hasOwnProperty;
7406var pSlice = Array.prototype.slice;
7407var functionsHaveNames = (function () {
7408 return function foo() {}.name === 'foo';
7409}());
7410function pToString (obj) {
7411 return Object.prototype.toString.call(obj);
8b095871 7412}
9987f0c1
IC
7413function isView(arrbuf) {
7414 if (isBuffer(arrbuf)) {
7415 return false;
7416 }
7417 if (typeof global.ArrayBuffer !== 'function') {
7418 return false;
7419 }
7420 if (typeof ArrayBuffer.isView === 'function') {
7421 return ArrayBuffer.isView(arrbuf);
7422 }
7423 if (!arrbuf) {
7424 return false;
7425 }
7426 if (arrbuf instanceof DataView) {
7427 return true;
7428 }
7429 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
7430 return true;
7431 }
7432 return false;
8b095871 7433}
9987f0c1
IC
7434// 1. The assert module provides functions that throw
7435// AssertionError's when particular conditions are not met. The
7436// assert module must conform to the following interface.
8b095871 7437
9987f0c1 7438var assert = module.exports = ok;
8b095871 7439
9987f0c1
IC
7440// 2. The AssertionError is defined in assert.
7441// new assert.AssertionError({ message: message,
7442// actual: actual,
7443// expected: expected })
8b095871 7444
9987f0c1
IC
7445var regex = /\s*function\s+([^\(\s]*)\s*/;
7446// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
7447function getName(func) {
7448 if (!util.isFunction(func)) {
7449 return;
7450 }
7451 if (functionsHaveNames) {
7452 return func.name;
7453 }
7454 var str = func.toString();
7455 var match = str.match(regex);
7456 return match && match[1];
8b095871 7457}
9987f0c1
IC
7458assert.AssertionError = function AssertionError(options) {
7459 this.name = 'AssertionError';
7460 this.actual = options.actual;
7461 this.expected = options.expected;
7462 this.operator = options.operator;
7463 if (options.message) {
7464 this.message = options.message;
7465 this.generatedMessage = false;
7466 } else {
7467 this.message = getMessage(this);
7468 this.generatedMessage = true;
7469 }
7470 var stackStartFunction = options.stackStartFunction || fail;
7471 if (Error.captureStackTrace) {
7472 Error.captureStackTrace(this, stackStartFunction);
7473 } else {
7474 // non v8 browsers so we can have a stacktrace
7475 var err = new Error();
7476 if (err.stack) {
7477 var out = err.stack;
8b095871 7478
9987f0c1
IC
7479 // try to strip useless frames
7480 var fn_name = getName(stackStartFunction);
7481 var idx = out.indexOf('\n' + fn_name);
7482 if (idx >= 0) {
7483 // once we have located the function frame
7484 // we need to strip out everything before it (and its line)
7485 var next_line = out.indexOf('\n', idx + 1);
7486 out = out.substring(next_line + 1);
7487 }
8b095871 7488
9987f0c1 7489 this.stack = out;
8b095871 7490 }
8b095871 7491 }
9987f0c1 7492};
8b095871 7493
9987f0c1
IC
7494// assert.AssertionError instanceof Error
7495util.inherits(assert.AssertionError, Error);
8b095871 7496
9987f0c1
IC
7497function truncate(s, n) {
7498 if (typeof s === 'string') {
7499 return s.length < n ? s : s.slice(0, n);
7500 } else {
7501 return s;
8b095871 7502 }
8b095871 7503}
9987f0c1
IC
7504function inspect(something) {
7505 if (functionsHaveNames || !util.isFunction(something)) {
7506 return util.inspect(something);
7507 }
7508 var rawname = getName(something);
7509 var name = rawname ? ': ' + rawname : '';
7510 return '[Function' + name + ']';
8b095871 7511}
9987f0c1
IC
7512function getMessage(self) {
7513 return truncate(inspect(self.actual), 128) + ' ' +
7514 self.operator + ' ' +
7515 truncate(inspect(self.expected), 128);
8b095871
IC
7516}
7517
9987f0c1
IC
7518// At present only the three keys mentioned above are used and
7519// understood by the spec. Implementations or sub modules can pass
7520// other keys to the AssertionError's constructor - they will be
7521// ignored.
3af2954a 7522
9987f0c1
IC
7523// 3. All of the following functions must throw an AssertionError
7524// when a corresponding condition is not met, with a message that
7525// may be undefined if not provided. All assertion methods provide
7526// both the actual and expected values to the assertion error for
7527// display purposes.
8b095871 7528
9987f0c1
IC
7529function fail(actual, expected, message, operator, stackStartFunction) {
7530 throw new assert.AssertionError({
7531 message: message,
7532 actual: actual,
7533 expected: expected,
7534 operator: operator,
7535 stackStartFunction: stackStartFunction
7536 });
8b095871
IC
7537}
7538
9987f0c1
IC
7539// EXTENSION! allows for well behaved errors defined elsewhere.
7540assert.fail = fail;
8b095871 7541
9987f0c1
IC
7542// 4. Pure assertion tests whether a value is truthy, as determined
7543// by !!guard.
7544// assert.ok(guard, message_opt);
7545// This statement is equivalent to assert.equal(true, !!guard,
7546// message_opt);. To test strictly for the value true, use
7547// assert.strictEqual(true, guard, message_opt);.
8b095871 7548
9987f0c1
IC
7549function ok(value, message) {
7550 if (!value) fail(value, true, message, '==', assert.ok);
8b095871 7551}
9987f0c1 7552assert.ok = ok;
8b095871 7553
9987f0c1
IC
7554// 5. The equality assertion tests shallow, coercive equality with
7555// ==.
7556// assert.equal(actual, expected, message_opt);
7557
7558assert.equal = function equal(actual, expected, message) {
7559 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
7560};
7561
7562// 6. The non-equality assertion tests for whether two objects are not equal
7563// with != assert.notEqual(actual, expected, message_opt);
7564
7565assert.notEqual = function notEqual(actual, expected, message) {
7566 if (actual == expected) {
7567 fail(actual, expected, message, '!=', assert.notEqual);
8b095871 7568 }
9987f0c1 7569};
8b095871 7570
9987f0c1
IC
7571// 7. The equivalence assertion tests a deep equality relation.
7572// assert.deepEqual(actual, expected, message_opt);
7573
7574assert.deepEqual = function deepEqual(actual, expected, message) {
7575 if (!_deepEqual(actual, expected, false)) {
7576 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
8b095871 7577 }
9987f0c1
IC
7578};
7579
7580assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
7581 if (!_deepEqual(actual, expected, true)) {
7582 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
7583 }
7584};
7585
7586function _deepEqual(actual, expected, strict, memos) {
7587 // 7.1. All identical values are equivalent, as determined by ===.
7588 if (actual === expected) {
7589 return true;
7590 } else if (isBuffer(actual) && isBuffer(expected)) {
7591 return compare(actual, expected) === 0;
7592
7593 // 7.2. If the expected value is a Date object, the actual value is
7594 // equivalent if it is also a Date object that refers to the same time.
7595 } else if (util.isDate(actual) && util.isDate(expected)) {
7596 return actual.getTime() === expected.getTime();
7597
7598 // 7.3 If the expected value is a RegExp object, the actual value is
7599 // equivalent if it is also a RegExp object with the same source and
7600 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
7601 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
7602 return actual.source === expected.source &&
7603 actual.global === expected.global &&
7604 actual.multiline === expected.multiline &&
7605 actual.lastIndex === expected.lastIndex &&
7606 actual.ignoreCase === expected.ignoreCase;
7607
7608 // 7.4. Other pairs that do not both pass typeof value == 'object',
7609 // equivalence is determined by ==.
7610 } else if ((actual === null || typeof actual !== 'object') &&
7611 (expected === null || typeof expected !== 'object')) {
7612 return strict ? actual === expected : actual == expected;
7613
7614 // If both values are instances of typed arrays, wrap their underlying
7615 // ArrayBuffers in a Buffer each to increase performance
7616 // This optimization requires the arrays to have the same type as checked by
7617 // Object.prototype.toString (aka pToString). Never perform binary
7618 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
7619 // bit patterns are not identical.
7620 } else if (isView(actual) && isView(expected) &&
7621 pToString(actual) === pToString(expected) &&
7622 !(actual instanceof Float32Array ||
7623 actual instanceof Float64Array)) {
7624 return compare(new Uint8Array(actual.buffer),
7625 new Uint8Array(expected.buffer)) === 0;
7626
7627 // 7.5 For all other Object pairs, including Array objects, equivalence is
7628 // determined by having the same number of owned properties (as verified
7629 // with Object.prototype.hasOwnProperty.call), the same set of keys
7630 // (although not necessarily the same order), equivalent values for every
7631 // corresponding key, and an identical 'prototype' property. Note: this
7632 // accounts for both named and indexed properties on Arrays.
7633 } else if (isBuffer(actual) !== isBuffer(expected)) {
7634 return false;
7635 } else {
7636 memos = memos || {actual: [], expected: []};
7637
7638 var actualIndex = memos.actual.indexOf(actual);
7639 if (actualIndex !== -1) {
7640 if (actualIndex === memos.expected.indexOf(expected)) {
7641 return true;
7642 }
7643 }
7644
7645 memos.actual.push(actual);
7646 memos.expected.push(expected);
7647
7648 return objEquiv(actual, expected, strict, memos);
7649 }
7650}
7651
7652function isArguments(object) {
7653 return Object.prototype.toString.call(object) == '[object Arguments]';
7654}
7655
7656function objEquiv(a, b, strict, actualVisitedObjects) {
7657 if (a === null || a === undefined || b === null || b === undefined)
7658 return false;
7659 // if one is a primitive, the other must be same
7660 if (util.isPrimitive(a) || util.isPrimitive(b))
7661 return a === b;
7662 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
7663 return false;
7664 var aIsArgs = isArguments(a);
7665 var bIsArgs = isArguments(b);
7666 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
7667 return false;
7668 if (aIsArgs) {
7669 a = pSlice.call(a);
7670 b = pSlice.call(b);
7671 return _deepEqual(a, b, strict);
7672 }
7673 var ka = objectKeys(a);
7674 var kb = objectKeys(b);
7675 var key, i;
7676 // having the same number of owned properties (keys incorporates
7677 // hasOwnProperty)
7678 if (ka.length !== kb.length)
7679 return false;
7680 //the same set of keys (although not necessarily the same order),
7681 ka.sort();
7682 kb.sort();
7683 //~~~cheap key test
7684 for (i = ka.length - 1; i >= 0; i--) {
7685 if (ka[i] !== kb[i])
7686 return false;
7687 }
7688 //equivalent values for every corresponding key, and
7689 //~~~possibly expensive deep test
7690 for (i = ka.length - 1; i >= 0; i--) {
7691 key = ka[i];
7692 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
7693 return false;
7694 }
7695 return true;
7696}
7697
7698// 8. The non-equivalence assertion tests for any deep inequality.
7699// assert.notDeepEqual(actual, expected, message_opt);
7700
7701assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
7702 if (_deepEqual(actual, expected, false)) {
7703 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
7704 }
7705};
7706
7707assert.notDeepStrictEqual = notDeepStrictEqual;
7708function notDeepStrictEqual(actual, expected, message) {
7709 if (_deepEqual(actual, expected, true)) {
7710 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
7711 }
7712}
7713
7714
7715// 9. The strict equality assertion tests strict equality, as determined by ===.
7716// assert.strictEqual(actual, expected, message_opt);
7717
7718assert.strictEqual = function strictEqual(actual, expected, message) {
7719 if (actual !== expected) {
7720 fail(actual, expected, message, '===', assert.strictEqual);
7721 }
7722};
7723
7724// 10. The strict non-equality assertion tests for strict inequality, as
7725// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
7726
7727assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
7728 if (actual === expected) {
7729 fail(actual, expected, message, '!==', assert.notStrictEqual);
7730 }
7731};
7732
7733function expectedException(actual, expected) {
7734 if (!actual || !expected) {
7735 return false;
7736 }
7737
7738 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
7739 return expected.test(actual);
7740 }
7741
7742 try {
7743 if (actual instanceof expected) {
7744 return true;
7745 }
7746 } catch (e) {
7747 // Ignore. The instanceof check doesn't work for arrow functions.
7748 }
7749
7750 if (Error.isPrototypeOf(expected)) {
7751 return false;
7752 }
7753
7754 return expected.call({}, actual) === true;
7755}
7756
7757function _tryBlock(block) {
7758 var error;
7759 try {
7760 block();
7761 } catch (e) {
7762 error = e;
7763 }
7764 return error;
7765}
7766
7767function _throws(shouldThrow, block, expected, message) {
7768 var actual;
7769
7770 if (typeof block !== 'function') {
7771 throw new TypeError('"block" argument must be a function');
7772 }
7773
7774 if (typeof expected === 'string') {
7775 message = expected;
7776 expected = null;
7777 }
7778
7779 actual = _tryBlock(block);
7780
7781 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
7782 (message ? ' ' + message : '.');
7783
7784 if (shouldThrow && !actual) {
7785 fail(actual, expected, 'Missing expected exception' + message);
7786 }
7787
7788 var userProvidedMessage = typeof message === 'string';
7789 var isUnwantedException = !shouldThrow && util.isError(actual);
7790 var isUnexpectedException = !shouldThrow && actual && !expected;
7791
7792 if ((isUnwantedException &&
7793 userProvidedMessage &&
7794 expectedException(actual, expected)) ||
7795 isUnexpectedException) {
7796 fail(actual, expected, 'Got unwanted exception' + message);
7797 }
7798
7799 if ((shouldThrow && actual && expected &&
7800 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
7801 throw actual;
7802 }
7803}
7804
7805// 11. Expected to throw an error:
7806// assert.throws(block, Error_opt, message_opt);
7807
7808assert.throws = function(block, /*optional*/error, /*optional*/message) {
7809 _throws(true, block, error, message);
7810};
7811
7812// EXTENSION! This is annoying to write outside this module.
7813assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
7814 _throws(false, block, error, message);
7815};
7816
7817assert.ifError = function(err) { if (err) throw err; };
7818
7819var objectKeys = Object.keys || function (obj) {
7820 var keys = [];
7821 for (var key in obj) {
7822 if (hasOwn.call(obj, key)) keys.push(key);
7823 }
7824 return keys;
7825};
7826
7827}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7828},{"util/":32}],2:[function(require,module,exports){
7829'use strict'
7830
7831exports.byteLength = byteLength
7832exports.toByteArray = toByteArray
7833exports.fromByteArray = fromByteArray
7834
7835var lookup = []
7836var revLookup = []
7837var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
7838
7839var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
7840for (var i = 0, len = code.length; i < len; ++i) {
7841 lookup[i] = code[i]
7842 revLookup[code.charCodeAt(i)] = i
7843}
7844
7845revLookup['-'.charCodeAt(0)] = 62
7846revLookup['_'.charCodeAt(0)] = 63
7847
7848function placeHoldersCount (b64) {
7849 var len = b64.length
7850 if (len % 4 > 0) {
7851 throw new Error('Invalid string. Length must be a multiple of 4')
7852 }
7853
7854 // the number of equal signs (place holders)
7855 // if there are two placeholders, than the two characters before it
7856 // represent one byte
7857 // if there is only one, then the three characters before it represent 2 bytes
7858 // this is just a cheap hack to not do indexOf twice
7859 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
7860}
7861
7862function byteLength (b64) {
7863 // base64 is 4/3 + up to two characters of the original data
7864 return (b64.length * 3 / 4) - placeHoldersCount(b64)
7865}
7866
7867function toByteArray (b64) {
7868 var i, l, tmp, placeHolders, arr
7869 var len = b64.length
7870 placeHolders = placeHoldersCount(b64)
7871
7872 arr = new Arr((len * 3 / 4) - placeHolders)
7873
7874 // if there are placeholders, only get up to the last complete 4 chars
7875 l = placeHolders > 0 ? len - 4 : len
7876
7877 var L = 0
7878
7879 for (i = 0; i < l; i += 4) {
7880 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
7881 arr[L++] = (tmp >> 16) & 0xFF
7882 arr[L++] = (tmp >> 8) & 0xFF
7883 arr[L++] = tmp & 0xFF
7884 }
7885
7886 if (placeHolders === 2) {
7887 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
7888 arr[L++] = tmp & 0xFF
7889 } else if (placeHolders === 1) {
7890 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
7891 arr[L++] = (tmp >> 8) & 0xFF
7892 arr[L++] = tmp & 0xFF
7893 }
7894
7895 return arr
7896}
7897
7898function tripletToBase64 (num) {
7899 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
7900}
7901
7902function encodeChunk (uint8, start, end) {
7903 var tmp
7904 var output = []
7905 for (var i = start; i < end; i += 3) {
7906 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
7907 output.push(tripletToBase64(tmp))
7908 }
7909 return output.join('')
7910}
7911
7912function fromByteArray (uint8) {
7913 var tmp
7914 var len = uint8.length
7915 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
7916 var output = ''
7917 var parts = []
7918 var maxChunkLength = 16383 // must be multiple of 3
7919
7920 // go through the array every three bytes, we'll deal with trailing stuff later
7921 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
7922 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
7923 }
7924
7925 // pad the end with zeros, but make sure to not forget the extra bytes
7926 if (extraBytes === 1) {
7927 tmp = uint8[len - 1]
7928 output += lookup[tmp >> 2]
7929 output += lookup[(tmp << 4) & 0x3F]
7930 output += '=='
7931 } else if (extraBytes === 2) {
7932 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
7933 output += lookup[tmp >> 10]
7934 output += lookup[(tmp >> 4) & 0x3F]
7935 output += lookup[(tmp << 2) & 0x3F]
7936 output += '='
7937 }
7938
7939 parts.push(output)
7940
7941 return parts.join('')
7942}
7943
7944},{}],3:[function(require,module,exports){
7945
7946},{}],4:[function(require,module,exports){
7947/*!
7948 * The buffer module from node.js, for the browser.
7949 *
7950 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
7951 * @license MIT
7952 */
7953/* eslint-disable no-proto */
7954
7955'use strict'
7956
7957var base64 = require('base64-js')
7958var ieee754 = require('ieee754')
7959
7960exports.Buffer = Buffer
7961exports.SlowBuffer = SlowBuffer
7962exports.INSPECT_MAX_BYTES = 50
7963
7964var K_MAX_LENGTH = 0x7fffffff
7965exports.kMaxLength = K_MAX_LENGTH
7966
7967/**
7968 * If `Buffer.TYPED_ARRAY_SUPPORT`:
7969 * === true Use Uint8Array implementation (fastest)
7970 * === false Print warning and recommend using `buffer` v4.x which has an Object
7971 * implementation (most compatible, even IE6)
7972 *
7973 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
7974 * Opera 11.6+, iOS 4.2+.
7975 *
7976 * We report that the browser does not support typed arrays if the are not subclassable
7977 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
7978 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
7979 * for __proto__ and has a buggy typed array implementation.
7980 */
7981Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
7982
7983if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
7984 typeof console.error === 'function') {
7985 console.error(
7986 'This browser lacks typed array (Uint8Array) support which is required by ' +
7987 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
7988 )
7989}
7990
7991function typedArraySupport () {
7992 // Can typed array instances can be augmented?
7993 try {
7994 var arr = new Uint8Array(1)
7995 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
7996 return arr.foo() === 42
7997 } catch (e) {
7998 return false
7999 }
8000}
8001
8002function createBuffer (length) {
8003 if (length > K_MAX_LENGTH) {
8004 throw new RangeError('Invalid typed array length')
8005 }
8006 // Return an augmented `Uint8Array` instance
8007 var buf = new Uint8Array(length)
8008 buf.__proto__ = Buffer.prototype
8009 return buf
8010}
8011
8012/**
8013 * The Buffer constructor returns instances of `Uint8Array` that have their
8014 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
8015 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
8016 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
8017 * returns a single octet.
8018 *
8019 * The `Uint8Array` prototype remains unmodified.
8020 */
8021
8022function Buffer (arg, encodingOrOffset, length) {
8023 // Common case.
8024 if (typeof arg === 'number') {
8025 if (typeof encodingOrOffset === 'string') {
8026 throw new Error(
8027 'If encoding is specified then the first argument must be a string'
8028 )
8029 }
8030 return allocUnsafe(arg)
8031 }
8032 return from(arg, encodingOrOffset, length)
8033}
8034
8035// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
8036if (typeof Symbol !== 'undefined' && Symbol.species &&
8037 Buffer[Symbol.species] === Buffer) {
8038 Object.defineProperty(Buffer, Symbol.species, {
8039 value: null,
8040 configurable: true,
8041 enumerable: false,
8042 writable: false
8043 })
8044}
8045
8046Buffer.poolSize = 8192 // not used by this implementation
8047
8048function from (value, encodingOrOffset, length) {
8049 if (typeof value === 'number') {
8050 throw new TypeError('"value" argument must not be a number')
8051 }
8052
8053 if (value instanceof ArrayBuffer) {
8054 return fromArrayBuffer(value, encodingOrOffset, length)
8055 }
8056
8057 if (typeof value === 'string') {
8058 return fromString(value, encodingOrOffset)
8059 }
8060
8061 return fromObject(value)
8062}
8063
8064/**
8065 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
8066 * if value is a number.
8067 * Buffer.from(str[, encoding])
8068 * Buffer.from(array)
8069 * Buffer.from(buffer)
8070 * Buffer.from(arrayBuffer[, byteOffset[, length]])
8071 **/
8072Buffer.from = function (value, encodingOrOffset, length) {
8073 return from(value, encodingOrOffset, length)
8074}
8075
8076// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
8077// https://github.com/feross/buffer/pull/148
8078Buffer.prototype.__proto__ = Uint8Array.prototype
8079Buffer.__proto__ = Uint8Array
8080
8081function assertSize (size) {
8082 if (typeof size !== 'number') {
8083 throw new TypeError('"size" argument must be a number')
8084 } else if (size < 0) {
8085 throw new RangeError('"size" argument must not be negative')
8086 }
8087}
8088
8089function alloc (size, fill, encoding) {
8090 assertSize(size)
8091 if (size <= 0) {
8092 return createBuffer(size)
8093 }
8094 if (fill !== undefined) {
8095 // Only pay attention to encoding if it's a string. This
8096 // prevents accidentally sending in a number that would
8097 // be interpretted as a start offset.
8098 return typeof encoding === 'string'
8099 ? createBuffer(size).fill(fill, encoding)
8100 : createBuffer(size).fill(fill)
8101 }
8102 return createBuffer(size)
8103}
8104
8105/**
8106 * Creates a new filled Buffer instance.
8107 * alloc(size[, fill[, encoding]])
8108 **/
8109Buffer.alloc = function (size, fill, encoding) {
8110 return alloc(size, fill, encoding)
8111}
8112
8113function allocUnsafe (size) {
8114 assertSize(size)
8115 return createBuffer(size < 0 ? 0 : checked(size) | 0)
8116}
8117
8118/**
8119 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
8120 * */
8121Buffer.allocUnsafe = function (size) {
8122 return allocUnsafe(size)
8123}
8124/**
8125 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
8126 */
8127Buffer.allocUnsafeSlow = function (size) {
8128 return allocUnsafe(size)
8129}
8130
8131function fromString (string, encoding) {
8132 if (typeof encoding !== 'string' || encoding === '') {
8133 encoding = 'utf8'
8134 }
8135
8136 if (!Buffer.isEncoding(encoding)) {
8137 throw new TypeError('"encoding" must be a valid string encoding')
8138 }
8139
8140 var length = byteLength(string, encoding) | 0
8141 var buf = createBuffer(length)
8142
8143 var actual = buf.write(string, encoding)
8144
8145 if (actual !== length) {
8146 // Writing a hex string, for example, that contains invalid characters will
8147 // cause everything after the first invalid character to be ignored. (e.g.
8148 // 'abxxcd' will be treated as 'ab')
8149 buf = buf.slice(0, actual)
8150 }
8151
8152 return buf
8153}
8154
8155function fromArrayLike (array) {
8156 var length = array.length < 0 ? 0 : checked(array.length) | 0
8157 var buf = createBuffer(length)
8158 for (var i = 0; i < length; i += 1) {
8159 buf[i] = array[i] & 255
8160 }
8161 return buf
8162}
8163
8164function fromArrayBuffer (array, byteOffset, length) {
8165 if (byteOffset < 0 || array.byteLength < byteOffset) {
8166 throw new RangeError('\'offset\' is out of bounds')
8167 }
8168
8169 if (array.byteLength < byteOffset + (length || 0)) {
8170 throw new RangeError('\'length\' is out of bounds')
8171 }
8172
8173 var buf
8174 if (byteOffset === undefined && length === undefined) {
8175 buf = new Uint8Array(array)
8176 } else if (length === undefined) {
8177 buf = new Uint8Array(array, byteOffset)
8178 } else {
8179 buf = new Uint8Array(array, byteOffset, length)
8180 }
8181
8182 // Return an augmented `Uint8Array` instance
8183 buf.__proto__ = Buffer.prototype
8184 return buf
8185}
8186
8187function fromObject (obj) {
8188 if (Buffer.isBuffer(obj)) {
8189 var len = checked(obj.length) | 0
8190 var buf = createBuffer(len)
8191
8192 if (buf.length === 0) {
8193 return buf
8194 }
8195
8196 obj.copy(buf, 0, 0, len)
8197 return buf
8198 }
8199
8200 if (obj) {
8201 if (isArrayBufferView(obj) || 'length' in obj) {
8202 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
8203 return createBuffer(0)
8204 }
8205 return fromArrayLike(obj)
8206 }
8207
8208 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
8209 return fromArrayLike(obj.data)
8210 }
8211 }
8212
8213 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
8214}
8215
8216function checked (length) {
8217 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
8218 // length is NaN (which is otherwise coerced to zero.)
8219 if (length >= K_MAX_LENGTH) {
8220 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
8221 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
8222 }
8223 return length | 0
8224}
8225
8226function SlowBuffer (length) {
8227 if (+length != length) { // eslint-disable-line eqeqeq
8228 length = 0
8229 }
8230 return Buffer.alloc(+length)
8231}
8232
8233Buffer.isBuffer = function isBuffer (b) {
8234 return b != null && b._isBuffer === true
8235}
8236
8237Buffer.compare = function compare (a, b) {
8238 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
8239 throw new TypeError('Arguments must be Buffers')
8240 }
8241
8242 if (a === b) return 0
8243
8244 var x = a.length
8245 var y = b.length
8246
8247 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
8248 if (a[i] !== b[i]) {
8249 x = a[i]
8250 y = b[i]
8251 break
8252 }
8b095871 8253 }
9987f0c1
IC
8254
8255 if (x < y) return -1
8256 if (y < x) return 1
8257 return 0
8b095871
IC
8258}
8259
9987f0c1
IC
8260Buffer.isEncoding = function isEncoding (encoding) {
8261 switch (String(encoding).toLowerCase()) {
8262 case 'hex':
8263 case 'utf8':
8264 case 'utf-8':
8265 case 'ascii':
8266 case 'latin1':
8267 case 'binary':
8268 case 'base64':
8269 case 'ucs2':
8270 case 'ucs-2':
8271 case 'utf16le':
8272 case 'utf-16le':
8273 return true
8274 default:
8275 return false
8b095871 8276 }
9987f0c1
IC
8277}
8278
8279Buffer.concat = function concat (list, length) {
8280 if (!Array.isArray(list)) {
8281 throw new TypeError('"list" argument must be an Array of Buffers')
8282 }
8283
8284 if (list.length === 0) {
8285 return Buffer.alloc(0)
8286 }
8287
8288 var i
8289 if (length === undefined) {
8290 length = 0
8291 for (i = 0; i < list.length; ++i) {
8292 length += list[i].length
8b095871 8293 }
9987f0c1
IC
8294 }
8295
8296 var buffer = Buffer.allocUnsafe(length)
8297 var pos = 0
8298 for (i = 0; i < list.length; ++i) {
8299 var buf = list[i]
8300 if (!Buffer.isBuffer(buf)) {
8301 throw new TypeError('"list" argument must be an Array of Buffers')
8b095871 8302 }
9987f0c1
IC
8303 buf.copy(buffer, pos)
8304 pos += buf.length
8b095871 8305 }
9987f0c1 8306 return buffer
8b095871
IC
8307}
8308
9987f0c1
IC
8309function byteLength (string, encoding) {
8310 if (Buffer.isBuffer(string)) {
8311 return string.length
8312 }
8313 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
8314 return string.byteLength
8315 }
8316 if (typeof string !== 'string') {
8317 string = '' + string
8318 }
8319
8320 var len = string.length
8321 if (len === 0) return 0
8322
8323 // Use a for loop to avoid recursion
8324 var loweredCase = false
8325 for (;;) {
8326 switch (encoding) {
8327 case 'ascii':
8328 case 'latin1':
8329 case 'binary':
8330 return len
8331 case 'utf8':
8332 case 'utf-8':
8333 case undefined:
8334 return utf8ToBytes(string).length
8335 case 'ucs2':
8336 case 'ucs-2':
8337 case 'utf16le':
8338 case 'utf-16le':
8339 return len * 2
8340 case 'hex':
8341 return len >>> 1
8342 case 'base64':
8343 return base64ToBytes(string).length
8344 default:
8345 if (loweredCase) return utf8ToBytes(string).length // assume utf8
8346 encoding = ('' + encoding).toLowerCase()
8347 loweredCase = true
8348 }
8349 }
8b095871 8350}
9987f0c1 8351Buffer.byteLength = byteLength
8b095871 8352
9987f0c1
IC
8353function slowToString (encoding, start, end) {
8354 var loweredCase = false
8355
8356 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
8357 // property of a typed array.
8358
8359 // This behaves neither like String nor Uint8Array in that we set start/end
8360 // to their upper/lower bounds if the value passed is out of range.
8361 // undefined is handled specially as per ECMA-262 6th Edition,
8362 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
8363 if (start === undefined || start < 0) {
8364 start = 0
8365 }
8366 // Return early if start > this.length. Done here to prevent potential uint32
8367 // coercion fail below.
8368 if (start > this.length) {
8369 return ''
8370 }
8371
8372 if (end === undefined || end > this.length) {
8373 end = this.length
8374 }
8375
8376 if (end <= 0) {
8377 return ''
8378 }
8379
8380 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
8381 end >>>= 0
8382 start >>>= 0
8383
8384 if (end <= start) {
8385 return ''
8386 }
8387
8388 if (!encoding) encoding = 'utf8'
8389
8390 while (true) {
8391 switch (encoding) {
8392 case 'hex':
8393 return hexSlice(this, start, end)
8394
8395 case 'utf8':
8396 case 'utf-8':
8397 return utf8Slice(this, start, end)
8398
8399 case 'ascii':
8400 return asciiSlice(this, start, end)
8401
8402 case 'latin1':
8403 case 'binary':
8404 return latin1Slice(this, start, end)
8405
8406 case 'base64':
8407 return base64Slice(this, start, end)
8408
8409 case 'ucs2':
8410 case 'ucs-2':
8411 case 'utf16le':
8412 case 'utf-16le':
8413 return utf16leSlice(this, start, end)
8414
8415 default:
8416 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
8417 encoding = (encoding + '').toLowerCase()
8418 loweredCase = true
8b095871
IC
8419 }
8420 }
8b095871
IC
8421}
8422
9987f0c1
IC
8423// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
8424// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
8425// reliably in a browserify context because there could be multiple different
8426// copies of the 'buffer' package in use. This method works even for Buffer
8427// instances that were created from another copy of the `buffer` package.
8428// See: https://github.com/feross/buffer/issues/154
8429Buffer.prototype._isBuffer = true
8430
8431function swap (b, n, m) {
8432 var i = b[n]
8433 b[n] = b[m]
8434 b[m] = i
8435}
8436
8437Buffer.prototype.swap16 = function swap16 () {
8438 var len = this.length
8439 if (len % 2 !== 0) {
8440 throw new RangeError('Buffer size must be a multiple of 16-bits')
8b095871 8441 }
9987f0c1
IC
8442 for (var i = 0; i < len; i += 2) {
8443 swap(this, i, i + 1)
8b095871 8444 }
9987f0c1
IC
8445 return this
8446}
8447
8448Buffer.prototype.swap32 = function swap32 () {
8449 var len = this.length
8450 if (len % 4 !== 0) {
8451 throw new RangeError('Buffer size must be a multiple of 32-bits')
8b095871 8452 }
9987f0c1
IC
8453 for (var i = 0; i < len; i += 4) {
8454 swap(this, i, i + 3)
8455 swap(this, i + 1, i + 2)
8456 }
8457 return this
8458}
8459
8460Buffer.prototype.swap64 = function swap64 () {
8461 var len = this.length
8462 if (len % 8 !== 0) {
8463 throw new RangeError('Buffer size must be a multiple of 64-bits')
8464 }
8465 for (var i = 0; i < len; i += 8) {
8466 swap(this, i, i + 7)
8467 swap(this, i + 1, i + 6)
8468 swap(this, i + 2, i + 5)
8469 swap(this, i + 3, i + 4)
8470 }
8471 return this
8472}
8473
8474Buffer.prototype.toString = function toString () {
8475 var length = this.length
8476 if (length === 0) return ''
8477 if (arguments.length === 0) return utf8Slice(this, 0, length)
8478 return slowToString.apply(this, arguments)
8479}
8480
8481Buffer.prototype.equals = function equals (b) {
8482 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
8483 if (this === b) return true
8484 return Buffer.compare(this, b) === 0
8485}
8486
8487Buffer.prototype.inspect = function inspect () {
8488 var str = ''
8489 var max = exports.INSPECT_MAX_BYTES
8490 if (this.length > 0) {
8491 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
8492 if (this.length > max) str += ' ... '
8493 }
8494 return '<Buffer ' + str + '>'
8495}
8496
8497Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
8498 if (!Buffer.isBuffer(target)) {
8499 throw new TypeError('Argument must be a Buffer')
8500 }
8501
8502 if (start === undefined) {
8503 start = 0
8504 }
8505 if (end === undefined) {
8506 end = target ? target.length : 0
8507 }
8508 if (thisStart === undefined) {
8509 thisStart = 0
8510 }
8511 if (thisEnd === undefined) {
8512 thisEnd = this.length
8513 }
8514
8515 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
8516 throw new RangeError('out of range index')
8517 }
8518
8519 if (thisStart >= thisEnd && start >= end) {
8520 return 0
8521 }
8522 if (thisStart >= thisEnd) {
8523 return -1
8524 }
8525 if (start >= end) {
8526 return 1
8527 }
8528
8529 start >>>= 0
8530 end >>>= 0
8531 thisStart >>>= 0
8532 thisEnd >>>= 0
8533
8534 if (this === target) return 0
8535
8536 var x = thisEnd - thisStart
8537 var y = end - start
8538 var len = Math.min(x, y)
8539
8540 var thisCopy = this.slice(thisStart, thisEnd)
8541 var targetCopy = target.slice(start, end)
8542
8543 for (var i = 0; i < len; ++i) {
8544 if (thisCopy[i] !== targetCopy[i]) {
8545 x = thisCopy[i]
8546 y = targetCopy[i]
8547 break
8548 }
8549 }
8550
8551 if (x < y) return -1
8552 if (y < x) return 1
8553 return 0
8554}
8555
8556// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
8557// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
8558//
8559// Arguments:
8560// - buffer - a Buffer to search
8561// - val - a string, Buffer, or number
8562// - byteOffset - an index into `buffer`; will be clamped to an int32
8563// - encoding - an optional encoding, relevant is val is a string
8564// - dir - true for indexOf, false for lastIndexOf
8565function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
8566 // Empty buffer means no match
8567 if (buffer.length === 0) return -1
8568
8569 // Normalize byteOffset
8570 if (typeof byteOffset === 'string') {
8571 encoding = byteOffset
8572 byteOffset = 0
8573 } else if (byteOffset > 0x7fffffff) {
8574 byteOffset = 0x7fffffff
8575 } else if (byteOffset < -0x80000000) {
8576 byteOffset = -0x80000000
8577 }
8578 byteOffset = +byteOffset // Coerce to Number.
8579 if (numberIsNaN(byteOffset)) {
8580 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
8581 byteOffset = dir ? 0 : (buffer.length - 1)
8582 }
8583
8584 // Normalize byteOffset: negative offsets start from the end of the buffer
8585 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
8586 if (byteOffset >= buffer.length) {
8587 if (dir) return -1
8588 else byteOffset = buffer.length - 1
8589 } else if (byteOffset < 0) {
8590 if (dir) byteOffset = 0
8591 else return -1
8592 }
8593
8594 // Normalize val
8595 if (typeof val === 'string') {
8596 val = Buffer.from(val, encoding)
8597 }
8598
8599 // Finally, search either indexOf (if dir is true) or lastIndexOf
8600 if (Buffer.isBuffer(val)) {
8601 // Special case: looking for empty string/buffer always fails
8602 if (val.length === 0) {
8603 return -1
8604 }
8605 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
8606 } else if (typeof val === 'number') {
8607 val = val & 0xFF // Search for a byte value [0-255]
8608 if (typeof Uint8Array.prototype.indexOf === 'function') {
8609 if (dir) {
8610 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
8611 } else {
8612 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
8613 }
8614 }
8615 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
8616 }
8617
8618 throw new TypeError('val must be string, number or Buffer')
8619}
8620
8621function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
8622 var indexSize = 1
8623 var arrLength = arr.length
8624 var valLength = val.length
8625
8626 if (encoding !== undefined) {
8627 encoding = String(encoding).toLowerCase()
8628 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
8629 encoding === 'utf16le' || encoding === 'utf-16le') {
8630 if (arr.length < 2 || val.length < 2) {
8631 return -1
8632 }
8633 indexSize = 2
8634 arrLength /= 2
8635 valLength /= 2
8636 byteOffset /= 2
8637 }
8638 }
8639
8640 function read (buf, i) {
8641 if (indexSize === 1) {
8642 return buf[i]
8643 } else {
8644 return buf.readUInt16BE(i * indexSize)
8645 }
8646 }
8647
8648 var i
8649 if (dir) {
8650 var foundIndex = -1
8651 for (i = byteOffset; i < arrLength; i++) {
8652 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
8653 if (foundIndex === -1) foundIndex = i
8654 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
8655 } else {
8656 if (foundIndex !== -1) i -= i - foundIndex
8657 foundIndex = -1
8658 }
8659 }
8660 } else {
8661 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
8662 for (i = byteOffset; i >= 0; i--) {
8663 var found = true
8664 for (var j = 0; j < valLength; j++) {
8665 if (read(arr, i + j) !== read(val, j)) {
8666 found = false
8667 break
8668 }
8669 }
8670 if (found) return i
8b095871
IC
8671 }
8672 }
8b095871 8673
9987f0c1 8674 return -1
8b095871
IC
8675}
8676
9987f0c1
IC
8677Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
8678 return this.indexOf(val, byteOffset, encoding) !== -1
8b095871
IC
8679}
8680
9987f0c1
IC
8681Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
8682 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
8b095871
IC
8683}
8684
9987f0c1
IC
8685Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
8686 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
8b095871
IC
8687}
8688
9987f0c1
IC
8689function hexWrite (buf, string, offset, length) {
8690 offset = Number(offset) || 0
8691 var remaining = buf.length - offset
8692 if (!length) {
8693 length = remaining
8694 } else {
8695 length = Number(length)
8696 if (length > remaining) {
8697 length = remaining
8698 }
8699 }
8b095871 8700
9987f0c1
IC
8701 // must be an even number of digits
8702 var strLen = string.length
8703 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
8b095871 8704
9987f0c1
IC
8705 if (length > strLen / 2) {
8706 length = strLen / 2
8707 }
8708 for (var i = 0; i < length; ++i) {
8709 var parsed = parseInt(string.substr(i * 2, 2), 16)
8710 if (numberIsNaN(parsed)) return i
8711 buf[offset + i] = parsed
8712 }
8713 return i
8b095871
IC
8714}
8715
9987f0c1
IC
8716function utf8Write (buf, string, offset, length) {
8717 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
8718}
8b095871 8719
9987f0c1
IC
8720function asciiWrite (buf, string, offset, length) {
8721 return blitBuffer(asciiToBytes(string), buf, offset, length)
8b095871
IC
8722}
8723
9987f0c1
IC
8724function latin1Write (buf, string, offset, length) {
8725 return asciiWrite(buf, string, offset, length)
8b095871
IC
8726}
8727
9987f0c1
IC
8728function base64Write (buf, string, offset, length) {
8729 return blitBuffer(base64ToBytes(string), buf, offset, length)
8b095871
IC
8730}
8731
9987f0c1
IC
8732function ucs2Write (buf, string, offset, length) {
8733 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
8b095871
IC
8734}
8735
9987f0c1
IC
8736Buffer.prototype.write = function write (string, offset, length, encoding) {
8737 // Buffer#write(string)
8738 if (offset === undefined) {
8739 encoding = 'utf8'
8740 length = this.length
8741 offset = 0
8742 // Buffer#write(string, encoding)
8743 } else if (length === undefined && typeof offset === 'string') {
8744 encoding = offset
8745 length = this.length
8746 offset = 0
8747 // Buffer#write(string, offset[, length][, encoding])
8748 } else if (isFinite(offset)) {
8749 offset = offset >>> 0
8750 if (isFinite(length)) {
8751 length = length >>> 0
8752 if (encoding === undefined) encoding = 'utf8'
8753 } else {
8754 encoding = length
8755 length = undefined
8b095871 8756 }
9987f0c1
IC
8757 } else {
8758 throw new Error(
8759 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
8760 )
8b095871 8761 }
8b095871 8762
9987f0c1
IC
8763 var remaining = this.length - offset
8764 if (length === undefined || length > remaining) length = remaining
8b095871 8765
9987f0c1
IC
8766 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
8767 throw new RangeError('Attempt to write outside buffer bounds')
8768 }
8b095871 8769
9987f0c1 8770 if (!encoding) encoding = 'utf8'
8b095871 8771
9987f0c1
IC
8772 var loweredCase = false
8773 for (;;) {
8774 switch (encoding) {
8775 case 'hex':
8776 return hexWrite(this, string, offset, length)
8b095871 8777
9987f0c1
IC
8778 case 'utf8':
8779 case 'utf-8':
8780 return utf8Write(this, string, offset, length)
8b095871 8781
9987f0c1
IC
8782 case 'ascii':
8783 return asciiWrite(this, string, offset, length)
8b095871 8784
9987f0c1
IC
8785 case 'latin1':
8786 case 'binary':
8787 return latin1Write(this, string, offset, length)
8b095871 8788
9987f0c1
IC
8789 case 'base64':
8790 // Warning: maxLength not taken into account in base64Write
8791 return base64Write(this, string, offset, length)
8b095871 8792
9987f0c1
IC
8793 case 'ucs2':
8794 case 'ucs-2':
8795 case 'utf16le':
8796 case 'utf-16le':
8797 return ucs2Write(this, string, offset, length)
8b095871 8798
9987f0c1
IC
8799 default:
8800 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
8801 encoding = ('' + encoding).toLowerCase()
8802 loweredCase = true
8803 }
8804 }
8b095871
IC
8805}
8806
9987f0c1
IC
8807Buffer.prototype.toJSON = function toJSON () {
8808 return {
8809 type: 'Buffer',
8810 data: Array.prototype.slice.call(this._arr || this, 0)
8811 }
8b095871
IC
8812}
8813
9987f0c1
IC
8814function base64Slice (buf, start, end) {
8815 if (start === 0 && end === buf.length) {
8816 return base64.fromByteArray(buf)
8817 } else {
8818 return base64.fromByteArray(buf.slice(start, end))
8819 }
8b095871
IC
8820}
8821
9987f0c1
IC
8822function utf8Slice (buf, start, end) {
8823 end = Math.min(buf.length, end)
8824 var res = []
8b095871 8825
9987f0c1
IC
8826 var i = start
8827 while (i < end) {
8828 var firstByte = buf[i]
8829 var codePoint = null
8830 var bytesPerSequence = (firstByte > 0xEF) ? 4
8831 : (firstByte > 0xDF) ? 3
8832 : (firstByte > 0xBF) ? 2
8833 : 1
8b095871 8834
9987f0c1
IC
8835 if (i + bytesPerSequence <= end) {
8836 var secondByte, thirdByte, fourthByte, tempCodePoint
8b095871 8837
9987f0c1
IC
8838 switch (bytesPerSequence) {
8839 case 1:
8840 if (firstByte < 0x80) {
8841 codePoint = firstByte
8842 }
8843 break
8844 case 2:
8845 secondByte = buf[i + 1]
8846 if ((secondByte & 0xC0) === 0x80) {
8847 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
8848 if (tempCodePoint > 0x7F) {
8849 codePoint = tempCodePoint
8850 }
8851 }
8852 break
8853 case 3:
8854 secondByte = buf[i + 1]
8855 thirdByte = buf[i + 2]
8856 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
8857 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
8858 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
8859 codePoint = tempCodePoint
8860 }
8861 }
8862 break
8863 case 4:
8864 secondByte = buf[i + 1]
8865 thirdByte = buf[i + 2]
8866 fourthByte = buf[i + 3]
8867 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
8868 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
8869 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
8870 codePoint = tempCodePoint
8871 }
8872 }
8873 }
8b095871 8874 }
9987f0c1
IC
8875
8876 if (codePoint === null) {
8877 // we did not generate a valid codePoint so insert a
8878 // replacement char (U+FFFD) and advance only 1 byte
8879 codePoint = 0xFFFD
8880 bytesPerSequence = 1
8881 } else if (codePoint > 0xFFFF) {
8882 // encode to utf16 (surrogate pair dance)
8883 codePoint -= 0x10000
8884 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
8885 codePoint = 0xDC00 | codePoint & 0x3FF
8b095871 8886 }
9987f0c1
IC
8887
8888 res.push(codePoint)
8889 i += bytesPerSequence
8b095871 8890 }
9987f0c1
IC
8891
8892 return decodeCodePointsArray(res)
8893}
8894
8895// Based on http://stackoverflow.com/a/22747272/680742, the browser with
8896// the lowest limit is Chrome, with 0x10000 args.
8897// We go 1 magnitude less, for safety
8898var MAX_ARGUMENTS_LENGTH = 0x1000
8899
8900function decodeCodePointsArray (codePoints) {
8901 var len = codePoints.length
8902 if (len <= MAX_ARGUMENTS_LENGTH) {
8903 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
8b095871 8904 }
9987f0c1
IC
8905
8906 // Decode in chunks to avoid "call stack size exceeded".
8907 var res = ''
8908 var i = 0
8909 while (i < len) {
8910 res += String.fromCharCode.apply(
8911 String,
8912 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
8913 )
8914 }
8915 return res
8b095871
IC
8916}
8917
9987f0c1
IC
8918function asciiSlice (buf, start, end) {
8919 var ret = ''
8920 end = Math.min(buf.length, end)
8921
8922 for (var i = start; i < end; ++i) {
8923 ret += String.fromCharCode(buf[i] & 0x7F)
8b095871 8924 }
9987f0c1 8925 return ret
8b095871
IC
8926}
8927
9987f0c1
IC
8928function latin1Slice (buf, start, end) {
8929 var ret = ''
8930 end = Math.min(buf.length, end)
8931
8932 for (var i = start; i < end; ++i) {
8933 ret += String.fromCharCode(buf[i])
8b095871 8934 }
9987f0c1 8935 return ret
8b095871
IC
8936}
8937
9987f0c1
IC
8938function hexSlice (buf, start, end) {
8939 var len = buf.length
8b095871 8940
9987f0c1
IC
8941 if (!start || start < 0) start = 0
8942 if (!end || end < 0 || end > len) end = len
8b095871 8943
9987f0c1
IC
8944 var out = ''
8945 for (var i = start; i < end; ++i) {
8946 out += toHex(buf[i])
8947 }
8948 return out
8b095871
IC
8949}
8950
9987f0c1
IC
8951function utf16leSlice (buf, start, end) {
8952 var bytes = buf.slice(start, end)
8953 var res = ''
8954 for (var i = 0; i < bytes.length; i += 2) {
8955 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
8b095871 8956 }
9987f0c1 8957 return res
8b095871
IC
8958}
8959
9987f0c1
IC
8960Buffer.prototype.slice = function slice (start, end) {
8961 var len = this.length
8962 start = ~~start
8963 end = end === undefined ? len : ~~end
8b095871 8964
9987f0c1
IC
8965 if (start < 0) {
8966 start += len
8967 if (start < 0) start = 0
8968 } else if (start > len) {
8969 start = len
8970 }
8b095871 8971
9987f0c1
IC
8972 if (end < 0) {
8973 end += len
8974 if (end < 0) end = 0
8975 } else if (end > len) {
8976 end = len
8977 }
8978
8979 if (end < start) end = start
8980
8981 var newBuf = this.subarray(start, end)
8982 // Return an augmented `Uint8Array` instance
8983 newBuf.__proto__ = Buffer.prototype
8984 return newBuf
8b095871
IC
8985}
8986
9987f0c1
IC
8987/*
8988 * Need to make sure that buffer isn't trying to write out of bounds.
8989 */
8990function checkOffset (offset, ext, length) {
8991 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
8992 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
8b095871
IC
8993}
8994
9987f0c1
IC
8995Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
8996 offset = offset >>> 0
8997 byteLength = byteLength >>> 0
8998 if (!noAssert) checkOffset(offset, byteLength, this.length)
8999
9000 var val = this[offset]
9001 var mul = 1
9002 var i = 0
9003 while (++i < byteLength && (mul *= 0x100)) {
9004 val += this[offset + i] * mul
9005 }
9006
9007 return val
8b095871
IC
9008}
9009
9987f0c1
IC
9010Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
9011 offset = offset >>> 0
9012 byteLength = byteLength >>> 0
9013 if (!noAssert) {
9014 checkOffset(offset, byteLength, this.length)
9015 }
9016
9017 var val = this[offset + --byteLength]
9018 var mul = 1
9019 while (byteLength > 0 && (mul *= 0x100)) {
9020 val += this[offset + --byteLength] * mul
9021 }
9022
9023 return val
8b095871
IC
9024}
9025
9987f0c1
IC
9026Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
9027 offset = offset >>> 0
9028 if (!noAssert) checkOffset(offset, 1, this.length)
9029 return this[offset]
8b095871
IC
9030}
9031
9987f0c1
IC
9032Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
9033 offset = offset >>> 0
9034 if (!noAssert) checkOffset(offset, 2, this.length)
9035 return this[offset] | (this[offset + 1] << 8)
8b095871
IC
9036}
9037
9987f0c1
IC
9038Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
9039 offset = offset >>> 0
9040 if (!noAssert) checkOffset(offset, 2, this.length)
9041 return (this[offset] << 8) | this[offset + 1]
8b095871
IC
9042}
9043
9987f0c1
IC
9044Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
9045 offset = offset >>> 0
9046 if (!noAssert) checkOffset(offset, 4, this.length)
9047
9048 return ((this[offset]) |
9049 (this[offset + 1] << 8) |
9050 (this[offset + 2] << 16)) +
9051 (this[offset + 3] * 0x1000000)
8b095871
IC
9052}
9053
9987f0c1
IC
9054Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
9055 offset = offset >>> 0
9056 if (!noAssert) checkOffset(offset, 4, this.length)
9057
9058 return (this[offset] * 0x1000000) +
9059 ((this[offset + 1] << 16) |
9060 (this[offset + 2] << 8) |
9061 this[offset + 3])
8b095871
IC
9062}
9063
9987f0c1
IC
9064Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
9065 offset = offset >>> 0
9066 byteLength = byteLength >>> 0
9067 if (!noAssert) checkOffset(offset, byteLength, this.length)
9068
9069 var val = this[offset]
9070 var mul = 1
9071 var i = 0
9072 while (++i < byteLength && (mul *= 0x100)) {
9073 val += this[offset + i] * mul
8b095871 9074 }
9987f0c1
IC
9075 mul *= 0x80
9076
9077 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
9078
9079 return val
9080}
9081
9082Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
9083 offset = offset >>> 0
9084 byteLength = byteLength >>> 0
9085 if (!noAssert) checkOffset(offset, byteLength, this.length)
9086
9087 var i = byteLength
9088 var mul = 1
9089 var val = this[offset + --i]
9090 while (i > 0 && (mul *= 0x100)) {
9091 val += this[offset + --i] * mul
8b095871 9092 }
9987f0c1
IC
9093 mul *= 0x80
9094
9095 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
9096
9097 return val
8b095871
IC
9098}
9099
9987f0c1
IC
9100Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
9101 offset = offset >>> 0
9102 if (!noAssert) checkOffset(offset, 1, this.length)
9103 if (!(this[offset] & 0x80)) return (this[offset])
9104 return ((0xff - this[offset] + 1) * -1)
8b095871
IC
9105}
9106
9987f0c1
IC
9107Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
9108 offset = offset >>> 0
9109 if (!noAssert) checkOffset(offset, 2, this.length)
9110 var val = this[offset] | (this[offset + 1] << 8)
9111 return (val & 0x8000) ? val | 0xFFFF0000 : val
8b095871
IC
9112}
9113
9987f0c1
IC
9114Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
9115 offset = offset >>> 0
9116 if (!noAssert) checkOffset(offset, 2, this.length)
9117 var val = this[offset + 1] | (this[offset] << 8)
9118 return (val & 0x8000) ? val | 0xFFFF0000 : val
8b095871
IC
9119}
9120
9987f0c1
IC
9121Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
9122 offset = offset >>> 0
9123 if (!noAssert) checkOffset(offset, 4, this.length)
9124
9125 return (this[offset]) |
9126 (this[offset + 1] << 8) |
9127 (this[offset + 2] << 16) |
9128 (this[offset + 3] << 24)
8b095871
IC
9129}
9130
9987f0c1
IC
9131Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
9132 offset = offset >>> 0
9133 if (!noAssert) checkOffset(offset, 4, this.length)
9134
9135 return (this[offset] << 24) |
9136 (this[offset + 1] << 16) |
9137 (this[offset + 2] << 8) |
9138 (this[offset + 3])
8b095871
IC
9139}
9140
9987f0c1
IC
9141Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
9142 offset = offset >>> 0
9143 if (!noAssert) checkOffset(offset, 4, this.length)
9144 return ieee754.read(this, offset, true, 23, 4)
8b095871
IC
9145}
9146
9987f0c1
IC
9147Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
9148 offset = offset >>> 0
9149 if (!noAssert) checkOffset(offset, 4, this.length)
9150 return ieee754.read(this, offset, false, 23, 4)
8b095871
IC
9151}
9152
9987f0c1
IC
9153Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
9154 offset = offset >>> 0
9155 if (!noAssert) checkOffset(offset, 8, this.length)
9156 return ieee754.read(this, offset, true, 52, 8)
8b095871
IC
9157}
9158
9987f0c1
IC
9159Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
9160 offset = offset >>> 0
9161 if (!noAssert) checkOffset(offset, 8, this.length)
9162 return ieee754.read(this, offset, false, 52, 8)
9163}
8b095871 9164
9987f0c1
IC
9165function checkInt (buf, value, offset, ext, max, min) {
9166 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
9167 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
9168 if (offset + ext > buf.length) throw new RangeError('Index out of range')
9169}
9170
9171Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
9172 value = +value
9173 offset = offset >>> 0
9174 byteLength = byteLength >>> 0
9175 if (!noAssert) {
9176 var maxBytes = Math.pow(2, 8 * byteLength) - 1
9177 checkInt(this, value, offset, byteLength, maxBytes, 0)
8b095871 9178 }
9987f0c1
IC
9179
9180 var mul = 1
9181 var i = 0
9182 this[offset] = value & 0xFF
9183 while (++i < byteLength && (mul *= 0x100)) {
9184 this[offset + i] = (value / mul) & 0xFF
8b095871 9185 }
8b095871 9186
9987f0c1 9187 return offset + byteLength
8b095871
IC
9188}
9189
9987f0c1
IC
9190Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
9191 value = +value
9192 offset = offset >>> 0
9193 byteLength = byteLength >>> 0
9194 if (!noAssert) {
9195 var maxBytes = Math.pow(2, 8 * byteLength) - 1
9196 checkInt(this, value, offset, byteLength, maxBytes, 0)
9197 }
8b095871 9198
9987f0c1
IC
9199 var i = byteLength - 1
9200 var mul = 1
9201 this[offset + i] = value & 0xFF
9202 while (--i >= 0 && (mul *= 0x100)) {
9203 this[offset + i] = (value / mul) & 0xFF
9204 }
9205
9206 return offset + byteLength
8b095871
IC
9207}
9208
9987f0c1
IC
9209Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
9210 value = +value
9211 offset = offset >>> 0
9212 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
9213 this[offset] = (value & 0xff)
9214 return offset + 1
8b095871
IC
9215}
9216
9987f0c1
IC
9217Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
9218 value = +value
9219 offset = offset >>> 0
9220 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
9221 this[offset] = (value & 0xff)
9222 this[offset + 1] = (value >>> 8)
9223 return offset + 2
8b095871
IC
9224}
9225
9987f0c1
IC
9226Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
9227 value = +value
9228 offset = offset >>> 0
9229 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
9230 this[offset] = (value >>> 8)
9231 this[offset + 1] = (value & 0xff)
9232 return offset + 2
8b095871
IC
9233}
9234
9987f0c1
IC
9235Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
9236 value = +value
9237 offset = offset >>> 0
9238 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
9239 this[offset + 3] = (value >>> 24)
9240 this[offset + 2] = (value >>> 16)
9241 this[offset + 1] = (value >>> 8)
9242 this[offset] = (value & 0xff)
9243 return offset + 4
8b095871
IC
9244}
9245
9987f0c1
IC
9246Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
9247 value = +value
9248 offset = offset >>> 0
9249 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
9250 this[offset] = (value >>> 24)
9251 this[offset + 1] = (value >>> 16)
9252 this[offset + 2] = (value >>> 8)
9253 this[offset + 3] = (value & 0xff)
9254 return offset + 4
8b095871
IC
9255}
9256
9987f0c1
IC
9257Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
9258 value = +value
9259 offset = offset >>> 0
9260 if (!noAssert) {
9261 var limit = Math.pow(2, (8 * byteLength) - 1)
9262
9263 checkInt(this, value, offset, byteLength, limit - 1, -limit)
9264 }
9265
9266 var i = 0
9267 var mul = 1
9268 var sub = 0
9269 this[offset] = value & 0xFF
9270 while (++i < byteLength && (mul *= 0x100)) {
9271 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
9272 sub = 1
9273 }
9274 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
8b095871 9275 }
9987f0c1
IC
9276
9277 return offset + byteLength
8b095871
IC
9278}
9279
9987f0c1
IC
9280Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
9281 value = +value
9282 offset = offset >>> 0
9283 if (!noAssert) {
9284 var limit = Math.pow(2, (8 * byteLength) - 1)
8b095871 9285
9987f0c1
IC
9286 checkInt(this, value, offset, byteLength, limit - 1, -limit)
9287 }
9288
9289 var i = byteLength - 1
9290 var mul = 1
9291 var sub = 0
9292 this[offset + i] = value & 0xFF
9293 while (--i >= 0 && (mul *= 0x100)) {
9294 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
9295 sub = 1
9296 }
9297 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
9298 }
9299
9300 return offset + byteLength
8b095871
IC
9301}
9302
9987f0c1
IC
9303Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
9304 value = +value
9305 offset = offset >>> 0
9306 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
9307 if (value < 0) value = 0xff + value + 1
9308 this[offset] = (value & 0xff)
9309 return offset + 1
8b095871
IC
9310}
9311
9987f0c1
IC
9312Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
9313 value = +value
9314 offset = offset >>> 0
9315 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
9316 this[offset] = (value & 0xff)
9317 this[offset + 1] = (value >>> 8)
9318 return offset + 2
8b095871
IC
9319}
9320
9987f0c1
IC
9321Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
9322 value = +value
9323 offset = offset >>> 0
9324 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
9325 this[offset] = (value >>> 8)
9326 this[offset + 1] = (value & 0xff)
9327 return offset + 2
8b095871
IC
9328}
9329
9987f0c1
IC
9330Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
9331 value = +value
9332 offset = offset >>> 0
9333 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
9334 this[offset] = (value & 0xff)
9335 this[offset + 1] = (value >>> 8)
9336 this[offset + 2] = (value >>> 16)
9337 this[offset + 3] = (value >>> 24)
9338 return offset + 4
8b095871
IC
9339}
9340
9987f0c1
IC
9341Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
9342 value = +value
9343 offset = offset >>> 0
9344 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
9345 if (value < 0) value = 0xffffffff + value + 1
9346 this[offset] = (value >>> 24)
9347 this[offset + 1] = (value >>> 16)
9348 this[offset + 2] = (value >>> 8)
9349 this[offset + 3] = (value & 0xff)
9350 return offset + 4
8b095871
IC
9351}
9352
9987f0c1
IC
9353function checkIEEE754 (buf, value, offset, ext, max, min) {
9354 if (offset + ext > buf.length) throw new RangeError('Index out of range')
9355 if (offset < 0) throw new RangeError('Index out of range')
8b095871
IC
9356}
9357
9987f0c1
IC
9358function writeFloat (buf, value, offset, littleEndian, noAssert) {
9359 value = +value
9360 offset = offset >>> 0
9361 if (!noAssert) {
9362 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
8b095871 9363 }
9987f0c1
IC
9364 ieee754.write(buf, value, offset, littleEndian, 23, 4)
9365 return offset + 4
8b095871
IC
9366}
9367
9987f0c1
IC
9368Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
9369 return writeFloat(this, value, offset, true, noAssert)
8b095871
IC
9370}
9371
9987f0c1
IC
9372Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
9373 return writeFloat(this, value, offset, false, noAssert)
9374}
9375
9376function writeDouble (buf, value, offset, littleEndian, noAssert) {
9377 value = +value
9378 offset = offset >>> 0
9379 if (!noAssert) {
9380 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
8b095871 9381 }
9987f0c1
IC
9382 ieee754.write(buf, value, offset, littleEndian, 52, 8)
9383 return offset + 8
8b095871
IC
9384}
9385
9987f0c1
IC
9386Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
9387 return writeDouble(this, value, offset, true, noAssert)
8b095871
IC
9388}
9389
9987f0c1
IC
9390Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
9391 return writeDouble(this, value, offset, false, noAssert)
8b095871
IC
9392}
9393
9987f0c1
IC
9394// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
9395Buffer.prototype.copy = function copy (target, targetStart, start, end) {
9396 if (!start) start = 0
9397 if (!end && end !== 0) end = this.length
9398 if (targetStart >= target.length) targetStart = target.length
9399 if (!targetStart) targetStart = 0
9400 if (end > 0 && end < start) end = start
8b095871 9401
9987f0c1
IC
9402 // Copy 0 bytes; we're done
9403 if (end === start) return 0
9404 if (target.length === 0 || this.length === 0) return 0
8b095871 9405
9987f0c1
IC
9406 // Fatal error conditions
9407 if (targetStart < 0) {
9408 throw new RangeError('targetStart out of bounds')
8b095871 9409 }
9987f0c1
IC
9410 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
9411 if (end < 0) throw new RangeError('sourceEnd out of bounds')
8b095871 9412
9987f0c1
IC
9413 // Are we oob?
9414 if (end > this.length) end = this.length
9415 if (target.length - targetStart < end - start) {
9416 end = target.length - targetStart + start
9417 }
8b095871 9418
9987f0c1
IC
9419 var len = end - start
9420 var i
9421
9422 if (this === target && start < targetStart && targetStart < end) {
9423 // descending copy from end
9424 for (i = len - 1; i >= 0; --i) {
9425 target[i + targetStart] = this[i + start]
8b095871 9426 }
9987f0c1
IC
9427 } else if (len < 1000) {
9428 // ascending copy from start
9429 for (i = 0; i < len; ++i) {
9430 target[i + targetStart] = this[i + start]
8b095871 9431 }
9987f0c1
IC
9432 } else {
9433 Uint8Array.prototype.set.call(
9434 target,
9435 this.subarray(start, start + len),
9436 targetStart
9437 )
9438 }
8b095871 9439
9987f0c1
IC
9440 return len
9441}
9442
9443// Usage:
9444// buffer.fill(number[, offset[, end]])
9445// buffer.fill(buffer[, offset[, end]])
9446// buffer.fill(string[, offset[, end]][, encoding])
9447Buffer.prototype.fill = function fill (val, start, end, encoding) {
9448 // Handle string cases:
9449 if (typeof val === 'string') {
9450 if (typeof start === 'string') {
9451 encoding = start
9452 start = 0
9453 end = this.length
9454 } else if (typeof end === 'string') {
9455 encoding = end
9456 end = this.length
9457 }
9458 if (val.length === 1) {
9459 var code = val.charCodeAt(0)
9460 if (code < 256) {
9461 val = code
8b095871
IC
9462 }
9463 }
9987f0c1
IC
9464 if (encoding !== undefined && typeof encoding !== 'string') {
9465 throw new TypeError('encoding must be a string')
9466 }
9467 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
9468 throw new TypeError('Unknown encoding: ' + encoding)
9469 }
9470 } else if (typeof val === 'number') {
9471 val = val & 255
8b095871 9472 }
8b095871 9473
9987f0c1
IC
9474 // Invalid ranges are not set to a default, so can range check early.
9475 if (start < 0 || this.length < start || this.length < end) {
9476 throw new RangeError('Out of range index')
8b095871 9477 }
9987f0c1
IC
9478
9479 if (end <= start) {
9480 return this
8b095871 9481 }
8b095871 9482
9987f0c1
IC
9483 start = start >>> 0
9484 end = end === undefined ? this.length : end >>> 0
8b095871 9485
9987f0c1
IC
9486 if (!val) val = 0
9487
9488 var i
9489 if (typeof val === 'number') {
9490 for (i = start; i < end; ++i) {
9491 this[i] = val
8b095871 9492 }
9987f0c1
IC
9493 } else {
9494 var bytes = Buffer.isBuffer(val)
9495 ? val
9496 : new Buffer(val, encoding)
9497 var len = bytes.length
9498 for (i = 0; i < end - start; ++i) {
9499 this[i + start] = bytes[i % len]
8b095871
IC
9500 }
9501 }
9987f0c1
IC
9502
9503 return this
8b095871
IC
9504}
9505
9987f0c1
IC
9506// HELPER FUNCTIONS
9507// ================
8b095871 9508
9987f0c1 9509var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
8b095871 9510
9987f0c1
IC
9511function base64clean (str) {
9512 // Node strips out invalid characters like \n and \t from the string, base64-js does not
9513 str = str.trim().replace(INVALID_BASE64_RE, '')
9514 // Node converts strings with length < 2 to ''
9515 if (str.length < 2) return ''
9516 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
9517 while (str.length % 4 !== 0) {
9518 str = str + '='
8b095871 9519 }
9987f0c1
IC
9520 return str
9521}
9522
9523function toHex (n) {
9524 if (n < 16) return '0' + n.toString(16)
9525 return n.toString(16)
9526}
9527
9528function utf8ToBytes (string, units) {
9529 units = units || Infinity
9530 var codePoint
9531 var length = string.length
9532 var leadSurrogate = null
9533 var bytes = []
9534
9535 for (var i = 0; i < length; ++i) {
9536 codePoint = string.charCodeAt(i)
9537
9538 // is surrogate component
9539 if (codePoint > 0xD7FF && codePoint < 0xE000) {
9540 // last char was a lead
9541 if (!leadSurrogate) {
9542 // no lead yet
9543 if (codePoint > 0xDBFF) {
9544 // unexpected trail
9545 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9546 continue
9547 } else if (i + 1 === length) {
9548 // unpaired lead
9549 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9550 continue
9551 }
9552
9553 // valid lead
9554 leadSurrogate = codePoint
9555
9556 continue
9557 }
9558
9559 // 2 leads in a row
9560 if (codePoint < 0xDC00) {
9561 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9562 leadSurrogate = codePoint
9563 continue
9564 }
9565
9566 // valid surrogate pair
9567 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
9568 } else if (leadSurrogate) {
9569 // valid bmp char, but last char was a lead
9570 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9571 }
9572
9573 leadSurrogate = null
9574
9575 // encode utf8
9576 if (codePoint < 0x80) {
9577 if ((units -= 1) < 0) break
9578 bytes.push(codePoint)
9579 } else if (codePoint < 0x800) {
9580 if ((units -= 2) < 0) break
9581 bytes.push(
9582 codePoint >> 0x6 | 0xC0,
9583 codePoint & 0x3F | 0x80
9584 )
9585 } else if (codePoint < 0x10000) {
9586 if ((units -= 3) < 0) break
9587 bytes.push(
9588 codePoint >> 0xC | 0xE0,
9589 codePoint >> 0x6 & 0x3F | 0x80,
9590 codePoint & 0x3F | 0x80
9591 )
9592 } else if (codePoint < 0x110000) {
9593 if ((units -= 4) < 0) break
9594 bytes.push(
9595 codePoint >> 0x12 | 0xF0,
9596 codePoint >> 0xC & 0x3F | 0x80,
9597 codePoint >> 0x6 & 0x3F | 0x80,
9598 codePoint & 0x3F | 0x80
9599 )
9600 } else {
9601 throw new Error('Invalid code point')
9602 }
8b095871 9603 }
9987f0c1
IC
9604
9605 return bytes
8b095871
IC
9606}
9607
9987f0c1
IC
9608function asciiToBytes (str) {
9609 var byteArray = []
9610 for (var i = 0; i < str.length; ++i) {
9611 // Node's code seems to be doing this and not & 0x7F..
9612 byteArray.push(str.charCodeAt(i) & 0xFF)
8b095871 9613 }
9987f0c1 9614 return byteArray
8b095871
IC
9615}
9616
9987f0c1
IC
9617function utf16leToBytes (str, units) {
9618 var c, hi, lo
9619 var byteArray = []
9620 for (var i = 0; i < str.length; ++i) {
9621 if ((units -= 2) < 0) break
8b095871 9622
9987f0c1
IC
9623 c = str.charCodeAt(i)
9624 hi = c >> 8
9625 lo = c % 256
9626 byteArray.push(lo)
9627 byteArray.push(hi)
9628 }
8b095871 9629
9987f0c1
IC
9630 return byteArray
9631}
8b095871 9632
9987f0c1
IC
9633function base64ToBytes (str) {
9634 return base64.toByteArray(base64clean(str))
9635}
8b095871 9636
9987f0c1
IC
9637function blitBuffer (src, dst, offset, length) {
9638 for (var i = 0; i < length; ++i) {
9639 if ((i + offset >= dst.length) || (i >= src.length)) break
9640 dst[i + offset] = src[i]
9641 }
9642 return i
9643}
9644
9645// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
9646function isArrayBufferView (obj) {
9647 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
9648}
9649
9650function numberIsNaN (obj) {
9651 return obj !== obj // eslint-disable-line no-self-compare
9652}
8b095871 9653
9987f0c1 9654},{"base64-js":2,"ieee754":7}],5:[function(require,module,exports){
8b095871 9655(function (Buffer){
9987f0c1
IC
9656// Copyright Joyent, Inc. and other Node contributors.
9657//
9658// Permission is hereby granted, free of charge, to any person obtaining a
9659// copy of this software and associated documentation files (the
9660// "Software"), to deal in the Software without restriction, including
9661// without limitation the rights to use, copy, modify, merge, publish,
9662// distribute, sublicense, and/or sell copies of the Software, and to permit
9663// persons to whom the Software is furnished to do so, subject to the
9664// following conditions:
9665//
9666// The above copyright notice and this permission notice shall be included
9667// in all copies or substantial portions of the Software.
9668//
9669// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9670// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9671// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9672// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9673// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9674// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9675// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 9676
9987f0c1
IC
9677// NOTE: These type checking functions intentionally don't use `instanceof`
9678// because it is fragile and can be easily faked with `Object.create()`.
8b095871 9679
9987f0c1
IC
9680function isArray(arg) {
9681 if (Array.isArray) {
9682 return Array.isArray(arg);
9683 }
9684 return objectToString(arg) === '[object Array]';
8b095871 9685}
9987f0c1 9686exports.isArray = isArray;
8b095871 9687
9987f0c1
IC
9688function isBoolean(arg) {
9689 return typeof arg === 'boolean';
8b095871 9690}
9987f0c1 9691exports.isBoolean = isBoolean;
8b095871 9692
9987f0c1
IC
9693function isNull(arg) {
9694 return arg === null;
8b095871 9695}
9987f0c1 9696exports.isNull = isNull;
8b095871 9697
9987f0c1
IC
9698function isNullOrUndefined(arg) {
9699 return arg == null;
9700}
9701exports.isNullOrUndefined = isNullOrUndefined;
8b095871 9702
9987f0c1
IC
9703function isNumber(arg) {
9704 return typeof arg === 'number';
9705}
9706exports.isNumber = isNumber;
8b095871 9707
9987f0c1
IC
9708function isString(arg) {
9709 return typeof arg === 'string';
9710}
9711exports.isString = isString;
8b095871 9712
9987f0c1
IC
9713function isSymbol(arg) {
9714 return typeof arg === 'symbol';
8b095871 9715}
9987f0c1 9716exports.isSymbol = isSymbol;
8b095871 9717
9987f0c1
IC
9718function isUndefined(arg) {
9719 return arg === void 0;
9720}
9721exports.isUndefined = isUndefined;
8b095871 9722
9987f0c1
IC
9723function isRegExp(re) {
9724 return objectToString(re) === '[object RegExp]';
8b095871 9725}
9987f0c1 9726exports.isRegExp = isRegExp;
8b095871 9727
9987f0c1
IC
9728function isObject(arg) {
9729 return typeof arg === 'object' && arg !== null;
9730}
9731exports.isObject = isObject;
8b095871 9732
9987f0c1
IC
9733function isDate(d) {
9734 return objectToString(d) === '[object Date]';
9735}
9736exports.isDate = isDate;
8b095871 9737
9987f0c1
IC
9738function isError(e) {
9739 return (objectToString(e) === '[object Error]' || e instanceof Error);
8b095871 9740}
9987f0c1 9741exports.isError = isError;
8b095871 9742
9987f0c1
IC
9743function isFunction(arg) {
9744 return typeof arg === 'function';
8b095871 9745}
9987f0c1 9746exports.isFunction = isFunction;
8b095871 9747
9987f0c1
IC
9748function isPrimitive(arg) {
9749 return arg === null ||
9750 typeof arg === 'boolean' ||
9751 typeof arg === 'number' ||
9752 typeof arg === 'string' ||
9753 typeof arg === 'symbol' || // ES6 symbol
9754 typeof arg === 'undefined';
9755}
9756exports.isPrimitive = isPrimitive;
8b095871 9757
9987f0c1 9758exports.isBuffer = Buffer.isBuffer;
8b095871 9759
9987f0c1
IC
9760function objectToString(o) {
9761 return Object.prototype.toString.call(o);
8b095871
IC
9762}
9763
9987f0c1
IC
9764}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
9765},{"../../is-buffer/index.js":9}],6:[function(require,module,exports){
9766// Copyright Joyent, Inc. and other Node contributors.
8b095871 9767//
9987f0c1
IC
9768// Permission is hereby granted, free of charge, to any person obtaining a
9769// copy of this software and associated documentation files (the
9770// "Software"), to deal in the Software without restriction, including
9771// without limitation the rights to use, copy, modify, merge, publish,
9772// distribute, sublicense, and/or sell copies of the Software, and to permit
9773// persons to whom the Software is furnished to do so, subject to the
9774// following conditions:
8b095871 9775//
9987f0c1
IC
9776// The above copyright notice and this permission notice shall be included
9777// in all copies or substantial portions of the Software.
8b095871 9778//
9987f0c1
IC
9779// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9780// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9781// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9782// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9783// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9784// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9785// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 9786
9987f0c1
IC
9787function EventEmitter() {
9788 this._events = this._events || {};
9789 this._maxListeners = this._maxListeners || undefined;
9790}
9791module.exports = EventEmitter;
8b095871 9792
9987f0c1
IC
9793// Backwards-compat with node 0.10.x
9794EventEmitter.EventEmitter = EventEmitter;
8b095871 9795
9987f0c1
IC
9796EventEmitter.prototype._events = undefined;
9797EventEmitter.prototype._maxListeners = undefined;
8b095871 9798
9987f0c1
IC
9799// By default EventEmitters will print a warning if more than 10 listeners are
9800// added to it. This is a useful default which helps finding memory leaks.
9801EventEmitter.defaultMaxListeners = 10;
8b095871 9802
9987f0c1
IC
9803// Obviously not all Emitters should be limited to 10. This function allows
9804// that to be increased. Set to zero for unlimited.
9805EventEmitter.prototype.setMaxListeners = function(n) {
9806 if (!isNumber(n) || n < 0 || isNaN(n))
9807 throw TypeError('n must be a positive number');
9808 this._maxListeners = n;
9809 return this;
9810};
8b095871 9811
9987f0c1
IC
9812EventEmitter.prototype.emit = function(type) {
9813 var er, handler, len, args, i, listeners;
9814
9815 if (!this._events)
9816 this._events = {};
9817
9818 // If there is no 'error' event listener then throw.
9819 if (type === 'error') {
9820 if (!this._events.error ||
9821 (isObject(this._events.error) && !this._events.error.length)) {
9822 er = arguments[1];
9823 if (er instanceof Error) {
9824 throw er; // Unhandled 'error' event
9825 } else {
9826 // At least give some kind of context to the user
9827 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
9828 err.context = er;
9829 throw err;
9830 }
9831 }
8b095871 9832 }
8b095871 9833
9987f0c1
IC
9834 handler = this._events[type];
9835
9836 if (isUndefined(handler))
9837 return false;
9838
9839 if (isFunction(handler)) {
9840 switch (arguments.length) {
9841 // fast cases
9842 case 1:
9843 handler.call(this);
9844 break;
9845 case 2:
9846 handler.call(this, arguments[1]);
9847 break;
9848 case 3:
9849 handler.call(this, arguments[1], arguments[2]);
9850 break;
9851 // slower
9852 default:
9853 args = Array.prototype.slice.call(arguments, 1);
9854 handler.apply(this, args);
9855 }
9856 } else if (isObject(handler)) {
9857 args = Array.prototype.slice.call(arguments, 1);
9858 listeners = handler.slice();
9859 len = listeners.length;
9860 for (i = 0; i < len; i++)
9861 listeners[i].apply(this, args);
8b095871 9862 }
8b095871 9863
9987f0c1
IC
9864 return true;
9865};
9866
9867EventEmitter.prototype.addListener = function(type, listener) {
9868 var m;
9869
9870 if (!isFunction(listener))
9871 throw TypeError('listener must be a function');
9872
9873 if (!this._events)
9874 this._events = {};
9875
9876 // To avoid recursion in the case that type === "newListener"! Before
9877 // adding it to the listeners, first emit "newListener".
9878 if (this._events.newListener)
9879 this.emit('newListener', type,
9880 isFunction(listener.listener) ?
9881 listener.listener : listener);
9882
9883 if (!this._events[type])
9884 // Optimize the case of one listener. Don't need the extra array object.
9885 this._events[type] = listener;
9886 else if (isObject(this._events[type]))
9887 // If we've already got an array, just append.
9888 this._events[type].push(listener);
9889 else
9890 // Adding the second element, need to change to array.
9891 this._events[type] = [this._events[type], listener];
8b095871 9892
9987f0c1
IC
9893 // Check for listener leak
9894 if (isObject(this._events[type]) && !this._events[type].warned) {
9895 if (!isUndefined(this._maxListeners)) {
9896 m = this._maxListeners;
9897 } else {
9898 m = EventEmitter.defaultMaxListeners;
8b095871 9899 }
8b095871 9900
9987f0c1
IC
9901 if (m && m > 0 && this._events[type].length > m) {
9902 this._events[type].warned = true;
9903 console.error('(node) warning: possible EventEmitter memory ' +
9904 'leak detected. %d listeners added. ' +
9905 'Use emitter.setMaxListeners() to increase limit.',
9906 this._events[type].length);
9907 if (typeof console.trace === 'function') {
9908 // not supported in IE 10
9909 console.trace();
9910 }
9911 }
8b095871 9912 }
8b095871 9913
9987f0c1
IC
9914 return this;
9915};
8b095871 9916
9987f0c1 9917EventEmitter.prototype.on = EventEmitter.prototype.addListener;
8b095871 9918
9987f0c1
IC
9919EventEmitter.prototype.once = function(type, listener) {
9920 if (!isFunction(listener))
9921 throw TypeError('listener must be a function');
8b095871 9922
9987f0c1 9923 var fired = false;
8b095871 9924
9987f0c1
IC
9925 function g() {
9926 this.removeListener(type, g);
8b095871 9927
9987f0c1
IC
9928 if (!fired) {
9929 fired = true;
9930 listener.apply(this, arguments);
9931 }
9932 }
8b095871 9933
9987f0c1
IC
9934 g.listener = listener;
9935 this.on(type, g);
8b095871 9936
9987f0c1 9937 return this;
8b095871
IC
9938};
9939
9987f0c1
IC
9940// emits a 'removeListener' event iff the listener was removed
9941EventEmitter.prototype.removeListener = function(type, listener) {
9942 var list, position, length, i;
8b095871 9943
9987f0c1
IC
9944 if (!isFunction(listener))
9945 throw TypeError('listener must be a function');
8b095871 9946
9987f0c1
IC
9947 if (!this._events || !this._events[type])
9948 return this;
8b095871 9949
9987f0c1
IC
9950 list = this._events[type];
9951 length = list.length;
9952 position = -1;
8b095871 9953
9987f0c1
IC
9954 if (list === listener ||
9955 (isFunction(list.listener) && list.listener === listener)) {
9956 delete this._events[type];
9957 if (this._events.removeListener)
9958 this.emit('removeListener', type, listener);
8b095871 9959
9987f0c1
IC
9960 } else if (isObject(list)) {
9961 for (i = length; i-- > 0;) {
9962 if (list[i] === listener ||
9963 (list[i].listener && list[i].listener === listener)) {
9964 position = i;
9965 break;
9966 }
8b095871
IC
9967 }
9968
9987f0c1
IC
9969 if (position < 0)
9970 return this;
8b095871 9971
9987f0c1
IC
9972 if (list.length === 1) {
9973 list.length = 0;
9974 delete this._events[type];
9975 } else {
9976 list.splice(position, 1);
9977 }
8b095871 9978
9987f0c1
IC
9979 if (this._events.removeListener)
9980 this.emit('removeListener', type, listener);
9981 }
8b095871 9982
9987f0c1
IC
9983 return this;
9984};
8b095871 9985
9987f0c1
IC
9986EventEmitter.prototype.removeAllListeners = function(type) {
9987 var key, listeners;
8b095871 9988
9987f0c1
IC
9989 if (!this._events)
9990 return this;
8b095871 9991
9987f0c1
IC
9992 // not listening for removeListener, no need to emit
9993 if (!this._events.removeListener) {
9994 if (arguments.length === 0)
9995 this._events = {};
9996 else if (this._events[type])
9997 delete this._events[type];
9998 return this;
8b095871 9999 }
9987f0c1
IC
10000
10001 // emit removeListener for all listeners on all events
10002 if (arguments.length === 0) {
10003 for (key in this._events) {
10004 if (key === 'removeListener') continue;
10005 this.removeAllListeners(key);
10006 }
10007 this.removeAllListeners('removeListener');
10008 this._events = {};
10009 return this;
8b095871 10010 }
8b095871 10011
9987f0c1 10012 listeners = this._events[type];
8b095871 10013
9987f0c1
IC
10014 if (isFunction(listeners)) {
10015 this.removeListener(type, listeners);
10016 } else if (listeners) {
10017 // LIFO order
10018 while (listeners.length)
10019 this.removeListener(type, listeners[listeners.length - 1]);
8b095871 10020 }
9987f0c1 10021 delete this._events[type];
8b095871 10022
9987f0c1
IC
10023 return this;
10024};
8b095871 10025
9987f0c1
IC
10026EventEmitter.prototype.listeners = function(type) {
10027 var ret;
10028 if (!this._events || !this._events[type])
10029 ret = [];
10030 else if (isFunction(this._events[type]))
10031 ret = [this._events[type]];
10032 else
10033 ret = this._events[type].slice();
10034 return ret;
8b095871
IC
10035};
10036
9987f0c1
IC
10037EventEmitter.prototype.listenerCount = function(type) {
10038 if (this._events) {
10039 var evlistener = this._events[type];
8b095871 10040
9987f0c1
IC
10041 if (isFunction(evlistener))
10042 return 1;
10043 else if (evlistener)
10044 return evlistener.length;
8b095871 10045 }
9987f0c1 10046 return 0;
8b095871
IC
10047};
10048
9987f0c1
IC
10049EventEmitter.listenerCount = function(emitter, type) {
10050 return emitter.listenerCount(type);
10051};
8b095871 10052
9987f0c1
IC
10053function isFunction(arg) {
10054 return typeof arg === 'function';
10055}
8b095871 10056
9987f0c1
IC
10057function isNumber(arg) {
10058 return typeof arg === 'number';
8b095871
IC
10059}
10060
9987f0c1
IC
10061function isObject(arg) {
10062 return typeof arg === 'object' && arg !== null;
10063}
8b095871 10064
9987f0c1
IC
10065function isUndefined(arg) {
10066 return arg === void 0;
10067}
8b095871 10068
9987f0c1
IC
10069},{}],7:[function(require,module,exports){
10070exports.read = function (buffer, offset, isLE, mLen, nBytes) {
10071 var e, m
10072 var eLen = nBytes * 8 - mLen - 1
10073 var eMax = (1 << eLen) - 1
10074 var eBias = eMax >> 1
10075 var nBits = -7
10076 var i = isLE ? (nBytes - 1) : 0
10077 var d = isLE ? -1 : 1
10078 var s = buffer[offset + i]
8b095871 10079
9987f0c1 10080 i += d
8b095871 10081
9987f0c1
IC
10082 e = s & ((1 << (-nBits)) - 1)
10083 s >>= (-nBits)
10084 nBits += eLen
10085 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8b095871 10086
9987f0c1
IC
10087 m = e & ((1 << (-nBits)) - 1)
10088 e >>= (-nBits)
10089 nBits += mLen
10090 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8b095871 10091
9987f0c1
IC
10092 if (e === 0) {
10093 e = 1 - eBias
10094 } else if (e === eMax) {
10095 return m ? NaN : ((s ? -1 : 1) * Infinity)
10096 } else {
10097 m = m + Math.pow(2, mLen)
10098 e = e - eBias
8b095871 10099 }
9987f0c1 10100 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
8b095871
IC
10101}
10102
9987f0c1
IC
10103exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
10104 var e, m, c
10105 var eLen = nBytes * 8 - mLen - 1
10106 var eMax = (1 << eLen) - 1
10107 var eBias = eMax >> 1
10108 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
10109 var i = isLE ? 0 : (nBytes - 1)
10110 var d = isLE ? 1 : -1
10111 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
8b095871 10112
9987f0c1 10113 value = Math.abs(value)
8b095871 10114
9987f0c1
IC
10115 if (isNaN(value) || value === Infinity) {
10116 m = isNaN(value) ? 1 : 0
10117 e = eMax
10118 } else {
10119 e = Math.floor(Math.log(value) / Math.LN2)
10120 if (value * (c = Math.pow(2, -e)) < 1) {
10121 e--
10122 c *= 2
10123 }
10124 if (e + eBias >= 1) {
10125 value += rt / c
10126 } else {
10127 value += rt * Math.pow(2, 1 - eBias)
10128 }
10129 if (value * c >= 2) {
10130 e++
10131 c /= 2
10132 }
8b095871 10133
9987f0c1
IC
10134 if (e + eBias >= eMax) {
10135 m = 0
10136 e = eMax
10137 } else if (e + eBias >= 1) {
10138 m = (value * c - 1) * Math.pow(2, mLen)
10139 e = e + eBias
10140 } else {
10141 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
10142 e = 0
10143 }
8b095871 10144 }
8b095871 10145
9987f0c1
IC
10146 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
10147
10148 e = (e << mLen) | m
10149 eLen += mLen
10150 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
10151
10152 buffer[offset + i - d] |= s * 128
10153}
8b095871 10154
9987f0c1
IC
10155},{}],8:[function(require,module,exports){
10156if (typeof Object.create === 'function') {
10157 // implementation from standard node.js 'util' module
10158 module.exports = function inherits(ctor, superCtor) {
10159 ctor.super_ = superCtor
10160 ctor.prototype = Object.create(superCtor.prototype, {
10161 constructor: {
10162 value: ctor,
10163 enumerable: false,
10164 writable: true,
10165 configurable: true
10166 }
10167 });
10168 };
10169} else {
10170 // old school shim for old browsers
10171 module.exports = function inherits(ctor, superCtor) {
10172 ctor.super_ = superCtor
10173 var TempCtor = function () {}
10174 TempCtor.prototype = superCtor.prototype
10175 ctor.prototype = new TempCtor()
10176 ctor.prototype.constructor = ctor
10177 }
10178}
10179
10180},{}],9:[function(require,module,exports){
8b095871 10181/*!
9987f0c1 10182 * Determine if an object is a Buffer
8b095871
IC
10183 *
10184 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
10185 * @license MIT
10186 */
10187
9987f0c1
IC
10188// The _isBuffer check is for Safari 5-7 support, because it's missing
10189// Object.prototype.constructor. Remove this eventually
10190module.exports = function (obj) {
10191 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
10192}
8b095871 10193
9987f0c1
IC
10194function isBuffer (obj) {
10195 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
8b095871
IC
10196}
10197
9987f0c1
IC
10198// For Node v0.10 support. Remove this eventually.
10199function isSlowBuffer (obj) {
10200 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
10201}
8b095871 10202
9987f0c1
IC
10203},{}],10:[function(require,module,exports){
10204var toString = {}.toString;
8b095871 10205
9987f0c1
IC
10206module.exports = Array.isArray || function (arr) {
10207 return toString.call(arr) == '[object Array]';
10208};
8b095871 10209
9987f0c1
IC
10210},{}],11:[function(require,module,exports){
10211(function (process){
10212'use strict';
8b095871 10213
9987f0c1
IC
10214if (!process.version ||
10215 process.version.indexOf('v0.') === 0 ||
10216 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
10217 module.exports = nextTick;
10218} else {
10219 module.exports = process.nextTick;
8b095871
IC
10220}
10221
9987f0c1
IC
10222function nextTick(fn, arg1, arg2, arg3) {
10223 if (typeof fn !== 'function') {
10224 throw new TypeError('"callback" argument must be a function');
10225 }
10226 var len = arguments.length;
10227 var args, i;
10228 switch (len) {
10229 case 0:
10230 case 1:
10231 return process.nextTick(fn);
10232 case 2:
10233 return process.nextTick(function afterTickOne() {
10234 fn.call(null, arg1);
10235 });
10236 case 3:
10237 return process.nextTick(function afterTickTwo() {
10238 fn.call(null, arg1, arg2);
10239 });
10240 case 4:
10241 return process.nextTick(function afterTickThree() {
10242 fn.call(null, arg1, arg2, arg3);
10243 });
10244 default:
10245 args = new Array(len - 1);
10246 i = 0;
10247 while (i < args.length) {
10248 args[i++] = arguments[i];
8b095871 10249 }
9987f0c1
IC
10250 return process.nextTick(function afterTick() {
10251 fn.apply(null, args);
10252 });
8b095871 10253 }
8b095871
IC
10254}
10255
9987f0c1
IC
10256}).call(this,require('_process'))
10257},{"_process":12}],12:[function(require,module,exports){
10258// shim for using process in browser
10259var process = module.exports = {};
8b095871 10260
9987f0c1
IC
10261// cached from whatever global is present so that test runners that stub it
10262// don't break things. But we need to wrap it in a try catch in case it is
10263// wrapped in strict mode code which doesn't define any globals. It's inside a
10264// function because try/catches deoptimize in certain engines.
8b095871 10265
9987f0c1
IC
10266var cachedSetTimeout;
10267var cachedClearTimeout;
8b095871 10268
9987f0c1
IC
10269function defaultSetTimout() {
10270 throw new Error('setTimeout has not been defined');
10271}
10272function defaultClearTimeout () {
10273 throw new Error('clearTimeout has not been defined');
10274}
10275(function () {
10276 try {
10277 if (typeof setTimeout === 'function') {
10278 cachedSetTimeout = setTimeout;
10279 } else {
10280 cachedSetTimeout = defaultSetTimout;
10281 }
10282 } catch (e) {
10283 cachedSetTimeout = defaultSetTimout;
10284 }
10285 try {
10286 if (typeof clearTimeout === 'function') {
10287 cachedClearTimeout = clearTimeout;
10288 } else {
10289 cachedClearTimeout = defaultClearTimeout;
10290 }
10291 } catch (e) {
10292 cachedClearTimeout = defaultClearTimeout;
8b095871 10293 }
9987f0c1
IC
10294} ())
10295function runTimeout(fun) {
10296 if (cachedSetTimeout === setTimeout) {
10297 //normal enviroments in sane situations
10298 return setTimeout(fun, 0);
10299 }
10300 // if setTimeout wasn't available but was latter defined
10301 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
10302 cachedSetTimeout = setTimeout;
10303 return setTimeout(fun, 0);
10304 }
10305 try {
10306 // when when somebody has screwed with setTimeout but no I.E. maddness
10307 return cachedSetTimeout(fun, 0);
10308 } catch(e){
10309 try {
10310 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
10311 return cachedSetTimeout.call(null, fun, 0);
10312 } catch(e){
10313 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
10314 return cachedSetTimeout.call(this, fun, 0);
10315 }
8b095871 10316 }
8b095871 10317
8b095871 10318
8b095871 10319}
9987f0c1
IC
10320function runClearTimeout(marker) {
10321 if (cachedClearTimeout === clearTimeout) {
10322 //normal enviroments in sane situations
10323 return clearTimeout(marker);
10324 }
10325 // if clearTimeout wasn't available but was latter defined
10326 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
10327 cachedClearTimeout = clearTimeout;
10328 return clearTimeout(marker);
10329 }
10330 try {
10331 // when when somebody has screwed with setTimeout but no I.E. maddness
10332 return cachedClearTimeout(marker);
10333 } catch (e){
10334 try {
10335 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
10336 return cachedClearTimeout.call(null, marker);
10337 } catch (e){
10338 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
10339 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
10340 return cachedClearTimeout.call(this, marker);
10341 }
10342 }
8b095871 10343
8b095871 10344
8b095871 10345
8b095871 10346}
9987f0c1
IC
10347var queue = [];
10348var draining = false;
10349var currentQueue;
10350var queueIndex = -1;
8b095871 10351
9987f0c1
IC
10352function cleanUpNextTick() {
10353 if (!draining || !currentQueue) {
10354 return;
10355 }
10356 draining = false;
10357 if (currentQueue.length) {
10358 queue = currentQueue.concat(queue);
10359 } else {
10360 queueIndex = -1;
10361 }
10362 if (queue.length) {
10363 drainQueue();
10364 }
8b095871
IC
10365}
10366
9987f0c1
IC
10367function drainQueue() {
10368 if (draining) {
10369 return;
10370 }
10371 var timeout = runTimeout(cleanUpNextTick);
10372 draining = true;
8b095871 10373
9987f0c1
IC
10374 var len = queue.length;
10375 while(len) {
10376 currentQueue = queue;
10377 queue = [];
10378 while (++queueIndex < len) {
10379 if (currentQueue) {
10380 currentQueue[queueIndex].run();
10381 }
10382 }
10383 queueIndex = -1;
10384 len = queue.length;
10385 }
10386 currentQueue = null;
10387 draining = false;
10388 runClearTimeout(timeout);
8b095871
IC
10389}
10390
9987f0c1
IC
10391process.nextTick = function (fun) {
10392 var args = new Array(arguments.length - 1);
10393 if (arguments.length > 1) {
10394 for (var i = 1; i < arguments.length; i++) {
10395 args[i - 1] = arguments[i];
10396 }
10397 }
10398 queue.push(new Item(fun, args));
10399 if (queue.length === 1 && !draining) {
10400 runTimeout(drainQueue);
10401 }
10402};
8b095871 10403
9987f0c1
IC
10404// v8 likes predictible objects
10405function Item(fun, array) {
10406 this.fun = fun;
10407 this.array = array;
8b095871 10408}
9987f0c1
IC
10409Item.prototype.run = function () {
10410 this.fun.apply(null, this.array);
10411};
10412process.title = 'browser';
10413process.browser = true;
10414process.env = {};
10415process.argv = [];
10416process.version = ''; // empty string to avoid regexp issues
10417process.versions = {};
8b095871 10418
9987f0c1 10419function noop() {}
8b095871 10420
9987f0c1
IC
10421process.on = noop;
10422process.addListener = noop;
10423process.once = noop;
10424process.off = noop;
10425process.removeListener = noop;
10426process.removeAllListeners = noop;
10427process.emit = noop;
10428process.prependListener = noop;
10429process.prependOnceListener = noop;
8b095871 10430
9987f0c1 10431process.listeners = function (name) { return [] }
8b095871 10432
9987f0c1
IC
10433process.binding = function (name) {
10434 throw new Error('process.binding is not supported');
10435};
8b095871 10436
9987f0c1
IC
10437process.cwd = function () { return '/' };
10438process.chdir = function (dir) {
10439 throw new Error('process.chdir is not supported');
10440};
10441process.umask = function() { return 0; };
8b095871 10442
9987f0c1
IC
10443},{}],13:[function(require,module,exports){
10444module.exports = require('./lib/_stream_duplex.js');
8b095871 10445
9987f0c1
IC
10446},{"./lib/_stream_duplex.js":14}],14:[function(require,module,exports){
10447// Copyright Joyent, Inc. and other Node contributors.
10448//
10449// Permission is hereby granted, free of charge, to any person obtaining a
10450// copy of this software and associated documentation files (the
10451// "Software"), to deal in the Software without restriction, including
10452// without limitation the rights to use, copy, modify, merge, publish,
10453// distribute, sublicense, and/or sell copies of the Software, and to permit
10454// persons to whom the Software is furnished to do so, subject to the
10455// following conditions:
10456//
10457// The above copyright notice and this permission notice shall be included
10458// in all copies or substantial portions of the Software.
10459//
10460// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10461// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10462// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10463// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10464// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10465// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10466// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 10467
9987f0c1
IC
10468// a duplex stream is just a stream that is both readable and writable.
10469// Since JS doesn't have multiple prototypal inheritance, this class
10470// prototypally inherits from Readable, and then parasitically from
10471// Writable.
8b095871 10472
9987f0c1 10473'use strict';
8b095871 10474
9987f0c1 10475/*<replacement>*/
8b095871 10476
9987f0c1
IC
10477var processNextTick = require('process-nextick-args');
10478/*</replacement>*/
8b095871 10479
9987f0c1
IC
10480/*<replacement>*/
10481var objectKeys = Object.keys || function (obj) {
10482 var keys = [];
10483 for (var key in obj) {
10484 keys.push(key);
10485 }return keys;
10486};
10487/*</replacement>*/
8b095871 10488
9987f0c1 10489module.exports = Duplex;
8b095871 10490
9987f0c1
IC
10491/*<replacement>*/
10492var util = require('core-util-is');
10493util.inherits = require('inherits');
10494/*</replacement>*/
8b095871 10495
9987f0c1
IC
10496var Readable = require('./_stream_readable');
10497var Writable = require('./_stream_writable');
8b095871 10498
9987f0c1 10499util.inherits(Duplex, Readable);
8b095871 10500
9987f0c1
IC
10501var keys = objectKeys(Writable.prototype);
10502for (var v = 0; v < keys.length; v++) {
10503 var method = keys[v];
10504 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
8b095871 10505}
8b095871 10506
9987f0c1
IC
10507function Duplex(options) {
10508 if (!(this instanceof Duplex)) return new Duplex(options);
8b095871 10509
9987f0c1
IC
10510 Readable.call(this, options);
10511 Writable.call(this, options);
8b095871 10512
9987f0c1 10513 if (options && options.readable === false) this.readable = false;
8b095871 10514
9987f0c1 10515 if (options && options.writable === false) this.writable = false;
8b095871 10516
9987f0c1
IC
10517 this.allowHalfOpen = true;
10518 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
8b095871 10519
9987f0c1 10520 this.once('end', onend);
8b095871
IC
10521}
10522
9987f0c1
IC
10523// the no-half-open enforcer
10524function onend() {
10525 // if we allow half-open state, or if the writable side ended,
10526 // then we're ok.
10527 if (this.allowHalfOpen || this._writableState.ended) return;
8b095871 10528
9987f0c1
IC
10529 // no more data can be written.
10530 // But allow more writes to happen in this tick.
10531 processNextTick(onEndNT, this);
8b095871
IC
10532}
10533
9987f0c1
IC
10534function onEndNT(self) {
10535 self.end();
8b095871
IC
10536}
10537
9987f0c1
IC
10538Object.defineProperty(Duplex.prototype, 'destroyed', {
10539 get: function () {
10540 if (this._readableState === undefined || this._writableState === undefined) {
10541 return false;
8b095871 10542 }
9987f0c1
IC
10543 return this._readableState.destroyed && this._writableState.destroyed;
10544 },
10545 set: function (value) {
10546 // we ignore the value if the stream
10547 // has not been initialized yet
10548 if (this._readableState === undefined || this._writableState === undefined) {
10549 return;
8b095871 10550 }
9987f0c1
IC
10551
10552 // backward compatibility, the user is explicitly
10553 // managing destroyed
10554 this._readableState.destroyed = value;
10555 this._writableState.destroyed = value;
8b095871 10556 }
9987f0c1 10557});
8b095871 10558
9987f0c1
IC
10559Duplex.prototype._destroy = function (err, cb) {
10560 this.push(null);
10561 this.end();
8b095871 10562
9987f0c1
IC
10563 processNextTick(cb, err);
10564};
8b095871 10565
9987f0c1
IC
10566function forEach(xs, f) {
10567 for (var i = 0, l = xs.length; i < l; i++) {
10568 f(xs[i], i);
10569 }
8b095871 10570}
9987f0c1
IC
10571},{"./_stream_readable":16,"./_stream_writable":18,"core-util-is":5,"inherits":8,"process-nextick-args":11}],15:[function(require,module,exports){
10572// Copyright Joyent, Inc. and other Node contributors.
10573//
10574// Permission is hereby granted, free of charge, to any person obtaining a
10575// copy of this software and associated documentation files (the
10576// "Software"), to deal in the Software without restriction, including
10577// without limitation the rights to use, copy, modify, merge, publish,
10578// distribute, sublicense, and/or sell copies of the Software, and to permit
10579// persons to whom the Software is furnished to do so, subject to the
10580// following conditions:
10581//
10582// The above copyright notice and this permission notice shall be included
10583// in all copies or substantial portions of the Software.
10584//
10585// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10586// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10587// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10588// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10589// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10590// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10591// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 10592
9987f0c1
IC
10593// a passthrough stream.
10594// basically just the most minimal sort of Transform stream.
10595// Every written chunk gets output as-is.
8b095871 10596
9987f0c1 10597'use strict';
8b095871 10598
9987f0c1 10599module.exports = PassThrough;
8b095871 10600
9987f0c1 10601var Transform = require('./_stream_transform');
8b095871 10602
9987f0c1
IC
10603/*<replacement>*/
10604var util = require('core-util-is');
10605util.inherits = require('inherits');
10606/*</replacement>*/
8b095871 10607
9987f0c1 10608util.inherits(PassThrough, Transform);
8b095871 10609
9987f0c1
IC
10610function PassThrough(options) {
10611 if (!(this instanceof PassThrough)) return new PassThrough(options);
8b095871 10612
9987f0c1 10613 Transform.call(this, options);
8b095871
IC
10614}
10615
9987f0c1
IC
10616PassThrough.prototype._transform = function (chunk, encoding, cb) {
10617 cb(null, chunk);
10618};
10619},{"./_stream_transform":17,"core-util-is":5,"inherits":8}],16:[function(require,module,exports){
10620(function (process,global){
10621// Copyright Joyent, Inc. and other Node contributors.
10622//
10623// Permission is hereby granted, free of charge, to any person obtaining a
10624// copy of this software and associated documentation files (the
10625// "Software"), to deal in the Software without restriction, including
10626// without limitation the rights to use, copy, modify, merge, publish,
10627// distribute, sublicense, and/or sell copies of the Software, and to permit
10628// persons to whom the Software is furnished to do so, subject to the
10629// following conditions:
10630//
10631// The above copyright notice and this permission notice shall be included
10632// in all copies or substantial portions of the Software.
10633//
10634// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10635// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10636// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10637// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10638// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10639// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10640// USE OR OTHER DEALINGS IN THE SOFTWARE.
10641
10642'use strict';
8b095871 10643
9987f0c1 10644/*<replacement>*/
8b095871 10645
9987f0c1
IC
10646var processNextTick = require('process-nextick-args');
10647/*</replacement>*/
8b095871 10648
9987f0c1 10649module.exports = Readable;
8b095871 10650
9987f0c1
IC
10651/*<replacement>*/
10652var isArray = require('isarray');
10653/*</replacement>*/
8b095871 10654
9987f0c1
IC
10655/*<replacement>*/
10656var Duplex;
10657/*</replacement>*/
8b095871 10658
9987f0c1 10659Readable.ReadableState = ReadableState;
8b095871 10660
9987f0c1
IC
10661/*<replacement>*/
10662var EE = require('events').EventEmitter;
8b095871 10663
9987f0c1
IC
10664var EElistenerCount = function (emitter, type) {
10665 return emitter.listeners(type).length;
10666};
10667/*</replacement>*/
8b095871 10668
9987f0c1
IC
10669/*<replacement>*/
10670var Stream = require('./internal/streams/stream');
10671/*</replacement>*/
8b095871 10672
9987f0c1
IC
10673// TODO(bmeurer): Change this back to const once hole checks are
10674// properly optimized away early in Ignition+TurboFan.
10675/*<replacement>*/
10676var Buffer = require('safe-buffer').Buffer;
10677var OurUint8Array = global.Uint8Array || function () {};
10678function _uint8ArrayToBuffer(chunk) {
10679 return Buffer.from(chunk);
10680}
10681function _isUint8Array(obj) {
10682 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
8b095871 10683}
9987f0c1 10684/*</replacement>*/
8b095871 10685
9987f0c1
IC
10686/*<replacement>*/
10687var util = require('core-util-is');
10688util.inherits = require('inherits');
10689/*</replacement>*/
10690
10691/*<replacement>*/
10692var debugUtil = require('util');
10693var debug = void 0;
10694if (debugUtil && debugUtil.debuglog) {
10695 debug = debugUtil.debuglog('stream');
10696} else {
10697 debug = function () {};
8b095871 10698}
9987f0c1 10699/*</replacement>*/
8b095871 10700
9987f0c1
IC
10701var BufferList = require('./internal/streams/BufferList');
10702var destroyImpl = require('./internal/streams/destroy');
10703var StringDecoder;
10704
10705util.inherits(Readable, Stream);
10706
10707var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
10708
10709function prependListener(emitter, event, fn) {
10710 // Sadly this is not cacheable as some libraries bundle their own
10711 // event emitter implementation with them.
10712 if (typeof emitter.prependListener === 'function') {
10713 return emitter.prependListener(event, fn);
8b095871 10714 } else {
9987f0c1
IC
10715 // This is a hack to make sure that our error handler is attached before any
10716 // userland ones. NEVER DO THIS. This is here only because this code needs
10717 // to continue to work with older versions of Node.js that do not include
10718 // the prependListener() method. The goal is to eventually remove this hack.
10719 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
8b095871
IC
10720 }
10721}
10722
9987f0c1
IC
10723function ReadableState(options, stream) {
10724 Duplex = Duplex || require('./_stream_duplex');
8b095871 10725
9987f0c1 10726 options = options || {};
8b095871 10727
9987f0c1
IC
10728 // object stream flag. Used to make read(n) ignore n and to
10729 // make all the buffer merging and length checks go away
10730 this.objectMode = !!options.objectMode;
8b095871 10731
9987f0c1 10732 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
8b095871 10733
9987f0c1
IC
10734 // the point at which it stops calling _read() to fill the buffer
10735 // Note: 0 is a valid value, means "don't call _read preemptively ever"
10736 var hwm = options.highWaterMark;
10737 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
10738 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
8b095871 10739
9987f0c1
IC
10740 // cast to ints.
10741 this.highWaterMark = Math.floor(this.highWaterMark);
8b095871 10742
9987f0c1
IC
10743 // A linked list is used to store data chunks instead of an array because the
10744 // linked list can remove elements from the beginning faster than
10745 // array.shift()
10746 this.buffer = new BufferList();
10747 this.length = 0;
10748 this.pipes = null;
10749 this.pipesCount = 0;
10750 this.flowing = null;
10751 this.ended = false;
10752 this.endEmitted = false;
10753 this.reading = false;
8b095871 10754
9987f0c1
IC
10755 // a flag to be able to tell if the event 'readable'/'data' is emitted
10756 // immediately, or on a later tick. We set this to true at first, because
10757 // any actions that shouldn't happen until "later" should generally also
10758 // not happen before the first read call.
10759 this.sync = true;
8b095871 10760
9987f0c1
IC
10761 // whenever we return null, then we set a flag to say
10762 // that we're awaiting a 'readable' event emission.
10763 this.needReadable = false;
10764 this.emittedReadable = false;
10765 this.readableListening = false;
10766 this.resumeScheduled = false;
8b095871 10767
9987f0c1
IC
10768 // has it been destroyed
10769 this.destroyed = false;
8b095871 10770
9987f0c1
IC
10771 // Crypto is kind of old and crusty. Historically, its default string
10772 // encoding is 'binary' so we have to make this configurable.
10773 // Everything else in the universe uses 'utf8', though.
10774 this.defaultEncoding = options.defaultEncoding || 'utf8';
8b095871 10775
9987f0c1
IC
10776 // the number of writers that are awaiting a drain event in .pipe()s
10777 this.awaitDrain = 0;
8b095871 10778
9987f0c1
IC
10779 // if true, a maybeReadMore has been scheduled
10780 this.readingMore = false;
8b095871 10781
9987f0c1
IC
10782 this.decoder = null;
10783 this.encoding = null;
10784 if (options.encoding) {
10785 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
10786 this.decoder = new StringDecoder(options.encoding);
10787 this.encoding = options.encoding;
8b095871 10788 }
8b095871
IC
10789}
10790
9987f0c1
IC
10791function Readable(options) {
10792 Duplex = Duplex || require('./_stream_duplex');
8b095871 10793
9987f0c1 10794 if (!(this instanceof Readable)) return new Readable(options);
8b095871 10795
9987f0c1 10796 this._readableState = new ReadableState(options, this);
8b095871 10797
9987f0c1
IC
10798 // legacy
10799 this.readable = true;
10800
10801 if (options) {
10802 if (typeof options.read === 'function') this._read = options.read;
10803
10804 if (typeof options.destroy === 'function') this._destroy = options.destroy;
8b095871
IC
10805 }
10806
9987f0c1
IC
10807 Stream.call(this);
10808}
8b095871 10809
9987f0c1
IC
10810Object.defineProperty(Readable.prototype, 'destroyed', {
10811 get: function () {
10812 if (this._readableState === undefined) {
10813 return false;
10814 }
10815 return this._readableState.destroyed;
10816 },
10817 set: function (value) {
10818 // we ignore the value if the stream
10819 // has not been initialized yet
10820 if (!this._readableState) {
10821 return;
8b095871 10822 }
9987f0c1
IC
10823
10824 // backward compatibility, the user is explicitly
10825 // managing destroyed
10826 this._readableState.destroyed = value;
8b095871 10827 }
9987f0c1 10828});
8b095871 10829
9987f0c1
IC
10830Readable.prototype.destroy = destroyImpl.destroy;
10831Readable.prototype._undestroy = destroyImpl.undestroy;
10832Readable.prototype._destroy = function (err, cb) {
10833 this.push(null);
10834 cb(err);
10835};
8b095871 10836
9987f0c1
IC
10837// Manually shove something into the read() buffer.
10838// This returns true if the highWaterMark has not been hit yet,
10839// similar to how Writable.write() returns true if you should
10840// write() some more.
10841Readable.prototype.push = function (chunk, encoding) {
10842 var state = this._readableState;
10843 var skipChunkCheck;
10844
10845 if (!state.objectMode) {
10846 if (typeof chunk === 'string') {
10847 encoding = encoding || state.defaultEncoding;
10848 if (encoding !== state.encoding) {
10849 chunk = Buffer.from(chunk, encoding);
10850 encoding = '';
10851 }
10852 skipChunkCheck = true;
10853 }
10854 } else {
10855 skipChunkCheck = true;
10856 }
8b095871 10857
9987f0c1
IC
10858 return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
10859};
8b095871 10860
9987f0c1
IC
10861// Unshift should *always* be something directly out of read()
10862Readable.prototype.unshift = function (chunk) {
10863 return readableAddChunk(this, chunk, null, true, false);
10864};
8b095871 10865
9987f0c1
IC
10866function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
10867 var state = stream._readableState;
10868 if (chunk === null) {
10869 state.reading = false;
10870 onEofChunk(stream, state);
10871 } else {
10872 var er;
10873 if (!skipChunkCheck) er = chunkInvalid(state, chunk);
10874 if (er) {
10875 stream.emit('error', er);
10876 } else if (state.objectMode || chunk && chunk.length > 0) {
10877 if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
10878 chunk = _uint8ArrayToBuffer(chunk);
10879 }
10880
10881 if (addToFront) {
10882 if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
10883 } else if (state.ended) {
10884 stream.emit('error', new Error('stream.push() after EOF'));
10885 } else {
10886 state.reading = false;
10887 if (state.decoder && !encoding) {
10888 chunk = state.decoder.write(chunk);
10889 if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
10890 } else {
10891 addChunk(stream, state, chunk, false);
10892 }
10893 }
10894 } else if (!addToFront) {
10895 state.reading = false;
10896 }
8b095871
IC
10897 }
10898
9987f0c1 10899 return needMoreData(state);
8b095871
IC
10900}
10901
9987f0c1
IC
10902function addChunk(stream, state, chunk, addToFront) {
10903 if (state.flowing && state.length === 0 && !state.sync) {
10904 stream.emit('data', chunk);
10905 stream.read(0);
10906 } else {
10907 // update the buffer info.
10908 state.length += state.objectMode ? 1 : chunk.length;
10909 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
8b095871 10910
9987f0c1 10911 if (state.needReadable) emitReadable(stream);
8b095871 10912 }
9987f0c1 10913 maybeReadMore(stream, state);
8b095871
IC
10914}
10915
9987f0c1
IC
10916function chunkInvalid(state, chunk) {
10917 var er;
10918 if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
10919 er = new TypeError('Invalid non-string/buffer chunk');
10920 }
10921 return er;
8b095871
IC
10922}
10923
9987f0c1
IC
10924// if it's past the high water mark, we can push in some more.
10925// Also, if we have no data yet, we can stand some
10926// more bytes. This is to work around cases where hwm=0,
10927// such as the repl. Also, if the push() triggered a
10928// readable event, and the user called read(largeNumber) such that
10929// needReadable was set, then we ought to push more, so that another
10930// 'readable' event will be triggered.
10931function needMoreData(state) {
10932 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
8b095871
IC
10933}
10934
9987f0c1
IC
10935Readable.prototype.isPaused = function () {
10936 return this._readableState.flowing === false;
10937};
8b095871 10938
9987f0c1
IC
10939// backwards compatibility.
10940Readable.prototype.setEncoding = function (enc) {
10941 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
10942 this._readableState.decoder = new StringDecoder(enc);
10943 this._readableState.encoding = enc;
10944 return this;
10945};
8b095871 10946
9987f0c1
IC
10947// Don't raise the hwm > 8MB
10948var MAX_HWM = 0x800000;
10949function computeNewHighWaterMark(n) {
10950 if (n >= MAX_HWM) {
10951 n = MAX_HWM;
10952 } else {
10953 // Get the next highest power of 2 to prevent increasing hwm excessively in
10954 // tiny amounts
10955 n--;
10956 n |= n >>> 1;
10957 n |= n >>> 2;
10958 n |= n >>> 4;
10959 n |= n >>> 8;
10960 n |= n >>> 16;
10961 n++;
10962 }
10963 return n;
8b095871
IC
10964}
10965
9987f0c1
IC
10966// This function is designed to be inlinable, so please take care when making
10967// changes to the function body.
10968function howMuchToRead(n, state) {
10969 if (n <= 0 || state.length === 0 && state.ended) return 0;
10970 if (state.objectMode) return 1;
10971 if (n !== n) {
10972 // Only flow one buffer at a time
10973 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
10974 }
10975 // If we're asking for more than the current hwm, then raise the hwm.
10976 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
10977 if (n <= state.length) return n;
10978 // Don't have enough
10979 if (!state.ended) {
10980 state.needReadable = true;
10981 return 0;
10982 }
10983 return state.length;
8b095871
IC
10984}
10985
9987f0c1
IC
10986// you can override either this method, or the async _read(n) below.
10987Readable.prototype.read = function (n) {
10988 debug('read', n);
10989 n = parseInt(n, 10);
10990 var state = this._readableState;
10991 var nOrig = n;
8b095871 10992
9987f0c1
IC
10993 if (n !== 0) state.emittedReadable = false;
10994
10995 // if we're doing read(0) to trigger a readable event, but we
10996 // already have a bunch of data in the buffer, then just trigger
10997 // the 'readable' event and move on.
10998 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
10999 debug('read: emitReadable', state.length, state.ended);
11000 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
11001 return null;
8b095871 11002 }
8b095871 11003
9987f0c1 11004 n = howMuchToRead(n, state);
8b095871 11005
9987f0c1
IC
11006 // if we've ended, and we're now clear, then finish it up.
11007 if (n === 0 && state.ended) {
11008 if (state.length === 0) endReadable(this);
11009 return null;
11010 }
8b095871 11011
9987f0c1
IC
11012 // All the actual chunk generation logic needs to be
11013 // *below* the call to _read. The reason is that in certain
11014 // synthetic stream cases, such as passthrough streams, _read
11015 // may be a completely synchronous operation which may change
11016 // the state of the read buffer, providing enough data when
11017 // before there was *not* enough.
11018 //
11019 // So, the steps are:
11020 // 1. Figure out what the state of things will be after we do
11021 // a read from the buffer.
11022 //
11023 // 2. If that resulting state will trigger a _read, then call _read.
11024 // Note that this may be asynchronous, or synchronous. Yes, it is
11025 // deeply ugly to write APIs this way, but that still doesn't mean
11026 // that the Readable class should behave improperly, as streams are
11027 // designed to be sync/async agnostic.
11028 // Take note if the _read call is sync or async (ie, if the read call
11029 // has returned yet), so that we know whether or not it's safe to emit
11030 // 'readable' etc.
11031 //
11032 // 3. Actually pull the requested chunks out of the buffer and return.
8b095871 11033
9987f0c1
IC
11034 // if we need a readable event, then we need to do some reading.
11035 var doRead = state.needReadable;
11036 debug('need readable', doRead);
8b095871 11037
9987f0c1
IC
11038 // if we currently have less than the highWaterMark, then also read some
11039 if (state.length === 0 || state.length - n < state.highWaterMark) {
11040 doRead = true;
11041 debug('length less than watermark', doRead);
11042 }
8b095871 11043
9987f0c1
IC
11044 // however, if we've ended, then there's no point, and if we're already
11045 // reading, then it's unnecessary.
11046 if (state.ended || state.reading) {
11047 doRead = false;
11048 debug('reading or ended', doRead);
11049 } else if (doRead) {
11050 debug('do read');
11051 state.reading = true;
11052 state.sync = true;
11053 // if the length is currently zero, then we *need* a readable event.
11054 if (state.length === 0) state.needReadable = true;
11055 // call internal read method
11056 this._read(state.highWaterMark);
11057 state.sync = false;
11058 // If _read pushed data synchronously, then `reading` will be false,
11059 // and we need to re-evaluate how much data we can return to the user.
11060 if (!state.reading) n = howMuchToRead(nOrig, state);
11061 }
8b095871 11062
9987f0c1
IC
11063 var ret;
11064 if (n > 0) ret = fromList(n, state);else ret = null;
8b095871 11065
9987f0c1
IC
11066 if (ret === null) {
11067 state.needReadable = true;
11068 n = 0;
11069 } else {
11070 state.length -= n;
11071 }
8b095871 11072
9987f0c1
IC
11073 if (state.length === 0) {
11074 // If we have nothing in the buffer, then we want to know
11075 // as soon as we *do* get something into the buffer.
11076 if (!state.ended) state.needReadable = true;
8b095871 11077
9987f0c1
IC
11078 // If we tried to read() past the EOF, then emit end on the next tick.
11079 if (nOrig !== n && state.ended) endReadable(this);
11080 }
8b095871 11081
9987f0c1 11082 if (ret !== null) this.emit('data', ret);
8b095871 11083
9987f0c1
IC
11084 return ret;
11085};
8b095871 11086
9987f0c1
IC
11087function onEofChunk(stream, state) {
11088 if (state.ended) return;
11089 if (state.decoder) {
11090 var chunk = state.decoder.end();
11091 if (chunk && chunk.length) {
11092 state.buffer.push(chunk);
11093 state.length += state.objectMode ? 1 : chunk.length;
11094 }
11095 }
11096 state.ended = true;
8b095871 11097
9987f0c1
IC
11098 // emit 'readable' now to make sure it gets picked up.
11099 emitReadable(stream);
8b095871
IC
11100}
11101
9987f0c1
IC
11102// Don't emit readable right away in sync mode, because this can trigger
11103// another read() call => stack overflow. This way, it might trigger
11104// a nextTick recursion warning, but that's not so bad.
11105function emitReadable(stream) {
11106 var state = stream._readableState;
11107 state.needReadable = false;
11108 if (!state.emittedReadable) {
11109 debug('emitReadable', state.flowing);
11110 state.emittedReadable = true;
11111 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
11112 }
8b095871
IC
11113}
11114
9987f0c1
IC
11115function emitReadable_(stream) {
11116 debug('emit readable');
11117 stream.emit('readable');
11118 flow(stream);
8b095871
IC
11119}
11120
9987f0c1
IC
11121// at this point, the user has presumably seen the 'readable' event,
11122// and called read() to consume some data. that may have triggered
11123// in turn another _read(n) call, in which case reading = true if
11124// it's in progress.
11125// However, if we're not ended, or reading, and the length < hwm,
11126// then go ahead and try to read some more preemptively.
11127function maybeReadMore(stream, state) {
11128 if (!state.readingMore) {
11129 state.readingMore = true;
11130 processNextTick(maybeReadMore_, stream, state);
11131 }
8b095871
IC
11132}
11133
9987f0c1
IC
11134function maybeReadMore_(stream, state) {
11135 var len = state.length;
11136 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
11137 debug('maybeReadMore read 0');
11138 stream.read(0);
11139 if (len === state.length)
11140 // didn't get any data, stop spinning.
11141 break;else len = state.length;
11142 }
11143 state.readingMore = false;
8b095871
IC
11144}
11145
9987f0c1
IC
11146// abstract method. to be overridden in specific implementation classes.
11147// call cb(er, data) where data is <= n in length.
11148// for virtual (non-string, non-buffer) streams, "length" is somewhat
11149// arbitrary, and perhaps not very meaningful.
11150Readable.prototype._read = function (n) {
11151 this.emit('error', new Error('_read() is not implemented'));
11152};
8b095871 11153
9987f0c1
IC
11154Readable.prototype.pipe = function (dest, pipeOpts) {
11155 var src = this;
11156 var state = this._readableState;
11157
11158 switch (state.pipesCount) {
11159 case 0:
11160 state.pipes = dest;
11161 break;
11162 case 1:
11163 state.pipes = [state.pipes, dest];
11164 break;
11165 default:
11166 state.pipes.push(dest);
11167 break;
8b095871 11168 }
9987f0c1
IC
11169 state.pipesCount += 1;
11170 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
8b095871 11171
9987f0c1 11172 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
8b095871 11173
9987f0c1
IC
11174 var endFn = doEnd ? onend : unpipe;
11175 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
8b095871 11176
9987f0c1
IC
11177 dest.on('unpipe', onunpipe);
11178 function onunpipe(readable, unpipeInfo) {
11179 debug('onunpipe');
11180 if (readable === src) {
11181 if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
11182 unpipeInfo.hasUnpiped = true;
11183 cleanup();
11184 }
11185 }
8b095871
IC
11186 }
11187
9987f0c1
IC
11188 function onend() {
11189 debug('onend');
11190 dest.end();
11191 }
8b095871 11192
9987f0c1
IC
11193 // when the dest drains, it reduces the awaitDrain counter
11194 // on the source. This would be more elegant with a .once()
11195 // handler in flow(), but adding and removing repeatedly is
11196 // too slow.
11197 var ondrain = pipeOnDrain(src);
11198 dest.on('drain', ondrain);
8b095871 11199
9987f0c1
IC
11200 var cleanedUp = false;
11201 function cleanup() {
11202 debug('cleanup');
11203 // cleanup event handlers once the pipe is broken
11204 dest.removeListener('close', onclose);
11205 dest.removeListener('finish', onfinish);
11206 dest.removeListener('drain', ondrain);
11207 dest.removeListener('error', onerror);
11208 dest.removeListener('unpipe', onunpipe);
11209 src.removeListener('end', onend);
11210 src.removeListener('end', unpipe);
11211 src.removeListener('data', ondata);
8b095871 11212
9987f0c1
IC
11213 cleanedUp = true;
11214
11215 // if the reader is waiting for a drain event from this
11216 // specific writer, then it would cause it to never start
11217 // flowing again.
11218 // So, if this is awaiting a drain, then we just call it now.
11219 // If we don't know, then assume that we are waiting for one.
11220 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
8b095871 11221 }
8b095871 11222
9987f0c1
IC
11223 // If the user pushes more data while we're writing to dest then we'll end up
11224 // in ondata again. However, we only want to increase awaitDrain once because
11225 // dest will only emit one 'drain' event for the multiple writes.
11226 // => Introduce a guard on increasing awaitDrain.
11227 var increasedAwaitDrain = false;
11228 src.on('data', ondata);
11229 function ondata(chunk) {
11230 debug('ondata');
11231 increasedAwaitDrain = false;
11232 var ret = dest.write(chunk);
11233 if (false === ret && !increasedAwaitDrain) {
11234 // If the user unpiped during `dest.write()`, it is possible
11235 // to get stuck in a permanently paused state if that write
11236 // also returned false.
11237 // => Check whether `dest` is still a piping destination.
11238 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
11239 debug('false write response, pause', src._readableState.awaitDrain);
11240 src._readableState.awaitDrain++;
11241 increasedAwaitDrain = true;
11242 }
11243 src.pause();
11244 }
8b095871 11245 }
8b095871 11246
9987f0c1
IC
11247 // if the dest has an error, then stop piping into it.
11248 // however, don't suppress the throwing behavior for this.
11249 function onerror(er) {
11250 debug('onerror', er);
11251 unpipe();
11252 dest.removeListener('error', onerror);
11253 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
8b095871 11254 }
8b095871 11255
9987f0c1
IC
11256 // Make sure our error handler is attached before userland ones.
11257 prependListener(dest, 'error', onerror);
11258
11259 // Both close and finish should trigger unpipe, but only once.
11260 function onclose() {
11261 dest.removeListener('finish', onfinish);
11262 unpipe();
8b095871 11263 }
9987f0c1
IC
11264 dest.once('close', onclose);
11265 function onfinish() {
11266 debug('onfinish');
11267 dest.removeListener('close', onclose);
11268 unpipe();
11269 }
11270 dest.once('finish', onfinish);
8b095871 11271
9987f0c1
IC
11272 function unpipe() {
11273 debug('unpipe');
11274 src.unpipe(dest);
8b095871 11275 }
8b095871 11276
9987f0c1
IC
11277 // tell the dest that it's being piped to
11278 dest.emit('pipe', src);
8b095871 11279
9987f0c1
IC
11280 // start the flow if it hasn't been started already.
11281 if (!state.flowing) {
11282 debug('pipe resume');
11283 src.resume();
8b095871
IC
11284 }
11285
9987f0c1
IC
11286 return dest;
11287};
8b095871 11288
9987f0c1
IC
11289function pipeOnDrain(src) {
11290 return function () {
11291 var state = src._readableState;
11292 debug('pipeOnDrain', state.awaitDrain);
11293 if (state.awaitDrain) state.awaitDrain--;
11294 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
11295 state.flowing = true;
11296 flow(src);
11297 }
11298 };
8b095871
IC
11299}
11300
9987f0c1
IC
11301Readable.prototype.unpipe = function (dest) {
11302 var state = this._readableState;
11303 var unpipeInfo = { hasUnpiped: false };
8b095871 11304
9987f0c1
IC
11305 // if we're not piping anywhere, then do nothing.
11306 if (state.pipesCount === 0) return this;
8b095871 11307
9987f0c1
IC
11308 // just one destination. most common case.
11309 if (state.pipesCount === 1) {
11310 // passed in one, but it's not the right one.
11311 if (dest && dest !== state.pipes) return this;
11312
11313 if (!dest) dest = state.pipes;
11314
11315 // got a match.
11316 state.pipes = null;
11317 state.pipesCount = 0;
11318 state.flowing = false;
11319 if (dest) dest.emit('unpipe', this, unpipeInfo);
11320 return this;
8b095871
IC
11321 }
11322
9987f0c1 11323 // slow case. multiple pipe destinations.
8b095871 11324
9987f0c1
IC
11325 if (!dest) {
11326 // remove all.
11327 var dests = state.pipes;
11328 var len = state.pipesCount;
11329 state.pipes = null;
11330 state.pipesCount = 0;
11331 state.flowing = false;
8b095871 11332
9987f0c1
IC
11333 for (var i = 0; i < len; i++) {
11334 dests[i].emit('unpipe', this, unpipeInfo);
11335 }return this;
8b095871 11336 }
8b095871 11337
9987f0c1
IC
11338 // try to find the right one.
11339 var index = indexOf(state.pipes, dest);
11340 if (index === -1) return this;
8b095871 11341
9987f0c1
IC
11342 state.pipes.splice(index, 1);
11343 state.pipesCount -= 1;
11344 if (state.pipesCount === 1) state.pipes = state.pipes[0];
8b095871 11345
9987f0c1 11346 dest.emit('unpipe', this, unpipeInfo);
8b095871 11347
9987f0c1
IC
11348 return this;
11349};
8b095871 11350
9987f0c1
IC
11351// set up data events if they are asked for
11352// Ensure readable listeners eventually get something
11353Readable.prototype.on = function (ev, fn) {
11354 var res = Stream.prototype.on.call(this, ev, fn);
11355
11356 if (ev === 'data') {
11357 // Start flowing on next tick if stream isn't explicitly paused
11358 if (this._readableState.flowing !== false) this.resume();
11359 } else if (ev === 'readable') {
11360 var state = this._readableState;
11361 if (!state.endEmitted && !state.readableListening) {
11362 state.readableListening = state.needReadable = true;
11363 state.emittedReadable = false;
11364 if (!state.reading) {
11365 processNextTick(nReadingNextTick, this);
11366 } else if (state.length) {
11367 emitReadable(this);
11368 }
11369 }
8b095871 11370 }
8b095871 11371
9987f0c1
IC
11372 return res;
11373};
11374Readable.prototype.addListener = Readable.prototype.on;
8b095871 11375
9987f0c1
IC
11376function nReadingNextTick(self) {
11377 debug('readable nexttick read 0');
11378 self.read(0);
8b095871
IC
11379}
11380
9987f0c1
IC
11381// pause() and resume() are remnants of the legacy readable stream API
11382// If the user uses them, then switch into old mode.
11383Readable.prototype.resume = function () {
11384 var state = this._readableState;
11385 if (!state.flowing) {
11386 debug('resume');
11387 state.flowing = true;
11388 resume(this, state);
11389 }
11390 return this;
11391};
11392
11393function resume(stream, state) {
11394 if (!state.resumeScheduled) {
11395 state.resumeScheduled = true;
11396 processNextTick(resume_, stream, state);
8b095871 11397 }
8b095871
IC
11398}
11399
9987f0c1
IC
11400function resume_(stream, state) {
11401 if (!state.reading) {
11402 debug('resume read 0');
11403 stream.read(0);
11404 }
11405
11406 state.resumeScheduled = false;
11407 state.awaitDrain = 0;
11408 stream.emit('resume');
11409 flow(stream);
11410 if (state.flowing && !state.reading) stream.read(0);
8b095871
IC
11411}
11412
9987f0c1
IC
11413Readable.prototype.pause = function () {
11414 debug('call pause flowing=%j', this._readableState.flowing);
11415 if (false !== this._readableState.flowing) {
11416 debug('pause');
11417 this._readableState.flowing = false;
11418 this.emit('pause');
11419 }
11420 return this;
11421};
11422
11423function flow(stream) {
11424 var state = stream._readableState;
11425 debug('flow', state.flowing);
11426 while (state.flowing && stream.read() !== null) {}
8b095871
IC
11427}
11428
9987f0c1
IC
11429// wrap an old-style stream as the async data source.
11430// This is *not* part of the readable stream interface.
11431// It is an ugly unfortunate mess of history.
11432Readable.prototype.wrap = function (stream) {
11433 var state = this._readableState;
11434 var paused = false;
8b095871 11435
9987f0c1
IC
11436 var self = this;
11437 stream.on('end', function () {
11438 debug('wrapped end');
11439 if (state.decoder && !state.ended) {
11440 var chunk = state.decoder.end();
11441 if (chunk && chunk.length) self.push(chunk);
11442 }
8b095871 11443
9987f0c1
IC
11444 self.push(null);
11445 });
8b095871 11446
9987f0c1
IC
11447 stream.on('data', function (chunk) {
11448 debug('wrapped data');
11449 if (state.decoder) chunk = state.decoder.write(chunk);
8b095871 11450
9987f0c1
IC
11451 // don't skip over falsy values in objectMode
11452 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
8b095871 11453
9987f0c1
IC
11454 var ret = self.push(chunk);
11455 if (!ret) {
11456 paused = true;
11457 stream.pause();
8b095871 11458 }
9987f0c1
IC
11459 });
11460
11461 // proxy all the other methods.
11462 // important when wrapping filters and duplexes.
11463 for (var i in stream) {
11464 if (this[i] === undefined && typeof stream[i] === 'function') {
11465 this[i] = function (method) {
11466 return function () {
11467 return stream[method].apply(stream, arguments);
11468 };
11469 }(i);
8b095871 11470 }
8b095871
IC
11471 }
11472
9987f0c1
IC
11473 // proxy certain important events.
11474 for (var n = 0; n < kProxyEvents.length; n++) {
11475 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
11476 }
8b095871 11477
9987f0c1
IC
11478 // when we try to consume some more bytes, simply unpause the
11479 // underlying stream.
11480 self._read = function (n) {
11481 debug('wrapped _read', n);
11482 if (paused) {
11483 paused = false;
11484 stream.resume();
11485 }
11486 };
8b095871 11487
9987f0c1
IC
11488 return self;
11489};
8b095871 11490
9987f0c1
IC
11491// exposed for testing purposes only.
11492Readable._fromList = fromList;
8b095871 11493
9987f0c1
IC
11494// Pluck off n bytes from an array of buffers.
11495// Length is the combined lengths of all the buffers in the list.
11496// This function is designed to be inlinable, so please take care when making
11497// changes to the function body.
11498function fromList(n, state) {
11499 // nothing buffered
11500 if (state.length === 0) return null;
8b095871 11501
9987f0c1
IC
11502 var ret;
11503 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
11504 // read it all, truncate the list
11505 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
11506 state.buffer.clear();
8b095871 11507 } else {
9987f0c1
IC
11508 // read part of list
11509 ret = fromListPartial(n, state.buffer, state.decoder);
8b095871
IC
11510 }
11511
9987f0c1 11512 return ret;
8b095871
IC
11513}
11514
9987f0c1
IC
11515// Extracts only enough buffered data to satisfy the amount requested.
11516// This function is designed to be inlinable, so please take care when making
11517// changes to the function body.
11518function fromListPartial(n, list, hasStrings) {
11519 var ret;
11520 if (n < list.head.data.length) {
11521 // slice is the same for buffers and strings
11522 ret = list.head.data.slice(0, n);
11523 list.head.data = list.head.data.slice(n);
11524 } else if (n === list.head.data.length) {
11525 // first chunk is a perfect match
11526 ret = list.shift();
8b095871 11527 } else {
9987f0c1
IC
11528 // result spans more than one buffer
11529 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
8b095871 11530 }
9987f0c1 11531 return ret;
8b095871
IC
11532}
11533
9987f0c1
IC
11534// Copies a specified amount of characters from the list of buffered data
11535// chunks.
11536// This function is designed to be inlinable, so please take care when making
11537// changes to the function body.
11538function copyFromBufferString(n, list) {
11539 var p = list.head;
11540 var c = 1;
11541 var ret = p.data;
11542 n -= ret.length;
11543 while (p = p.next) {
11544 var str = p.data;
11545 var nb = n > str.length ? str.length : n;
11546 if (nb === str.length) ret += str;else ret += str.slice(0, n);
11547 n -= nb;
11548 if (n === 0) {
11549 if (nb === str.length) {
11550 ++c;
11551 if (p.next) list.head = p.next;else list.head = list.tail = null;
11552 } else {
11553 list.head = p;
11554 p.data = str.slice(nb);
11555 }
11556 break;
11557 }
11558 ++c;
8b095871 11559 }
9987f0c1
IC
11560 list.length -= c;
11561 return ret;
8b095871
IC
11562}
11563
9987f0c1
IC
11564// Copies a specified amount of bytes from the list of buffered data chunks.
11565// This function is designed to be inlinable, so please take care when making
11566// changes to the function body.
11567function copyFromBuffer(n, list) {
11568 var ret = Buffer.allocUnsafe(n);
11569 var p = list.head;
11570 var c = 1;
11571 p.data.copy(ret);
11572 n -= p.data.length;
11573 while (p = p.next) {
11574 var buf = p.data;
11575 var nb = n > buf.length ? buf.length : n;
11576 buf.copy(ret, ret.length - n, 0, nb);
11577 n -= nb;
11578 if (n === 0) {
11579 if (nb === buf.length) {
11580 ++c;
11581 if (p.next) list.head = p.next;else list.head = list.tail = null;
11582 } else {
11583 list.head = p;
11584 p.data = buf.slice(nb);
8b095871 11585 }
9987f0c1 11586 break;
8b095871 11587 }
9987f0c1 11588 ++c;
8b095871 11589 }
9987f0c1
IC
11590 list.length -= c;
11591 return ret;
8b095871
IC
11592}
11593
9987f0c1
IC
11594function endReadable(stream) {
11595 var state = stream._readableState;
8b095871 11596
9987f0c1
IC
11597 // If we get here before consuming all the bytes, then that is a
11598 // bug in node. Should never happen.
11599 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
8b095871 11600
9987f0c1
IC
11601 if (!state.endEmitted) {
11602 state.ended = true;
11603 processNextTick(endReadableNT, state, stream);
8b095871 11604 }
9987f0c1 11605}
8b095871 11606
9987f0c1
IC
11607function endReadableNT(state, stream) {
11608 // Check that we didn't get one last unshift.
11609 if (!state.endEmitted && state.length === 0) {
11610 state.endEmitted = true;
11611 stream.readable = false;
11612 stream.emit('end');
11613 }
8b095871
IC
11614}
11615
9987f0c1
IC
11616function forEach(xs, f) {
11617 for (var i = 0, l = xs.length; i < l; i++) {
11618 f(xs[i], i);
11619 }
8b095871
IC
11620}
11621
9987f0c1
IC
11622function indexOf(xs, x) {
11623 for (var i = 0, l = xs.length; i < l; i++) {
11624 if (xs[i] === x) return i;
8b095871 11625 }
9987f0c1 11626 return -1;
8b095871 11627}
9987f0c1
IC
11628}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
11629},{"./_stream_duplex":14,"./internal/streams/BufferList":19,"./internal/streams/destroy":20,"./internal/streams/stream":21,"_process":12,"core-util-is":5,"events":6,"inherits":8,"isarray":10,"process-nextick-args":11,"safe-buffer":26,"string_decoder/":28,"util":3}],17:[function(require,module,exports){
11630// Copyright Joyent, Inc. and other Node contributors.
11631//
11632// Permission is hereby granted, free of charge, to any person obtaining a
11633// copy of this software and associated documentation files (the
11634// "Software"), to deal in the Software without restriction, including
11635// without limitation the rights to use, copy, modify, merge, publish,
11636// distribute, sublicense, and/or sell copies of the Software, and to permit
11637// persons to whom the Software is furnished to do so, subject to the
11638// following conditions:
11639//
11640// The above copyright notice and this permission notice shall be included
11641// in all copies or substantial portions of the Software.
11642//
11643// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11644// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11645// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11646// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11647// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11648// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11649// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 11650
9987f0c1
IC
11651// a transform stream is a readable/writable stream where you do
11652// something with the data. Sometimes it's called a "filter",
11653// but that's not a great name for it, since that implies a thing where
11654// some bits pass through, and others are simply ignored. (That would
11655// be a valid example of a transform, of course.)
11656//
11657// While the output is causally related to the input, it's not a
11658// necessarily symmetric or synchronous transformation. For example,
11659// a zlib stream might take multiple plain-text writes(), and then
11660// emit a single compressed chunk some time in the future.
11661//
11662// Here's how this works:
11663//
11664// The Transform stream has all the aspects of the readable and writable
11665// stream classes. When you write(chunk), that calls _write(chunk,cb)
11666// internally, and returns false if there's a lot of pending writes
11667// buffered up. When you call read(), that calls _read(n) until
11668// there's enough pending readable data buffered up.
11669//
11670// In a transform stream, the written data is placed in a buffer. When
11671// _read(n) is called, it transforms the queued up data, calling the
11672// buffered _write cb's as it consumes chunks. If consuming a single
11673// written chunk would result in multiple output chunks, then the first
11674// outputted bit calls the readcb, and subsequent chunks just go into
11675// the read buffer, and will cause it to emit 'readable' if necessary.
11676//
11677// This way, back-pressure is actually determined by the reading side,
11678// since _read has to be called to start processing a new chunk. However,
11679// a pathological inflate type of transform can cause excessive buffering
11680// here. For example, imagine a stream where every byte of input is
11681// interpreted as an integer from 0-255, and then results in that many
11682// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
11683// 1kb of data being output. In this case, you could write a very small
11684// amount of input, and end up with a very large amount of output. In
11685// such a pathological inflating mechanism, there'd be no way to tell
11686// the system to stop doing the transform. A single 4MB write could
11687// cause the system to run out of memory.
11688//
11689// However, even in such a pathological case, only a single written chunk
11690// would be consumed, and then the rest would wait (un-transformed) until
11691// the results of the previous transformed chunk were consumed.
8b095871 11692
9987f0c1 11693'use strict';
8b095871 11694
9987f0c1 11695module.exports = Transform;
8b095871 11696
9987f0c1 11697var Duplex = require('./_stream_duplex');
8b095871 11698
9987f0c1
IC
11699/*<replacement>*/
11700var util = require('core-util-is');
11701util.inherits = require('inherits');
11702/*</replacement>*/
8b095871 11703
9987f0c1 11704util.inherits(Transform, Duplex);
8b095871 11705
9987f0c1
IC
11706function TransformState(stream) {
11707 this.afterTransform = function (er, data) {
11708 return afterTransform(stream, er, data);
11709 };
8b095871 11710
9987f0c1
IC
11711 this.needTransform = false;
11712 this.transforming = false;
11713 this.writecb = null;
11714 this.writechunk = null;
11715 this.writeencoding = null;
11716}
8b095871 11717
9987f0c1
IC
11718function afterTransform(stream, er, data) {
11719 var ts = stream._transformState;
11720 ts.transforming = false;
8b095871 11721
9987f0c1 11722 var cb = ts.writecb;
8b095871 11723
9987f0c1
IC
11724 if (!cb) {
11725 return stream.emit('error', new Error('write callback called multiple times'));
11726 }
8b095871 11727
9987f0c1
IC
11728 ts.writechunk = null;
11729 ts.writecb = null;
8b095871 11730
9987f0c1 11731 if (data !== null && data !== undefined) stream.push(data);
8b095871 11732
9987f0c1 11733 cb(er);
8b095871 11734
9987f0c1
IC
11735 var rs = stream._readableState;
11736 rs.reading = false;
11737 if (rs.needReadable || rs.length < rs.highWaterMark) {
11738 stream._read(rs.highWaterMark);
11739 }
11740}
8b095871 11741
9987f0c1
IC
11742function Transform(options) {
11743 if (!(this instanceof Transform)) return new Transform(options);
8b095871 11744
9987f0c1 11745 Duplex.call(this, options);
8b095871 11746
9987f0c1 11747 this._transformState = new TransformState(this);
8b095871 11748
9987f0c1 11749 var stream = this;
8b095871 11750
9987f0c1
IC
11751 // start out asking for a readable event once data is transformed.
11752 this._readableState.needReadable = true;
8b095871 11753
9987f0c1
IC
11754 // we have implemented the _read method, and done the other things
11755 // that Readable wants before the first _read call, so unset the
11756 // sync guard flag.
11757 this._readableState.sync = false;
8b095871 11758
9987f0c1
IC
11759 if (options) {
11760 if (typeof options.transform === 'function') this._transform = options.transform;
8b095871 11761
9987f0c1 11762 if (typeof options.flush === 'function') this._flush = options.flush;
8b095871 11763 }
8b095871 11764
9987f0c1
IC
11765 // When the writable side finishes, then flush out anything remaining.
11766 this.once('prefinish', function () {
11767 if (typeof this._flush === 'function') this._flush(function (er, data) {
11768 done(stream, er, data);
11769 });else done(stream);
11770 });
11771}
8b095871 11772
9987f0c1
IC
11773Transform.prototype.push = function (chunk, encoding) {
11774 this._transformState.needTransform = false;
11775 return Duplex.prototype.push.call(this, chunk, encoding);
11776};
8b095871 11777
9987f0c1
IC
11778// This is the part where you do stuff!
11779// override this function in implementation classes.
11780// 'chunk' is an input chunk.
11781//
11782// Call `push(newChunk)` to pass along transformed output
11783// to the readable side. You may call 'push' zero or more times.
11784//
11785// Call `cb(err)` when you are done with this chunk. If you pass
11786// an error, then that'll put the hurt on the whole operation. If you
11787// never call cb(), then you'll never get another chunk.
11788Transform.prototype._transform = function (chunk, encoding, cb) {
11789 throw new Error('_transform() is not implemented');
11790};
8b095871 11791
9987f0c1
IC
11792Transform.prototype._write = function (chunk, encoding, cb) {
11793 var ts = this._transformState;
11794 ts.writecb = cb;
11795 ts.writechunk = chunk;
11796 ts.writeencoding = encoding;
11797 if (!ts.transforming) {
11798 var rs = this._readableState;
11799 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
8b095871 11800 }
9987f0c1 11801};
8b095871 11802
9987f0c1
IC
11803// Doesn't matter what the args are here.
11804// _transform does all the work.
11805// That we got here means that the readable side wants more data.
11806Transform.prototype._read = function (n) {
11807 var ts = this._transformState;
8b095871 11808
9987f0c1
IC
11809 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
11810 ts.transforming = true;
11811 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
11812 } else {
11813 // mark that we need a transform, so that any data that comes in
11814 // will get processed, now that we've asked for it.
11815 ts.needTransform = true;
11816 }
11817};
8b095871 11818
9987f0c1
IC
11819Transform.prototype._destroy = function (err, cb) {
11820 var _this = this;
8b095871 11821
9987f0c1
IC
11822 Duplex.prototype._destroy.call(this, err, function (err2) {
11823 cb(err2);
11824 _this.emit('close');
11825 });
11826};
8b095871 11827
9987f0c1
IC
11828function done(stream, er, data) {
11829 if (er) return stream.emit('error', er);
8b095871 11830
9987f0c1 11831 if (data !== null && data !== undefined) stream.push(data);
8b095871 11832
9987f0c1
IC
11833 // if there's nothing in the write buffer, then that means
11834 // that nothing more will ever be provided
11835 var ws = stream._writableState;
11836 var ts = stream._transformState;
8b095871 11837
9987f0c1 11838 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
8b095871 11839
9987f0c1
IC
11840 if (ts.transforming) throw new Error('Calling transform done when still transforming');
11841
11842 return stream.push(null);
11843}
11844},{"./_stream_duplex":14,"core-util-is":5,"inherits":8}],18:[function(require,module,exports){
11845(function (process,global){
8b095871
IC
11846// Copyright Joyent, Inc. and other Node contributors.
11847//
11848// Permission is hereby granted, free of charge, to any person obtaining a
11849// copy of this software and associated documentation files (the
11850// "Software"), to deal in the Software without restriction, including
11851// without limitation the rights to use, copy, modify, merge, publish,
11852// distribute, sublicense, and/or sell copies of the Software, and to permit
11853// persons to whom the Software is furnished to do so, subject to the
11854// following conditions:
11855//
11856// The above copyright notice and this permission notice shall be included
11857// in all copies or substantial portions of the Software.
11858//
11859// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11860// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11861// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11862// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11863// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11864// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11865// USE OR OTHER DEALINGS IN THE SOFTWARE.
11866
9987f0c1
IC
11867// A bit simpler than readable streams.
11868// Implement an async ._write(chunk, encoding, cb), and it'll handle all
11869// the drain event emission and buffering.
11870
11871'use strict';
11872
11873/*<replacement>*/
11874
11875var processNextTick = require('process-nextick-args');
11876/*</replacement>*/
11877
11878module.exports = Writable;
11879
11880/* <replacement> */
11881function WriteReq(chunk, encoding, cb) {
11882 this.chunk = chunk;
11883 this.encoding = encoding;
11884 this.callback = cb;
11885 this.next = null;
8b095871 11886}
8b095871 11887
9987f0c1
IC
11888// It seems a linked list but it is not
11889// there will be only 2 of these for each stream
11890function CorkedRequest(state) {
11891 var _this = this;
8b095871 11892
9987f0c1
IC
11893 this.next = null;
11894 this.entry = null;
11895 this.finish = function () {
11896 onCorkedFinish(_this, state);
11897 };
11898}
11899/* </replacement> */
8b095871 11900
9987f0c1
IC
11901/*<replacement>*/
11902var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
11903/*</replacement>*/
8b095871 11904
9987f0c1
IC
11905/*<replacement>*/
11906var Duplex;
11907/*</replacement>*/
11908
11909Writable.WritableState = WritableState;
11910
11911/*<replacement>*/
11912var util = require('core-util-is');
11913util.inherits = require('inherits');
11914/*</replacement>*/
11915
11916/*<replacement>*/
11917var internalUtil = {
11918 deprecate: require('util-deprecate')
8b095871 11919};
9987f0c1 11920/*</replacement>*/
8b095871 11921
9987f0c1
IC
11922/*<replacement>*/
11923var Stream = require('./internal/streams/stream');
11924/*</replacement>*/
8b095871 11925
9987f0c1
IC
11926/*<replacement>*/
11927var Buffer = require('safe-buffer').Buffer;
11928var OurUint8Array = global.Uint8Array || function () {};
11929function _uint8ArrayToBuffer(chunk) {
11930 return Buffer.from(chunk);
11931}
11932function _isUint8Array(obj) {
11933 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
11934}
11935/*</replacement>*/
8b095871 11936
9987f0c1 11937var destroyImpl = require('./internal/streams/destroy');
8b095871 11938
9987f0c1 11939util.inherits(Writable, Stream);
8b095871 11940
9987f0c1 11941function nop() {}
8b095871 11942
9987f0c1
IC
11943function WritableState(options, stream) {
11944 Duplex = Duplex || require('./_stream_duplex');
8b095871 11945
9987f0c1 11946 options = options || {};
8b095871 11947
9987f0c1
IC
11948 // object stream flag to indicate whether or not this stream
11949 // contains buffers or objects.
11950 this.objectMode = !!options.objectMode;
8b095871 11951
9987f0c1 11952 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
8b095871 11953
9987f0c1
IC
11954 // the point at which write() starts returning false
11955 // Note: 0 is a valid value, means that we always return false if
11956 // the entire buffer is not flushed immediately on write()
11957 var hwm = options.highWaterMark;
11958 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
11959 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
8b095871 11960
9987f0c1
IC
11961 // cast to ints.
11962 this.highWaterMark = Math.floor(this.highWaterMark);
8b095871 11963
9987f0c1
IC
11964 // if _final has been called
11965 this.finalCalled = false;
8b095871 11966
9987f0c1
IC
11967 // drain event flag.
11968 this.needDrain = false;
11969 // at the start of calling end()
11970 this.ending = false;
11971 // when end() has been called, and returned
11972 this.ended = false;
11973 // when 'finish' is emitted
11974 this.finished = false;
8b095871 11975
9987f0c1
IC
11976 // has it been destroyed
11977 this.destroyed = false;
8b095871 11978
9987f0c1
IC
11979 // should we decode strings into buffers before passing to _write?
11980 // this is here so that some node-core streams can optimize string
11981 // handling at a lower level.
11982 var noDecode = options.decodeStrings === false;
11983 this.decodeStrings = !noDecode;
8b095871 11984
9987f0c1
IC
11985 // Crypto is kind of old and crusty. Historically, its default string
11986 // encoding is 'binary' so we have to make this configurable.
11987 // Everything else in the universe uses 'utf8', though.
11988 this.defaultEncoding = options.defaultEncoding || 'utf8';
8b095871 11989
9987f0c1
IC
11990 // not an actual buffer we keep track of, but a measurement
11991 // of how much we're waiting to get pushed to some underlying
11992 // socket or file.
11993 this.length = 0;
8b095871 11994
9987f0c1
IC
11995 // a flag to see when we're in the middle of a write.
11996 this.writing = false;
8b095871 11997
9987f0c1
IC
11998 // when true all writes will be buffered until .uncork() call
11999 this.corked = 0;
8b095871 12000
9987f0c1
IC
12001 // a flag to be able to tell if the onwrite cb is called immediately,
12002 // or on a later tick. We set this to true at first, because any
12003 // actions that shouldn't happen until "later" should generally also
12004 // not happen before the first write call.
12005 this.sync = true;
8b095871 12006
9987f0c1
IC
12007 // a flag to know if we're processing previously buffered items, which
12008 // may call the _write() callback in the same tick, so that we don't
12009 // end up in an overlapped onwrite situation.
12010 this.bufferProcessing = false;
8b095871 12011
9987f0c1
IC
12012 // the callback that's passed to _write(chunk,cb)
12013 this.onwrite = function (er) {
12014 onwrite(stream, er);
12015 };
8b095871 12016
9987f0c1
IC
12017 // the callback that the user supplies to write(chunk,encoding,cb)
12018 this.writecb = null;
8b095871 12019
9987f0c1
IC
12020 // the amount that is being written when _write is called.
12021 this.writelen = 0;
8b095871 12022
9987f0c1
IC
12023 this.bufferedRequest = null;
12024 this.lastBufferedRequest = null;
8b095871 12025
9987f0c1
IC
12026 // number of pending user-supplied write callbacks
12027 // this must be 0 before 'finish' can be emitted
12028 this.pendingcb = 0;
8b095871 12029
9987f0c1
IC
12030 // emit prefinish if the only thing we're waiting for is _write cbs
12031 // This is relevant for synchronous Transform streams
12032 this.prefinished = false;
8b095871 12033
9987f0c1
IC
12034 // True if the error was already emitted and should not be thrown again
12035 this.errorEmitted = false;
8b095871 12036
9987f0c1
IC
12037 // count buffered requests
12038 this.bufferedRequestCount = 0;
8b095871 12039
9987f0c1
IC
12040 // allocate the first CorkedRequest, there is always
12041 // one allocated and free to use, and we maintain at most two
12042 this.corkedRequestsFree = new CorkedRequest(this);
12043}
8b095871 12044
9987f0c1
IC
12045WritableState.prototype.getBuffer = function getBuffer() {
12046 var current = this.bufferedRequest;
12047 var out = [];
12048 while (current) {
12049 out.push(current);
12050 current = current.next;
12051 }
12052 return out;
12053};
12054
12055(function () {
12056 try {
12057 Object.defineProperty(WritableState.prototype, 'buffer', {
12058 get: internalUtil.deprecate(function () {
12059 return this.getBuffer();
12060 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
12061 });
12062 } catch (_) {}
12063})();
12064
12065// Test _writableState for inheritance to account for Duplex streams,
12066// whose prototype chain only points to Readable.
12067var realHasInstance;
12068if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
12069 realHasInstance = Function.prototype[Symbol.hasInstance];
12070 Object.defineProperty(Writable, Symbol.hasInstance, {
12071 value: function (object) {
12072 if (realHasInstance.call(this, object)) return true;
12073
12074 return object && object._writableState instanceof WritableState;
8b095871 12075 }
9987f0c1
IC
12076 });
12077} else {
12078 realHasInstance = function (object) {
12079 return object instanceof this;
12080 };
12081}
8b095871 12082
9987f0c1
IC
12083function Writable(options) {
12084 Duplex = Duplex || require('./_stream_duplex');
12085
12086 // Writable ctor is applied to Duplexes, too.
12087 // `realHasInstance` is necessary because using plain `instanceof`
12088 // would return false, as no `_writableState` property is attached.
12089
12090 // Trying to use the custom `instanceof` for Writable here will also break the
12091 // Node.js LazyTransform implementation, which has a non-trivial getter for
12092 // `_writableState` that would lead to infinite recursion.
12093 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
12094 return new Writable(options);
8b095871
IC
12095 }
12096
9987f0c1
IC
12097 this._writableState = new WritableState(options, this);
12098
12099 // legacy.
12100 this.writable = true;
12101
12102 if (options) {
12103 if (typeof options.write === 'function') this._write = options.write;
12104
12105 if (typeof options.writev === 'function') this._writev = options.writev;
12106
12107 if (typeof options.destroy === 'function') this._destroy = options.destroy;
12108
12109 if (typeof options.final === 'function') this._final = options.final;
12110 }
12111
12112 Stream.call(this);
12113}
12114
12115// Otherwise people can pipe Writable streams, which is just wrong.
12116Writable.prototype.pipe = function () {
12117 this.emit('error', new Error('Cannot pipe, not readable'));
8b095871
IC
12118};
12119
9987f0c1
IC
12120function writeAfterEnd(stream, cb) {
12121 var er = new Error('write after end');
12122 // TODO: defer error events consistently everywhere, not just the cb
12123 stream.emit('error', er);
12124 processNextTick(cb, er);
12125}
8b095871 12126
9987f0c1
IC
12127// Checks that a user-supplied chunk is valid, especially for the particular
12128// mode the stream is in. Currently this means that `null` is never accepted
12129// and undefined/non-string values are only allowed in object mode.
12130function validChunk(stream, state, chunk, cb) {
12131 var valid = true;
12132 var er = false;
8b095871 12133
9987f0c1
IC
12134 if (chunk === null) {
12135 er = new TypeError('May not write null values to stream');
12136 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
12137 er = new TypeError('Invalid non-string/buffer chunk');
12138 }
12139 if (er) {
12140 stream.emit('error', er);
12141 processNextTick(cb, er);
12142 valid = false;
8b095871 12143 }
9987f0c1
IC
12144 return valid;
12145}
8b095871 12146
9987f0c1
IC
12147Writable.prototype.write = function (chunk, encoding, cb) {
12148 var state = this._writableState;
12149 var ret = false;
12150 var isBuf = _isUint8Array(chunk) && !state.objectMode;
12151
12152 if (isBuf && !Buffer.isBuffer(chunk)) {
12153 chunk = _uint8ArrayToBuffer(chunk);
8b095871
IC
12154 }
12155
9987f0c1
IC
12156 if (typeof encoding === 'function') {
12157 cb = encoding;
12158 encoding = null;
12159 }
8b095871 12160
9987f0c1
IC
12161 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
12162
12163 if (typeof cb !== 'function') cb = nop;
12164
12165 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
12166 state.pendingcb++;
12167 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
8b095871 12168 }
8b095871 12169
9987f0c1 12170 return ret;
8b095871
IC
12171};
12172
9987f0c1
IC
12173Writable.prototype.cork = function () {
12174 var state = this._writableState;
12175
12176 state.corked++;
8b095871
IC
12177};
12178
9987f0c1
IC
12179Writable.prototype.uncork = function () {
12180 var state = this._writableState;
12181
12182 if (state.corked) {
12183 state.corked--;
12184
12185 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
12186 }
8b095871
IC
12187};
12188
9987f0c1
IC
12189Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
12190 // node::ParseEncoding() requires lower case.
12191 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
12192 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
12193 this._writableState.defaultEncoding = encoding;
12194 return this;
12195};
8b095871 12196
9987f0c1
IC
12197function decodeChunk(state, chunk, encoding) {
12198 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
12199 chunk = Buffer.from(chunk, encoding);
12200 }
12201 return chunk;
8b095871
IC
12202}
12203
9987f0c1
IC
12204// if we're already writing something, then just put this
12205// in the queue, and wait our turn. Otherwise, call _write
12206// If we return false, then we need a drain event, so set that flag.
12207function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
12208 if (!isBuf) {
12209 var newChunk = decodeChunk(state, chunk, encoding);
12210 if (chunk !== newChunk) {
12211 isBuf = true;
12212 encoding = 'buffer';
12213 chunk = newChunk;
12214 }
12215 }
12216 var len = state.objectMode ? 1 : chunk.length;
8b095871 12217
9987f0c1 12218 state.length += len;
8b095871 12219
9987f0c1
IC
12220 var ret = state.length < state.highWaterMark;
12221 // we must ensure that previous needDrain will not be reset to false.
12222 if (!ret) state.needDrain = true;
12223
12224 if (state.writing || state.corked) {
12225 var last = state.lastBufferedRequest;
12226 state.lastBufferedRequest = {
12227 chunk: chunk,
12228 encoding: encoding,
12229 isBuf: isBuf,
12230 callback: cb,
12231 next: null
12232 };
12233 if (last) {
12234 last.next = state.lastBufferedRequest;
12235 } else {
12236 state.bufferedRequest = state.lastBufferedRequest;
12237 }
12238 state.bufferedRequestCount += 1;
12239 } else {
12240 doWrite(stream, state, false, len, chunk, encoding, cb);
8b095871 12241 }
9987f0c1
IC
12242
12243 return ret;
8b095871
IC
12244}
12245
9987f0c1
IC
12246function doWrite(stream, state, writev, len, chunk, encoding, cb) {
12247 state.writelen = len;
12248 state.writecb = cb;
12249 state.writing = true;
12250 state.sync = true;
12251 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
12252 state.sync = false;
12253}
8b095871 12254
9987f0c1
IC
12255function onwriteError(stream, state, sync, er, cb) {
12256 --state.pendingcb;
8b095871 12257
9987f0c1
IC
12258 if (sync) {
12259 // defer the callback if we are being called synchronously
12260 // to avoid piling up things on the stack
12261 processNextTick(cb, er);
12262 // this can emit finish, and it will always happen
12263 // after error
12264 processNextTick(finishMaybe, stream, state);
12265 stream._writableState.errorEmitted = true;
12266 stream.emit('error', er);
12267 } else {
12268 // the caller expect this to happen before if
12269 // it is async
12270 cb(er);
12271 stream._writableState.errorEmitted = true;
12272 stream.emit('error', er);
12273 // this can emit finish, but finish must
12274 // always follow error
12275 finishMaybe(stream, state);
12276 }
12277}
8b095871 12278
9987f0c1
IC
12279function onwriteStateUpdate(state) {
12280 state.writing = false;
12281 state.writecb = null;
12282 state.length -= state.writelen;
12283 state.writelen = 0;
8b095871
IC
12284}
12285
9987f0c1
IC
12286function onwrite(stream, er) {
12287 var state = stream._writableState;
12288 var sync = state.sync;
12289 var cb = state.writecb;
8b095871 12290
9987f0c1 12291 onwriteStateUpdate(state);
8b095871 12292
9987f0c1
IC
12293 if (er) onwriteError(stream, state, sync, er, cb);else {
12294 // Check if we're actually ready to finish, but don't emit yet
12295 var finished = needFinish(state);
12296
12297 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
12298 clearBuffer(stream, state);
8b095871 12299 }
9987f0c1
IC
12300
12301 if (sync) {
12302 /*<replacement>*/
12303 asyncWrite(afterWrite, stream, state, finished, cb);
12304 /*</replacement>*/
12305 } else {
12306 afterWrite(stream, state, finished, cb);
8b095871 12307 }
9987f0c1
IC
12308 }
12309}
8b095871 12310
9987f0c1
IC
12311function afterWrite(stream, state, finished, cb) {
12312 if (!finished) onwriteDrain(stream, state);
12313 state.pendingcb--;
12314 cb();
12315 finishMaybe(stream, state);
8b095871 12316}
8b095871 12317
9987f0c1
IC
12318// Must force callback to be called on nextTick, so that we don't
12319// emit 'drain' before the write() consumer gets the 'false' return
12320// value, and has a chance to attach a 'drain' listener.
12321function onwriteDrain(stream, state) {
12322 if (state.length === 0 && state.needDrain) {
12323 state.needDrain = false;
12324 stream.emit('drain');
12325 }
12326}
8b095871 12327
9987f0c1
IC
12328// if there's something in the buffer waiting, then process it
12329function clearBuffer(stream, state) {
12330 state.bufferProcessing = true;
12331 var entry = state.bufferedRequest;
8b095871 12332
9987f0c1
IC
12333 if (stream._writev && entry && entry.next) {
12334 // Fast case, write everything using _writev()
12335 var l = state.bufferedRequestCount;
12336 var buffer = new Array(l);
12337 var holder = state.corkedRequestsFree;
12338 holder.entry = entry;
8b095871 12339
9987f0c1
IC
12340 var count = 0;
12341 var allBuffers = true;
12342 while (entry) {
12343 buffer[count] = entry;
12344 if (!entry.isBuf) allBuffers = false;
12345 entry = entry.next;
12346 count += 1;
12347 }
12348 buffer.allBuffers = allBuffers;
8b095871 12349
9987f0c1 12350 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
8b095871 12351
9987f0c1
IC
12352 // doWrite is almost always async, defer these to save a bit of time
12353 // as the hot path ends with doWrite
12354 state.pendingcb++;
12355 state.lastBufferedRequest = null;
12356 if (holder.next) {
12357 state.corkedRequestsFree = holder.next;
12358 holder.next = null;
12359 } else {
12360 state.corkedRequestsFree = new CorkedRequest(state);
12361 }
12362 } else {
12363 // Slow case, write chunks one-by-one
12364 while (entry) {
12365 var chunk = entry.chunk;
12366 var encoding = entry.encoding;
12367 var cb = entry.callback;
12368 var len = state.objectMode ? 1 : chunk.length;
8b095871 12369
9987f0c1
IC
12370 doWrite(stream, state, false, len, chunk, encoding, cb);
12371 entry = entry.next;
12372 // if we didn't call the onwrite immediately, then
12373 // it means that we need to wait until it does.
12374 // also, that means that the chunk and cb are currently
12375 // being processed, so move the buffer counter past them.
12376 if (state.writing) {
12377 break;
12378 }
12379 }
8b095871 12380
9987f0c1
IC
12381 if (entry === null) state.lastBufferedRequest = null;
12382 }
8b095871 12383
9987f0c1
IC
12384 state.bufferedRequestCount = 0;
12385 state.bufferedRequest = entry;
12386 state.bufferProcessing = false;
8b095871 12387}
8b095871 12388
9987f0c1
IC
12389Writable.prototype._write = function (chunk, encoding, cb) {
12390 cb(new Error('_write() is not implemented'));
12391};
8b095871 12392
9987f0c1 12393Writable.prototype._writev = null;
8b095871 12394
9987f0c1
IC
12395Writable.prototype.end = function (chunk, encoding, cb) {
12396 var state = this._writableState;
8b095871 12397
9987f0c1
IC
12398 if (typeof chunk === 'function') {
12399 cb = chunk;
12400 chunk = null;
12401 encoding = null;
12402 } else if (typeof encoding === 'function') {
12403 cb = encoding;
12404 encoding = null;
12405 }
8b095871 12406
9987f0c1 12407 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
8b095871 12408
9987f0c1
IC
12409 // .end() fully uncorks
12410 if (state.corked) {
12411 state.corked = 1;
12412 this.uncork();
12413 }
8b095871 12414
9987f0c1
IC
12415 // ignore unnecessary end() calls.
12416 if (!state.ending && !state.finished) endWritable(this, state, cb);
12417};
8b095871 12418
9987f0c1
IC
12419function needFinish(state) {
12420 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
12421}
12422function callFinal(stream, state) {
12423 stream._final(function (err) {
12424 state.pendingcb--;
12425 if (err) {
12426 stream.emit('error', err);
12427 }
12428 state.prefinished = true;
12429 stream.emit('prefinish');
12430 finishMaybe(stream, state);
12431 });
12432}
12433function prefinish(stream, state) {
12434 if (!state.prefinished && !state.finalCalled) {
12435 if (typeof stream._final === 'function') {
12436 state.pendingcb++;
12437 state.finalCalled = true;
12438 processNextTick(callFinal, stream, state);
12439 } else {
12440 state.prefinished = true;
12441 stream.emit('prefinish');
12442 }
12443 }
8b095871
IC
12444}
12445
9987f0c1
IC
12446function finishMaybe(stream, state) {
12447 var need = needFinish(state);
12448 if (need) {
12449 prefinish(stream, state);
12450 if (state.pendingcb === 0) {
12451 state.finished = true;
12452 stream.emit('finish');
12453 }
12454 }
12455 return need;
8b095871
IC
12456}
12457
9987f0c1
IC
12458function endWritable(stream, state, cb) {
12459 state.ending = true;
12460 finishMaybe(stream, state);
12461 if (cb) {
12462 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
8b095871 12463 }
9987f0c1
IC
12464 state.ended = true;
12465 stream.writable = false;
8b095871
IC
12466}
12467
9987f0c1
IC
12468function onCorkedFinish(corkReq, state, err) {
12469 var entry = corkReq.entry;
12470 corkReq.entry = null;
12471 while (entry) {
12472 var cb = entry.callback;
12473 state.pendingcb--;
12474 cb(err);
12475 entry = entry.next;
12476 }
12477 if (state.corkedRequestsFree) {
12478 state.corkedRequestsFree.next = corkReq;
12479 } else {
12480 state.corkedRequestsFree = corkReq;
12481 }
12482}
8b095871 12483
9987f0c1
IC
12484Object.defineProperty(Writable.prototype, 'destroyed', {
12485 get: function () {
12486 if (this._writableState === undefined) {
12487 return false;
12488 }
12489 return this._writableState.destroyed;
12490 },
12491 set: function (value) {
12492 // we ignore the value if the stream
12493 // has not been initialized yet
12494 if (!this._writableState) {
12495 return;
12496 }
8b095871 12497
9987f0c1
IC
12498 // backward compatibility, the user is explicitly
12499 // managing destroyed
12500 this._writableState.destroyed = value;
12501 }
12502});
8b095871 12503
9987f0c1
IC
12504Writable.prototype.destroy = destroyImpl.destroy;
12505Writable.prototype._undestroy = destroyImpl.undestroy;
12506Writable.prototype._destroy = function (err, cb) {
12507 this.end();
12508 cb(err);
12509};
12510}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
12511},{"./_stream_duplex":14,"./internal/streams/destroy":20,"./internal/streams/stream":21,"_process":12,"core-util-is":5,"inherits":8,"process-nextick-args":11,"safe-buffer":26,"util-deprecate":29}],19:[function(require,module,exports){
12512'use strict';
8b095871
IC
12513
12514/*<replacement>*/
8b095871 12515
9987f0c1 12516function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
8b095871 12517
9987f0c1
IC
12518var Buffer = require('safe-buffer').Buffer;
12519/*</replacement>*/
8b095871 12520
9987f0c1
IC
12521function copyBuffer(src, target, offset) {
12522 src.copy(target, offset);
8b095871
IC
12523}
12524
9987f0c1
IC
12525module.exports = function () {
12526 function BufferList() {
12527 _classCallCheck(this, BufferList);
8b095871 12528
9987f0c1
IC
12529 this.head = null;
12530 this.tail = null;
12531 this.length = 0;
12532 }
8b095871 12533
9987f0c1
IC
12534 BufferList.prototype.push = function push(v) {
12535 var entry = { data: v, next: null };
12536 if (this.length > 0) this.tail.next = entry;else this.head = entry;
12537 this.tail = entry;
12538 ++this.length;
12539 };
8b095871 12540
9987f0c1
IC
12541 BufferList.prototype.unshift = function unshift(v) {
12542 var entry = { data: v, next: this.head };
12543 if (this.length === 0) this.tail = entry;
12544 this.head = entry;
12545 ++this.length;
12546 };
8b095871 12547
9987f0c1
IC
12548 BufferList.prototype.shift = function shift() {
12549 if (this.length === 0) return;
12550 var ret = this.head.data;
12551 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
12552 --this.length;
12553 return ret;
12554 };
8b095871 12555
9987f0c1
IC
12556 BufferList.prototype.clear = function clear() {
12557 this.head = this.tail = null;
12558 this.length = 0;
12559 };
8b095871 12560
9987f0c1
IC
12561 BufferList.prototype.join = function join(s) {
12562 if (this.length === 0) return '';
12563 var p = this.head;
12564 var ret = '' + p.data;
12565 while (p = p.next) {
12566 ret += s + p.data;
12567 }return ret;
12568 };
8b095871 12569
9987f0c1
IC
12570 BufferList.prototype.concat = function concat(n) {
12571 if (this.length === 0) return Buffer.alloc(0);
12572 if (this.length === 1) return this.head.data;
12573 var ret = Buffer.allocUnsafe(n >>> 0);
12574 var p = this.head;
12575 var i = 0;
12576 while (p) {
12577 copyBuffer(p.data, ret, i);
12578 i += p.data.length;
12579 p = p.next;
12580 }
12581 return ret;
12582 };
8b095871 12583
9987f0c1
IC
12584 return BufferList;
12585}();
12586},{"safe-buffer":26}],20:[function(require,module,exports){
12587'use strict';
8b095871
IC
12588
12589/*<replacement>*/
9987f0c1
IC
12590
12591var processNextTick = require('process-nextick-args');
8b095871
IC
12592/*</replacement>*/
12593
9987f0c1
IC
12594// undocumented cb() API, needed for core, not for public API
12595function destroy(err, cb) {
12596 var _this = this;
8b095871 12597
9987f0c1
IC
12598 var readableDestroyed = this._readableState && this._readableState.destroyed;
12599 var writableDestroyed = this._writableState && this._writableState.destroyed;
8b095871 12600
9987f0c1
IC
12601 if (readableDestroyed || writableDestroyed) {
12602 if (cb) {
12603 cb(err);
12604 } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {
12605 processNextTick(emitErrorNT, this, err);
12606 }
12607 return;
12608 }
8b095871 12609
9987f0c1
IC
12610 // we set destroyed to true before firing error callbacks in order
12611 // to make it re-entrance safe in case destroy() is called within callbacks
8b095871 12612
9987f0c1
IC
12613 if (this._readableState) {
12614 this._readableState.destroyed = true;
12615 }
8b095871 12616
9987f0c1
IC
12617 // if this is a duplex stream mark the writable part as destroyed as well
12618 if (this._writableState) {
12619 this._writableState.destroyed = true;
12620 }
8b095871 12621
9987f0c1
IC
12622 this._destroy(err || null, function (err) {
12623 if (!cb && err) {
12624 processNextTick(emitErrorNT, _this, err);
12625 if (_this._writableState) {
12626 _this._writableState.errorEmitted = true;
12627 }
12628 } else if (cb) {
12629 cb(err);
12630 }
12631 });
12632}
8b095871 12633
9987f0c1
IC
12634function undestroy() {
12635 if (this._readableState) {
12636 this._readableState.destroyed = false;
12637 this._readableState.reading = false;
12638 this._readableState.ended = false;
12639 this._readableState.endEmitted = false;
12640 }
8b095871 12641
9987f0c1
IC
12642 if (this._writableState) {
12643 this._writableState.destroyed = false;
12644 this._writableState.ended = false;
12645 this._writableState.ending = false;
12646 this._writableState.finished = false;
12647 this._writableState.errorEmitted = false;
12648 }
12649}
8b095871 12650
9987f0c1
IC
12651function emitErrorNT(self, err) {
12652 self.emit('error', err);
12653}
8b095871 12654
9987f0c1
IC
12655module.exports = {
12656 destroy: destroy,
12657 undestroy: undestroy
12658};
12659},{"process-nextick-args":11}],21:[function(require,module,exports){
12660module.exports = require('events').EventEmitter;
8b095871 12661
9987f0c1
IC
12662},{"events":6}],22:[function(require,module,exports){
12663module.exports = require('./readable').PassThrough
8b095871 12664
9987f0c1
IC
12665},{"./readable":23}],23:[function(require,module,exports){
12666exports = module.exports = require('./lib/_stream_readable.js');
12667exports.Stream = exports;
12668exports.Readable = exports;
12669exports.Writable = require('./lib/_stream_writable.js');
12670exports.Duplex = require('./lib/_stream_duplex.js');
12671exports.Transform = require('./lib/_stream_transform.js');
12672exports.PassThrough = require('./lib/_stream_passthrough.js');
8b095871 12673
9987f0c1
IC
12674},{"./lib/_stream_duplex.js":14,"./lib/_stream_passthrough.js":15,"./lib/_stream_readable.js":16,"./lib/_stream_transform.js":17,"./lib/_stream_writable.js":18}],24:[function(require,module,exports){
12675module.exports = require('./readable').Transform
8b095871 12676
9987f0c1
IC
12677},{"./readable":23}],25:[function(require,module,exports){
12678module.exports = require('./lib/_stream_writable.js');
8b095871 12679
9987f0c1
IC
12680},{"./lib/_stream_writable.js":18}],26:[function(require,module,exports){
12681/* eslint-disable node/no-deprecated-api */
12682var buffer = require('buffer')
12683var Buffer = buffer.Buffer
8b095871 12684
9987f0c1
IC
12685// alternative to using Object.keys for old browsers
12686function copyProps (src, dst) {
12687 for (var key in src) {
12688 dst[key] = src[key]
12689 }
12690}
12691if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
12692 module.exports = buffer
12693} else {
12694 // Copy properties from require('buffer')
12695 copyProps(buffer, exports)
12696 exports.Buffer = SafeBuffer
12697}
8b095871 12698
9987f0c1
IC
12699function SafeBuffer (arg, encodingOrOffset, length) {
12700 return Buffer(arg, encodingOrOffset, length)
12701}
8b095871 12702
9987f0c1
IC
12703// Copy static methods from Buffer
12704copyProps(Buffer, SafeBuffer)
8b095871 12705
9987f0c1
IC
12706SafeBuffer.from = function (arg, encodingOrOffset, length) {
12707 if (typeof arg === 'number') {
12708 throw new TypeError('Argument must not be a number')
8b095871 12709 }
9987f0c1 12710 return Buffer(arg, encodingOrOffset, length)
8b095871
IC
12711}
12712
9987f0c1
IC
12713SafeBuffer.alloc = function (size, fill, encoding) {
12714 if (typeof size !== 'number') {
12715 throw new TypeError('Argument must be a number')
12716 }
12717 var buf = Buffer(size)
12718 if (fill !== undefined) {
12719 if (typeof encoding === 'string') {
12720 buf.fill(fill, encoding)
12721 } else {
12722 buf.fill(fill)
12723 }
12724 } else {
12725 buf.fill(0)
12726 }
12727 return buf
12728}
8b095871 12729
9987f0c1
IC
12730SafeBuffer.allocUnsafe = function (size) {
12731 if (typeof size !== 'number') {
12732 throw new TypeError('Argument must be a number')
12733 }
12734 return Buffer(size)
12735}
8b095871 12736
9987f0c1
IC
12737SafeBuffer.allocUnsafeSlow = function (size) {
12738 if (typeof size !== 'number') {
12739 throw new TypeError('Argument must be a number')
12740 }
12741 return buffer.SlowBuffer(size)
12742}
12743
12744},{"buffer":4}],27:[function(require,module,exports){
12745// Copyright Joyent, Inc. and other Node contributors.
12746//
12747// Permission is hereby granted, free of charge, to any person obtaining a
12748// copy of this software and associated documentation files (the
12749// "Software"), to deal in the Software without restriction, including
12750// without limitation the rights to use, copy, modify, merge, publish,
12751// distribute, sublicense, and/or sell copies of the Software, and to permit
12752// persons to whom the Software is furnished to do so, subject to the
12753// following conditions:
12754//
12755// The above copyright notice and this permission notice shall be included
12756// in all copies or substantial portions of the Software.
12757//
12758// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12759// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12760// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
12761// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
12762// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
12763// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
12764// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 12765
9987f0c1 12766module.exports = Stream;
8b095871 12767
9987f0c1
IC
12768var EE = require('events').EventEmitter;
12769var inherits = require('inherits');
8b095871 12770
9987f0c1
IC
12771inherits(Stream, EE);
12772Stream.Readable = require('readable-stream/readable.js');
12773Stream.Writable = require('readable-stream/writable.js');
12774Stream.Duplex = require('readable-stream/duplex.js');
12775Stream.Transform = require('readable-stream/transform.js');
12776Stream.PassThrough = require('readable-stream/passthrough.js');
8b095871 12777
9987f0c1
IC
12778// Backwards-compat with node 0.4.x
12779Stream.Stream = Stream;
8b095871 12780
8b095871 12781
8b095871 12782
9987f0c1
IC
12783// old-style streams. Note that the pipe method (the only relevant
12784// part of this class) is overridden in the Readable class.
8b095871 12785
9987f0c1
IC
12786function Stream() {
12787 EE.call(this);
12788}
8b095871 12789
9987f0c1
IC
12790Stream.prototype.pipe = function(dest, options) {
12791 var source = this;
8b095871 12792
9987f0c1
IC
12793 function ondata(chunk) {
12794 if (dest.writable) {
12795 if (false === dest.write(chunk) && source.pause) {
12796 source.pause();
8b095871 12797 }
8b095871 12798 }
8b095871
IC
12799 }
12800
9987f0c1 12801 source.on('data', ondata);
8b095871 12802
9987f0c1
IC
12803 function ondrain() {
12804 if (source.readable && source.resume) {
12805 source.resume();
12806 }
12807 }
8b095871 12808
9987f0c1 12809 dest.on('drain', ondrain);
8b095871 12810
9987f0c1
IC
12811 // If the 'end' option is not supplied, dest.end() will be called when
12812 // source gets the 'end' or 'close' events. Only dest.end() once.
12813 if (!dest._isStdio && (!options || options.end !== false)) {
12814 source.on('end', onend);
12815 source.on('close', onclose);
12816 }
8b095871 12817
9987f0c1
IC
12818 var didOnEnd = false;
12819 function onend() {
12820 if (didOnEnd) return;
12821 didOnEnd = true;
8b095871 12822
9987f0c1 12823 dest.end();
8b095871 12824 }
8b095871 12825
8b095871 12826
9987f0c1
IC
12827 function onclose() {
12828 if (didOnEnd) return;
12829 didOnEnd = true;
8b095871 12830
9987f0c1 12831 if (typeof dest.destroy === 'function') dest.destroy();
8b095871
IC
12832 }
12833
9987f0c1
IC
12834 // don't leave dangling pipes when there are errors.
12835 function onerror(er) {
12836 cleanup();
12837 if (EE.listenerCount(this, 'error') === 0) {
12838 throw er; // Unhandled stream error in pipe.
12839 }
8b095871
IC
12840 }
12841
9987f0c1
IC
12842 source.on('error', onerror);
12843 dest.on('error', onerror);
8b095871 12844
9987f0c1
IC
12845 // remove all the event listeners that were added.
12846 function cleanup() {
12847 source.removeListener('data', ondata);
12848 dest.removeListener('drain', ondrain);
8b095871 12849
9987f0c1
IC
12850 source.removeListener('end', onend);
12851 source.removeListener('close', onclose);
8b095871 12852
9987f0c1
IC
12853 source.removeListener('error', onerror);
12854 dest.removeListener('error', onerror);
8b095871 12855
9987f0c1
IC
12856 source.removeListener('end', cleanup);
12857 source.removeListener('close', cleanup);
8b095871 12858
9987f0c1 12859 dest.removeListener('close', cleanup);
8b095871
IC
12860 }
12861
9987f0c1
IC
12862 source.on('end', cleanup);
12863 source.on('close', cleanup);
8b095871 12864
9987f0c1 12865 dest.on('close', cleanup);
8b095871 12866
9987f0c1 12867 dest.emit('pipe', source);
8b095871 12868
9987f0c1
IC
12869 // Allow for unix-like usage: A.pipe(B).pipe(C)
12870 return dest;
12871};
8b095871 12872
9987f0c1
IC
12873},{"events":6,"inherits":8,"readable-stream/duplex.js":13,"readable-stream/passthrough.js":22,"readable-stream/readable.js":23,"readable-stream/transform.js":24,"readable-stream/writable.js":25}],28:[function(require,module,exports){
12874'use strict';
8b095871 12875
9987f0c1 12876var Buffer = require('safe-buffer').Buffer;
8b095871 12877
9987f0c1
IC
12878var isEncoding = Buffer.isEncoding || function (encoding) {
12879 encoding = '' + encoding;
12880 switch (encoding && encoding.toLowerCase()) {
12881 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':
12882 return true;
12883 default:
12884 return false;
12885 }
12886};
8b095871 12887
9987f0c1
IC
12888function _normalizeEncoding(enc) {
12889 if (!enc) return 'utf8';
12890 var retried;
12891 while (true) {
12892 switch (enc) {
12893 case 'utf8':
12894 case 'utf-8':
12895 return 'utf8';
12896 case 'ucs2':
12897 case 'ucs-2':
12898 case 'utf16le':
12899 case 'utf-16le':
12900 return 'utf16le';
12901 case 'latin1':
12902 case 'binary':
12903 return 'latin1';
12904 case 'base64':
12905 case 'ascii':
12906 case 'hex':
12907 return enc;
12908 default:
12909 if (retried) return; // undefined
12910 enc = ('' + enc).toLowerCase();
12911 retried = true;
12912 }
8b095871 12913 }
9987f0c1 12914};
8b095871 12915
9987f0c1
IC
12916// Do not cache `Buffer.isEncoding` when checking encoding names as some
12917// modules monkey-patch it to support additional encodings
12918function normalizeEncoding(enc) {
12919 var nenc = _normalizeEncoding(enc);
12920 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
12921 return nenc || enc;
12922}
8b095871 12923
9987f0c1
IC
12924// StringDecoder provides an interface for efficiently splitting a series of
12925// buffers into a series of JS strings without breaking apart multi-byte
12926// characters.
12927exports.StringDecoder = StringDecoder;
12928function StringDecoder(encoding) {
12929 this.encoding = normalizeEncoding(encoding);
12930 var nb;
12931 switch (this.encoding) {
12932 case 'utf16le':
12933 this.text = utf16Text;
12934 this.end = utf16End;
12935 nb = 4;
12936 break;
12937 case 'utf8':
12938 this.fillLast = utf8FillLast;
12939 nb = 4;
12940 break;
12941 case 'base64':
12942 this.text = base64Text;
12943 this.end = base64End;
12944 nb = 3;
12945 break;
12946 default:
12947 this.write = simpleWrite;
12948 this.end = simpleEnd;
12949 return;
12950 }
12951 this.lastNeed = 0;
12952 this.lastTotal = 0;
12953 this.lastChar = Buffer.allocUnsafe(nb);
12954}
8b095871 12955
9987f0c1
IC
12956StringDecoder.prototype.write = function (buf) {
12957 if (buf.length === 0) return '';
12958 var r;
12959 var i;
12960 if (this.lastNeed) {
12961 r = this.fillLast(buf);
12962 if (r === undefined) return '';
12963 i = this.lastNeed;
12964 this.lastNeed = 0;
12965 } else {
12966 i = 0;
12967 }
12968 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
12969 return r || '';
12970};
8b095871 12971
9987f0c1 12972StringDecoder.prototype.end = utf8End;
8b095871 12973
9987f0c1
IC
12974// Returns only complete characters in a Buffer
12975StringDecoder.prototype.text = utf8Text;
8b095871 12976
9987f0c1
IC
12977// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
12978StringDecoder.prototype.fillLast = function (buf) {
12979 if (this.lastNeed <= buf.length) {
12980 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
12981 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
8b095871 12982 }
9987f0c1
IC
12983 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
12984 this.lastNeed -= buf.length;
12985};
8b095871 12986
9987f0c1
IC
12987// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
12988// continuation byte.
12989function utf8CheckByte(byte) {
12990 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
12991 return -1;
12992}
8b095871 12993
9987f0c1
IC
12994// Checks at most 3 bytes at the end of a Buffer in order to detect an
12995// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
12996// needed to complete the UTF-8 character (if applicable) are returned.
12997function utf8CheckIncomplete(self, buf, i) {
12998 var j = buf.length - 1;
12999 if (j < i) return 0;
13000 var nb = utf8CheckByte(buf[j]);
13001 if (nb >= 0) {
13002 if (nb > 0) self.lastNeed = nb - 1;
13003 return nb;
13004 }
13005 if (--j < i) return 0;
13006 nb = utf8CheckByte(buf[j]);
13007 if (nb >= 0) {
13008 if (nb > 0) self.lastNeed = nb - 2;
13009 return nb;
13010 }
13011 if (--j < i) return 0;
13012 nb = utf8CheckByte(buf[j]);
13013 if (nb >= 0) {
13014 if (nb > 0) {
13015 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
8b095871 13016 }
9987f0c1 13017 return nb;
8b095871 13018 }
9987f0c1
IC
13019 return 0;
13020}
8b095871 13021
9987f0c1
IC
13022// Validates as many continuation bytes for a multi-byte UTF-8 character as
13023// needed or are available. If we see a non-continuation byte where we expect
13024// one, we "replace" the validated continuation bytes we've seen so far with
13025// UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
13026// behavior. The continuation byte check is included three times in the case
13027// where all of the continuation bytes for a character exist in the same buffer.
13028// It is also done this way as a slight performance increase instead of using a
13029// loop.
13030function utf8CheckExtraBytes(self, buf, p) {
13031 if ((buf[0] & 0xC0) !== 0x80) {
13032 self.lastNeed = 0;
13033 return '\ufffd'.repeat(p);
13034 }
13035 if (self.lastNeed > 1 && buf.length > 1) {
13036 if ((buf[1] & 0xC0) !== 0x80) {
13037 self.lastNeed = 1;
13038 return '\ufffd'.repeat(p + 1);
13039 }
13040 if (self.lastNeed > 2 && buf.length > 2) {
13041 if ((buf[2] & 0xC0) !== 0x80) {
13042 self.lastNeed = 2;
13043 return '\ufffd'.repeat(p + 2);
13044 }
13045 }
13046 }
8b095871
IC
13047}
13048
9987f0c1
IC
13049// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
13050function utf8FillLast(buf) {
13051 var p = this.lastTotal - this.lastNeed;
13052 var r = utf8CheckExtraBytes(this, buf, p);
13053 if (r !== undefined) return r;
13054 if (this.lastNeed <= buf.length) {
13055 buf.copy(this.lastChar, p, 0, this.lastNeed);
13056 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
8b095871 13057 }
9987f0c1
IC
13058 buf.copy(this.lastChar, p, 0, buf.length);
13059 this.lastNeed -= buf.length;
8b095871
IC
13060}
13061
9987f0c1
IC
13062// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
13063// partial character, the character's bytes are buffered until the required
13064// number of bytes are available.
13065function utf8Text(buf, i) {
13066 var total = utf8CheckIncomplete(this, buf, i);
13067 if (!this.lastNeed) return buf.toString('utf8', i);
13068 this.lastTotal = total;
13069 var end = buf.length - (total - this.lastNeed);
13070 buf.copy(this.lastChar, 0, end);
13071 return buf.toString('utf8', i, end);
8b095871
IC
13072}
13073
9987f0c1
IC
13074// For UTF-8, a replacement character for each buffered byte of a (partial)
13075// character needs to be added to the output.
13076function utf8End(buf) {
13077 var r = buf && buf.length ? this.write(buf) : '';
13078 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
13079 return r;
13080}
8b095871 13081
9987f0c1
IC
13082// UTF-16LE typically needs two bytes per character, but even if we have an even
13083// number of bytes available, we need to check if we end on a leading/high
13084// surrogate. In that case, we need to wait for the next two bytes in order to
13085// decode the last character properly.
13086function utf16Text(buf, i) {
13087 if ((buf.length - i) % 2 === 0) {
13088 var r = buf.toString('utf16le', i);
13089 if (r) {
13090 var c = r.charCodeAt(r.length - 1);
13091 if (c >= 0xD800 && c <= 0xDBFF) {
13092 this.lastNeed = 2;
13093 this.lastTotal = 4;
13094 this.lastChar[0] = buf[buf.length - 2];
13095 this.lastChar[1] = buf[buf.length - 1];
13096 return r.slice(0, -1);
13097 }
13098 }
13099 return r;
8b095871 13100 }
9987f0c1
IC
13101 this.lastNeed = 1;
13102 this.lastTotal = 2;
13103 this.lastChar[0] = buf[buf.length - 1];
13104 return buf.toString('utf16le', i, buf.length - 1);
8b095871
IC
13105}
13106
9987f0c1
IC
13107// For UTF-16LE we do not explicitly append special replacement characters if we
13108// end on a partial character, we simply let v8 handle that.
13109function utf16End(buf) {
13110 var r = buf && buf.length ? this.write(buf) : '';
13111 if (this.lastNeed) {
13112 var end = this.lastTotal - this.lastNeed;
13113 return r + this.lastChar.toString('utf16le', 0, end);
8b095871 13114 }
9987f0c1 13115 return r;
8b095871
IC
13116}
13117
9987f0c1
IC
13118function base64Text(buf, i) {
13119 var n = (buf.length - i) % 3;
13120 if (n === 0) return buf.toString('base64', i);
13121 this.lastNeed = 3 - n;
13122 this.lastTotal = 3;
13123 if (n === 1) {
13124 this.lastChar[0] = buf[buf.length - 1];
13125 } else {
13126 this.lastChar[0] = buf[buf.length - 2];
13127 this.lastChar[1] = buf[buf.length - 1];
13128 }
13129 return buf.toString('base64', i, buf.length - n);
13130}
8b095871 13131
9987f0c1
IC
13132function base64End(buf) {
13133 var r = buf && buf.length ? this.write(buf) : '';
13134 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
13135 return r;
13136}
8b095871 13137
9987f0c1
IC
13138// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
13139function simpleWrite(buf) {
13140 return buf.toString(this.encoding);
13141}
8b095871 13142
9987f0c1
IC
13143function simpleEnd(buf) {
13144 return buf && buf.length ? this.write(buf) : '';
13145}
13146},{"safe-buffer":26}],29:[function(require,module,exports){
13147(function (global){
8b095871 13148
9987f0c1
IC
13149/**
13150 * Module exports.
13151 */
8b095871 13152
9987f0c1
IC
13153module.exports = deprecate;
13154
13155/**
13156 * Mark that a method should not be used.
13157 * Returns a modified function which warns once by default.
13158 *
13159 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
13160 *
13161 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
13162 * will throw an Error when invoked.
13163 *
13164 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
13165 * will invoke `console.trace()` instead of `console.error()`.
13166 *
13167 * @param {Function} fn - the function to deprecate
13168 * @param {String} msg - the string to print to the console when `fn` is invoked
13169 * @returns {Function} a new "deprecated" version of `fn`
13170 * @api public
13171 */
13172
13173function deprecate (fn, msg) {
13174 if (config('noDeprecation')) {
13175 return fn;
8b095871
IC
13176 }
13177
9987f0c1
IC
13178 var warned = false;
13179 function deprecated() {
13180 if (!warned) {
13181 if (config('throwDeprecation')) {
13182 throw new Error(msg);
13183 } else if (config('traceDeprecation')) {
13184 console.trace(msg);
13185 } else {
13186 console.warn(msg);
13187 }
13188 warned = true;
13189 }
13190 return fn.apply(this, arguments);
8b095871
IC
13191 }
13192
9987f0c1
IC
13193 return deprecated;
13194}
8b095871 13195
9987f0c1
IC
13196/**
13197 * Checks `localStorage` for boolean values for the given `name`.
13198 *
13199 * @param {String} name
13200 * @returns {Boolean}
13201 * @api private
13202 */
8b095871 13203
9987f0c1
IC
13204function config (name) {
13205 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
13206 try {
13207 if (!global.localStorage) return false;
13208 } catch (_) {
13209 return false;
8b095871 13210 }
9987f0c1
IC
13211 var val = global.localStorage[name];
13212 if (null == val) return false;
13213 return String(val).toLowerCase() === 'true';
13214}
8b095871 13215
9987f0c1
IC
13216}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
13217},{}],30:[function(require,module,exports){
13218arguments[4][8][0].apply(exports,arguments)
13219},{"dup":8}],31:[function(require,module,exports){
13220module.exports = function isBuffer(arg) {
13221 return arg && typeof arg === 'object'
13222 && typeof arg.copy === 'function'
13223 && typeof arg.fill === 'function'
13224 && typeof arg.readUInt8 === 'function';
13225}
13226},{}],32:[function(require,module,exports){
13227(function (process,global){
13228// Copyright Joyent, Inc. and other Node contributors.
13229//
13230// Permission is hereby granted, free of charge, to any person obtaining a
13231// copy of this software and associated documentation files (the
13232// "Software"), to deal in the Software without restriction, including
13233// without limitation the rights to use, copy, modify, merge, publish,
13234// distribute, sublicense, and/or sell copies of the Software, and to permit
13235// persons to whom the Software is furnished to do so, subject to the
13236// following conditions:
13237//
13238// The above copyright notice and this permission notice shall be included
13239// in all copies or substantial portions of the Software.
13240//
13241// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13242// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
13243// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
13244// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
13245// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
13246// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
13247// USE OR OTHER DEALINGS IN THE SOFTWARE.
13248
13249var formatRegExp = /%[sdj%]/g;
13250exports.format = function(f) {
13251 if (!isString(f)) {
13252 var objects = [];
13253 for (var i = 0; i < arguments.length; i++) {
13254 objects.push(inspect(arguments[i]));
8b095871 13255 }
9987f0c1 13256 return objects.join(' ');
8b095871
IC
13257 }
13258
9987f0c1
IC
13259 var i = 1;
13260 var args = arguments;
13261 var len = args.length;
13262 var str = String(f).replace(formatRegExp, function(x) {
13263 if (x === '%%') return '%';
13264 if (i >= len) return x;
13265 switch (x) {
13266 case '%s': return String(args[i++]);
13267 case '%d': return Number(args[i++]);
13268 case '%j':
13269 try {
13270 return JSON.stringify(args[i++]);
13271 } catch (_) {
13272 return '[Circular]';
13273 }
13274 default:
13275 return x;
13276 }
13277 });
13278 for (var x = args[i]; i < len; x = args[++i]) {
13279 if (isNull(x) || !isObject(x)) {
13280 str += ' ' + x;
13281 } else {
13282 str += ' ' + inspect(x);
13283 }
13284 }
13285 return str;
13286};
8b095871
IC
13287
13288
9987f0c1
IC
13289// Mark that a method should not be used.
13290// Returns a modified function which warns once by default.
13291// If --no-deprecation is set, then it is a no-op.
13292exports.deprecate = function(fn, msg) {
13293 // Allow for deprecating things in the process of starting up.
13294 if (isUndefined(global.process)) {
13295 return function() {
13296 return exports.deprecate(fn, msg).apply(this, arguments);
13297 };
8b095871 13298 }
8b095871 13299
9987f0c1
IC
13300 if (process.noDeprecation === true) {
13301 return fn;
8b095871
IC
13302 }
13303
9987f0c1
IC
13304 var warned = false;
13305 function deprecated() {
13306 if (!warned) {
13307 if (process.throwDeprecation) {
13308 throw new Error(msg);
13309 } else if (process.traceDeprecation) {
13310 console.trace(msg);
13311 } else {
13312 console.error(msg);
13313 }
13314 warned = true;
13315 }
13316 return fn.apply(this, arguments);
8b095871
IC
13317 }
13318
9987f0c1 13319 return deprecated;
8b095871
IC
13320};
13321
8b095871 13322
9987f0c1
IC
13323var debugs = {};
13324var debugEnviron;
13325exports.debuglog = function(set) {
13326 if (isUndefined(debugEnviron))
13327 debugEnviron = process.env.NODE_DEBUG || '';
13328 set = set.toUpperCase();
13329 if (!debugs[set]) {
13330 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
13331 var pid = process.pid;
13332 debugs[set] = function() {
13333 var msg = exports.format.apply(exports, arguments);
13334 console.error('%s %d: %s', set, pid, msg);
13335 };
13336 } else {
13337 debugs[set] = function() {};
13338 }
13339 }
13340 return debugs[set];
13341};
8b095871 13342
8b095871 13343
9987f0c1
IC
13344/**
13345 * Echos the value of a value. Trys to print the value out
13346 * in the best way possible given the different types.
13347 *
13348 * @param {Object} obj The object to print out.
13349 * @param {Object} opts Optional options object that alters the output.
13350 */
13351/* legacy: obj, showHidden, depth, colors*/
13352function inspect(obj, opts) {
13353 // default options
13354 var ctx = {
13355 seen: [],
13356 stylize: stylizeNoColor
13357 };
13358 // legacy...
13359 if (arguments.length >= 3) ctx.depth = arguments[2];
13360 if (arguments.length >= 4) ctx.colors = arguments[3];
13361 if (isBoolean(opts)) {
13362 // legacy...
13363 ctx.showHidden = opts;
13364 } else if (opts) {
13365 // got an "options" object
13366 exports._extend(ctx, opts);
13367 }
13368 // set default options
13369 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
13370 if (isUndefined(ctx.depth)) ctx.depth = 2;
13371 if (isUndefined(ctx.colors)) ctx.colors = false;
13372 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
13373 if (ctx.colors) ctx.stylize = stylizeWithColor;
13374 return formatValue(ctx, obj, ctx.depth);
13375}
13376exports.inspect = inspect;
8b095871 13377
8b095871 13378
9987f0c1
IC
13379// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
13380inspect.colors = {
13381 'bold' : [1, 22],
13382 'italic' : [3, 23],
13383 'underline' : [4, 24],
13384 'inverse' : [7, 27],
13385 'white' : [37, 39],
13386 'grey' : [90, 39],
13387 'black' : [30, 39],
13388 'blue' : [34, 39],
13389 'cyan' : [36, 39],
13390 'green' : [32, 39],
13391 'magenta' : [35, 39],
13392 'red' : [31, 39],
13393 'yellow' : [33, 39]
13394};
8b095871 13395
9987f0c1
IC
13396// Don't use 'blue' not visible on cmd.exe
13397inspect.styles = {
13398 'special': 'cyan',
13399 'number': 'yellow',
13400 'boolean': 'yellow',
13401 'undefined': 'grey',
13402 'null': 'bold',
13403 'string': 'green',
13404 'date': 'magenta',
13405 // "name": intentionally not styling
13406 'regexp': 'red'
13407};
8b095871 13408
8b095871 13409
9987f0c1
IC
13410function stylizeWithColor(str, styleType) {
13411 var style = inspect.styles[styleType];
8b095871 13412
9987f0c1
IC
13413 if (style) {
13414 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
13415 '\u001b[' + inspect.colors[style][1] + 'm';
13416 } else {
13417 return str;
8b095871 13418 }
9987f0c1 13419}
8b095871 13420
8b095871 13421
9987f0c1
IC
13422function stylizeNoColor(str, styleType) {
13423 return str;
13424}
8b095871 13425
8b095871 13426
9987f0c1
IC
13427function arrayToHash(array) {
13428 var hash = {};
8b095871 13429
9987f0c1
IC
13430 array.forEach(function(val, idx) {
13431 hash[val] = true;
13432 });
8b095871 13433
9987f0c1
IC
13434 return hash;
13435}
8b095871 13436
8b095871 13437
9987f0c1
IC
13438function formatValue(ctx, value, recurseTimes) {
13439 // Provide a hook for user-specified inspect functions.
13440 // Check that value is an object with an inspect function on it
13441 if (ctx.customInspect &&
13442 value &&
13443 isFunction(value.inspect) &&
13444 // Filter out the util module, it's inspect function is special
13445 value.inspect !== exports.inspect &&
13446 // Also filter out any prototype objects using the circular check.
13447 !(value.constructor && value.constructor.prototype === value)) {
13448 var ret = value.inspect(recurseTimes, ctx);
13449 if (!isString(ret)) {
13450 ret = formatValue(ctx, ret, recurseTimes);
8b095871 13451 }
9987f0c1 13452 return ret;
8b095871 13453 }
8b095871 13454
9987f0c1
IC
13455 // Primitive types cannot have properties
13456 var primitive = formatPrimitive(ctx, value);
13457 if (primitive) {
13458 return primitive;
8b095871 13459 }
8b095871 13460
9987f0c1
IC
13461 // Look up the keys of the object.
13462 var keys = Object.keys(value);
13463 var visibleKeys = arrayToHash(keys);
8b095871 13464
9987f0c1
IC
13465 if (ctx.showHidden) {
13466 keys = Object.getOwnPropertyNames(value);
8b095871 13467 }
8b095871 13468
9987f0c1
IC
13469 // IE doesn't make error fields non-enumerable
13470 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
13471 if (isError(value)
13472 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
13473 return formatError(value);
8b095871 13474 }
8b095871 13475
9987f0c1
IC
13476 // Some type of object without properties can be shortcutted.
13477 if (keys.length === 0) {
13478 if (isFunction(value)) {
13479 var name = value.name ? ': ' + value.name : '';
13480 return ctx.stylize('[Function' + name + ']', 'special');
8b095871 13481 }
9987f0c1
IC
13482 if (isRegExp(value)) {
13483 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
8b095871 13484 }
9987f0c1
IC
13485 if (isDate(value)) {
13486 return ctx.stylize(Date.prototype.toString.call(value), 'date');
13487 }
13488 if (isError(value)) {
13489 return formatError(value);
8b095871
IC
13490 }
13491 }
13492
9987f0c1 13493 var base = '', array = false, braces = ['{', '}'];
8b095871 13494
9987f0c1
IC
13495 // Make Array say that they are Array
13496 if (isArray(value)) {
13497 array = true;
13498 braces = ['[', ']'];
13499 }
8b095871 13500
9987f0c1
IC
13501 // Make functions say that they are functions
13502 if (isFunction(value)) {
13503 var n = value.name ? ': ' + value.name : '';
13504 base = ' [Function' + n + ']';
13505 }
8b095871 13506
9987f0c1
IC
13507 // Make RegExps say that they are RegExps
13508 if (isRegExp(value)) {
13509 base = ' ' + RegExp.prototype.toString.call(value);
13510 }
8b095871 13511
9987f0c1
IC
13512 // Make dates with properties first say the date
13513 if (isDate(value)) {
13514 base = ' ' + Date.prototype.toUTCString.call(value);
13515 }
8b095871 13516
9987f0c1
IC
13517 // Make error with message first say the error
13518 if (isError(value)) {
13519 base = ' ' + formatError(value);
13520 }
8b095871 13521
9987f0c1
IC
13522 if (keys.length === 0 && (!array || value.length == 0)) {
13523 return braces[0] + base + braces[1];
13524 }
8b095871 13525
9987f0c1
IC
13526 if (recurseTimes < 0) {
13527 if (isRegExp(value)) {
13528 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
8b095871 13529 } else {
9987f0c1
IC
13530 return ctx.stylize('[Object]', 'special');
13531 }
13532 }
8b095871 13533
9987f0c1 13534 ctx.seen.push(value);
8b095871 13535
9987f0c1
IC
13536 var output;
13537 if (array) {
13538 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
13539 } else {
13540 output = keys.map(function(key) {
13541 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
13542 });
8b095871
IC
13543 }
13544
9987f0c1 13545 ctx.seen.pop();
8b095871 13546
9987f0c1
IC
13547 return reduceToSingleString(output, base, braces);
13548}
8b095871 13549
8b095871 13550
9987f0c1
IC
13551function formatPrimitive(ctx, value) {
13552 if (isUndefined(value))
13553 return ctx.stylize('undefined', 'undefined');
13554 if (isString(value)) {
13555 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
13556 .replace(/'/g, "\\'")
13557 .replace(/\\"/g, '"') + '\'';
13558 return ctx.stylize(simple, 'string');
8b095871 13559 }
9987f0c1
IC
13560 if (isNumber(value))
13561 return ctx.stylize('' + value, 'number');
13562 if (isBoolean(value))
13563 return ctx.stylize('' + value, 'boolean');
13564 // For some reason typeof null is "object", so special case here.
13565 if (isNull(value))
13566 return ctx.stylize('null', 'null');
8b095871
IC
13567}
13568
9987f0c1
IC
13569
13570function formatError(value) {
13571 return '[' + Error.prototype.toString.call(value) + ']';
8b095871
IC
13572}
13573
9987f0c1
IC
13574
13575function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
13576 var output = [];
13577 for (var i = 0, l = value.length; i < l; ++i) {
13578 if (hasOwnProperty(value, String(i))) {
13579 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
13580 String(i), true));
13581 } else {
13582 output.push('');
13583 }
8b095871 13584 }
9987f0c1
IC
13585 keys.forEach(function(key) {
13586 if (!key.match(/^\d+$/)) {
13587 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
13588 key, true));
13589 }
13590 });
13591 return output;
8b095871
IC
13592}
13593
8b095871 13594
9987f0c1
IC
13595function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
13596 var name, str, desc;
13597 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
13598 if (desc.get) {
13599 if (desc.set) {
13600 str = ctx.stylize('[Getter/Setter]', 'special');
13601 } else {
13602 str = ctx.stylize('[Getter]', 'special');
13603 }
13604 } else {
13605 if (desc.set) {
13606 str = ctx.stylize('[Setter]', 'special');
13607 }
13608 }
13609 if (!hasOwnProperty(visibleKeys, key)) {
13610 name = '[' + key + ']';
13611 }
13612 if (!str) {
13613 if (ctx.seen.indexOf(desc.value) < 0) {
13614 if (isNull(recurseTimes)) {
13615 str = formatValue(ctx, desc.value, null);
13616 } else {
13617 str = formatValue(ctx, desc.value, recurseTimes - 1);
13618 }
13619 if (str.indexOf('\n') > -1) {
13620 if (array) {
13621 str = str.split('\n').map(function(line) {
13622 return ' ' + line;
13623 }).join('\n').substr(2);
13624 } else {
13625 str = '\n' + str.split('\n').map(function(line) {
13626 return ' ' + line;
13627 }).join('\n');
13628 }
13629 }
13630 } else {
13631 str = ctx.stylize('[Circular]', 'special');
13632 }
13633 }
13634 if (isUndefined(name)) {
13635 if (array && key.match(/^\d+$/)) {
13636 return str;
13637 }
13638 name = JSON.stringify('' + key);
13639 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
13640 name = name.substr(1, name.length - 2);
13641 name = ctx.stylize(name, 'name');
13642 } else {
13643 name = name.replace(/'/g, "\\'")
13644 .replace(/\\"/g, '"')
13645 .replace(/(^"|"$)/g, "'");
13646 name = ctx.stylize(name, 'string');
13647 }
13648 }
8b095871 13649
9987f0c1
IC
13650 return name + ': ' + str;
13651}
8b095871 13652
8b095871 13653
9987f0c1
IC
13654function reduceToSingleString(output, base, braces) {
13655 var numLinesEst = 0;
13656 var length = output.reduce(function(prev, cur) {
13657 numLinesEst++;
13658 if (cur.indexOf('\n') >= 0) numLinesEst++;
13659 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
13660 }, 0);
8b095871 13661
9987f0c1
IC
13662 if (length > 60) {
13663 return braces[0] +
13664 (base === '' ? '' : base + '\n ') +
13665 ' ' +
13666 output.join(',\n ') +
13667 ' ' +
13668 braces[1];
13669 }
8b095871 13670
9987f0c1
IC
13671 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
13672}
8b095871 13673
8b095871 13674
9987f0c1
IC
13675// NOTE: These type checking functions intentionally don't use `instanceof`
13676// because it is fragile and can be easily faked with `Object.create()`.
13677function isArray(ar) {
13678 return Array.isArray(ar);
8b095871 13679}
9987f0c1 13680exports.isArray = isArray;
8b095871 13681
9987f0c1
IC
13682function isBoolean(arg) {
13683 return typeof arg === 'boolean';
13684}
13685exports.isBoolean = isBoolean;
8b095871 13686
9987f0c1
IC
13687function isNull(arg) {
13688 return arg === null;
13689}
13690exports.isNull = isNull;
8b095871 13691
9987f0c1
IC
13692function isNullOrUndefined(arg) {
13693 return arg == null;
13694}
13695exports.isNullOrUndefined = isNullOrUndefined;
8b095871 13696
9987f0c1
IC
13697function isNumber(arg) {
13698 return typeof arg === 'number';
13699}
13700exports.isNumber = isNumber;
8b095871 13701
9987f0c1
IC
13702function isString(arg) {
13703 return typeof arg === 'string';
13704}
13705exports.isString = isString;
8b095871 13706
9987f0c1
IC
13707function isSymbol(arg) {
13708 return typeof arg === 'symbol';
13709}
13710exports.isSymbol = isSymbol;
8b095871 13711
9987f0c1
IC
13712function isUndefined(arg) {
13713 return arg === void 0;
8b095871 13714}
9987f0c1 13715exports.isUndefined = isUndefined;
8b095871 13716
9987f0c1
IC
13717function isRegExp(re) {
13718 return isObject(re) && objectToString(re) === '[object RegExp]';
13719}
13720exports.isRegExp = isRegExp;
8b095871 13721
9987f0c1
IC
13722function isObject(arg) {
13723 return typeof arg === 'object' && arg !== null;
13724}
13725exports.isObject = isObject;
8b095871 13726
9987f0c1
IC
13727function isDate(d) {
13728 return isObject(d) && objectToString(d) === '[object Date]';
13729}
13730exports.isDate = isDate;
8b095871 13731
9987f0c1
IC
13732function isError(e) {
13733 return isObject(e) &&
13734 (objectToString(e) === '[object Error]' || e instanceof Error);
13735}
13736exports.isError = isError;
8b095871 13737
9987f0c1
IC
13738function isFunction(arg) {
13739 return typeof arg === 'function';
13740}
13741exports.isFunction = isFunction;
8b095871 13742
9987f0c1
IC
13743function isPrimitive(arg) {
13744 return arg === null ||
13745 typeof arg === 'boolean' ||
13746 typeof arg === 'number' ||
13747 typeof arg === 'string' ||
13748 typeof arg === 'symbol' || // ES6 symbol
13749 typeof arg === 'undefined';
13750}
13751exports.isPrimitive = isPrimitive;
8b095871 13752
9987f0c1 13753exports.isBuffer = require('./support/isBuffer');
8b095871 13754
9987f0c1
IC
13755function objectToString(o) {
13756 return Object.prototype.toString.call(o);
8b095871
IC
13757}
13758
8b095871 13759
9987f0c1
IC
13760function pad(n) {
13761 return n < 10 ? '0' + n.toString(10) : n.toString(10);
13762}
8b095871 13763
8b095871 13764
9987f0c1
IC
13765var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
13766 'Oct', 'Nov', 'Dec'];
8b095871 13767
9987f0c1
IC
13768// 26 Feb 16:19:34
13769function timestamp() {
13770 var d = new Date();
13771 var time = [pad(d.getHours()),
13772 pad(d.getMinutes()),
13773 pad(d.getSeconds())].join(':');
13774 return [d.getDate(), months[d.getMonth()], time].join(' ');
13775}
13776
13777
13778// log is just a thin wrapper to console.log that prepends a timestamp
13779exports.log = function() {
13780 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
8b095871
IC
13781};
13782
13783
9987f0c1
IC
13784/**
13785 * Inherit the prototype methods from one constructor into another.
13786 *
13787 * The Function.prototype.inherits from lang.js rewritten as a standalone
13788 * function (not on Function.prototype). NOTE: If this file is to be loaded
13789 * during bootstrapping this function needs to be rewritten using some native
13790 * functions as prototype setup using normal JavaScript does not work as
13791 * expected during bootstrapping (see mirror.js in r114903).
13792 *
13793 * @param {function} ctor Constructor function which needs to inherit the
13794 * prototype.
13795 * @param {function} superCtor Constructor function to inherit prototype from.
13796 */
13797exports.inherits = require('inherits');
8b095871 13798
9987f0c1
IC
13799exports._extend = function(origin, add) {
13800 // Don't do anything if add isn't an object
13801 if (!add || !isObject(add)) return origin;
8b095871 13802
9987f0c1
IC
13803 var keys = Object.keys(add);
13804 var i = keys.length;
13805 while (i--) {
13806 origin[keys[i]] = add[keys[i]];
13807 }
13808 return origin;
13809};
8b095871 13810
9987f0c1
IC
13811function hasOwnProperty(obj, prop) {
13812 return Object.prototype.hasOwnProperty.call(obj, prop);
13813}
8b095871 13814
9987f0c1
IC
13815}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
13816},{"./support/isBuffer":31,"_process":12,"inherits":30}],33:[function(require,module,exports){
13817module.exports = {
13818 base58: require('bs58'),
13819 bitcoin: require('bitcoinjs-lib'),
13820 ecurve: require('ecurve'),
13821 BigInteger: require('bigi')
8b095871
IC
13822}
13823
9987f0c1
IC
13824},{"bigi":37,"bitcoinjs-lib":50,"bs58":79,"ecurve":89}],34:[function(require,module,exports){
13825// base-x encoding
13826// Forked from https://github.com/cryptocoinjs/bs58
13827// Originally written by Mike Hearn for BitcoinJ
13828// Copyright (c) 2011 Google Inc
13829// Ported to JavaScript by Stefan Thomas
13830// Merged Buffer refactorings from base58-native by Stephen Pair
13831// Copyright (c) 2013 BitPay Inc
8b095871 13832
9987f0c1 13833var Buffer = require('safe-buffer').Buffer
8b095871 13834
9987f0c1
IC
13835module.exports = function base (ALPHABET) {
13836 var ALPHABET_MAP = {}
13837 var BASE = ALPHABET.length
13838 var LEADER = ALPHABET.charAt(0)
8b095871 13839
9987f0c1
IC
13840 // pre-compute lookup table
13841 for (var z = 0; z < ALPHABET.length; z++) {
13842 var x = ALPHABET.charAt(z)
8b095871 13843
9987f0c1
IC
13844 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
13845 ALPHABET_MAP[x] = z
13846 }
8b095871 13847
9987f0c1
IC
13848 function encode (source) {
13849 if (source.length === 0) return ''
8b095871 13850
9987f0c1
IC
13851 var digits = [0]
13852 for (var i = 0; i < source.length; ++i) {
13853 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
13854 carry += digits[j] << 8
13855 digits[j] = carry % BASE
13856 carry = (carry / BASE) | 0
13857 }
8b095871 13858
9987f0c1
IC
13859 while (carry > 0) {
13860 digits.push(carry % BASE)
13861 carry = (carry / BASE) | 0
13862 }
13863 }
8b095871 13864
9987f0c1 13865 var string = ''
8b095871 13866
9987f0c1
IC
13867 // deal with leading zeros
13868 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
13869 // convert digits to a string
13870 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
8b095871 13871
9987f0c1
IC
13872 return string
13873 }
8b095871 13874
9987f0c1
IC
13875 function decodeUnsafe (string) {
13876 if (string.length === 0) return Buffer.allocUnsafe(0)
8b095871 13877
9987f0c1
IC
13878 var bytes = [0]
13879 for (var i = 0; i < string.length; i++) {
13880 var value = ALPHABET_MAP[string[i]]
13881 if (value === undefined) return
8b095871 13882
9987f0c1
IC
13883 for (var j = 0, carry = value; j < bytes.length; ++j) {
13884 carry += bytes[j] * BASE
13885 bytes[j] = carry & 0xff
13886 carry >>= 8
13887 }
8b095871 13888
9987f0c1
IC
13889 while (carry > 0) {
13890 bytes.push(carry & 0xff)
13891 carry >>= 8
13892 }
13893 }
8b095871 13894
9987f0c1
IC
13895 // deal with leading zeros
13896 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
13897 bytes.push(0)
13898 }
8b095871 13899
9987f0c1
IC
13900 return Buffer.from(bytes.reverse())
13901 }
8b095871 13902
9987f0c1
IC
13903 function decode (string) {
13904 var buffer = decodeUnsafe(string)
13905 if (buffer) return buffer
8b095871 13906
9987f0c1
IC
13907 throw new Error('Non-base' + BASE + ' character')
13908 }
8b095871 13909
9987f0c1
IC
13910 return {
13911 encode: encode,
13912 decodeUnsafe: decodeUnsafe,
13913 decode: decode
13914 }
13915}
8b095871 13916
9987f0c1
IC
13917},{"safe-buffer":98}],35:[function(require,module,exports){
13918// (public) Constructor
13919function BigInteger(a, b, c) {
13920 if (!(this instanceof BigInteger))
13921 return new BigInteger(a, b, c)
8b095871 13922
9987f0c1
IC
13923 if (a != null) {
13924 if ("number" == typeof a) this.fromNumber(a, b, c)
13925 else if (b == null && "string" != typeof a) this.fromString(a, 256)
13926 else this.fromString(a, b)
13927 }
13928}
8b095871 13929
9987f0c1 13930var proto = BigInteger.prototype
8b095871 13931
9987f0c1
IC
13932// duck-typed isBigInteger
13933proto.__bigi = require('../package.json').version
13934BigInteger.isBigInteger = function (obj, check_ver) {
13935 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
13936}
8b095871 13937
9987f0c1
IC
13938// Bits per digit
13939var dbits
8b095871 13940
9987f0c1
IC
13941// am: Compute w_j += (x*this_i), propagate carries,
13942// c is initial carry, returns final carry.
13943// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
13944// We need to select the fastest one that works in this environment.
8b095871 13945
9987f0c1
IC
13946// am1: use a single mult and divide to get the high bits,
13947// max digit bits should be 26 because
13948// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
13949function am1(i, x, w, j, c, n) {
13950 while (--n >= 0) {
13951 var v = x * this[i++] + w[j] + c
13952 c = Math.floor(v / 0x4000000)
13953 w[j++] = v & 0x3ffffff
13954 }
13955 return c
13956}
13957// am2 avoids a big mult-and-extract completely.
13958// Max digit bits should be <= 30 because we do bitwise ops
13959// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
13960function am2(i, x, w, j, c, n) {
13961 var xl = x & 0x7fff,
13962 xh = x >> 15
13963 while (--n >= 0) {
13964 var l = this[i] & 0x7fff
13965 var h = this[i++] >> 15
13966 var m = xh * l + h * xl
13967 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
13968 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
13969 w[j++] = l & 0x3fffffff
13970 }
13971 return c
13972}
13973// Alternately, set max digit bits to 28 since some
13974// browsers slow down when dealing with 32-bit numbers.
13975function am3(i, x, w, j, c, n) {
13976 var xl = x & 0x3fff,
13977 xh = x >> 14
13978 while (--n >= 0) {
13979 var l = this[i] & 0x3fff
13980 var h = this[i++] >> 14
13981 var m = xh * l + h * xl
13982 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
13983 c = (l >> 28) + (m >> 14) + xh * h
13984 w[j++] = l & 0xfffffff
13985 }
13986 return c
13987}
8b095871 13988
9987f0c1
IC
13989// wtf?
13990BigInteger.prototype.am = am1
13991dbits = 26
8b095871 13992
9987f0c1
IC
13993BigInteger.prototype.DB = dbits
13994BigInteger.prototype.DM = ((1 << dbits) - 1)
13995var DV = BigInteger.prototype.DV = (1 << dbits)
8b095871 13996
9987f0c1
IC
13997var BI_FP = 52
13998BigInteger.prototype.FV = Math.pow(2, BI_FP)
13999BigInteger.prototype.F1 = BI_FP - dbits
14000BigInteger.prototype.F2 = 2 * dbits - BI_FP
8b095871 14001
9987f0c1
IC
14002// Digit conversions
14003var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
14004var BI_RC = new Array()
14005var rr, vv
14006rr = "0".charCodeAt(0)
14007for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
14008rr = "a".charCodeAt(0)
14009for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
14010rr = "A".charCodeAt(0)
14011for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
8b095871 14012
9987f0c1
IC
14013function int2char(n) {
14014 return BI_RM.charAt(n)
14015}
8b095871 14016
9987f0c1
IC
14017function intAt(s, i) {
14018 var c = BI_RC[s.charCodeAt(i)]
14019 return (c == null) ? -1 : c
14020}
8b095871 14021
9987f0c1
IC
14022// (protected) copy this to r
14023function bnpCopyTo(r) {
14024 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
14025 r.t = this.t
14026 r.s = this.s
14027}
8b095871 14028
9987f0c1
IC
14029// (protected) set from integer value x, -DV <= x < DV
14030function bnpFromInt(x) {
14031 this.t = 1
14032 this.s = (x < 0) ? -1 : 0
14033 if (x > 0) this[0] = x
14034 else if (x < -1) this[0] = x + DV
14035 else this.t = 0
14036}
8b095871 14037
9987f0c1
IC
14038// return bigint initialized to value
14039function nbv(i) {
14040 var r = new BigInteger()
14041 r.fromInt(i)
14042 return r
8b095871
IC
14043}
14044
9987f0c1
IC
14045// (protected) set from string and radix
14046function bnpFromString(s, b) {
14047 var self = this
8b095871 14048
9987f0c1
IC
14049 var k
14050 if (b == 16) k = 4
14051 else if (b == 8) k = 3
14052 else if (b == 256) k = 8; // byte array
14053 else if (b == 2) k = 1
14054 else if (b == 32) k = 5
14055 else if (b == 4) k = 2
14056 else {
14057 self.fromRadix(s, b)
14058 return
14059 }
14060 self.t = 0
14061 self.s = 0
14062 var i = s.length,
14063 mi = false,
14064 sh = 0
14065 while (--i >= 0) {
14066 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
14067 if (x < 0) {
14068 if (s.charAt(i) == "-") mi = true
14069 continue
14070 }
14071 mi = false
14072 if (sh == 0)
14073 self[self.t++] = x
14074 else if (sh + k > self.DB) {
14075 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
14076 self[self.t++] = (x >> (self.DB - sh))
14077 } else
14078 self[self.t - 1] |= x << sh
14079 sh += k
14080 if (sh >= self.DB) sh -= self.DB
14081 }
14082 if (k == 8 && (s[0] & 0x80) != 0) {
14083 self.s = -1
14084 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
14085 }
14086 self.clamp()
14087 if (mi) BigInteger.ZERO.subTo(self, self)
14088}
8b095871 14089
9987f0c1
IC
14090// (protected) clamp off excess high words
14091function bnpClamp() {
14092 var c = this.s & this.DM
14093 while (this.t > 0 && this[this.t - 1] == c)--this.t
8b095871
IC
14094}
14095
9987f0c1
IC
14096// (public) return string representation in given radix
14097function bnToString(b) {
14098 var self = this
14099 if (self.s < 0) return "-" + self.negate()
14100 .toString(b)
14101 var k
14102 if (b == 16) k = 4
14103 else if (b == 8) k = 3
14104 else if (b == 2) k = 1
14105 else if (b == 32) k = 5
14106 else if (b == 4) k = 2
14107 else return self.toRadix(b)
14108 var km = (1 << k) - 1,
14109 d, m = false,
14110 r = "",
14111 i = self.t
14112 var p = self.DB - (i * self.DB) % k
14113 if (i-- > 0) {
14114 if (p < self.DB && (d = self[i] >> p) > 0) {
14115 m = true
14116 r = int2char(d)
14117 }
14118 while (i >= 0) {
14119 if (p < k) {
14120 d = (self[i] & ((1 << p) - 1)) << (k - p)
14121 d |= self[--i] >> (p += self.DB - k)
14122 } else {
14123 d = (self[i] >> (p -= k)) & km
14124 if (p <= 0) {
14125 p += self.DB
14126 --i
14127 }
14128 }
14129 if (d > 0) m = true
14130 if (m) r += int2char(d)
14131 }
8b095871 14132 }
9987f0c1 14133 return m ? r : "0"
8b095871
IC
14134}
14135
9987f0c1
IC
14136// (public) -this
14137function bnNegate() {
14138 var r = new BigInteger()
14139 BigInteger.ZERO.subTo(this, r)
14140 return r
14141}
8b095871 14142
9987f0c1
IC
14143// (public) |this|
14144function bnAbs() {
14145 return (this.s < 0) ? this.negate() : this
14146}
8b095871 14147
9987f0c1
IC
14148// (public) return + if this > a, - if this < a, 0 if equal
14149function bnCompareTo(a) {
14150 var r = this.s - a.s
14151 if (r != 0) return r
14152 var i = this.t
14153 r = i - a.t
14154 if (r != 0) return (this.s < 0) ? -r : r
14155 while (--i >= 0)
14156 if ((r = this[i] - a[i]) != 0) return r
14157 return 0
14158}
8b095871 14159
9987f0c1
IC
14160// returns bit length of the integer x
14161function nbits(x) {
14162 var r = 1,
14163 t
14164 if ((t = x >>> 16) != 0) {
14165 x = t
14166 r += 16
14167 }
14168 if ((t = x >> 8) != 0) {
14169 x = t
14170 r += 8
14171 }
14172 if ((t = x >> 4) != 0) {
14173 x = t
14174 r += 4
14175 }
14176 if ((t = x >> 2) != 0) {
14177 x = t
14178 r += 2
14179 }
14180 if ((t = x >> 1) != 0) {
14181 x = t
14182 r += 1
8b095871 14183 }
9987f0c1
IC
14184 return r
14185}
8b095871 14186
9987f0c1
IC
14187// (public) return the number of bits in "this"
14188function bnBitLength() {
14189 if (this.t <= 0) return 0
14190 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
14191}
8b095871 14192
9987f0c1
IC
14193// (public) return the number of bytes in "this"
14194function bnByteLength() {
14195 return this.bitLength() >> 3
14196}
8b095871 14197
9987f0c1
IC
14198// (protected) r = this << n*DB
14199function bnpDLShiftTo(n, r) {
14200 var i
14201 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
14202 for (i = n - 1; i >= 0; --i) r[i] = 0
14203 r.t = this.t + n
14204 r.s = this.s
14205}
8b095871 14206
9987f0c1
IC
14207// (protected) r = this >> n*DB
14208function bnpDRShiftTo(n, r) {
14209 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
14210 r.t = Math.max(this.t - n, 0)
14211 r.s = this.s
14212}
8b095871 14213
9987f0c1
IC
14214// (protected) r = this << n
14215function bnpLShiftTo(n, r) {
14216 var self = this
14217 var bs = n % self.DB
14218 var cbs = self.DB - bs
14219 var bm = (1 << cbs) - 1
14220 var ds = Math.floor(n / self.DB),
14221 c = (self.s << bs) & self.DM,
14222 i
14223 for (i = self.t - 1; i >= 0; --i) {
14224 r[i + ds + 1] = (self[i] >> cbs) | c
14225 c = (self[i] & bm) << bs
14226 }
14227 for (i = ds - 1; i >= 0; --i) r[i] = 0
14228 r[ds] = c
14229 r.t = self.t + ds + 1
14230 r.s = self.s
14231 r.clamp()
14232}
8b095871 14233
9987f0c1
IC
14234// (protected) r = this >> n
14235function bnpRShiftTo(n, r) {
14236 var self = this
14237 r.s = self.s
14238 var ds = Math.floor(n / self.DB)
14239 if (ds >= self.t) {
14240 r.t = 0
14241 return
8b095871 14242 }
9987f0c1
IC
14243 var bs = n % self.DB
14244 var cbs = self.DB - bs
14245 var bm = (1 << bs) - 1
14246 r[0] = self[ds] >> bs
14247 for (var i = ds + 1; i < self.t; ++i) {
14248 r[i - ds - 1] |= (self[i] & bm) << cbs
14249 r[i - ds] = self[i] >> bs
14250 }
14251 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
14252 r.t = self.t - ds
14253 r.clamp()
14254}
8b095871 14255
9987f0c1
IC
14256// (protected) r = this - a
14257function bnpSubTo(a, r) {
14258 var self = this
14259 var i = 0,
14260 c = 0,
14261 m = Math.min(a.t, self.t)
14262 while (i < m) {
14263 c += self[i] - a[i]
14264 r[i++] = c & self.DM
14265 c >>= self.DB
8b095871 14266 }
9987f0c1
IC
14267 if (a.t < self.t) {
14268 c -= a.s
14269 while (i < self.t) {
14270 c += self[i]
14271 r[i++] = c & self.DM
14272 c >>= self.DB
14273 }
14274 c += self.s
14275 } else {
14276 c += self.s
14277 while (i < a.t) {
14278 c -= a[i]
14279 r[i++] = c & self.DM
14280 c >>= self.DB
14281 }
14282 c -= a.s
14283 }
14284 r.s = (c < 0) ? -1 : 0
14285 if (c < -1) r[i++] = self.DV + c
14286 else if (c > 0) r[i++] = c
14287 r.t = i
14288 r.clamp()
8b095871
IC
14289}
14290
9987f0c1
IC
14291// (protected) r = this * a, r != this,a (HAC 14.12)
14292// "this" should be the larger one if appropriate.
14293function bnpMultiplyTo(a, r) {
14294 var x = this.abs(),
14295 y = a.abs()
14296 var i = x.t
14297 r.t = i + y.t
14298 while (--i >= 0) r[i] = 0
14299 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
14300 r.s = 0
14301 r.clamp()
14302 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
14303}
8b095871 14304
9987f0c1
IC
14305// (protected) r = this^2, r != this (HAC 14.16)
14306function bnpSquareTo(r) {
14307 var x = this.abs()
14308 var i = r.t = 2 * x.t
14309 while (--i >= 0) r[i] = 0
14310 for (i = 0; i < x.t - 1; ++i) {
14311 var c = x.am(i, x[i], r, 2 * i, 0, 1)
14312 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
14313 r[i + x.t] -= x.DV
14314 r[i + x.t + 1] = 1
14315 }
14316 }
14317 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
14318 r.s = 0
14319 r.clamp()
14320}
8b095871 14321
9987f0c1
IC
14322// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
14323// r != q, this != m. q or r may be null.
14324function bnpDivRemTo(m, q, r) {
14325 var self = this
14326 var pm = m.abs()
14327 if (pm.t <= 0) return
14328 var pt = self.abs()
14329 if (pt.t < pm.t) {
14330 if (q != null) q.fromInt(0)
14331 if (r != null) self.copyTo(r)
14332 return
14333 }
14334 if (r == null) r = new BigInteger()
14335 var y = new BigInteger(),
14336 ts = self.s,
14337 ms = m.s
14338 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
14339 if (nsh > 0) {
14340 pm.lShiftTo(nsh, y)
14341 pt.lShiftTo(nsh, r)
14342 } else {
14343 pm.copyTo(y)
14344 pt.copyTo(r)
14345 }
14346 var ys = y.t
14347 var y0 = y[ys - 1]
14348 if (y0 == 0) return
14349 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
14350 var d1 = self.FV / yt,
14351 d2 = (1 << self.F1) / yt,
14352 e = 1 << self.F2
14353 var i = r.t,
14354 j = i - ys,
14355 t = (q == null) ? new BigInteger() : q
14356 y.dlShiftTo(j, t)
14357 if (r.compareTo(t) >= 0) {
14358 r[r.t++] = 1
14359 r.subTo(t, r)
14360 }
14361 BigInteger.ONE.dlShiftTo(ys, t)
14362 t.subTo(y, y); // "negative" y so we can replace sub with am later
14363 while (y.t < ys) y[y.t++] = 0
14364 while (--j >= 0) {
14365 // Estimate quotient digit
14366 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
14367 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
14368 y.dlShiftTo(j, t)
14369 r.subTo(t, r)
14370 while (r[i] < --qd) r.subTo(t, r)
14371 }
14372 }
14373 if (q != null) {
14374 r.drShiftTo(ys, q)
14375 if (ts != ms) BigInteger.ZERO.subTo(q, q)
14376 }
14377 r.t = ys
14378 r.clamp()
14379 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
14380 if (ts < 0) BigInteger.ZERO.subTo(r, r)
14381}
8b095871 14382
9987f0c1
IC
14383// (public) this mod a
14384function bnMod(a) {
14385 var r = new BigInteger()
14386 this.abs()
14387 .divRemTo(a, null, r)
14388 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
14389 return r
14390}
8b095871 14391
9987f0c1
IC
14392// Modular reduction using "classic" algorithm
14393function Classic(m) {
14394 this.m = m
8b095871
IC
14395}
14396
9987f0c1
IC
14397function cConvert(x) {
14398 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
14399 else return x
8b095871
IC
14400}
14401
9987f0c1
IC
14402function cRevert(x) {
14403 return x
14404}
8b095871 14405
9987f0c1
IC
14406function cReduce(x) {
14407 x.divRemTo(this.m, null, x)
8b095871
IC
14408}
14409
9987f0c1
IC
14410function cMulTo(x, y, r) {
14411 x.multiplyTo(y, r)
14412 this.reduce(r)
8b095871
IC
14413}
14414
9987f0c1
IC
14415function cSqrTo(x, r) {
14416 x.squareTo(r)
14417 this.reduce(r)
14418}
8b095871 14419
9987f0c1
IC
14420Classic.prototype.convert = cConvert
14421Classic.prototype.revert = cRevert
14422Classic.prototype.reduce = cReduce
14423Classic.prototype.mulTo = cMulTo
14424Classic.prototype.sqrTo = cSqrTo
8b095871 14425
9987f0c1
IC
14426// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
14427// justification:
14428// xy == 1 (mod m)
14429// xy = 1+km
14430// xy(2-xy) = (1+km)(1-km)
14431// x[y(2-xy)] = 1-k^2m^2
14432// x[y(2-xy)] == 1 (mod m^2)
14433// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
14434// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
14435// JS multiply "overflows" differently from C/C++, so care is needed here.
14436function bnpInvDigit() {
14437 if (this.t < 1) return 0
14438 var x = this[0]
14439 if ((x & 1) == 0) return 0
14440 var y = x & 3; // y == 1/x mod 2^2
14441 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
14442 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
14443 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
14444 // last step - calculate inverse mod DV directly
14445 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
14446 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
14447 // we really want the negative inverse, and -DV < y < DV
14448 return (y > 0) ? this.DV - y : -y
14449}
8b095871 14450
9987f0c1
IC
14451// Montgomery reduction
14452function Montgomery(m) {
14453 this.m = m
14454 this.mp = m.invDigit()
14455 this.mpl = this.mp & 0x7fff
14456 this.mph = this.mp >> 15
14457 this.um = (1 << (m.DB - 15)) - 1
14458 this.mt2 = 2 * m.t
14459}
8b095871 14460
9987f0c1
IC
14461// xR mod m
14462function montConvert(x) {
14463 var r = new BigInteger()
14464 x.abs()
14465 .dlShiftTo(this.m.t, r)
14466 r.divRemTo(this.m, null, r)
14467 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
14468 return r
8b095871
IC
14469}
14470
9987f0c1
IC
14471// x/R mod m
14472function montRevert(x) {
14473 var r = new BigInteger()
14474 x.copyTo(r)
14475 this.reduce(r)
14476 return r
8b095871
IC
14477}
14478
9987f0c1
IC
14479// x = x/R mod m (HAC 14.32)
14480function montReduce(x) {
14481 while (x.t <= this.mt2) // pad x so am has enough room later
14482 x[x.t++] = 0
14483 for (var i = 0; i < this.m.t; ++i) {
14484 // faster way of calculating u0 = x[i]*mp mod DV
14485 var j = x[i] & 0x7fff
14486 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
14487 // use am to combine the multiply-shift-add into one call
14488 j = i + this.m.t
14489 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
14490 // propagate carry
14491 while (x[j] >= x.DV) {
14492 x[j] -= x.DV
14493 x[++j]++
14494 }
8b095871 14495 }
9987f0c1
IC
14496 x.clamp()
14497 x.drShiftTo(this.m.t, x)
14498 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
8b095871
IC
14499}
14500
9987f0c1
IC
14501// r = "x^2/R mod m"; x != r
14502function montSqrTo(x, r) {
14503 x.squareTo(r)
14504 this.reduce(r)
14505}
8b095871 14506
9987f0c1
IC
14507// r = "xy/R mod m"; x,y != r
14508function montMulTo(x, y, r) {
14509 x.multiplyTo(y, r)
14510 this.reduce(r)
14511}
8b095871 14512
9987f0c1
IC
14513Montgomery.prototype.convert = montConvert
14514Montgomery.prototype.revert = montRevert
14515Montgomery.prototype.reduce = montReduce
14516Montgomery.prototype.mulTo = montMulTo
14517Montgomery.prototype.sqrTo = montSqrTo
8b095871 14518
9987f0c1
IC
14519// (protected) true iff this is even
14520function bnpIsEven() {
14521 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
14522}
8b095871 14523
9987f0c1
IC
14524// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
14525function bnpExp(e, z) {
14526 if (e > 0xffffffff || e < 1) return BigInteger.ONE
14527 var r = new BigInteger(),
14528 r2 = new BigInteger(),
14529 g = z.convert(this),
14530 i = nbits(e) - 1
14531 g.copyTo(r)
14532 while (--i >= 0) {
14533 z.sqrTo(r, r2)
14534 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
14535 else {
14536 var t = r
14537 r = r2
14538 r2 = t
8b095871 14539 }
8b095871 14540 }
9987f0c1 14541 return z.revert(r)
8b095871
IC
14542}
14543
9987f0c1
IC
14544// (public) this^e % m, 0 <= e < 2^32
14545function bnModPowInt(e, m) {
14546 var z
14547 if (e < 256 || m.isEven()) z = new Classic(m)
14548 else z = new Montgomery(m)
14549 return this.exp(e, z)
14550}
8b095871 14551
9987f0c1
IC
14552// protected
14553proto.copyTo = bnpCopyTo
14554proto.fromInt = bnpFromInt
14555proto.fromString = bnpFromString
14556proto.clamp = bnpClamp
14557proto.dlShiftTo = bnpDLShiftTo
14558proto.drShiftTo = bnpDRShiftTo
14559proto.lShiftTo = bnpLShiftTo
14560proto.rShiftTo = bnpRShiftTo
14561proto.subTo = bnpSubTo
14562proto.multiplyTo = bnpMultiplyTo
14563proto.squareTo = bnpSquareTo
14564proto.divRemTo = bnpDivRemTo
14565proto.invDigit = bnpInvDigit
14566proto.isEven = bnpIsEven
14567proto.exp = bnpExp
8b095871 14568
9987f0c1
IC
14569// public
14570proto.toString = bnToString
14571proto.negate = bnNegate
14572proto.abs = bnAbs
14573proto.compareTo = bnCompareTo
14574proto.bitLength = bnBitLength
14575proto.byteLength = bnByteLength
14576proto.mod = bnMod
14577proto.modPowInt = bnModPowInt
8b095871 14578
9987f0c1
IC
14579// (public)
14580function bnClone() {
14581 var r = new BigInteger()
14582 this.copyTo(r)
14583 return r
14584}
8b095871 14585
9987f0c1
IC
14586// (public) return value as integer
14587function bnIntValue() {
14588 if (this.s < 0) {
14589 if (this.t == 1) return this[0] - this.DV
14590 else if (this.t == 0) return -1
14591 } else if (this.t == 1) return this[0]
14592 else if (this.t == 0) return 0
14593 // assumes 16 < DB < 32
14594 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
14595}
8b095871 14596
9987f0c1
IC
14597// (public) return value as byte
14598function bnByteValue() {
14599 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
14600}
8b095871 14601
9987f0c1
IC
14602// (public) return value as short (assumes DB>=16)
14603function bnShortValue() {
14604 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
14605}
8b095871 14606
9987f0c1
IC
14607// (protected) return x s.t. r^x < DV
14608function bnpChunkSize(r) {
14609 return Math.floor(Math.LN2 * this.DB / Math.log(r))
8b095871
IC
14610}
14611
9987f0c1
IC
14612// (public) 0 if this == 0, 1 if this > 0
14613function bnSigNum() {
14614 if (this.s < 0) return -1
14615 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
14616 else return 1
8b095871
IC
14617}
14618
9987f0c1
IC
14619// (protected) convert to radix string
14620function bnpToRadix(b) {
14621 if (b == null) b = 10
14622 if (this.signum() == 0 || b < 2 || b > 36) return "0"
14623 var cs = this.chunkSize(b)
14624 var a = Math.pow(b, cs)
14625 var d = nbv(a),
14626 y = new BigInteger(),
14627 z = new BigInteger(),
14628 r = ""
14629 this.divRemTo(d, y, z)
14630 while (y.signum() > 0) {
14631 r = (a + z.intValue())
14632 .toString(b)
14633 .substr(1) + r
14634 y.divRemTo(d, y, z)
8b095871 14635 }
9987f0c1
IC
14636 return z.intValue()
14637 .toString(b) + r
8b095871
IC
14638}
14639
9987f0c1
IC
14640// (protected) convert from radix string
14641function bnpFromRadix(s, b) {
14642 var self = this
14643 self.fromInt(0)
14644 if (b == null) b = 10
14645 var cs = self.chunkSize(b)
14646 var d = Math.pow(b, cs),
14647 mi = false,
14648 j = 0,
14649 w = 0
14650 for (var i = 0; i < s.length; ++i) {
14651 var x = intAt(s, i)
14652 if (x < 0) {
14653 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
14654 continue
14655 }
14656 w = b * w + x
14657 if (++j >= cs) {
14658 self.dMultiply(d)
14659 self.dAddOffset(w, 0)
14660 j = 0
14661 w = 0
14662 }
8b095871 14663 }
9987f0c1
IC
14664 if (j > 0) {
14665 self.dMultiply(Math.pow(b, j))
14666 self.dAddOffset(w, 0)
14667 }
14668 if (mi) BigInteger.ZERO.subTo(self, self)
8b095871
IC
14669}
14670
9987f0c1
IC
14671// (protected) alternate constructor
14672function bnpFromNumber(a, b, c) {
14673 var self = this
14674 if ("number" == typeof b) {
14675 // new BigInteger(int,int,RNG)
14676 if (a < 2) self.fromInt(1)
14677 else {
14678 self.fromNumber(a, c)
14679 if (!self.testBit(a - 1)) // force MSB set
14680 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
14681 if (self.isEven()) self.dAddOffset(1, 0); // force odd
14682 while (!self.isProbablePrime(b)) {
14683 self.dAddOffset(2, 0)
14684 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
14685 }
14686 }
14687 } else {
14688 // new BigInteger(int,RNG)
14689 var x = new Array(),
14690 t = a & 7
14691 x.length = (a >> 3) + 1
14692 b.nextBytes(x)
14693 if (t > 0) x[0] &= ((1 << t) - 1)
14694 else x[0] = 0
14695 self.fromString(x, 256)
14696 }
8b095871 14697}
8b095871 14698
9987f0c1
IC
14699// (public) convert to bigendian byte array
14700function bnToByteArray() {
14701 var self = this
14702 var i = self.t,
14703 r = new Array()
14704 r[0] = self.s
14705 var p = self.DB - (i * self.DB) % 8,
14706 d, k = 0
14707 if (i-- > 0) {
14708 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
14709 r[k++] = d | (self.s << (self.DB - p))
14710 while (i >= 0) {
14711 if (p < 8) {
14712 d = (self[i] & ((1 << p) - 1)) << (8 - p)
14713 d |= self[--i] >> (p += self.DB - 8)
14714 } else {
14715 d = (self[i] >> (p -= 8)) & 0xff
14716 if (p <= 0) {
14717 p += self.DB
14718 --i
14719 }
14720 }
14721 if ((d & 0x80) != 0) d |= -256
14722 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
14723 if (k > 0 || d != self.s) r[k++] = d
14724 }
14725 }
14726 return r
8b095871 14727}
8b095871 14728
9987f0c1
IC
14729function bnEquals(a) {
14730 return (this.compareTo(a) == 0)
8b095871 14731}
8b095871 14732
9987f0c1
IC
14733function bnMin(a) {
14734 return (this.compareTo(a) < 0) ? this : a
8b095871 14735}
8b095871 14736
9987f0c1
IC
14737function bnMax(a) {
14738 return (this.compareTo(a) > 0) ? this : a
8b095871 14739}
8b095871 14740
9987f0c1
IC
14741// (protected) r = this op a (bitwise)
14742function bnpBitwiseTo(a, op, r) {
14743 var self = this
14744 var i, f, m = Math.min(a.t, self.t)
14745 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
14746 if (a.t < self.t) {
14747 f = a.s & self.DM
14748 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
14749 r.t = self.t
14750 } else {
14751 f = self.s & self.DM
14752 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
14753 r.t = a.t
14754 }
14755 r.s = op(self.s, a.s)
14756 r.clamp()
8b095871 14757}
8b095871 14758
9987f0c1
IC
14759// (public) this & a
14760function op_and(x, y) {
14761 return x & y
8b095871 14762}
8b095871 14763
9987f0c1
IC
14764function bnAnd(a) {
14765 var r = new BigInteger()
14766 this.bitwiseTo(a, op_and, r)
14767 return r
8b095871 14768}
8b095871 14769
9987f0c1
IC
14770// (public) this | a
14771function op_or(x, y) {
14772 return x | y
8b095871 14773}
8b095871 14774
9987f0c1
IC
14775function bnOr(a) {
14776 var r = new BigInteger()
14777 this.bitwiseTo(a, op_or, r)
14778 return r
8b095871 14779}
8b095871 14780
9987f0c1
IC
14781// (public) this ^ a
14782function op_xor(x, y) {
14783 return x ^ y
8b095871 14784}
8b095871 14785
9987f0c1
IC
14786function bnXor(a) {
14787 var r = new BigInteger()
14788 this.bitwiseTo(a, op_xor, r)
14789 return r
8b095871 14790}
8b095871 14791
9987f0c1
IC
14792// (public) this & ~a
14793function op_andnot(x, y) {
14794 return x & ~y
8b095871 14795}
8b095871 14796
9987f0c1
IC
14797function bnAndNot(a) {
14798 var r = new BigInteger()
14799 this.bitwiseTo(a, op_andnot, r)
14800 return r
8b095871 14801}
8b095871 14802
9987f0c1
IC
14803// (public) ~this
14804function bnNot() {
14805 var r = new BigInteger()
14806 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
14807 r.t = this.t
14808 r.s = ~this.s
14809 return r
8b095871 14810}
8b095871 14811
9987f0c1
IC
14812// (public) this << n
14813function bnShiftLeft(n) {
14814 var r = new BigInteger()
14815 if (n < 0) this.rShiftTo(-n, r)
14816 else this.lShiftTo(n, r)
14817 return r
8b095871 14818}
8b095871 14819
9987f0c1
IC
14820// (public) this >> n
14821function bnShiftRight(n) {
14822 var r = new BigInteger()
14823 if (n < 0) this.lShiftTo(-n, r)
14824 else this.rShiftTo(n, r)
14825 return r
8b095871
IC
14826}
14827
9987f0c1
IC
14828// return index of lowest 1-bit in x, x < 2^31
14829function lbit(x) {
14830 if (x == 0) return -1
14831 var r = 0
14832 if ((x & 0xffff) == 0) {
14833 x >>= 16
14834 r += 16
8b095871 14835 }
9987f0c1
IC
14836 if ((x & 0xff) == 0) {
14837 x >>= 8
14838 r += 8
8b095871 14839 }
9987f0c1
IC
14840 if ((x & 0xf) == 0) {
14841 x >>= 4
14842 r += 4
8b095871 14843 }
9987f0c1
IC
14844 if ((x & 3) == 0) {
14845 x >>= 2
14846 r += 2
14847 }
14848 if ((x & 1) == 0)++r
14849 return r
14850}
8b095871 14851
9987f0c1
IC
14852// (public) returns index of lowest 1-bit (or -1 if none)
14853function bnGetLowestSetBit() {
14854 for (var i = 0; i < this.t; ++i)
14855 if (this[i] != 0) return i * this.DB + lbit(this[i])
14856 if (this.s < 0) return this.t * this.DB
14857 return -1
14858}
8b095871 14859
9987f0c1
IC
14860// return number of 1 bits in x
14861function cbit(x) {
14862 var r = 0
14863 while (x != 0) {
14864 x &= x - 1
14865 ++r
8b095871 14866 }
9987f0c1
IC
14867 return r
14868}
8b095871 14869
9987f0c1
IC
14870// (public) return number of set bits
14871function bnBitCount() {
14872 var r = 0,
14873 x = this.s & this.DM
14874 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
14875 return r
14876}
8b095871 14877
9987f0c1
IC
14878// (public) true iff nth bit is set
14879function bnTestBit(n) {
14880 var j = Math.floor(n / this.DB)
14881 if (j >= this.t) return (this.s != 0)
14882 return ((this[j] & (1 << (n % this.DB))) != 0)
14883}
8b095871 14884
9987f0c1
IC
14885// (protected) this op (1<<n)
14886function bnpChangeBit(n, op) {
14887 var r = BigInteger.ONE.shiftLeft(n)
14888 this.bitwiseTo(r, op, r)
14889 return r
14890}
8b095871 14891
9987f0c1
IC
14892// (public) this | (1<<n)
14893function bnSetBit(n) {
14894 return this.changeBit(n, op_or)
14895}
8b095871 14896
9987f0c1
IC
14897// (public) this & ~(1<<n)
14898function bnClearBit(n) {
14899 return this.changeBit(n, op_andnot)
14900}
8b095871 14901
9987f0c1
IC
14902// (public) this ^ (1<<n)
14903function bnFlipBit(n) {
14904 return this.changeBit(n, op_xor)
14905}
8b095871 14906
9987f0c1
IC
14907// (protected) r = this + a
14908function bnpAddTo(a, r) {
14909 var self = this
8b095871 14910
9987f0c1
IC
14911 var i = 0,
14912 c = 0,
14913 m = Math.min(a.t, self.t)
14914 while (i < m) {
14915 c += self[i] + a[i]
14916 r[i++] = c & self.DM
14917 c >>= self.DB
14918 }
14919 if (a.t < self.t) {
14920 c += a.s
14921 while (i < self.t) {
14922 c += self[i]
14923 r[i++] = c & self.DM
14924 c >>= self.DB
14925 }
14926 c += self.s
14927 } else {
14928 c += self.s
14929 while (i < a.t) {
14930 c += a[i]
14931 r[i++] = c & self.DM
14932 c >>= self.DB
14933 }
14934 c += a.s
14935 }
14936 r.s = (c < 0) ? -1 : 0
14937 if (c > 0) r[i++] = c
14938 else if (c < -1) r[i++] = self.DV + c
14939 r.t = i
14940 r.clamp()
14941}
8b095871 14942
9987f0c1
IC
14943// (public) this + a
14944function bnAdd(a) {
14945 var r = new BigInteger()
14946 this.addTo(a, r)
14947 return r
14948}
8b095871 14949
9987f0c1
IC
14950// (public) this - a
14951function bnSubtract(a) {
14952 var r = new BigInteger()
14953 this.subTo(a, r)
14954 return r
14955}
8b095871 14956
9987f0c1
IC
14957// (public) this * a
14958function bnMultiply(a) {
14959 var r = new BigInteger()
14960 this.multiplyTo(a, r)
14961 return r
14962}
8b095871 14963
9987f0c1
IC
14964// (public) this^2
14965function bnSquare() {
14966 var r = new BigInteger()
14967 this.squareTo(r)
14968 return r
14969}
8b095871 14970
9987f0c1
IC
14971// (public) this / a
14972function bnDivide(a) {
14973 var r = new BigInteger()
14974 this.divRemTo(a, r, null)
14975 return r
14976}
8b095871 14977
9987f0c1
IC
14978// (public) this % a
14979function bnRemainder(a) {
14980 var r = new BigInteger()
14981 this.divRemTo(a, null, r)
14982 return r
14983}
8b095871 14984
9987f0c1
IC
14985// (public) [this/a,this%a]
14986function bnDivideAndRemainder(a) {
14987 var q = new BigInteger(),
14988 r = new BigInteger()
14989 this.divRemTo(a, q, r)
14990 return new Array(q, r)
14991}
8b095871 14992
9987f0c1
IC
14993// (protected) this *= n, this >= 0, 1 < n < DV
14994function bnpDMultiply(n) {
14995 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
14996 ++this.t
14997 this.clamp()
8b095871
IC
14998}
14999
9987f0c1
IC
15000// (protected) this += n << w words, this >= 0
15001function bnpDAddOffset(n, w) {
15002 if (n == 0) return
15003 while (this.t <= w) this[this.t++] = 0
15004 this[w] += n
15005 while (this[w] >= this.DV) {
15006 this[w] -= this.DV
15007 if (++w >= this.t) this[this.t++] = 0
15008 ++this[w]
8b095871 15009 }
9987f0c1 15010}
8b095871 15011
9987f0c1
IC
15012// A "null" reducer
15013function NullExp() {}
8b095871 15014
9987f0c1
IC
15015function nNop(x) {
15016 return x
15017}
8b095871 15018
9987f0c1
IC
15019function nMulTo(x, y, r) {
15020 x.multiplyTo(y, r)
15021}
8b095871 15022
9987f0c1
IC
15023function nSqrTo(x, r) {
15024 x.squareTo(r)
15025}
8b095871 15026
9987f0c1
IC
15027NullExp.prototype.convert = nNop
15028NullExp.prototype.revert = nNop
15029NullExp.prototype.mulTo = nMulTo
15030NullExp.prototype.sqrTo = nSqrTo
8b095871 15031
9987f0c1
IC
15032// (public) this^e
15033function bnPow(e) {
15034 return this.exp(e, new NullExp())
15035}
8b095871 15036
9987f0c1
IC
15037// (protected) r = lower n words of "this * a", a.t <= n
15038// "this" should be the larger one if appropriate.
15039function bnpMultiplyLowerTo(a, n, r) {
15040 var i = Math.min(this.t + a.t, n)
15041 r.s = 0; // assumes a,this >= 0
15042 r.t = i
15043 while (i > 0) r[--i] = 0
15044 var j
15045 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
15046 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
15047 r.clamp()
15048}
8b095871 15049
9987f0c1
IC
15050// (protected) r = "this * a" without lower n words, n > 0
15051// "this" should be the larger one if appropriate.
15052function bnpMultiplyUpperTo(a, n, r) {
15053 --n
15054 var i = r.t = this.t + a.t - n
15055 r.s = 0; // assumes a,this >= 0
15056 while (--i >= 0) r[i] = 0
15057 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
15058 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
15059 r.clamp()
15060 r.drShiftTo(1, r)
15061}
8b095871 15062
9987f0c1
IC
15063// Barrett modular reduction
15064function Barrett(m) {
15065 // setup Barrett
15066 this.r2 = new BigInteger()
15067 this.q3 = new BigInteger()
15068 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
15069 this.mu = this.r2.divide(m)
15070 this.m = m
15071}
8b095871 15072
9987f0c1
IC
15073function barrettConvert(x) {
15074 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
15075 else if (x.compareTo(this.m) < 0) return x
15076 else {
15077 var r = new BigInteger()
15078 x.copyTo(r)
15079 this.reduce(r)
15080 return r
8b095871 15081 }
9987f0c1 15082}
8b095871 15083
9987f0c1
IC
15084function barrettRevert(x) {
15085 return x
15086}
8b095871 15087
9987f0c1
IC
15088// x = x mod m (HAC 14.42)
15089function barrettReduce(x) {
15090 var self = this
15091 x.drShiftTo(self.m.t - 1, self.r2)
15092 if (x.t > self.m.t + 1) {
15093 x.t = self.m.t + 1
15094 x.clamp()
8b095871 15095 }
9987f0c1
IC
15096 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
15097 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
15098 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
15099 x.subTo(self.r2, x)
15100 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
15101}
8b095871 15102
9987f0c1
IC
15103// r = x^2 mod m; x != r
15104function barrettSqrTo(x, r) {
15105 x.squareTo(r)
15106 this.reduce(r)
15107}
8b095871 15108
9987f0c1
IC
15109// r = x*y mod m; x,y != r
15110function barrettMulTo(x, y, r) {
15111 x.multiplyTo(y, r)
15112 this.reduce(r)
15113}
8b095871 15114
9987f0c1
IC
15115Barrett.prototype.convert = barrettConvert
15116Barrett.prototype.revert = barrettRevert
15117Barrett.prototype.reduce = barrettReduce
15118Barrett.prototype.mulTo = barrettMulTo
15119Barrett.prototype.sqrTo = barrettSqrTo
8b095871 15120
9987f0c1
IC
15121// (public) this^e % m (HAC 14.85)
15122function bnModPow(e, m) {
15123 var i = e.bitLength(),
15124 k, r = nbv(1),
15125 z
15126 if (i <= 0) return r
15127 else if (i < 18) k = 1
15128 else if (i < 48) k = 3
15129 else if (i < 144) k = 4
15130 else if (i < 768) k = 5
15131 else k = 6
15132 if (i < 8)
15133 z = new Classic(m)
15134 else if (m.isEven())
15135 z = new Barrett(m)
15136 else
15137 z = new Montgomery(m)
8b095871 15138
9987f0c1
IC
15139 // precomputation
15140 var g = new Array(),
15141 n = 3,
15142 k1 = k - 1,
15143 km = (1 << k) - 1
15144 g[1] = z.convert(this)
15145 if (k > 1) {
15146 var g2 = new BigInteger()
15147 z.sqrTo(g[1], g2)
15148 while (n <= km) {
15149 g[n] = new BigInteger()
15150 z.mulTo(g2, g[n - 2], g[n])
15151 n += 2
8b095871 15152 }
9987f0c1 15153 }
8b095871 15154
9987f0c1
IC
15155 var j = e.t - 1,
15156 w, is1 = true,
15157 r2 = new BigInteger(),
15158 t
15159 i = nbits(e[j]) - 1
15160 while (j >= 0) {
15161 if (i >= k1) w = (e[j] >> (i - k1)) & km
15162 else {
15163 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
15164 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
8b095871
IC
15165 }
15166
9987f0c1
IC
15167 n = k
15168 while ((w & 1) == 0) {
15169 w >>= 1
15170 --n
15171 }
15172 if ((i -= n) < 0) {
15173 i += this.DB
15174 --j
15175 }
15176 if (is1) { // ret == 1, don't bother squaring or multiplying it
15177 g[w].copyTo(r)
15178 is1 = false
15179 } else {
15180 while (n > 1) {
15181 z.sqrTo(r, r2)
15182 z.sqrTo(r2, r)
15183 n -= 2
15184 }
15185 if (n > 0) z.sqrTo(r, r2)
15186 else {
15187 t = r
15188 r = r2
15189 r2 = t
15190 }
15191 z.mulTo(r2, g[w], r)
8b095871 15192 }
8b095871 15193
9987f0c1
IC
15194 while (j >= 0 && (e[j] & (1 << i)) == 0) {
15195 z.sqrTo(r, r2)
15196 t = r
15197 r = r2
15198 r2 = t
15199 if (--i < 0) {
15200 i = this.DB - 1
15201 --j
15202 }
15203 }
15204 }
15205 return z.revert(r)
8b095871
IC
15206}
15207
9987f0c1
IC
15208// (public) gcd(this,a) (HAC 14.54)
15209function bnGCD(a) {
15210 var x = (this.s < 0) ? this.negate() : this.clone()
15211 var y = (a.s < 0) ? a.negate() : a.clone()
15212 if (x.compareTo(y) < 0) {
15213 var t = x
15214 x = y
15215 y = t
15216 }
15217 var i = x.getLowestSetBit(),
15218 g = y.getLowestSetBit()
15219 if (g < 0) return x
15220 if (i < g) g = i
15221 if (g > 0) {
15222 x.rShiftTo(g, x)
15223 y.rShiftTo(g, y)
15224 }
15225 while (x.signum() > 0) {
15226 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
15227 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
15228 if (x.compareTo(y) >= 0) {
15229 x.subTo(y, x)
15230 x.rShiftTo(1, x)
15231 } else {
15232 y.subTo(x, y)
15233 y.rShiftTo(1, y)
15234 }
15235 }
15236 if (g > 0) y.lShiftTo(g, y)
15237 return y
8b095871
IC
15238}
15239
9987f0c1
IC
15240// (protected) this % n, n < 2^26
15241function bnpModInt(n) {
15242 if (n <= 0) return 0
15243 var d = this.DV % n,
15244 r = (this.s < 0) ? n - 1 : 0
15245 if (this.t > 0)
15246 if (d == 0) r = this[0] % n
15247 else
15248 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
15249 return r
8b095871 15250}
8b095871 15251
9987f0c1
IC
15252// (public) 1/this % m (HAC 14.61)
15253function bnModInverse(m) {
15254 var ac = m.isEven()
15255 if (this.signum() === 0) throw new Error('division by zero')
15256 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
15257 var u = m.clone(),
15258 v = this.clone()
15259 var a = nbv(1),
15260 b = nbv(0),
15261 c = nbv(0),
15262 d = nbv(1)
15263 while (u.signum() != 0) {
15264 while (u.isEven()) {
15265 u.rShiftTo(1, u)
15266 if (ac) {
15267 if (!a.isEven() || !b.isEven()) {
15268 a.addTo(this, a)
15269 b.subTo(m, b)
15270 }
15271 a.rShiftTo(1, a)
15272 } else if (!b.isEven()) b.subTo(m, b)
15273 b.rShiftTo(1, b)
8b095871 15274 }
9987f0c1
IC
15275 while (v.isEven()) {
15276 v.rShiftTo(1, v)
15277 if (ac) {
15278 if (!c.isEven() || !d.isEven()) {
15279 c.addTo(this, c)
15280 d.subTo(m, d)
8b095871 15281 }
9987f0c1
IC
15282 c.rShiftTo(1, c)
15283 } else if (!d.isEven()) d.subTo(m, d)
15284 d.rShiftTo(1, d)
8b095871 15285 }
9987f0c1
IC
15286 if (u.compareTo(v) >= 0) {
15287 u.subTo(v, u)
15288 if (ac) a.subTo(c, a)
15289 b.subTo(d, b)
8b095871 15290 } else {
9987f0c1
IC
15291 v.subTo(u, v)
15292 if (ac) c.subTo(a, c)
15293 d.subTo(b, d)
8b095871
IC
15294 }
15295 }
9987f0c1
IC
15296 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
15297 while (d.compareTo(m) >= 0) d.subTo(m, d)
15298 while (d.signum() < 0) d.addTo(m, d)
15299 return d
15300}
8b095871 15301
9987f0c1
IC
15302var lowprimes = [
15303 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
15304 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
15305 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
15306 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
15307 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
15308 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
15309 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
15310 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
15311 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
15312 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
15313 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
15314]
8b095871 15315
9987f0c1 15316var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
8b095871 15317
9987f0c1
IC
15318// (public) test primality with certainty >= 1-.5^t
15319function bnIsProbablePrime(t) {
15320 var i, x = this.abs()
15321 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
15322 for (i = 0; i < lowprimes.length; ++i)
15323 if (x[0] == lowprimes[i]) return true
15324 return false
8b095871 15325 }
9987f0c1
IC
15326 if (x.isEven()) return false
15327 i = 1
15328 while (i < lowprimes.length) {
15329 var m = lowprimes[i],
15330 j = i + 1
15331 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
15332 m = x.modInt(m)
15333 while (i < j) if (m % lowprimes[i++] == 0) return false
15334 }
15335 return x.millerRabin(t)
15336}
8b095871 15337
9987f0c1
IC
15338// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
15339function bnpMillerRabin(t) {
15340 var n1 = this.subtract(BigInteger.ONE)
15341 var k = n1.getLowestSetBit()
15342 if (k <= 0) return false
15343 var r = n1.shiftRight(k)
15344 t = (t + 1) >> 1
15345 if (t > lowprimes.length) t = lowprimes.length
15346 var a = new BigInteger(null)
15347 var j, bases = []
15348 for (var i = 0; i < t; ++i) {
15349 for (;;) {
15350 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
15351 if (bases.indexOf(j) == -1) break
15352 }
15353 bases.push(j)
15354 a.fromInt(j)
15355 var y = a.modPow(r, this)
15356 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
15357 var j = 1
15358 while (j++ < k && y.compareTo(n1) != 0) {
15359 y = y.modPowInt(2, this)
15360 if (y.compareTo(BigInteger.ONE) == 0) return false
8b095871 15361 }
9987f0c1 15362 if (y.compareTo(n1) != 0) return false
8b095871 15363 }
8b095871 15364 }
9987f0c1
IC
15365 return true
15366}
8b095871 15367
9987f0c1
IC
15368// protected
15369proto.chunkSize = bnpChunkSize
15370proto.toRadix = bnpToRadix
15371proto.fromRadix = bnpFromRadix
15372proto.fromNumber = bnpFromNumber
15373proto.bitwiseTo = bnpBitwiseTo
15374proto.changeBit = bnpChangeBit
15375proto.addTo = bnpAddTo
15376proto.dMultiply = bnpDMultiply
15377proto.dAddOffset = bnpDAddOffset
15378proto.multiplyLowerTo = bnpMultiplyLowerTo
15379proto.multiplyUpperTo = bnpMultiplyUpperTo
15380proto.modInt = bnpModInt
15381proto.millerRabin = bnpMillerRabin
8b095871 15382
9987f0c1
IC
15383// public
15384proto.clone = bnClone
15385proto.intValue = bnIntValue
15386proto.byteValue = bnByteValue
15387proto.shortValue = bnShortValue
15388proto.signum = bnSigNum
15389proto.toByteArray = bnToByteArray
15390proto.equals = bnEquals
15391proto.min = bnMin
15392proto.max = bnMax
15393proto.and = bnAnd
15394proto.or = bnOr
15395proto.xor = bnXor
15396proto.andNot = bnAndNot
15397proto.not = bnNot
15398proto.shiftLeft = bnShiftLeft
15399proto.shiftRight = bnShiftRight
15400proto.getLowestSetBit = bnGetLowestSetBit
15401proto.bitCount = bnBitCount
15402proto.testBit = bnTestBit
15403proto.setBit = bnSetBit
15404proto.clearBit = bnClearBit
15405proto.flipBit = bnFlipBit
15406proto.add = bnAdd
15407proto.subtract = bnSubtract
15408proto.multiply = bnMultiply
15409proto.divide = bnDivide
15410proto.remainder = bnRemainder
15411proto.divideAndRemainder = bnDivideAndRemainder
15412proto.modPow = bnModPow
15413proto.modInverse = bnModInverse
15414proto.pow = bnPow
15415proto.gcd = bnGCD
15416proto.isProbablePrime = bnIsProbablePrime
8b095871 15417
9987f0c1
IC
15418// JSBN-specific extension
15419proto.square = bnSquare
15420
15421// constants
15422BigInteger.ZERO = nbv(0)
15423BigInteger.ONE = nbv(1)
15424BigInteger.valueOf = nbv
8b095871 15425
9987f0c1
IC
15426module.exports = BigInteger
15427
15428},{"../package.json":38}],36:[function(require,module,exports){
15429(function (Buffer){
15430// FIXME: Kind of a weird way to throw exceptions, consider removing
15431var assert = require('assert')
15432var BigInteger = require('./bigi')
8b095871
IC
15433
15434/**
9987f0c1 15435 * Turns a byte array into a big integer.
8b095871 15436 *
9987f0c1
IC
15437 * This function will interpret a byte array as a big integer in big
15438 * endian notation.
8b095871 15439 */
9987f0c1
IC
15440BigInteger.fromByteArrayUnsigned = function(byteArray) {
15441 // BigInteger expects a DER integer conformant byte array
15442 if (byteArray[0] & 0x80) {
15443 return new BigInteger([0].concat(byteArray))
8b095871 15444 }
8b095871 15445
9987f0c1
IC
15446 return new BigInteger(byteArray)
15447}
8b095871 15448
9987f0c1
IC
15449/**
15450 * Returns a byte array representation of the big integer.
15451 *
15452 * This returns the absolute of the contained value in big endian
15453 * form. A value of zero results in an empty array.
15454 */
15455BigInteger.prototype.toByteArrayUnsigned = function() {
15456 var byteArray = this.toByteArray()
15457 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
15458}
8b095871 15459
9987f0c1
IC
15460BigInteger.fromDERInteger = function(byteArray) {
15461 return new BigInteger(byteArray)
15462}
8b095871 15463
9987f0c1
IC
15464/*
15465 * Converts BigInteger to a DER integer representation.
15466 *
15467 * The format for this value uses the most significant bit as a sign
15468 * bit. If the most significant bit is already set and the integer is
15469 * positive, a 0x00 is prepended.
15470 *
15471 * Examples:
15472 *
15473 * 0 => 0x00
15474 * 1 => 0x01
15475 * -1 => 0xff
15476 * 127 => 0x7f
15477 * -127 => 0x81
15478 * 128 => 0x0080
15479 * -128 => 0x80
15480 * 255 => 0x00ff
15481 * -255 => 0xff01
15482 * 16300 => 0x3fac
15483 * -16300 => 0xc054
15484 * 62300 => 0x00f35c
15485 * -62300 => 0xff0ca4
15486*/
15487BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
8b095871 15488
9987f0c1
IC
15489BigInteger.fromBuffer = function(buffer) {
15490 // BigInteger expects a DER integer conformant byte array
15491 if (buffer[0] & 0x80) {
15492 var byteArray = Array.prototype.slice.call(buffer)
8b095871 15493
9987f0c1 15494 return new BigInteger([0].concat(byteArray))
8b095871 15495 }
9987f0c1
IC
15496
15497 return new BigInteger(buffer)
8b095871
IC
15498}
15499
9987f0c1
IC
15500BigInteger.fromHex = function(hex) {
15501 if (hex === '') return BigInteger.ZERO
8b095871 15502
9987f0c1
IC
15503 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
15504 assert.equal(hex.length % 2, 0, 'Incomplete hex')
15505 return new BigInteger(hex, 16)
8b095871
IC
15506}
15507
9987f0c1
IC
15508BigInteger.prototype.toBuffer = function(size) {
15509 var byteArray = this.toByteArrayUnsigned()
15510 var zeros = []
8b095871 15511
9987f0c1
IC
15512 var padding = size - byteArray.length
15513 while (zeros.length < padding) zeros.push(0)
8b095871 15514
9987f0c1
IC
15515 return new Buffer(zeros.concat(byteArray))
15516}
8b095871 15517
9987f0c1
IC
15518BigInteger.prototype.toHex = function(size) {
15519 return this.toBuffer(size).toString('hex')
8b095871
IC
15520}
15521
9987f0c1
IC
15522}).call(this,require("buffer").Buffer)
15523},{"./bigi":35,"assert":1,"buffer":4}],37:[function(require,module,exports){
15524var BigInteger = require('./bigi')
8b095871 15525
9987f0c1
IC
15526//addons
15527require('./convert')
15528
15529module.exports = BigInteger
15530},{"./bigi":35,"./convert":36}],38:[function(require,module,exports){
15531module.exports={
15532 "_args": [
15533 [
15534 "bigi",
15535 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
15536 ]
15537 ],
15538 "_from": "bigi@latest",
15539 "_id": "bigi@1.4.2",
15540 "_inCache": true,
15541 "_installable": true,
15542 "_location": "/bigi",
15543 "_nodeVersion": "6.1.0",
15544 "_npmOperationalInternal": {
15545 "host": "packages-12-west.internal.npmjs.com",
15546 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
15547 },
15548 "_npmUser": {
15549 "email": "jprichardson@gmail.com",
15550 "name": "jprichardson"
15551 },
15552 "_npmVersion": "3.8.6",
15553 "_phantomChildren": {},
15554 "_requested": {
15555 "name": "bigi",
15556 "raw": "bigi",
15557 "rawSpec": "",
15558 "scope": null,
15559 "spec": "latest",
15560 "type": "tag"
15561 },
15562 "_requiredBy": [
15563 "#USER",
15564 "/bitcoinjs-lib",
15565 "/ecurve"
15566 ],
15567 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
15568 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
15569 "_shrinkwrap": null,
15570 "_spec": "bigi",
15571 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
15572 "bugs": {
15573 "url": "https://github.com/cryptocoinjs/bigi/issues"
15574 },
15575 "dependencies": {},
15576 "description": "Big integers.",
15577 "devDependencies": {
15578 "coveralls": "^2.11.2",
15579 "istanbul": "^0.3.5",
15580 "jshint": "^2.5.1",
15581 "mocha": "^2.1.0",
15582 "mochify": "^2.1.0"
15583 },
15584 "directories": {},
15585 "dist": {
15586 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
15587 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
15588 },
15589 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
15590 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
15591 "keywords": [
15592 "cryptography",
15593 "math",
15594 "bitcoin",
15595 "arbitrary",
15596 "precision",
15597 "arithmetic",
15598 "big",
15599 "integer",
15600 "int",
15601 "number",
15602 "biginteger",
15603 "bigint",
15604 "bignumber",
15605 "decimal",
15606 "float"
15607 ],
15608 "main": "./lib/index.js",
15609 "maintainers": [
15610 {
15611 "email": "boydb@midnightdesign.ws",
15612 "name": "midnightlightning"
15613 },
15614 {
15615 "email": "sidazhang89@gmail.com",
15616 "name": "sidazhang"
15617 },
15618 {
15619 "email": "npm@shesek.info",
15620 "name": "nadav"
15621 },
15622 {
15623 "email": "jprichardson@gmail.com",
15624 "name": "jprichardson"
8b095871 15625 }
9987f0c1
IC
15626 ],
15627 "name": "bigi",
15628 "optionalDependencies": {},
15629 "readme": "ERROR: No README data found!",
15630 "repository": {
15631 "type": "git",
15632 "url": "git+https://github.com/cryptocoinjs/bigi.git"
15633 },
15634 "scripts": {
15635 "browser-test": "mochify --wd -R spec",
15636 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
15637 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
15638 "jshint": "jshint --config jshint.json lib/*.js ; true",
15639 "test": "_mocha -- test/*.js",
15640 "unit": "mocha"
15641 },
15642 "testling": {
15643 "browsers": [
15644 "ie/9..latest",
15645 "firefox/latest",
15646 "chrome/latest",
15647 "safari/6.0..latest",
15648 "iphone/6.0..latest",
15649 "android-browser/4.2..latest"
15650 ],
15651 "files": "test/*.js",
15652 "harness": "mocha"
15653 },
15654 "version": "1.4.2"
15655}
8b095871 15656
9987f0c1
IC
15657},{}],39:[function(require,module,exports){
15658// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
15659// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
15660// NOTE: SIGHASH byte ignored AND restricted, truncate before use
8b095871 15661
9987f0c1 15662var Buffer = require('safe-buffer').Buffer
8b095871 15663
9987f0c1
IC
15664function check (buffer) {
15665 if (buffer.length < 8) return false
15666 if (buffer.length > 72) return false
15667 if (buffer[0] !== 0x30) return false
15668 if (buffer[1] !== buffer.length - 2) return false
15669 if (buffer[2] !== 0x02) return false
8b095871 15670
9987f0c1
IC
15671 var lenR = buffer[3]
15672 if (lenR === 0) return false
15673 if (5 + lenR >= buffer.length) return false
15674 if (buffer[4 + lenR] !== 0x02) return false
8b095871 15675
9987f0c1
IC
15676 var lenS = buffer[5 + lenR]
15677 if (lenS === 0) return false
15678 if ((6 + lenR + lenS) !== buffer.length) return false
8b095871 15679
9987f0c1
IC
15680 if (buffer[4] & 0x80) return false
15681 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
8b095871 15682
9987f0c1
IC
15683 if (buffer[lenR + 6] & 0x80) return false
15684 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
15685 return true
15686}
8b095871 15687
9987f0c1
IC
15688function decode (buffer) {
15689 if (buffer.length < 8) throw new Error('DER sequence length is too short')
15690 if (buffer.length > 72) throw new Error('DER sequence length is too long')
15691 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
15692 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
15693 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
8b095871 15694
9987f0c1
IC
15695 var lenR = buffer[3]
15696 if (lenR === 0) throw new Error('R length is zero')
15697 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
15698 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
8b095871 15699
9987f0c1
IC
15700 var lenS = buffer[5 + lenR]
15701 if (lenS === 0) throw new Error('S length is zero')
15702 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
8b095871 15703
9987f0c1
IC
15704 if (buffer[4] & 0x80) throw new Error('R value is negative')
15705 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
8b095871 15706
9987f0c1
IC
15707 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
15708 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
8b095871 15709
9987f0c1
IC
15710 // non-BIP66 - extract R, S values
15711 return {
15712 r: buffer.slice(4, 4 + lenR),
15713 s: buffer.slice(6 + lenR)
8b095871 15714 }
9987f0c1 15715}
8b095871 15716
9987f0c1
IC
15717/*
15718 * Expects r and s to be positive DER integers.
15719 *
15720 * The DER format uses the most significant bit as a sign bit (& 0x80).
15721 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
15722 *
15723 * Examples:
15724 *
15725 * 0 => 0x00
15726 * 1 => 0x01
15727 * -1 => 0xff
15728 * 127 => 0x7f
15729 * -127 => 0x81
15730 * 128 => 0x0080
15731 * -128 => 0x80
15732 * 255 => 0x00ff
15733 * -255 => 0xff01
15734 * 16300 => 0x3fac
15735 * -16300 => 0xc054
15736 * 62300 => 0x00f35c
15737 * -62300 => 0xff0ca4
15738*/
15739function encode (r, s) {
15740 var lenR = r.length
15741 var lenS = s.length
15742 if (lenR === 0) throw new Error('R length is zero')
15743 if (lenS === 0) throw new Error('S length is zero')
15744 if (lenR > 33) throw new Error('R length is too long')
15745 if (lenS > 33) throw new Error('S length is too long')
15746 if (r[0] & 0x80) throw new Error('R value is negative')
15747 if (s[0] & 0x80) throw new Error('S value is negative')
15748 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
15749 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
8b095871 15750
9987f0c1 15751 var signature = Buffer.allocUnsafe(6 + lenR + lenS)
8b095871 15752
9987f0c1
IC
15753 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
15754 signature[0] = 0x30
15755 signature[1] = signature.length - 2
15756 signature[2] = 0x02
15757 signature[3] = r.length
15758 r.copy(signature, 4)
15759 signature[4 + lenR] = 0x02
15760 signature[5 + lenR] = s.length
15761 s.copy(signature, 6 + lenR)
8b095871 15762
9987f0c1 15763 return signature
8b095871
IC
15764}
15765
9987f0c1
IC
15766module.exports = {
15767 check: check,
15768 decode: decode,
15769 encode: encode
8b095871
IC
15770}
15771
9987f0c1
IC
15772},{"safe-buffer":98}],40:[function(require,module,exports){
15773module.exports={
15774 "OP_FALSE": 0,
15775 "OP_0": 0,
15776 "OP_PUSHDATA1": 76,
15777 "OP_PUSHDATA2": 77,
15778 "OP_PUSHDATA4": 78,
15779 "OP_1NEGATE": 79,
15780 "OP_RESERVED": 80,
15781 "OP_1": 81,
15782 "OP_TRUE": 81,
15783 "OP_2": 82,
15784 "OP_3": 83,
15785 "OP_4": 84,
15786 "OP_5": 85,
15787 "OP_6": 86,
15788 "OP_7": 87,
15789 "OP_8": 88,
15790 "OP_9": 89,
15791 "OP_10": 90,
15792 "OP_11": 91,
15793 "OP_12": 92,
15794 "OP_13": 93,
15795 "OP_14": 94,
15796 "OP_15": 95,
15797 "OP_16": 96,
15798
15799 "OP_NOP": 97,
15800 "OP_VER": 98,
15801 "OP_IF": 99,
15802 "OP_NOTIF": 100,
15803 "OP_VERIF": 101,
15804 "OP_VERNOTIF": 102,
15805 "OP_ELSE": 103,
15806 "OP_ENDIF": 104,
15807 "OP_VERIFY": 105,
15808 "OP_RETURN": 106,
15809
15810 "OP_TOALTSTACK": 107,
15811 "OP_FROMALTSTACK": 108,
15812 "OP_2DROP": 109,
15813 "OP_2DUP": 110,
15814 "OP_3DUP": 111,
15815 "OP_2OVER": 112,
15816 "OP_2ROT": 113,
15817 "OP_2SWAP": 114,
15818 "OP_IFDUP": 115,
15819 "OP_DEPTH": 116,
15820 "OP_DROP": 117,
15821 "OP_DUP": 118,
15822 "OP_NIP": 119,
15823 "OP_OVER": 120,
15824 "OP_PICK": 121,
15825 "OP_ROLL": 122,
15826 "OP_ROT": 123,
15827 "OP_SWAP": 124,
15828 "OP_TUCK": 125,
15829
15830 "OP_CAT": 126,
15831 "OP_SUBSTR": 127,
15832 "OP_LEFT": 128,
15833 "OP_RIGHT": 129,
15834 "OP_SIZE": 130,
15835
15836 "OP_INVERT": 131,
15837 "OP_AND": 132,
15838 "OP_OR": 133,
15839 "OP_XOR": 134,
15840 "OP_EQUAL": 135,
15841 "OP_EQUALVERIFY": 136,
15842 "OP_RESERVED1": 137,
15843 "OP_RESERVED2": 138,
15844
15845 "OP_1ADD": 139,
15846 "OP_1SUB": 140,
15847 "OP_2MUL": 141,
15848 "OP_2DIV": 142,
15849 "OP_NEGATE": 143,
15850 "OP_ABS": 144,
15851 "OP_NOT": 145,
15852 "OP_0NOTEQUAL": 146,
15853 "OP_ADD": 147,
15854 "OP_SUB": 148,
15855 "OP_MUL": 149,
15856 "OP_DIV": 150,
15857 "OP_MOD": 151,
15858 "OP_LSHIFT": 152,
15859 "OP_RSHIFT": 153,
15860
15861 "OP_BOOLAND": 154,
15862 "OP_BOOLOR": 155,
15863 "OP_NUMEQUAL": 156,
15864 "OP_NUMEQUALVERIFY": 157,
15865 "OP_NUMNOTEQUAL": 158,
15866 "OP_LESSTHAN": 159,
15867 "OP_GREATERTHAN": 160,
15868 "OP_LESSTHANOREQUAL": 161,
15869 "OP_GREATERTHANOREQUAL": 162,
15870 "OP_MIN": 163,
15871 "OP_MAX": 164,
15872
15873 "OP_WITHIN": 165,
15874
15875 "OP_RIPEMD160": 166,
15876 "OP_SHA1": 167,
15877 "OP_SHA256": 168,
15878 "OP_HASH160": 169,
15879 "OP_HASH256": 170,
15880 "OP_CODESEPARATOR": 171,
15881 "OP_CHECKSIG": 172,
15882 "OP_CHECKSIGVERIFY": 173,
15883 "OP_CHECKMULTISIG": 174,
15884 "OP_CHECKMULTISIGVERIFY": 175,
15885
15886 "OP_NOP1": 176,
15887 "OP_NOP2": 177,
15888 "OP_CHECKLOCKTIMEVERIFY": 177,
15889
15890 "OP_NOP3": 178,
15891 "OP_NOP4": 179,
15892 "OP_NOP5": 180,
15893 "OP_NOP6": 181,
15894 "OP_NOP7": 182,
15895 "OP_NOP8": 183,
15896 "OP_NOP9": 184,
15897 "OP_NOP10": 185,
15898
15899 "OP_PUBKEYHASH": 253,
15900 "OP_PUBKEY": 254,
15901 "OP_INVALIDOPCODE": 255
15902}
15903
15904},{}],41:[function(require,module,exports){
15905var OPS = require('./index.json')
15906
15907var map = {}
15908for (var op in OPS) {
15909 var code = OPS[op]
15910 map[code] = op
15911}
15912
15913module.exports = map
15914
15915},{"./index.json":40}],42:[function(require,module,exports){
15916var Buffer = require('safe-buffer').Buffer
15917var bs58check = require('bs58check')
15918var bscript = require('./script')
15919var networks = require('./networks')
15920var typeforce = require('typeforce')
15921var types = require('./types')
8b095871 15922
9987f0c1
IC
15923function fromBase58Check (address) {
15924 var payload = bs58check.decode(address)
15925 if (payload.length < 21) throw new TypeError(address + ' is too short')
15926 if (payload.length > 21) throw new TypeError(address + ' is too long')
8b095871 15927
9987f0c1
IC
15928 var version = payload.readUInt8(0)
15929 var hash = payload.slice(1)
8b095871 15930
9987f0c1 15931 return { hash: hash, version: version }
8b095871
IC
15932}
15933
9987f0c1
IC
15934function toBase58Check (hash, version) {
15935 typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments)
8b095871 15936
9987f0c1
IC
15937 var payload = Buffer.allocUnsafe(21)
15938 payload.writeUInt8(version, 0)
15939 hash.copy(payload, 1)
8b095871 15940
9987f0c1 15941 return bs58check.encode(payload)
8b095871
IC
15942}
15943
9987f0c1
IC
15944function fromOutputScript (outputScript, network) {
15945 network = network || networks.bitcoin
8b095871 15946
9987f0c1
IC
15947 if (bscript.pubKeyHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(3, 23), network.pubKeyHash)
15948 if (bscript.scriptHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(2, 22), network.scriptHash)
8b095871 15949
9987f0c1 15950 throw new Error(bscript.toASM(outputScript) + ' has no matching Address')
8b095871
IC
15951}
15952
9987f0c1
IC
15953function toOutputScript (address, network) {
15954 network = network || networks.bitcoin
8b095871 15955
9987f0c1
IC
15956 var decode = fromBase58Check(address)
15957 if (decode.version === network.pubKeyHash) return bscript.pubKeyHash.output.encode(decode.hash)
15958 if (decode.version === network.scriptHash) return bscript.scriptHash.output.encode(decode.hash)
8b095871 15959
9987f0c1 15960 throw new Error(address + ' has no matching Script')
8b095871 15961}
8b095871 15962
9987f0c1
IC
15963module.exports = {
15964 fromBase58Check: fromBase58Check,
15965 fromOutputScript: fromOutputScript,
15966 toBase58Check: toBase58Check,
15967 toOutputScript: toOutputScript
8b095871 15968}
8b095871 15969
9987f0c1
IC
15970},{"./networks":51,"./script":52,"./types":78,"bs58check":80,"safe-buffer":98,"typeforce":109}],43:[function(require,module,exports){
15971var Buffer = require('safe-buffer').Buffer
15972var bcrypto = require('./crypto')
15973var fastMerkleRoot = require('merkle-lib/fastRoot')
15974var typeforce = require('typeforce')
15975var types = require('./types')
15976var varuint = require('varuint-bitcoin')
8b095871 15977
9987f0c1 15978var Transaction = require('./transaction')
8b095871 15979
9987f0c1
IC
15980function Block () {
15981 this.version = 1
15982 this.prevHash = null
15983 this.merkleRoot = null
15984 this.timestamp = 0
15985 this.bits = 0
15986 this.nonce = 0
8b095871 15987}
8b095871 15988
9987f0c1
IC
15989Block.fromBuffer = function (buffer) {
15990 if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)')
8b095871 15991
9987f0c1
IC
15992 var offset = 0
15993 function readSlice (n) {
15994 offset += n
15995 return buffer.slice(offset - n, offset)
15996 }
8b095871 15997
9987f0c1
IC
15998 function readUInt32 () {
15999 var i = buffer.readUInt32LE(offset)
16000 offset += 4
16001 return i
16002 }
8b095871 16003
9987f0c1
IC
16004 function readInt32 () {
16005 var i = buffer.readInt32LE(offset)
16006 offset += 4
16007 return i
16008 }
8b095871 16009
9987f0c1
IC
16010 var block = new Block()
16011 block.version = readInt32()
16012 block.prevHash = readSlice(32)
16013 block.merkleRoot = readSlice(32)
16014 block.timestamp = readUInt32()
16015 block.bits = readUInt32()
16016 block.nonce = readUInt32()
8b095871 16017
9987f0c1 16018 if (buffer.length === 80) return block
8b095871 16019
9987f0c1
IC
16020 function readVarInt () {
16021 var vi = varuint.decode(buffer, offset)
16022 offset += varuint.decode.bytes
16023 return vi
16024 }
8b095871 16025
9987f0c1
IC
16026 function readTransaction () {
16027 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
16028 offset += tx.byteLength()
16029 return tx
16030 }
8b095871 16031
9987f0c1
IC
16032 var nTransactions = readVarInt()
16033 block.transactions = []
8b095871 16034
9987f0c1
IC
16035 for (var i = 0; i < nTransactions; ++i) {
16036 var tx = readTransaction()
16037 block.transactions.push(tx)
16038 }
8b095871 16039
9987f0c1 16040 return block
8b095871
IC
16041}
16042
9987f0c1
IC
16043Block.prototype.byteLength = function (headersOnly) {
16044 if (headersOnly || !this.transactions) return 80
8b095871 16045
9987f0c1
IC
16046 return 80 + varuint.encodingLength(this.transactions.length) + this.transactions.reduce(function (a, x) {
16047 return a + x.byteLength()
16048 }, 0)
8b095871
IC
16049}
16050
9987f0c1
IC
16051Block.fromHex = function (hex) {
16052 return Block.fromBuffer(Buffer.from(hex, 'hex'))
16053}
8b095871 16054
9987f0c1
IC
16055Block.prototype.getHash = function () {
16056 return bcrypto.hash256(this.toBuffer(true))
16057}
8b095871 16058
9987f0c1
IC
16059Block.prototype.getId = function () {
16060 return this.getHash().reverse().toString('hex')
8b095871
IC
16061}
16062
9987f0c1
IC
16063Block.prototype.getUTCDate = function () {
16064 var date = new Date(0) // epoch
16065 date.setUTCSeconds(this.timestamp)
8b095871 16066
9987f0c1 16067 return date
8b095871 16068}
8b095871 16069
9987f0c1
IC
16070// TODO: buffer, offset compatibility
16071Block.prototype.toBuffer = function (headersOnly) {
16072 var buffer = Buffer.allocUnsafe(this.byteLength(headersOnly))
16073
16074 var offset = 0
16075 function writeSlice (slice) {
16076 slice.copy(buffer, offset)
16077 offset += slice.length
16078 }
8b095871 16079
9987f0c1
IC
16080 function writeInt32 (i) {
16081 buffer.writeInt32LE(i, offset)
16082 offset += 4
16083 }
16084 function writeUInt32 (i) {
16085 buffer.writeUInt32LE(i, offset)
16086 offset += 4
16087 }
8b095871 16088
9987f0c1
IC
16089 writeInt32(this.version)
16090 writeSlice(this.prevHash)
16091 writeSlice(this.merkleRoot)
16092 writeUInt32(this.timestamp)
16093 writeUInt32(this.bits)
16094 writeUInt32(this.nonce)
8b095871 16095
9987f0c1 16096 if (headersOnly || !this.transactions) return buffer
8b095871 16097
9987f0c1
IC
16098 varuint.encode(this.transactions.length, buffer, offset)
16099 offset += varuint.encode.bytes
8b095871 16100
9987f0c1
IC
16101 this.transactions.forEach(function (tx) {
16102 var txSize = tx.byteLength() // TODO: extract from toBuffer?
16103 tx.toBuffer(buffer, offset)
16104 offset += txSize
16105 })
8b095871 16106
9987f0c1
IC
16107 return buffer
16108}
8b095871 16109
9987f0c1
IC
16110Block.prototype.toHex = function (headersOnly) {
16111 return this.toBuffer(headersOnly).toString('hex')
16112}
8b095871 16113
9987f0c1
IC
16114Block.calculateTarget = function (bits) {
16115 var exponent = ((bits & 0xff000000) >> 24) - 3
16116 var mantissa = bits & 0x007fffff
16117 var target = Buffer.alloc(32, 0)
16118 target.writeUInt32BE(mantissa, 28 - exponent)
16119 return target
8b095871
IC
16120}
16121
9987f0c1
IC
16122Block.calculateMerkleRoot = function (transactions) {
16123 typeforce([{ getHash: types.Function }], transactions)
16124 if (transactions.length === 0) throw TypeError('Cannot compute merkle root for zero transactions')
8b095871 16125
9987f0c1
IC
16126 var hashes = transactions.map(function (transaction) {
16127 return transaction.getHash()
16128 })
8b095871 16129
9987f0c1
IC
16130 return fastMerkleRoot(hashes, bcrypto.hash256)
16131}
8b095871 16132
9987f0c1
IC
16133Block.prototype.checkMerkleRoot = function () {
16134 if (!this.transactions) return false
8b095871 16135
9987f0c1
IC
16136 var actualMerkleRoot = Block.calculateMerkleRoot(this.transactions)
16137 return this.merkleRoot.compare(actualMerkleRoot) === 0
16138}
8b095871 16139
9987f0c1
IC
16140Block.prototype.checkProofOfWork = function () {
16141 var hash = this.getHash().reverse()
16142 var target = Block.calculateTarget(this.bits)
8b095871 16143
9987f0c1
IC
16144 return hash.compare(target) <= 0
16145}
8b095871 16146
9987f0c1 16147module.exports = Block
8b095871 16148
9987f0c1
IC
16149},{"./crypto":45,"./transaction":76,"./types":78,"merkle-lib/fastRoot":94,"safe-buffer":98,"typeforce":109,"varuint-bitcoin":111}],44:[function(require,module,exports){
16150var pushdata = require('pushdata-bitcoin')
16151var varuint = require('varuint-bitcoin')
8b095871 16152
9987f0c1
IC
16153// https://github.com/feross/buffer/blob/master/index.js#L1127
16154function verifuint (value, max) {
16155 if (typeof value !== 'number') throw new Error('cannot write a non-number as a number')
16156 if (value < 0) throw new Error('specified a negative value for writing an unsigned value')
16157 if (value > max) throw new Error('RangeError: value out of range')
16158 if (Math.floor(value) !== value) throw new Error('value has a fractional component')
8b095871
IC
16159}
16160
9987f0c1
IC
16161function readUInt64LE (buffer, offset) {
16162 var a = buffer.readUInt32LE(offset)
16163 var b = buffer.readUInt32LE(offset + 4)
16164 b *= 0x100000000
8b095871 16165
9987f0c1 16166 verifuint(b + a, 0x001fffffffffffff)
8b095871 16167
9987f0c1 16168 return b + a
8b095871
IC
16169}
16170
9987f0c1
IC
16171function writeUInt64LE (buffer, value, offset) {
16172 verifuint(value, 0x001fffffffffffff)
8b095871 16173
9987f0c1
IC
16174 buffer.writeInt32LE(value & -1, offset)
16175 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
16176 return offset + 8
8b095871
IC
16177}
16178
9987f0c1
IC
16179// TODO: remove in 4.0.0?
16180function readVarInt (buffer, offset) {
16181 var result = varuint.decode(buffer, offset)
8b095871 16182
9987f0c1
IC
16183 return {
16184 number: result,
16185 size: varuint.decode.bytes
8b095871 16186 }
9987f0c1 16187}
8b095871 16188
9987f0c1
IC
16189// TODO: remove in 4.0.0?
16190function writeVarInt (buffer, number, offset) {
16191 varuint.encode(number, buffer, offset)
16192 return varuint.encode.bytes
8b095871
IC
16193}
16194
16195module.exports = {
9987f0c1
IC
16196 pushDataSize: pushdata.encodingLength,
16197 readPushDataInt: pushdata.decode,
16198 readUInt64LE: readUInt64LE,
16199 readVarInt: readVarInt,
16200 varIntBuffer: varuint.encode,
16201 varIntSize: varuint.encodingLength,
16202 writePushDataInt: pushdata.encode,
16203 writeUInt64LE: writeUInt64LE,
16204 writeVarInt: writeVarInt
8b095871
IC
16205}
16206
9987f0c1
IC
16207},{"pushdata-bitcoin":95,"varuint-bitcoin":111}],45:[function(require,module,exports){
16208var createHash = require('create-hash')
8b095871 16209
9987f0c1
IC
16210function ripemd160 (buffer) {
16211 return createHash('rmd160').update(buffer).digest()
16212}
8b095871 16213
9987f0c1
IC
16214function sha1 (buffer) {
16215 return createHash('sha1').update(buffer).digest()
8b095871
IC
16216}
16217
9987f0c1
IC
16218function sha256 (buffer) {
16219 return createHash('sha256').update(buffer).digest()
16220}
8b095871 16221
9987f0c1
IC
16222function hash160 (buffer) {
16223 return ripemd160(sha256(buffer))
16224}
8b095871 16225
9987f0c1
IC
16226function hash256 (buffer) {
16227 return sha256(sha256(buffer))
8b095871
IC
16228}
16229
9987f0c1
IC
16230module.exports = {
16231 hash160: hash160,
16232 hash256: hash256,
16233 ripemd160: ripemd160,
16234 sha1: sha1,
16235 sha256: sha256
8b095871
IC
16236}
16237
9987f0c1
IC
16238},{"create-hash":82}],46:[function(require,module,exports){
16239var Buffer = require('safe-buffer').Buffer
16240var createHmac = require('create-hmac')
16241var typeforce = require('typeforce')
16242var types = require('./types')
8b095871 16243
9987f0c1
IC
16244var BigInteger = require('bigi')
16245var ECSignature = require('./ecsignature')
8b095871 16246
9987f0c1
IC
16247var ZERO = Buffer.alloc(1, 0)
16248var ONE = Buffer.alloc(1, 1)
8b095871 16249
9987f0c1
IC
16250var ecurve = require('ecurve')
16251var secp256k1 = ecurve.getCurveByName('secp256k1')
8b095871 16252
9987f0c1
IC
16253// https://tools.ietf.org/html/rfc6979#section-3.2
16254function deterministicGenerateK (hash, x, checkSig) {
16255 typeforce(types.tuple(
16256 types.Hash256bit,
16257 types.Buffer256bit,
16258 types.Function
16259 ), arguments)
8b095871 16260
9987f0c1
IC
16261 // Step A, ignored as hash already provided
16262 // Step B
16263 // Step C
16264 var k = Buffer.alloc(32, 0)
16265 var v = Buffer.alloc(32, 1)
8b095871 16266
9987f0c1
IC
16267 // Step D
16268 k = createHmac('sha256', k)
16269 .update(v)
16270 .update(ZERO)
16271 .update(x)
16272 .update(hash)
16273 .digest()
8b095871 16274
9987f0c1
IC
16275 // Step E
16276 v = createHmac('sha256', k).update(v).digest()
8b095871 16277
9987f0c1
IC
16278 // Step F
16279 k = createHmac('sha256', k)
16280 .update(v)
16281 .update(ONE)
16282 .update(x)
16283 .update(hash)
16284 .digest()
8b095871 16285
9987f0c1
IC
16286 // Step G
16287 v = createHmac('sha256', k).update(v).digest()
8b095871 16288
9987f0c1
IC
16289 // Step H1/H2a, ignored as tlen === qlen (256 bit)
16290 // Step H2b
16291 v = createHmac('sha256', k).update(v).digest()
8b095871 16292
9987f0c1 16293 var T = BigInteger.fromBuffer(v)
8b095871 16294
9987f0c1
IC
16295 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
16296 while (T.signum() <= 0 || T.compareTo(secp256k1.n) >= 0 || !checkSig(T)) {
16297 k = createHmac('sha256', k)
16298 .update(v)
16299 .update(ZERO)
16300 .digest()
16301
16302 v = createHmac('sha256', k).update(v).digest()
16303
16304 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
16305 // Step H2b again
16306 v = createHmac('sha256', k).update(v).digest()
16307 T = BigInteger.fromBuffer(v)
8b095871
IC
16308 }
16309
9987f0c1 16310 return T
8b095871
IC
16311}
16312
9987f0c1 16313var N_OVER_TWO = secp256k1.n.shiftRight(1)
8b095871 16314
9987f0c1
IC
16315function sign (hash, d) {
16316 typeforce(types.tuple(types.Hash256bit, types.BigInt), arguments)
8b095871 16317
9987f0c1
IC
16318 var x = d.toBuffer(32)
16319 var e = BigInteger.fromBuffer(hash)
16320 var n = secp256k1.n
16321 var G = secp256k1.G
8b095871 16322
9987f0c1
IC
16323 var r, s
16324 deterministicGenerateK(hash, x, function (k) {
16325 var Q = G.multiply(k)
8b095871 16326
9987f0c1 16327 if (secp256k1.isInfinity(Q)) return false
8b095871 16328
9987f0c1
IC
16329 r = Q.affineX.mod(n)
16330 if (r.signum() === 0) return false
8b095871 16331
9987f0c1
IC
16332 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
16333 if (s.signum() === 0) return false
8b095871 16334
9987f0c1
IC
16335 return true
16336 })
16337
16338 // enforce low S values, see bip62: 'low s values in signatures'
16339 if (s.compareTo(N_OVER_TWO) > 0) {
16340 s = n.subtract(s)
8b095871 16341 }
8b095871 16342
9987f0c1 16343 return new ECSignature(r, s)
8b095871 16344}
8b095871 16345
9987f0c1
IC
16346function verify (hash, signature, Q) {
16347 typeforce(types.tuple(
16348 types.Hash256bit,
16349 types.ECSignature,
16350 types.ECPoint
16351 ), arguments)
8b095871 16352
9987f0c1
IC
16353 var n = secp256k1.n
16354 var G = secp256k1.G
8b095871 16355
9987f0c1
IC
16356 var r = signature.r
16357 var s = signature.s
8b095871 16358
9987f0c1
IC
16359 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
16360 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
16361 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
8b095871 16362
9987f0c1
IC
16363 // 1.4.2 H = Hash(M), already done by the user
16364 // 1.4.3 e = H
16365 var e = BigInteger.fromBuffer(hash)
8b095871 16366
9987f0c1
IC
16367 // Compute s^-1
16368 var sInv = s.modInverse(n)
8b095871 16369
9987f0c1
IC
16370 // 1.4.4 Compute u1 = es^−1 mod n
16371 // u2 = rs^−1 mod n
16372 var u1 = e.multiply(sInv).mod(n)
16373 var u2 = r.multiply(sInv).mod(n)
8b095871 16374
9987f0c1
IC
16375 // 1.4.5 Compute R = (xR, yR)
16376 // R = u1G + u2Q
16377 var R = G.multiplyTwo(u1, Q, u2)
8b095871 16378
9987f0c1
IC
16379 // 1.4.5 (cont.) Enforce R is not at infinity
16380 if (secp256k1.isInfinity(R)) return false
8b095871 16381
9987f0c1
IC
16382 // 1.4.6 Convert the field element R.x to an integer
16383 var xR = R.affineX
8b095871 16384
9987f0c1
IC
16385 // 1.4.7 Set v = xR mod n
16386 var v = xR.mod(n)
8b095871 16387
9987f0c1
IC
16388 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
16389 return v.equals(r)
8b095871
IC
16390}
16391
9987f0c1
IC
16392module.exports = {
16393 deterministicGenerateK: deterministicGenerateK,
16394 sign: sign,
16395 verify: verify,
8b095871 16396
9987f0c1
IC
16397 // TODO: remove
16398 __curve: secp256k1
16399}
8b095871 16400
9987f0c1
IC
16401},{"./ecsignature":48,"./types":78,"bigi":37,"create-hmac":85,"ecurve":89,"safe-buffer":98,"typeforce":109}],47:[function(require,module,exports){
16402var baddress = require('./address')
16403var bcrypto = require('./crypto')
16404var ecdsa = require('./ecdsa')
16405var randomBytes = require('randombytes')
16406var typeforce = require('typeforce')
16407var types = require('./types')
16408var wif = require('wif')
8b095871 16409
9987f0c1
IC
16410var NETWORKS = require('./networks')
16411var BigInteger = require('bigi')
8b095871 16412
9987f0c1
IC
16413var ecurve = require('ecurve')
16414var secp256k1 = ecdsa.__curve
8b095871 16415
9987f0c1
IC
16416function ECPair (d, Q, options) {
16417 if (options) {
16418 typeforce({
16419 compressed: types.maybe(types.Boolean),
16420 network: types.maybe(types.Network)
16421 }, options)
16422 }
8b095871 16423
9987f0c1 16424 options = options || {}
8b095871 16425
9987f0c1
IC
16426 if (d) {
16427 if (d.signum() <= 0) throw new Error('Private key must be greater than 0')
16428 if (d.compareTo(secp256k1.n) >= 0) throw new Error('Private key must be less than the curve order')
16429 if (Q) throw new TypeError('Unexpected publicKey parameter')
8b095871 16430
9987f0c1
IC
16431 this.d = d
16432 } else {
16433 typeforce(types.ECPoint, Q)
8b095871 16434
9987f0c1 16435 this.__Q = Q
8b095871 16436 }
8b095871 16437
9987f0c1
IC
16438 this.compressed = options.compressed === undefined ? true : options.compressed
16439 this.network = options.network || NETWORKS.bitcoin
8b095871
IC
16440}
16441
9987f0c1
IC
16442Object.defineProperty(ECPair.prototype, 'Q', {
16443 get: function () {
16444 if (!this.__Q && this.d) {
16445 this.__Q = secp256k1.G.multiply(this.d)
16446 }
8b095871 16447
9987f0c1 16448 return this.__Q
8b095871 16449 }
9987f0c1 16450})
8b095871 16451
9987f0c1
IC
16452ECPair.fromPublicKeyBuffer = function (buffer, network) {
16453 var Q = ecurve.Point.decodeFrom(secp256k1, buffer)
8b095871 16454
9987f0c1
IC
16455 return new ECPair(null, Q, {
16456 compressed: Q.compressed,
16457 network: network
16458 })
16459}
8b095871 16460
9987f0c1
IC
16461ECPair.fromWIF = function (string, network) {
16462 var decoded = wif.decode(string)
16463 var version = decoded.version
8b095871 16464
9987f0c1
IC
16465 // list of networks?
16466 if (types.Array(network)) {
16467 network = network.filter(function (x) {
16468 return version === x.wif
16469 }).pop()
16470
16471 if (!network) throw new Error('Unknown network version')
16472
16473 // otherwise, assume a network object (or default to bitcoin)
16474 } else {
16475 network = network || NETWORKS.bitcoin
16476
16477 if (version !== network.wif) throw new Error('Invalid network version')
8b095871
IC
16478 }
16479
9987f0c1
IC
16480 var d = BigInteger.fromBuffer(decoded.privateKey)
16481
16482 return new ECPair(d, null, {
16483 compressed: decoded.compressed,
16484 network: network
16485 })
8b095871
IC
16486}
16487
9987f0c1
IC
16488ECPair.makeRandom = function (options) {
16489 options = options || {}
16490
16491 var rng = options.rng || randomBytes
16492
16493 var d
16494 do {
16495 var buffer = rng(32)
16496 typeforce(types.Buffer256bit, buffer)
16497
16498 d = BigInteger.fromBuffer(buffer)
16499 } while (d.signum() <= 0 || d.compareTo(secp256k1.n) >= 0)
16500
16501 return new ECPair(d, null, options)
8b095871
IC
16502}
16503
9987f0c1
IC
16504ECPair.prototype.getAddress = function () {
16505 return baddress.toBase58Check(bcrypto.hash160(this.getPublicKeyBuffer()), this.getNetwork().pubKeyHash)
8b095871
IC
16506}
16507
9987f0c1
IC
16508ECPair.prototype.getNetwork = function () {
16509 return this.network
8b095871
IC
16510}
16511
9987f0c1
IC
16512ECPair.prototype.getPublicKeyBuffer = function () {
16513 return this.Q.getEncoded(this.compressed)
8b095871
IC
16514}
16515
9987f0c1
IC
16516ECPair.prototype.sign = function (hash) {
16517 if (!this.d) throw new Error('Missing private key')
16518
16519 return ecdsa.sign(hash, this.d)
8b095871
IC
16520}
16521
9987f0c1
IC
16522ECPair.prototype.toWIF = function () {
16523 if (!this.d) throw new Error('Missing private key')
16524
16525 return wif.encode(this.network.wif, this.d.toBuffer(32), this.compressed)
8b095871
IC
16526}
16527
9987f0c1
IC
16528ECPair.prototype.verify = function (hash, signature) {
16529 return ecdsa.verify(hash, signature, this.Q)
16530}
8b095871 16531
9987f0c1 16532module.exports = ECPair
8b095871 16533
9987f0c1
IC
16534},{"./address":42,"./crypto":45,"./ecdsa":46,"./networks":51,"./types":78,"bigi":37,"ecurve":89,"randombytes":96,"typeforce":109,"wif":112}],48:[function(require,module,exports){
16535(function (Buffer){
16536var bip66 = require('bip66')
16537var typeforce = require('typeforce')
16538var types = require('./types')
8b095871 16539
9987f0c1 16540var BigInteger = require('bigi')
8b095871 16541
9987f0c1
IC
16542function ECSignature (r, s) {
16543 typeforce(types.tuple(types.BigInt, types.BigInt), arguments)
8b095871 16544
9987f0c1
IC
16545 this.r = r
16546 this.s = s
16547}
16548
16549ECSignature.parseCompact = function (buffer) {
16550 if (buffer.length !== 65) throw new Error('Invalid signature length')
16551
16552 var flagByte = buffer.readUInt8(0) - 27
16553 if (flagByte !== (flagByte & 7)) throw new Error('Invalid signature parameter')
16554
16555 var compressed = !!(flagByte & 4)
16556 var recoveryParam = flagByte & 3
16557
16558 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
16559 var s = BigInteger.fromBuffer(buffer.slice(33))
16560
16561 return {
16562 compressed: compressed,
16563 i: recoveryParam,
16564 signature: new ECSignature(r, s)
8b095871 16565 }
9987f0c1 16566}
8b095871 16567
9987f0c1
IC
16568ECSignature.fromDER = function (buffer) {
16569 var decode = bip66.decode(buffer)
16570 var r = BigInteger.fromDERInteger(decode.r)
16571 var s = BigInteger.fromDERInteger(decode.s)
8b095871 16572
9987f0c1
IC
16573 return new ECSignature(r, s)
16574}
16575
16576// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
16577ECSignature.parseScriptSignature = function (buffer) {
16578 var hashType = buffer.readUInt8(buffer.length - 1)
16579 var hashTypeMod = hashType & ~0x80
16580
16581 if (hashTypeMod <= 0x00 || hashTypeMod >= 0x04) throw new Error('Invalid hashType ' + hashType)
16582
16583 return {
16584 signature: ECSignature.fromDER(buffer.slice(0, -1)),
16585 hashType: hashType
8b095871 16586 }
9987f0c1 16587}
8b095871 16588
9987f0c1
IC
16589ECSignature.prototype.toCompact = function (i, compressed) {
16590 if (compressed) {
16591 i += 4
16592 }
16593
16594 i += 27
16595
16596 var buffer = Buffer.alloc(65)
16597 buffer.writeUInt8(i, 0)
16598 this.r.toBuffer(32).copy(buffer, 1)
16599 this.s.toBuffer(32).copy(buffer, 33)
16600
16601 return buffer
8b095871
IC
16602}
16603
9987f0c1
IC
16604ECSignature.prototype.toDER = function () {
16605 var r = Buffer.from(this.r.toDERInteger())
16606 var s = Buffer.from(this.s.toDERInteger())
16607
16608 return bip66.encode(r, s)
16609}
16610
16611ECSignature.prototype.toScriptSignature = function (hashType) {
16612 var hashTypeMod = hashType & ~0x80
16613 if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType)
16614
16615 var hashTypeBuffer = Buffer.alloc(1)
16616 hashTypeBuffer.writeUInt8(hashType, 0)
16617
16618 return Buffer.concat([this.toDER(), hashTypeBuffer])
16619}
16620
16621module.exports = ECSignature
8b095871
IC
16622
16623}).call(this,require("buffer").Buffer)
9987f0c1
IC
16624},{"./types":78,"bigi":37,"bip66":39,"buffer":4,"typeforce":109}],49:[function(require,module,exports){
16625var Buffer = require('safe-buffer').Buffer
16626var base58check = require('bs58check')
16627var bcrypto = require('./crypto')
16628var createHmac = require('create-hmac')
16629var typeforce = require('typeforce')
16630var types = require('./types')
16631var NETWORKS = require('./networks')
16632
16633var BigInteger = require('bigi')
16634var ECPair = require('./ecpair')
16635
16636var ecurve = require('ecurve')
16637var curve = ecurve.getCurveByName('secp256k1')
16638
16639function HDNode (keyPair, chainCode) {
16640 typeforce(types.tuple('ECPair', types.Buffer256bit), arguments)
16641
16642 if (!keyPair.compressed) throw new TypeError('BIP32 only allows compressed keyPairs')
16643
16644 this.keyPair = keyPair
16645 this.chainCode = chainCode
16646 this.depth = 0
16647 this.index = 0
16648 this.parentFingerprint = 0x00000000
8b095871
IC
16649}
16650
9987f0c1
IC
16651HDNode.HIGHEST_BIT = 0x80000000
16652HDNode.LENGTH = 78
16653HDNode.MASTER_SECRET = Buffer.from('Bitcoin seed', 'utf8')
8b095871 16654
9987f0c1
IC
16655HDNode.fromSeedBuffer = function (seed, network) {
16656 typeforce(types.tuple(types.Buffer, types.maybe(types.Network)), arguments)
8b095871 16657
9987f0c1
IC
16658 if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits')
16659 if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits')
8b095871 16660
9987f0c1
IC
16661 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
16662 var IL = I.slice(0, 32)
16663 var IR = I.slice(32)
8b095871 16664
9987f0c1
IC
16665 // In case IL is 0 or >= n, the master key is invalid
16666 // This is handled by the ECPair constructor
16667 var pIL = BigInteger.fromBuffer(IL)
16668 var keyPair = new ECPair(pIL, null, {
16669 network: network
16670 })
8b095871 16671
9987f0c1
IC
16672 return new HDNode(keyPair, IR)
16673}
8b095871 16674
9987f0c1
IC
16675HDNode.fromSeedHex = function (hex, network) {
16676 return HDNode.fromSeedBuffer(Buffer.from(hex, 'hex'), network)
8b095871
IC
16677}
16678
9987f0c1
IC
16679HDNode.fromBase58 = function (string, networks) {
16680 var buffer = base58check.decode(string)
16681 if (buffer.length !== 78) throw new Error('Invalid buffer length')
8b095871 16682
9987f0c1
IC
16683 // 4 bytes: version bytes
16684 var version = buffer.readUInt32BE(0)
16685 var network
8b095871 16686
9987f0c1
IC
16687 // list of networks?
16688 if (Array.isArray(networks)) {
16689 network = networks.filter(function (x) {
16690 return version === x.bip32.private ||
16691 version === x.bip32.public
16692 }).pop()
8b095871 16693
9987f0c1
IC
16694 if (!network) throw new Error('Unknown network version')
16695
16696 // otherwise, assume a network object (or default to bitcoin)
16697 } else {
16698 network = networks || NETWORKS.bitcoin
8b095871
IC
16699 }
16700
9987f0c1
IC
16701 if (version !== network.bip32.private &&
16702 version !== network.bip32.public) throw new Error('Invalid network version')
8b095871 16703
9987f0c1
IC
16704 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
16705 var depth = buffer[4]
8b095871 16706
9987f0c1
IC
16707 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
16708 var parentFingerprint = buffer.readUInt32BE(5)
16709 if (depth === 0) {
16710 if (parentFingerprint !== 0x00000000) throw new Error('Invalid parent fingerprint')
16711 }
8b095871 16712
9987f0c1
IC
16713 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
16714 // This is encoded in MSB order. (0x00000000 if master key)
16715 var index = buffer.readUInt32BE(9)
16716 if (depth === 0 && index !== 0) throw new Error('Invalid index')
16717
16718 // 32 bytes: the chain code
16719 var chainCode = buffer.slice(13, 45)
16720 var keyPair
16721
16722 // 33 bytes: private key data (0x00 + k)
16723 if (version === network.bip32.private) {
16724 if (buffer.readUInt8(45) !== 0x00) throw new Error('Invalid private key')
16725
16726 var d = BigInteger.fromBuffer(buffer.slice(46, 78))
16727 keyPair = new ECPair(d, null, { network: network })
16728
16729 // 33 bytes: public key data (0x02 + X or 0x03 + X)
16730 } else {
16731 var Q = ecurve.Point.decodeFrom(curve, buffer.slice(45, 78))
16732 // Q.compressed is assumed, if somehow this assumption is broken, `new HDNode` will throw
16733
16734 // Verify that the X coordinate in the public point corresponds to a point on the curve.
16735 // If not, the extended public key is invalid.
16736 curve.validate(Q)
16737
16738 keyPair = new ECPair(null, Q, { network: network })
16739 }
16740
16741 var hd = new HDNode(keyPair, chainCode)
16742 hd.depth = depth
16743 hd.index = index
16744 hd.parentFingerprint = parentFingerprint
16745
16746 return hd
8b095871
IC
16747}
16748
9987f0c1
IC
16749HDNode.prototype.getAddress = function () {
16750 return this.keyPair.getAddress()
16751}
8b095871 16752
9987f0c1
IC
16753HDNode.prototype.getIdentifier = function () {
16754 return bcrypto.hash160(this.keyPair.getPublicKeyBuffer())
16755}
8b095871 16756
9987f0c1
IC
16757HDNode.prototype.getFingerprint = function () {
16758 return this.getIdentifier().slice(0, 4)
16759}
8b095871 16760
9987f0c1
IC
16761HDNode.prototype.getNetwork = function () {
16762 return this.keyPair.getNetwork()
8b095871
IC
16763}
16764
9987f0c1
IC
16765HDNode.prototype.getPublicKeyBuffer = function () {
16766 return this.keyPair.getPublicKeyBuffer()
16767}
8b095871 16768
9987f0c1
IC
16769HDNode.prototype.neutered = function () {
16770 var neuteredKeyPair = new ECPair(null, this.keyPair.Q, {
16771 network: this.keyPair.network
16772 })
8b095871 16773
9987f0c1
IC
16774 var neutered = new HDNode(neuteredKeyPair, this.chainCode)
16775 neutered.depth = this.depth
16776 neutered.index = this.index
16777 neutered.parentFingerprint = this.parentFingerprint
8b095871 16778
9987f0c1
IC
16779 return neutered
16780}
8b095871 16781
9987f0c1
IC
16782HDNode.prototype.sign = function (hash) {
16783 return this.keyPair.sign(hash)
16784}
8b095871 16785
9987f0c1
IC
16786HDNode.prototype.verify = function (hash, signature) {
16787 return this.keyPair.verify(hash, signature)
8b095871
IC
16788}
16789
9987f0c1
IC
16790HDNode.prototype.toBase58 = function (__isPrivate) {
16791 if (__isPrivate !== undefined) throw new TypeError('Unsupported argument in 2.0.0')
8b095871 16792
9987f0c1
IC
16793 // Version
16794 var network = this.keyPair.network
16795 var version = (!this.isNeutered()) ? network.bip32.private : network.bip32.public
16796 var buffer = Buffer.allocUnsafe(78)
8b095871 16797
9987f0c1
IC
16798 // 4 bytes: version bytes
16799 buffer.writeUInt32BE(version, 0)
8b095871 16800
9987f0c1
IC
16801 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
16802 buffer.writeUInt8(this.depth, 4)
16803
16804 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
16805 buffer.writeUInt32BE(this.parentFingerprint, 5)
16806
16807 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
16808 // This is encoded in big endian. (0x00000000 if master key)
16809 buffer.writeUInt32BE(this.index, 9)
16810
16811 // 32 bytes: the chain code
16812 this.chainCode.copy(buffer, 13)
16813
16814 // 33 bytes: the public key or private key data
16815 if (!this.isNeutered()) {
16816 // 0x00 + k for private keys
16817 buffer.writeUInt8(0, 45)
16818 this.keyPair.d.toBuffer(32).copy(buffer, 46)
16819
16820 // 33 bytes: the public key
16821 } else {
16822 // X9.62 encoding for public keys
16823 this.keyPair.getPublicKeyBuffer().copy(buffer, 45)
16824 }
16825
16826 return base58check.encode(buffer)
8b095871
IC
16827}
16828
9987f0c1
IC
16829// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
16830HDNode.prototype.derive = function (index) {
16831 typeforce(types.UInt32, index)
16832
16833 var isHardened = index >= HDNode.HIGHEST_BIT
16834 var data = Buffer.allocUnsafe(37)
16835
16836 // Hardened child
16837 if (isHardened) {
16838 if (this.isNeutered()) throw new TypeError('Could not derive hardened child key')
8b095871 16839
9987f0c1
IC
16840 // data = 0x00 || ser256(kpar) || ser32(index)
16841 data[0] = 0x00
16842 this.keyPair.d.toBuffer(32).copy(data, 1)
16843 data.writeUInt32BE(index, 33)
8b095871 16844
9987f0c1
IC
16845 // Normal child
16846 } else {
16847 // data = serP(point(kpar)) || ser32(index)
16848 // = serP(Kpar) || ser32(index)
16849 this.keyPair.getPublicKeyBuffer().copy(data, 0)
16850 data.writeUInt32BE(index, 33)
16851 }
8b095871 16852
9987f0c1
IC
16853 var I = createHmac('sha512', this.chainCode).update(data).digest()
16854 var IL = I.slice(0, 32)
16855 var IR = I.slice(32)
8b095871 16856
9987f0c1 16857 var pIL = BigInteger.fromBuffer(IL)
8b095871 16858
9987f0c1
IC
16859 // In case parse256(IL) >= n, proceed with the next value for i
16860 if (pIL.compareTo(curve.n) >= 0) {
16861 return this.derive(index + 1)
8b095871
IC
16862 }
16863
9987f0c1
IC
16864 // Private parent key -> private child key
16865 var derivedKeyPair
16866 if (!this.isNeutered()) {
16867 // ki = parse256(IL) + kpar (mod n)
16868 var ki = pIL.add(this.keyPair.d).mod(curve.n)
8b095871 16869
9987f0c1
IC
16870 // In case ki == 0, proceed with the next value for i
16871 if (ki.signum() === 0) {
16872 return this.derive(index + 1)
16873 }
16874
16875 derivedKeyPair = new ECPair(ki, null, {
16876 network: this.keyPair.network
16877 })
16878
16879 // Public parent key -> public child key
16880 } else {
16881 // Ki = point(parse256(IL)) + Kpar
16882 // = G*IL + Kpar
16883 var Ki = curve.G.multiply(pIL).add(this.keyPair.Q)
16884
16885 // In case Ki is the point at infinity, proceed with the next value for i
16886 if (curve.isInfinity(Ki)) {
16887 return this.derive(index + 1)
16888 }
16889
16890 derivedKeyPair = new ECPair(null, Ki, {
16891 network: this.keyPair.network
16892 })
16893 }
16894
16895 var hd = new HDNode(derivedKeyPair, IR)
16896 hd.depth = this.depth + 1
16897 hd.index = index
16898 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
16899
16900 return hd
8b095871
IC
16901}
16902
9987f0c1
IC
16903HDNode.prototype.deriveHardened = function (index) {
16904 typeforce(types.UInt31, index)
8b095871 16905
9987f0c1
IC
16906 // Only derives hardened private keys by default
16907 return this.derive(index + HDNode.HIGHEST_BIT)
16908}
8b095871 16909
9987f0c1
IC
16910// Private === not neutered
16911// Public === neutered
16912HDNode.prototype.isNeutered = function () {
16913 return !(this.keyPair.d)
8b095871
IC
16914}
16915
9987f0c1
IC
16916HDNode.prototype.derivePath = function (path) {
16917 typeforce(types.BIP32Path, path)
8b095871 16918
9987f0c1
IC
16919 var splitPath = path.split('/')
16920 if (splitPath[0] === 'm') {
16921 if (this.parentFingerprint) {
16922 throw new Error('Not a master node')
16923 }
8b095871 16924
9987f0c1
IC
16925 splitPath = splitPath.slice(1)
16926 }
8b095871 16927
9987f0c1
IC
16928 return splitPath.reduce(function (prevHd, indexStr) {
16929 var index
16930 if (indexStr.slice(-1) === "'") {
16931 index = parseInt(indexStr.slice(0, -1), 10)
16932 return prevHd.deriveHardened(index)
16933 } else {
16934 index = parseInt(indexStr, 10)
16935 return prevHd.derive(index)
16936 }
16937 }, this)
16938}
8b095871 16939
9987f0c1 16940module.exports = HDNode
8b095871 16941
9987f0c1
IC
16942},{"./crypto":45,"./ecpair":47,"./networks":51,"./types":78,"bigi":37,"bs58check":80,"create-hmac":85,"ecurve":89,"safe-buffer":98,"typeforce":109}],50:[function(require,module,exports){
16943module.exports = {
16944 Block: require('./block'),
16945 ECPair: require('./ecpair'),
16946 ECSignature: require('./ecsignature'),
16947 HDNode: require('./hdnode'),
16948 Transaction: require('./transaction'),
16949 TransactionBuilder: require('./transaction_builder'),
8b095871 16950
9987f0c1
IC
16951 address: require('./address'),
16952 bufferutils: require('./bufferutils'), // TODO: remove in 4.0.0
16953 crypto: require('./crypto'),
16954 networks: require('./networks'),
16955 opcodes: require('bitcoin-ops'),
16956 script: require('./script')
8b095871
IC
16957}
16958
9987f0c1
IC
16959},{"./address":42,"./block":43,"./bufferutils":44,"./crypto":45,"./ecpair":47,"./ecsignature":48,"./hdnode":49,"./networks":51,"./script":52,"./transaction":76,"./transaction_builder":77,"bitcoin-ops":40}],51:[function(require,module,exports){
16960// https://en.bitcoin.it/wiki/List_of_address_prefixes
16961// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
8b095871 16962
9987f0c1
IC
16963module.exports = {
16964 bitcoin: {
16965 messagePrefix: '\x18Bitcoin Signed Message:\n',
16966 bip32: {
16967 public: 0x0488b21e,
16968 private: 0x0488ade4
16969 },
16970 pubKeyHash: 0x00,
16971 scriptHash: 0x05,
16972 wif: 0x80
16973 },
16974 testnet: {
16975 messagePrefix: '\x18Bitcoin Signed Message:\n',
16976 bip32: {
16977 public: 0x043587cf,
16978 private: 0x04358394
16979 },
16980 pubKeyHash: 0x6f,
16981 scriptHash: 0xc4,
16982 wif: 0xef
16983 },
16984 litecoin: {
8d18f379
IC
16985 messagePrefix: '\x19Litecoin Signed Message:\n',
16986 bip32: {
16987 public: 0x0488b21e,
16988 private: 0x0488ade4,
16989 },
16990 pubKeyHash: 0x30,
16991 scriptHash: 0x32,
16992 wif: 0xb0
16993 },
16994 litecoinLtub: {
9987f0c1
IC
16995 messagePrefix: '\x19Litecoin Signed Message:\n',
16996 bip32: {
16997 public: 0x019da462,
16998 private: 0x019d9cfe
16999 },
17000 pubKeyHash: 0x30,
17001 scriptHash: 0x32,
17002 wif: 0xb0
17003 }
17004}
8b095871 17005
9987f0c1
IC
17006},{}],52:[function(require,module,exports){
17007var Buffer = require('safe-buffer').Buffer
17008var bip66 = require('bip66')
17009var pushdata = require('pushdata-bitcoin')
17010var typeforce = require('typeforce')
17011var types = require('./types')
17012var scriptNumber = require('./script_number')
17013
17014var OPS = require('bitcoin-ops')
17015var REVERSE_OPS = require('bitcoin-ops/map')
17016var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
17017
17018function isOPInt (value) {
17019 return types.Number(value) &&
17020 ((value === OPS.OP_0) ||
17021 (value >= OPS.OP_1 && value <= OPS.OP_16) ||
17022 (value === OPS.OP_1NEGATE))
8b095871
IC
17023}
17024
9987f0c1
IC
17025function isPushOnlyChunk (value) {
17026 return types.Buffer(value) || isOPInt(value)
8b095871
IC
17027}
17028
9987f0c1
IC
17029function isPushOnly (value) {
17030 return types.Array(value) && value.every(isPushOnlyChunk)
17031}
8b095871 17032
9987f0c1
IC
17033function compile (chunks) {
17034 // TODO: remove me
17035 if (Buffer.isBuffer(chunks)) return chunks
8b095871 17036
9987f0c1 17037 typeforce(types.Array, chunks)
8b095871 17038
9987f0c1
IC
17039 var bufferSize = chunks.reduce(function (accum, chunk) {
17040 // data chunk
17041 if (Buffer.isBuffer(chunk)) {
17042 // adhere to BIP62.3, minimal push policy
17043 if (chunk.length === 1 && (chunk[0] === 0x81 || (chunk[0] >= 1 && chunk[0] <= 16))) {
17044 return accum + 1
17045 }
8b095871 17046
9987f0c1
IC
17047 return accum + pushdata.encodingLength(chunk.length) + chunk.length
17048 }
8b095871 17049
9987f0c1
IC
17050 // opcode
17051 return accum + 1
17052 }, 0.0)
8b095871 17053
9987f0c1
IC
17054 var buffer = Buffer.allocUnsafe(bufferSize)
17055 var offset = 0
8b095871 17056
9987f0c1
IC
17057 chunks.forEach(function (chunk) {
17058 // data chunk
17059 if (Buffer.isBuffer(chunk)) {
17060 // adhere to BIP62.3, minimal push policy
17061 if (chunk.length === 1 && chunk[0] >= 1 && chunk[0] <= 16) {
17062 var opcode = OP_INT_BASE + chunk[0]
17063 buffer.writeUInt8(opcode, offset)
17064 offset += 1
17065 return
17066 }
8b095871 17067
9987f0c1
IC
17068 if (chunk.length === 1 && chunk[0] === 0x81) {
17069 buffer.writeUInt8(OPS.OP_1NEGATE, offset)
17070 offset += 1
17071 return
17072 }
8b095871 17073
9987f0c1 17074 offset += pushdata.encode(buffer, chunk.length, offset)
8b095871 17075
9987f0c1
IC
17076 chunk.copy(buffer, offset)
17077 offset += chunk.length
8b095871 17078
9987f0c1
IC
17079 // opcode
17080 } else {
17081 buffer.writeUInt8(chunk, offset)
17082 offset += 1
17083 }
17084 })
8b095871 17085
9987f0c1
IC
17086 if (offset !== buffer.length) throw new Error('Could not decode chunks')
17087 return buffer
17088}
8b095871 17089
9987f0c1
IC
17090function decompile (buffer) {
17091 // TODO: remove me
17092 if (types.Array(buffer)) return buffer
8b095871 17093
9987f0c1 17094 typeforce(types.Buffer, buffer)
8b095871 17095
9987f0c1
IC
17096 var chunks = []
17097 var i = 0
8b095871 17098
9987f0c1
IC
17099 while (i < buffer.length) {
17100 var opcode = buffer[i]
8b095871 17101
9987f0c1
IC
17102 // data chunk
17103 if ((opcode > OPS.OP_0) && (opcode <= OPS.OP_PUSHDATA4)) {
17104 var d = pushdata.decode(buffer, i)
8b095871 17105
9987f0c1
IC
17106 // did reading a pushDataInt fail? empty script
17107 if (d === null) return []
17108 i += d.size
8b095871 17109
9987f0c1
IC
17110 // attempt to read too much data? empty script
17111 if (i + d.number > buffer.length) return []
8b095871 17112
9987f0c1
IC
17113 var data = buffer.slice(i, i + d.number)
17114 i += d.number
8b095871 17115
9987f0c1 17116 chunks.push(data)
8b095871 17117
9987f0c1
IC
17118 // opcode
17119 } else {
17120 chunks.push(opcode)
8b095871 17121
9987f0c1
IC
17122 i += 1
17123 }
17124 }
17125
17126 return chunks
8b095871
IC
17127}
17128
9987f0c1
IC
17129function toASM (chunks) {
17130 if (Buffer.isBuffer(chunks)) {
17131 chunks = decompile(chunks)
17132 }
8b095871 17133
9987f0c1
IC
17134 return chunks.map(function (chunk) {
17135 // data?
17136 if (Buffer.isBuffer(chunk)) return chunk.toString('hex')
8b095871 17137
9987f0c1
IC
17138 // opcode!
17139 return REVERSE_OPS[chunk]
17140 }).join(' ')
17141}
8b095871 17142
9987f0c1
IC
17143function fromASM (asm) {
17144 typeforce(types.String, asm)
8b095871 17145
9987f0c1
IC
17146 return compile(asm.split(' ').map(function (chunkStr) {
17147 // opcode?
17148 if (OPS[chunkStr] !== undefined) return OPS[chunkStr]
17149 typeforce(types.Hex, chunkStr)
8b095871 17150
9987f0c1
IC
17151 // data!
17152 return Buffer.from(chunkStr, 'hex')
17153 }))
17154}
8b095871 17155
9987f0c1
IC
17156function toStack (chunks) {
17157 chunks = decompile(chunks)
17158 typeforce(isPushOnly, chunks)
8b095871 17159
9987f0c1
IC
17160 return chunks.map(function (op) {
17161 if (Buffer.isBuffer(op)) return op
17162 if (op === OPS.OP_0) return Buffer.allocUnsafe(0)
17163
17164 return scriptNumber.encode(op - OP_INT_BASE)
17165 })
8b095871
IC
17166}
17167
9987f0c1
IC
17168function isCanonicalPubKey (buffer) {
17169 if (!Buffer.isBuffer(buffer)) return false
17170 if (buffer.length < 33) return false
8b095871 17171
9987f0c1
IC
17172 switch (buffer[0]) {
17173 case 0x02:
17174 case 0x03:
17175 return buffer.length === 33
17176 case 0x04:
17177 return buffer.length === 65
17178 }
8b095871 17179
9987f0c1 17180 return false
8b095871
IC
17181}
17182
9987f0c1
IC
17183function isDefinedHashType (hashType) {
17184 var hashTypeMod = hashType & ~0x80
8b095871 17185
9987f0c1
IC
17186// return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE
17187 return hashTypeMod > 0x00 && hashTypeMod < 0x04
8b095871
IC
17188}
17189
9987f0c1
IC
17190function isCanonicalSignature (buffer) {
17191 if (!Buffer.isBuffer(buffer)) return false
17192 if (!isDefinedHashType(buffer[buffer.length - 1])) return false
8b095871 17193
9987f0c1 17194 return bip66.check(buffer.slice(0, -1))
8b095871
IC
17195}
17196
9987f0c1
IC
17197module.exports = {
17198 compile: compile,
17199 decompile: decompile,
17200 fromASM: fromASM,
17201 toASM: toASM,
17202 toStack: toStack,
8b095871 17203
9987f0c1 17204 number: require('./script_number'),
8b095871 17205
9987f0c1
IC
17206 isCanonicalPubKey: isCanonicalPubKey,
17207 isCanonicalSignature: isCanonicalSignature,
17208 isPushOnly: isPushOnly,
17209 isDefinedHashType: isDefinedHashType
8b095871
IC
17210}
17211
9987f0c1
IC
17212var templates = require('./templates')
17213for (var key in templates) {
17214 module.exports[key] = templates[key]
8b095871
IC
17215}
17216
9987f0c1
IC
17217},{"./script_number":53,"./templates":54,"./types":78,"bip66":39,"bitcoin-ops":40,"bitcoin-ops/map":41,"pushdata-bitcoin":95,"safe-buffer":98,"typeforce":109}],53:[function(require,module,exports){
17218var Buffer = require('safe-buffer').Buffer
8b095871 17219
9987f0c1
IC
17220function decode (buffer, maxLength, minimal) {
17221 maxLength = maxLength || 4
17222 minimal = minimal === undefined ? true : minimal
8b095871 17223
9987f0c1
IC
17224 var length = buffer.length
17225 if (length === 0) return 0
17226 if (length > maxLength) throw new TypeError('Script number overflow')
17227 if (minimal) {
17228 if ((buffer[length - 1] & 0x7f) === 0) {
17229 if (length <= 1 || (buffer[length - 2] & 0x80) === 0) throw new Error('Non-minimally encoded script number')
17230 }
17231 }
8b095871 17232
9987f0c1
IC
17233 // 40-bit
17234 if (length === 5) {
17235 var a = buffer.readUInt32LE(0)
17236 var b = buffer.readUInt8(4)
8b095871 17237
9987f0c1
IC
17238 if (b & 0x80) return -(((b & ~0x80) * 0x100000000) + a)
17239 return (b * 0x100000000) + a
17240 }
8b095871 17241
9987f0c1 17242 var result = 0
8b095871 17243
9987f0c1
IC
17244 // 32-bit / 24-bit / 16-bit / 8-bit
17245 for (var i = 0; i < length; ++i) {
17246 result |= buffer[i] << (8 * i)
8b095871
IC
17247 }
17248
9987f0c1
IC
17249 if (buffer[length - 1] & 0x80) return -(result & ~(0x80 << (8 * (length - 1))))
17250 return result
17251}
8b095871 17252
9987f0c1
IC
17253function scriptNumSize (i) {
17254 return i > 0x7fffffff ? 5
17255 : i > 0x7fffff ? 4
17256 : i > 0x7fff ? 3
17257 : i > 0x7f ? 2
17258 : i > 0x00 ? 1
17259 : 0
8b095871
IC
17260}
17261
9987f0c1
IC
17262function encode (number) {
17263 var value = Math.abs(number)
17264 var size = scriptNumSize(value)
17265 var buffer = Buffer.allocUnsafe(size)
17266 var negative = number < 0
8b095871 17267
9987f0c1
IC
17268 for (var i = 0; i < size; ++i) {
17269 buffer.writeUInt8(value & 0xff, i)
17270 value >>= 8
17271 }
8b095871 17272
9987f0c1
IC
17273 if (buffer[size - 1] & 0x80) {
17274 buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1)
17275 } else if (negative) {
17276 buffer[size - 1] |= 0x80
17277 }
17278
17279 return buffer
8b095871
IC
17280}
17281
9987f0c1
IC
17282module.exports = {
17283 decode: decode,
17284 encode: encode
17285}
8b095871 17286
9987f0c1
IC
17287},{"safe-buffer":98}],54:[function(require,module,exports){
17288var decompile = require('../script').decompile
17289var multisig = require('./multisig')
17290var nullData = require('./nulldata')
17291var pubKey = require('./pubkey')
17292var pubKeyHash = require('./pubkeyhash')
17293var scriptHash = require('./scripthash')
17294var witnessPubKeyHash = require('./witnesspubkeyhash')
17295var witnessScriptHash = require('./witnessscripthash')
17296var witnessCommitment = require('./witnesscommitment')
17297
17298var types = {
17299 MULTISIG: 'multisig',
17300 NONSTANDARD: 'nonstandard',
17301 NULLDATA: 'nulldata',
17302 P2PK: 'pubkey',
17303 P2PKH: 'pubkeyhash',
17304 P2SH: 'scripthash',
17305 P2WPKH: 'witnesspubkeyhash',
17306 P2WSH: 'witnessscripthash',
17307 WITNESS_COMMITMENT: 'witnesscommitment'
17308}
8b095871 17309
9987f0c1
IC
17310function classifyOutput (script) {
17311 if (witnessPubKeyHash.output.check(script)) return types.P2WPKH
17312 if (witnessScriptHash.output.check(script)) return types.P2WSH
17313 if (pubKeyHash.output.check(script)) return types.P2PKH
17314 if (scriptHash.output.check(script)) return types.P2SH
8b095871 17315
9987f0c1
IC
17316 // XXX: optimization, below functions .decompile before use
17317 var chunks = decompile(script)
17318 if (multisig.output.check(chunks)) return types.MULTISIG
17319 if (pubKey.output.check(chunks)) return types.P2PK
17320 if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT
17321 if (nullData.output.check(chunks)) return types.NULLDATA
8b095871 17322
9987f0c1 17323 return types.NONSTANDARD
8b095871
IC
17324}
17325
9987f0c1
IC
17326function classifyInput (script, allowIncomplete) {
17327 // XXX: optimization, below functions .decompile before use
17328 var chunks = decompile(script)
8b095871 17329
9987f0c1
IC
17330 if (pubKeyHash.input.check(chunks)) return types.P2PKH
17331 if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH
17332 if (multisig.input.check(chunks, allowIncomplete)) return types.MULTISIG
17333 if (pubKey.input.check(chunks)) return types.P2PK
8b095871 17334
9987f0c1 17335 return types.NONSTANDARD
8b095871
IC
17336}
17337
9987f0c1
IC
17338function classifyWitness (script, allowIncomplete) {
17339 // XXX: optimization, below functions .decompile before use
17340 var chunks = decompile(script)
8b095871 17341
9987f0c1
IC
17342 if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH
17343 if (witnessScriptHash.input.check(chunks, allowIncomplete)) return types.P2WSH
8b095871 17344
9987f0c1
IC
17345 return types.NONSTANDARD
17346}
8b095871 17347
9987f0c1
IC
17348module.exports = {
17349 classifyInput: classifyInput,
17350 classifyOutput: classifyOutput,
17351 classifyWitness: classifyWitness,
17352 multisig: multisig,
17353 nullData: nullData,
17354 pubKey: pubKey,
17355 pubKeyHash: pubKeyHash,
17356 scriptHash: scriptHash,
17357 witnessPubKeyHash: witnessPubKeyHash,
17358 witnessScriptHash: witnessScriptHash,
17359 witnessCommitment: witnessCommitment,
17360 types: types
17361}
17362
17363},{"../script":52,"./multisig":55,"./nulldata":58,"./pubkey":59,"./pubkeyhash":62,"./scripthash":65,"./witnesscommitment":68,"./witnesspubkeyhash":70,"./witnessscripthash":73}],55:[function(require,module,exports){
17364module.exports = {
17365 input: require('./input'),
17366 output: require('./output')
8b095871
IC
17367}
17368
9987f0c1
IC
17369},{"./input":56,"./output":57}],56:[function(require,module,exports){
17370// OP_0 [signatures ...]
8b095871 17371
9987f0c1
IC
17372var Buffer = require('safe-buffer').Buffer
17373var bscript = require('../../script')
17374var typeforce = require('typeforce')
17375var OPS = require('bitcoin-ops')
8b095871 17376
9987f0c1
IC
17377function partialSignature (value) {
17378 return value === OPS.OP_0 || bscript.isCanonicalSignature(value)
17379}
8b095871 17380
9987f0c1
IC
17381function check (script, allowIncomplete) {
17382 var chunks = bscript.decompile(script)
17383 if (chunks.length < 2) return false
17384 if (chunks[0] !== OPS.OP_0) return false
8b095871 17385
9987f0c1
IC
17386 if (allowIncomplete) {
17387 return chunks.slice(1).every(partialSignature)
17388 }
8b095871 17389
9987f0c1 17390 return chunks.slice(1).every(bscript.isCanonicalSignature)
8b095871 17391}
9987f0c1 17392check.toJSON = function () { return 'multisig input' }
8b095871 17393
9987f0c1 17394var EMPTY_BUFFER = Buffer.allocUnsafe(0)
8b095871 17395
9987f0c1
IC
17396function encodeStack (signatures, scriptPubKey) {
17397 typeforce([partialSignature], signatures)
8b095871 17398
9987f0c1
IC
17399 if (scriptPubKey) {
17400 var scriptData = bscript.multisig.output.decode(scriptPubKey)
17401
17402 if (signatures.length < scriptData.m) {
17403 throw new TypeError('Not enough signatures provided')
17404 }
8b095871 17405
9987f0c1
IC
17406 if (signatures.length > scriptData.pubKeys.length) {
17407 throw new TypeError('Too many signatures provided')
17408 }
17409 }
17410
17411 return [].concat(EMPTY_BUFFER, signatures)
8b095871
IC
17412}
17413
9987f0c1
IC
17414function encode (signatures, scriptPubKey) {
17415 return bscript.compile(encodeStack(signatures, scriptPubKey))
8b095871
IC
17416}
17417
9987f0c1
IC
17418function decodeStack (stack, allowIncomplete) {
17419 typeforce(check, stack, allowIncomplete)
17420 return stack.slice(1)
8b095871
IC
17421}
17422
9987f0c1
IC
17423function decode (buffer, allowIncomplete) {
17424 var stack = bscript.decompile(buffer)
17425 return decodeStack(stack, allowIncomplete)
17426}
8b095871 17427
9987f0c1
IC
17428module.exports = {
17429 check: check,
17430 decode: decode,
17431 decodeStack: decodeStack,
17432 encode: encode,
17433 encodeStack: encodeStack
17434}
8b095871 17435
9987f0c1
IC
17436},{"../../script":52,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109}],57:[function(require,module,exports){
17437// m [pubKeys ...] n OP_CHECKMULTISIG
8b095871 17438
9987f0c1
IC
17439var bscript = require('../../script')
17440var types = require('../../types')
17441var typeforce = require('typeforce')
17442var OPS = require('bitcoin-ops')
17443var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
17444
17445function check (script, allowIncomplete) {
17446 var chunks = bscript.decompile(script)
17447
17448 if (chunks.length < 4) return false
17449 if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false
17450 if (!types.Number(chunks[0])) return false
17451 if (!types.Number(chunks[chunks.length - 2])) return false
17452 var m = chunks[0] - OP_INT_BASE
17453 var n = chunks[chunks.length - 2] - OP_INT_BASE
17454
17455 if (m <= 0) return false
17456 if (n > 16) return false
17457 if (m > n) return false
17458 if (n !== chunks.length - 3) return false
17459 if (allowIncomplete) return true
17460
17461 var keys = chunks.slice(1, -2)
17462 return keys.every(bscript.isCanonicalPubKey)
17463}
17464check.toJSON = function () { return 'multi-sig output' }
17465
17466function encode (m, pubKeys) {
17467 typeforce({
17468 m: types.Number,
17469 pubKeys: [bscript.isCanonicalPubKey]
17470 }, {
17471 m: m,
17472 pubKeys: pubKeys
17473 })
8b095871 17474
9987f0c1
IC
17475 var n = pubKeys.length
17476 if (n < m) throw new TypeError('Not enough pubKeys provided')
8b095871 17477
9987f0c1
IC
17478 return bscript.compile([].concat(
17479 OP_INT_BASE + m,
17480 pubKeys,
17481 OP_INT_BASE + n,
17482 OPS.OP_CHECKMULTISIG
17483 ))
17484}
8b095871 17485
9987f0c1
IC
17486function decode (buffer, allowIncomplete) {
17487 var chunks = bscript.decompile(buffer)
17488 typeforce(check, chunks, allowIncomplete)
8b095871 17489
9987f0c1
IC
17490 return {
17491 m: chunks[0] - OP_INT_BASE,
17492 pubKeys: chunks.slice(1, -2)
8b095871 17493 }
9987f0c1 17494}
8b095871 17495
9987f0c1
IC
17496module.exports = {
17497 check: check,
17498 decode: decode,
17499 encode: encode
17500}
8b095871 17501
9987f0c1
IC
17502},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],58:[function(require,module,exports){
17503// OP_RETURN {data}
8b095871 17504
9987f0c1
IC
17505var bscript = require('../script')
17506var types = require('../types')
17507var typeforce = require('typeforce')
17508var OPS = require('bitcoin-ops')
8b095871 17509
9987f0c1
IC
17510function check (script) {
17511 var buffer = bscript.compile(script)
8b095871 17512
9987f0c1
IC
17513 return buffer.length > 1 &&
17514 buffer[0] === OPS.OP_RETURN
17515}
17516check.toJSON = function () { return 'null data output' }
8b095871 17517
9987f0c1
IC
17518function encode (data) {
17519 typeforce(types.Buffer, data)
8b095871 17520
9987f0c1
IC
17521 return bscript.compile([OPS.OP_RETURN, data])
17522}
8b095871 17523
9987f0c1
IC
17524function decode (buffer) {
17525 typeforce(check, buffer)
17526
17527 return buffer.slice(2)
17528}
8b095871 17529
9987f0c1
IC
17530module.exports = {
17531 output: {
17532 check: check,
17533 decode: decode,
17534 encode: encode
8b095871 17535 }
9987f0c1 17536}
8b095871 17537
9987f0c1
IC
17538},{"../script":52,"../types":78,"bitcoin-ops":40,"typeforce":109}],59:[function(require,module,exports){
17539arguments[4][55][0].apply(exports,arguments)
17540},{"./input":60,"./output":61,"dup":55}],60:[function(require,module,exports){
17541// {signature}
8b095871 17542
9987f0c1
IC
17543var bscript = require('../../script')
17544var types = require('../../types')
17545var typeforce = require('typeforce')
8b095871 17546
9987f0c1
IC
17547function check (script) {
17548 var chunks = bscript.decompile(script)
8b095871 17549
9987f0c1
IC
17550 return chunks.length === 1 &&
17551 bscript.isCanonicalSignature(chunks[0])
17552}
17553check.toJSON = function () { return 'pubKey input' }
8b095871 17554
9987f0c1
IC
17555function encodeStack (signature) {
17556 typeforce(types.Buffer, signature)
17557 return [signature]
8b095871
IC
17558}
17559
9987f0c1
IC
17560function encode (signature) {
17561 return bscript.compile(encodeStack(signature))
17562}
8b095871 17563
9987f0c1
IC
17564function decodeStack (stack) {
17565 typeforce(check, stack)
17566 return stack[0]
17567}
8b095871 17568
9987f0c1
IC
17569function decode (buffer) {
17570 var stack = bscript.decompile(buffer)
17571 return decodeStack(stack)
17572}
8b095871 17573
9987f0c1
IC
17574module.exports = {
17575 check: check,
17576 decode: decode,
17577 decodeStack: decodeStack,
17578 encode: encode,
17579 encodeStack: encodeStack
8b095871
IC
17580}
17581
9987f0c1
IC
17582},{"../../script":52,"../../types":78,"typeforce":109}],61:[function(require,module,exports){
17583// {pubKey} OP_CHECKSIG
8b095871 17584
9987f0c1
IC
17585var bscript = require('../../script')
17586var typeforce = require('typeforce')
17587var OPS = require('bitcoin-ops')
8b095871 17588
9987f0c1
IC
17589function check (script) {
17590 var chunks = bscript.decompile(script)
8b095871 17591
9987f0c1
IC
17592 return chunks.length === 2 &&
17593 bscript.isCanonicalPubKey(chunks[0]) &&
17594 chunks[1] === OPS.OP_CHECKSIG
17595}
17596check.toJSON = function () { return 'pubKey output' }
8b095871 17597
9987f0c1
IC
17598function encode (pubKey) {
17599 typeforce(bscript.isCanonicalPubKey, pubKey)
8b095871 17600
9987f0c1
IC
17601 return bscript.compile([pubKey, OPS.OP_CHECKSIG])
17602}
8b095871 17603
9987f0c1
IC
17604function decode (buffer) {
17605 var chunks = bscript.decompile(buffer)
17606 typeforce(check, chunks)
8b095871 17607
9987f0c1
IC
17608 return chunks[0]
17609}
8b095871 17610
9987f0c1
IC
17611module.exports = {
17612 check: check,
17613 decode: decode,
17614 encode: encode
17615}
8b095871 17616
9987f0c1
IC
17617},{"../../script":52,"bitcoin-ops":40,"typeforce":109}],62:[function(require,module,exports){
17618arguments[4][55][0].apply(exports,arguments)
17619},{"./input":63,"./output":64,"dup":55}],63:[function(require,module,exports){
17620// {signature} {pubKey}
8b095871 17621
9987f0c1
IC
17622var bscript = require('../../script')
17623var types = require('../../types')
17624var typeforce = require('typeforce')
8b095871 17625
9987f0c1
IC
17626function check (script) {
17627 var chunks = bscript.decompile(script)
8b095871 17628
9987f0c1
IC
17629 return chunks.length === 2 &&
17630 bscript.isCanonicalSignature(chunks[0]) &&
17631 bscript.isCanonicalPubKey(chunks[1])
8b095871 17632}
9987f0c1 17633check.toJSON = function () { return 'pubKeyHash input' }
8b095871 17634
9987f0c1
IC
17635function encodeStack (signature, pubKey) {
17636 typeforce({
17637 signature: types.Buffer, pubKey: types.Buffer
17638 }, {
17639 signature: signature, pubKey: pubKey
17640 })
8b095871 17641
9987f0c1 17642 return [signature, pubKey]
8b095871
IC
17643}
17644
9987f0c1
IC
17645function encode (signature, pubKey) {
17646 return bscript.compile(encodeStack(signature, pubKey))
8b095871
IC
17647}
17648
9987f0c1
IC
17649function decodeStack (stack) {
17650 typeforce(check, stack)
8b095871 17651
9987f0c1
IC
17652 return {
17653 signature: stack[0],
17654 pubKey: stack[1]
17655 }
8b095871
IC
17656}
17657
9987f0c1
IC
17658function decode (buffer) {
17659 var stack = bscript.decompile(buffer)
17660 return decodeStack(stack)
8b095871
IC
17661}
17662
9987f0c1
IC
17663module.exports = {
17664 check: check,
17665 decode: decode,
17666 decodeStack: decodeStack,
17667 encode: encode,
17668 encodeStack: encodeStack
8b095871
IC
17669}
17670
9987f0c1
IC
17671},{"../../script":52,"../../types":78,"typeforce":109}],64:[function(require,module,exports){
17672// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
8b095871 17673
9987f0c1
IC
17674var bscript = require('../../script')
17675var types = require('../../types')
17676var typeforce = require('typeforce')
17677var OPS = require('bitcoin-ops')
8b095871 17678
9987f0c1
IC
17679function check (script) {
17680 var buffer = bscript.compile(script)
8b095871 17681
9987f0c1
IC
17682 return buffer.length === 25 &&
17683 buffer[0] === OPS.OP_DUP &&
17684 buffer[1] === OPS.OP_HASH160 &&
17685 buffer[2] === 0x14 &&
17686 buffer[23] === OPS.OP_EQUALVERIFY &&
17687 buffer[24] === OPS.OP_CHECKSIG
8b095871 17688}
9987f0c1 17689check.toJSON = function () { return 'pubKeyHash output' }
8b095871 17690
9987f0c1
IC
17691function encode (pubKeyHash) {
17692 typeforce(types.Hash160bit, pubKeyHash)
8b095871 17693
9987f0c1
IC
17694 return bscript.compile([
17695 OPS.OP_DUP,
17696 OPS.OP_HASH160,
17697 pubKeyHash,
17698 OPS.OP_EQUALVERIFY,
17699 OPS.OP_CHECKSIG
17700 ])
8b095871
IC
17701}
17702
9987f0c1
IC
17703function decode (buffer) {
17704 typeforce(check, buffer)
8b095871 17705
9987f0c1 17706 return buffer.slice(3, 23)
8b095871
IC
17707}
17708
9987f0c1
IC
17709module.exports = {
17710 check: check,
17711 decode: decode,
17712 encode: encode
8b095871
IC
17713}
17714
9987f0c1
IC
17715},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],65:[function(require,module,exports){
17716arguments[4][55][0].apply(exports,arguments)
17717},{"./input":66,"./output":67,"dup":55}],66:[function(require,module,exports){
17718// <scriptSig> {serialized scriptPubKey script}
8b095871 17719
9987f0c1
IC
17720var Buffer = require('safe-buffer').Buffer
17721var bscript = require('../../script')
17722var typeforce = require('typeforce')
8b095871 17723
9987f0c1
IC
17724function check (script, allowIncomplete) {
17725 var chunks = bscript.decompile(script)
17726 if (chunks.length < 1) return false
8b095871 17727
9987f0c1
IC
17728 var lastChunk = chunks[chunks.length - 1]
17729 if (!Buffer.isBuffer(lastChunk)) return false
8b095871 17730
9987f0c1
IC
17731 var scriptSigChunks = bscript.decompile(bscript.compile(chunks.slice(0, -1)))
17732 var redeemScriptChunks = bscript.decompile(lastChunk)
8b095871 17733
9987f0c1
IC
17734 // is redeemScript a valid script?
17735 if (redeemScriptChunks.length === 0) return false
17736
17737 // is redeemScriptSig push only?
17738 if (!bscript.isPushOnly(scriptSigChunks)) return false
17739
17740 var inputType = bscript.classifyInput(scriptSigChunks, allowIncomplete)
17741 var outputType = bscript.classifyOutput(redeemScriptChunks)
17742 if (chunks.length === 1) {
17743 return outputType === bscript.types.P2WSH || outputType === bscript.types.P2WPKH
17744 }
17745 return inputType === outputType
8b095871 17746}
9987f0c1 17747check.toJSON = function () { return 'scriptHash input' }
8b095871 17748
9987f0c1
IC
17749function encodeStack (redeemScriptStack, redeemScript) {
17750 var serializedScriptPubKey = bscript.compile(redeemScript)
8b095871 17751
9987f0c1
IC
17752 return [].concat(redeemScriptStack, serializedScriptPubKey)
17753}
8b095871 17754
9987f0c1
IC
17755function encode (redeemScriptSig, redeemScript) {
17756 var redeemScriptStack = bscript.decompile(redeemScriptSig)
8b095871 17757
9987f0c1
IC
17758 return bscript.compile(encodeStack(redeemScriptStack, redeemScript))
17759}
8b095871 17760
9987f0c1
IC
17761function decodeStack (stack) {
17762 typeforce(check, stack)
17763
17764 return {
17765 redeemScriptStack: stack.slice(0, -1),
17766 redeemScript: stack[stack.length - 1]
17767 }
8b095871
IC
17768}
17769
9987f0c1
IC
17770function decode (buffer) {
17771 var stack = bscript.decompile(buffer)
17772 var result = decodeStack(stack)
17773 result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
17774 delete result.redeemScriptStack
17775 return result
17776}
8b095871 17777
9987f0c1
IC
17778module.exports = {
17779 check: check,
17780 decode: decode,
17781 decodeStack: decodeStack,
17782 encode: encode,
17783 encodeStack: encodeStack
17784}
8b095871 17785
9987f0c1
IC
17786},{"../../script":52,"safe-buffer":98,"typeforce":109}],67:[function(require,module,exports){
17787// OP_HASH160 {scriptHash} OP_EQUAL
8b095871 17788
9987f0c1
IC
17789var bscript = require('../../script')
17790var types = require('../../types')
17791var typeforce = require('typeforce')
17792var OPS = require('bitcoin-ops')
8b095871 17793
9987f0c1
IC
17794function check (script) {
17795 var buffer = bscript.compile(script)
8b095871 17796
9987f0c1
IC
17797 return buffer.length === 23 &&
17798 buffer[0] === OPS.OP_HASH160 &&
17799 buffer[1] === 0x14 &&
17800 buffer[22] === OPS.OP_EQUAL
8b095871 17801}
9987f0c1 17802check.toJSON = function () { return 'scriptHash output' }
8b095871 17803
9987f0c1
IC
17804function encode (scriptHash) {
17805 typeforce(types.Hash160bit, scriptHash)
8b095871 17806
9987f0c1
IC
17807 return bscript.compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL])
17808}
8b095871 17809
9987f0c1
IC
17810function decode (buffer) {
17811 typeforce(check, buffer)
8b095871 17812
9987f0c1
IC
17813 return buffer.slice(2, 22)
17814}
8b095871 17815
9987f0c1
IC
17816module.exports = {
17817 check: check,
17818 decode: decode,
17819 encode: encode
8b095871
IC
17820}
17821
9987f0c1
IC
17822},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],68:[function(require,module,exports){
17823module.exports = {
17824 output: require('./output')
17825}
8b095871 17826
9987f0c1
IC
17827},{"./output":69}],69:[function(require,module,exports){
17828// OP_RETURN {aa21a9ed} {commitment}
8b095871 17829
9987f0c1
IC
17830var Buffer = require('safe-buffer').Buffer
17831var bscript = require('../../script')
17832var types = require('../../types')
17833var typeforce = require('typeforce')
17834var OPS = require('bitcoin-ops')
8b095871 17835
9987f0c1 17836var HEADER = Buffer.from('aa21a9ed', 'hex')
8b095871 17837
9987f0c1
IC
17838function check (script) {
17839 var buffer = bscript.compile(script)
17840
17841 return buffer.length > 37 &&
17842 buffer[0] === OPS.OP_RETURN &&
17843 buffer[1] === 0x24 &&
17844 buffer.slice(2, 6).equals(HEADER)
8b095871
IC
17845}
17846
9987f0c1 17847check.toJSON = function () { return 'Witness commitment output' }
8b095871 17848
9987f0c1
IC
17849function encode (commitment) {
17850 typeforce(types.Hash256bit, commitment)
8b095871 17851
9987f0c1
IC
17852 var buffer = Buffer.allocUnsafe(36)
17853 HEADER.copy(buffer, 0)
17854 commitment.copy(buffer, 4)
8b095871 17855
9987f0c1
IC
17856 return bscript.compile([OPS.OP_RETURN, buffer])
17857}
8b095871 17858
9987f0c1
IC
17859function decode (buffer) {
17860 typeforce(check, buffer)
8b095871 17861
9987f0c1
IC
17862 return bscript.decompile(buffer)[1].slice(4, 36)
17863}
8b095871 17864
9987f0c1
IC
17865module.exports = {
17866 check: check,
17867 decode: decode,
17868 encode: encode
17869}
8b095871 17870
9987f0c1
IC
17871},{"../../script":52,"../../types":78,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109}],70:[function(require,module,exports){
17872arguments[4][55][0].apply(exports,arguments)
17873},{"./input":71,"./output":72,"dup":55}],71:[function(require,module,exports){
17874// {signature} {pubKey}
8b095871 17875
9987f0c1 17876var pkh = require('../pubkeyhash/input')
8b095871 17877
9987f0c1
IC
17878module.exports = {
17879 check: pkh.check,
17880 decodeStack: pkh.decodeStack,
17881 encodeStack: pkh.encodeStack
8b095871
IC
17882}
17883
9987f0c1
IC
17884},{"../pubkeyhash/input":63}],72:[function(require,module,exports){
17885// OP_0 {pubKeyHash}
8b095871 17886
9987f0c1
IC
17887var bscript = require('../../script')
17888var types = require('../../types')
17889var typeforce = require('typeforce')
17890var OPS = require('bitcoin-ops')
8b095871 17891
9987f0c1
IC
17892function check (script) {
17893 var buffer = bscript.compile(script)
8b095871 17894
9987f0c1
IC
17895 return buffer.length === 22 &&
17896 buffer[0] === OPS.OP_0 &&
17897 buffer[1] === 0x14
17898}
17899check.toJSON = function () { return 'Witness pubKeyHash output' }
8b095871 17900
9987f0c1
IC
17901function encode (pubKeyHash) {
17902 typeforce(types.Hash160bit, pubKeyHash)
8b095871 17903
9987f0c1
IC
17904 return bscript.compile([OPS.OP_0, pubKeyHash])
17905}
8b095871 17906
9987f0c1
IC
17907function decode (buffer) {
17908 typeforce(check, buffer)
17909
17910 return buffer.slice(2)
8b095871
IC
17911}
17912
9987f0c1
IC
17913module.exports = {
17914 check: check,
17915 decode: decode,
17916 encode: encode
17917}
8b095871 17918
9987f0c1
IC
17919},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],73:[function(require,module,exports){
17920arguments[4][55][0].apply(exports,arguments)
17921},{"./input":74,"./output":75,"dup":55}],74:[function(require,module,exports){
17922// {signature} {pubKey}
8b095871 17923
9987f0c1 17924var p2sh = require('../scripthash/input')
8b095871 17925
9987f0c1
IC
17926module.exports = {
17927 check: p2sh.check,
17928 decodeStack: p2sh.decodeStack,
17929 encodeStack: p2sh.encodeStack
17930}
8b095871 17931
9987f0c1
IC
17932},{"../scripthash/input":66}],75:[function(require,module,exports){
17933// OP_0 {scriptHash}
8b095871 17934
9987f0c1
IC
17935var bscript = require('../../script')
17936var types = require('../../types')
17937var typeforce = require('typeforce')
17938var OPS = require('bitcoin-ops')
8b095871 17939
9987f0c1
IC
17940function check (script) {
17941 var buffer = bscript.compile(script)
17942
17943 return buffer.length === 34 &&
17944 buffer[0] === OPS.OP_0 &&
17945 buffer[1] === 0x20
8b095871 17946}
9987f0c1 17947check.toJSON = function () { return 'Witness scriptHash output' }
8b095871 17948
9987f0c1
IC
17949function encode (scriptHash) {
17950 typeforce(types.Hash256bit, scriptHash)
8b095871 17951
9987f0c1
IC
17952 return bscript.compile([OPS.OP_0, scriptHash])
17953}
8b095871 17954
9987f0c1
IC
17955function decode (buffer) {
17956 typeforce(check, buffer)
8b095871 17957
9987f0c1
IC
17958 return buffer.slice(2)
17959}
8b095871 17960
9987f0c1
IC
17961module.exports = {
17962 check: check,
17963 decode: decode,
17964 encode: encode
17965}
8b095871 17966
9987f0c1
IC
17967},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],76:[function(require,module,exports){
17968var Buffer = require('safe-buffer').Buffer
17969var bcrypto = require('./crypto')
17970var bscript = require('./script')
17971var bufferutils = require('./bufferutils')
17972var opcodes = require('bitcoin-ops')
17973var typeforce = require('typeforce')
17974var types = require('./types')
17975var varuint = require('varuint-bitcoin')
8b095871 17976
9987f0c1
IC
17977function varSliceSize (someScript) {
17978 var length = someScript.length
8b095871 17979
9987f0c1
IC
17980 return varuint.encodingLength(length) + length
17981}
8b095871 17982
9987f0c1
IC
17983function vectorSize (someVector) {
17984 var length = someVector.length
17985
17986 return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) {
17987 return sum + varSliceSize(witness)
17988 }, 0)
8b095871
IC
17989}
17990
9987f0c1
IC
17991function Transaction () {
17992 this.version = 1
17993 this.locktime = 0
17994 this.ins = []
17995 this.outs = []
17996}
8b095871 17997
9987f0c1
IC
17998Transaction.DEFAULT_SEQUENCE = 0xffffffff
17999Transaction.SIGHASH_ALL = 0x01
18000Transaction.SIGHASH_NONE = 0x02
18001Transaction.SIGHASH_SINGLE = 0x03
18002Transaction.SIGHASH_ANYONECANPAY = 0x80
18003Transaction.ADVANCED_TRANSACTION_MARKER = 0x00
18004Transaction.ADVANCED_TRANSACTION_FLAG = 0x01
8b095871 18005
9987f0c1
IC
18006var EMPTY_SCRIPT = Buffer.allocUnsafe(0)
18007var EMPTY_WITNESS = []
18008var ZERO = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
18009var ONE = Buffer.from('0000000000000000000000000000000000000000000000000000000000000001', 'hex')
18010var VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex')
18011var BLANK_OUTPUT = {
18012 script: EMPTY_SCRIPT,
18013 valueBuffer: VALUE_UINT64_MAX
18014}
8b095871 18015
9987f0c1
IC
18016Transaction.fromBuffer = function (buffer, __noStrict) {
18017 var offset = 0
18018 function readSlice (n) {
18019 offset += n
18020 return buffer.slice(offset - n, offset)
18021 }
8b095871 18022
9987f0c1
IC
18023 function readUInt32 () {
18024 var i = buffer.readUInt32LE(offset)
18025 offset += 4
18026 return i
18027 }
8b095871 18028
9987f0c1
IC
18029 function readInt32 () {
18030 var i = buffer.readInt32LE(offset)
18031 offset += 4
18032 return i
18033 }
8b095871 18034
9987f0c1
IC
18035 function readUInt64 () {
18036 var i = bufferutils.readUInt64LE(buffer, offset)
18037 offset += 8
18038 return i
8b095871
IC
18039 }
18040
9987f0c1
IC
18041 function readVarInt () {
18042 var vi = varuint.decode(buffer, offset)
18043 offset += varuint.decode.bytes
18044 return vi
18045 }
8b095871 18046
9987f0c1
IC
18047 function readVarSlice () {
18048 return readSlice(readVarInt())
18049 }
8b095871 18050
9987f0c1
IC
18051 function readVector () {
18052 var count = readVarInt()
18053 var vector = []
18054 for (var i = 0; i < count; i++) vector.push(readVarSlice())
18055 return vector
18056 }
8b095871 18057
9987f0c1
IC
18058 var tx = new Transaction()
18059 tx.version = readInt32()
8b095871 18060
9987f0c1
IC
18061 var marker = buffer.readUInt8(offset)
18062 var flag = buffer.readUInt8(offset + 1)
8b095871 18063
9987f0c1
IC
18064 var hasWitnesses = false
18065 if (marker === Transaction.ADVANCED_TRANSACTION_MARKER &&
18066 flag === Transaction.ADVANCED_TRANSACTION_FLAG) {
18067 offset += 2
18068 hasWitnesses = true
18069 }
8b095871 18070
9987f0c1
IC
18071 var vinLen = readVarInt()
18072 for (var i = 0; i < vinLen; ++i) {
18073 tx.ins.push({
18074 hash: readSlice(32),
18075 index: readUInt32(),
18076 script: readVarSlice(),
18077 sequence: readUInt32(),
18078 witness: EMPTY_WITNESS
18079 })
18080 }
8b095871 18081
9987f0c1
IC
18082 var voutLen = readVarInt()
18083 for (i = 0; i < voutLen; ++i) {
18084 tx.outs.push({
18085 value: readUInt64(),
18086 script: readVarSlice()
18087 })
8b095871
IC
18088 }
18089
9987f0c1
IC
18090 if (hasWitnesses) {
18091 for (i = 0; i < vinLen; ++i) {
18092 tx.ins[i].witness = readVector()
18093 }
8b095871 18094
9987f0c1
IC
18095 // was this pointless?
18096 if (!tx.hasWitnesses()) throw new Error('Transaction has superfluous witness data')
18097 }
8b095871 18098
9987f0c1 18099 tx.locktime = readUInt32()
8b095871 18100
9987f0c1
IC
18101 if (__noStrict) return tx
18102 if (offset !== buffer.length) throw new Error('Transaction has unexpected data')
8b095871 18103
9987f0c1
IC
18104 return tx
18105}
8b095871 18106
9987f0c1
IC
18107Transaction.fromHex = function (hex) {
18108 return Transaction.fromBuffer(Buffer.from(hex, 'hex'))
8b095871 18109}
8b095871 18110
9987f0c1
IC
18111Transaction.isCoinbaseHash = function (buffer) {
18112 typeforce(types.Hash256bit, buffer)
18113 for (var i = 0; i < 32; ++i) {
18114 if (buffer[i] !== 0) return false
8b095871 18115 }
9987f0c1 18116 return true
8b095871 18117}
9987f0c1
IC
18118
18119Transaction.prototype.isCoinbase = function () {
18120 return this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash)
8b095871
IC
18121}
18122
9987f0c1
IC
18123Transaction.prototype.addInput = function (hash, index, sequence, scriptSig) {
18124 typeforce(types.tuple(
18125 types.Hash256bit,
18126 types.UInt32,
18127 types.maybe(types.UInt32),
18128 types.maybe(types.Buffer)
18129 ), arguments)
8b095871 18130
9987f0c1
IC
18131 if (types.Null(sequence)) {
18132 sequence = Transaction.DEFAULT_SEQUENCE
18133 }
18134
18135 // Add the input and return the input's index
18136 return (this.ins.push({
18137 hash: hash,
18138 index: index,
18139 script: scriptSig || EMPTY_SCRIPT,
18140 sequence: sequence,
18141 witness: EMPTY_WITNESS
18142 }) - 1)
8b095871
IC
18143}
18144
9987f0c1
IC
18145Transaction.prototype.addOutput = function (scriptPubKey, value) {
18146 typeforce(types.tuple(types.Buffer, types.Satoshi), arguments)
8b095871 18147
9987f0c1
IC
18148 // Add the output and return the output's index
18149 return (this.outs.push({
18150 script: scriptPubKey,
18151 value: value
18152 }) - 1)
8b095871
IC
18153}
18154
9987f0c1
IC
18155Transaction.prototype.hasWitnesses = function () {
18156 return this.ins.some(function (x) {
18157 return x.witness.length !== 0
18158 })
18159}
8b095871 18160
9987f0c1
IC
18161Transaction.prototype.weight = function () {
18162 var base = this.__byteLength(false)
18163 var total = this.__byteLength(true)
18164 return base * 3 + total
8b095871
IC
18165}
18166
9987f0c1
IC
18167Transaction.prototype.virtualSize = function () {
18168 return Math.ceil(this.weight() / 4)
18169}
8b095871 18170
9987f0c1
IC
18171Transaction.prototype.byteLength = function () {
18172 return this.__byteLength(true)
8b095871
IC
18173}
18174
9987f0c1
IC
18175Transaction.prototype.__byteLength = function (__allowWitness) {
18176 var hasWitnesses = __allowWitness && this.hasWitnesses()
18177
18178 return (
18179 (hasWitnesses ? 10 : 8) +
18180 varuint.encodingLength(this.ins.length) +
18181 varuint.encodingLength(this.outs.length) +
18182 this.ins.reduce(function (sum, input) { return sum + 40 + varSliceSize(input.script) }, 0) +
18183 this.outs.reduce(function (sum, output) { return sum + 8 + varSliceSize(output.script) }, 0) +
18184 (hasWitnesses ? this.ins.reduce(function (sum, input) { return sum + vectorSize(input.witness) }, 0) : 0)
18185 )
8b095871
IC
18186}
18187
9987f0c1
IC
18188Transaction.prototype.clone = function () {
18189 var newTx = new Transaction()
18190 newTx.version = this.version
18191 newTx.locktime = this.locktime
18192
18193 newTx.ins = this.ins.map(function (txIn) {
18194 return {
18195 hash: txIn.hash,
18196 index: txIn.index,
18197 script: txIn.script,
18198 sequence: txIn.sequence,
18199 witness: txIn.witness
8b095871 18200 }
9987f0c1 18201 })
8b095871 18202
9987f0c1
IC
18203 newTx.outs = this.outs.map(function (txOut) {
18204 return {
18205 script: txOut.script,
18206 value: txOut.value
18207 }
18208 })
8b095871 18209
9987f0c1
IC
18210 return newTx
18211}
18212
18213/**
18214 * Hash transaction for signing a specific input.
18215 *
18216 * Bitcoin uses a different hash for each signed transaction input.
18217 * This method copies the transaction, makes the necessary changes based on the
18218 * hashType, and then hashes the result.
18219 * This hash can then be used to sign the provided transaction input.
18220 */
18221Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
18222 typeforce(types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number), arguments)
18223
18224 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29
18225 if (inIndex >= this.ins.length) return ONE
18226
18227 // ignore OP_CODESEPARATOR
18228 var ourScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) {
18229 return x !== opcodes.OP_CODESEPARATOR
18230 }))
18231
18232 var txTmp = this.clone()
18233
18234 // SIGHASH_NONE: ignore all outputs? (wildcard payee)
18235 if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) {
18236 txTmp.outs = []
18237
18238 // ignore sequence numbers (except at inIndex)
18239 txTmp.ins.forEach(function (input, i) {
18240 if (i === inIndex) return
18241
18242 input.sequence = 0
18243 })
18244
18245 // SIGHASH_SINGLE: ignore all outputs, except at the same index?
18246 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) {
18247 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60
18248 if (inIndex >= this.outs.length) return ONE
18249
18250 // truncate outputs after
18251 txTmp.outs.length = inIndex + 1
18252
18253 // "blank" outputs before
18254 for (var i = 0; i < inIndex; i++) {
18255 txTmp.outs[i] = BLANK_OUTPUT
8b095871
IC
18256 }
18257
9987f0c1
IC
18258 // ignore sequence numbers (except at inIndex)
18259 txTmp.ins.forEach(function (input, y) {
18260 if (y === inIndex) return
8b095871 18261
9987f0c1
IC
18262 input.sequence = 0
18263 })
8b095871 18264 }
8b095871 18265
9987f0c1
IC
18266 // SIGHASH_ANYONECANPAY: ignore inputs entirely?
18267 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
18268 txTmp.ins = [txTmp.ins[inIndex]]
18269 txTmp.ins[0].script = ourScript
18270
18271 // SIGHASH_ALL: only ignore input scripts
18272 } else {
18273 // "blank" others input scripts
18274 txTmp.ins.forEach(function (input) { input.script = EMPTY_SCRIPT })
18275 txTmp.ins[inIndex].script = ourScript
18276 }
18277
18278 // serialize and hash
18279 var buffer = Buffer.allocUnsafe(txTmp.__byteLength(false) + 4)
18280 buffer.writeInt32LE(hashType, buffer.length - 4)
18281 txTmp.__toBuffer(buffer, 0, false)
18282
18283 return bcrypto.hash256(buffer)
8b095871
IC
18284}
18285
9987f0c1
IC
18286Transaction.prototype.hashForWitnessV0 = function (inIndex, prevOutScript, value, hashType) {
18287 typeforce(types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32), arguments)
18288
18289 var tbuffer, toffset
18290 function writeSlice (slice) { toffset += slice.copy(tbuffer, toffset) }
18291 function writeUInt32 (i) { toffset = tbuffer.writeUInt32LE(i, toffset) }
18292 function writeUInt64 (i) { toffset = bufferutils.writeUInt64LE(tbuffer, i, toffset) }
18293 function writeVarInt (i) {
18294 varuint.encode(i, tbuffer, toffset)
18295 toffset += varuint.encode.bytes
18296 }
18297 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
18298
18299 var hashOutputs = ZERO
18300 var hashPrevouts = ZERO
18301 var hashSequence = ZERO
18302
18303 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) {
18304 tbuffer = Buffer.allocUnsafe(36 * this.ins.length)
18305 toffset = 0
18306
18307 this.ins.forEach(function (txIn) {
18308 writeSlice(txIn.hash)
18309 writeUInt32(txIn.index)
18310 })
18311
18312 hashPrevouts = bcrypto.hash256(tbuffer)
18313 }
18314
18315 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY) &&
18316 (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
18317 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
18318 tbuffer = Buffer.allocUnsafe(4 * this.ins.length)
18319 toffset = 0
18320
18321 this.ins.forEach(function (txIn) {
18322 writeUInt32(txIn.sequence)
18323 })
18324
18325 hashSequence = bcrypto.hash256(tbuffer)
18326 }
18327
18328 if ((hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
18329 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
18330 var txOutsSize = this.outs.reduce(function (sum, output) {
18331 return sum + 8 + varSliceSize(output.script)
18332 }, 0)
18333
18334 tbuffer = Buffer.allocUnsafe(txOutsSize)
18335 toffset = 0
18336
18337 this.outs.forEach(function (out) {
18338 writeUInt64(out.value)
18339 writeVarSlice(out.script)
18340 })
18341
18342 hashOutputs = bcrypto.hash256(tbuffer)
18343 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE && inIndex < this.outs.length) {
18344 var output = this.outs[inIndex]
18345
18346 tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script))
18347 toffset = 0
18348 writeUInt64(output.value)
18349 writeVarSlice(output.script)
18350
18351 hashOutputs = bcrypto.hash256(tbuffer)
18352 }
18353
18354 tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript))
18355 toffset = 0
18356
18357 var input = this.ins[inIndex]
18358 writeUInt32(this.version)
18359 writeSlice(hashPrevouts)
18360 writeSlice(hashSequence)
18361 writeSlice(input.hash)
18362 writeUInt32(input.index)
18363 writeVarSlice(prevOutScript)
18364 writeUInt64(value)
18365 writeUInt32(input.sequence)
18366 writeSlice(hashOutputs)
18367 writeUInt32(this.locktime)
18368 writeUInt32(hashType)
18369 return bcrypto.hash256(tbuffer)
8b095871
IC
18370}
18371
9987f0c1
IC
18372Transaction.prototype.getHash = function () {
18373 return bcrypto.hash256(this.__toBuffer(undefined, undefined, false))
18374}
8b095871 18375
9987f0c1
IC
18376Transaction.prototype.getId = function () {
18377 // transaction hash's are displayed in reverse order
18378 return this.getHash().reverse().toString('hex')
18379}
8b095871 18380
9987f0c1
IC
18381Transaction.prototype.toBuffer = function (buffer, initialOffset) {
18382 return this.__toBuffer(buffer, initialOffset, true)
18383}
8b095871 18384
9987f0c1
IC
18385Transaction.prototype.__toBuffer = function (buffer, initialOffset, __allowWitness) {
18386 if (!buffer) buffer = Buffer.allocUnsafe(this.__byteLength(__allowWitness))
8b095871 18387
9987f0c1
IC
18388 var offset = initialOffset || 0
18389 function writeSlice (slice) { offset += slice.copy(buffer, offset) }
18390 function writeUInt8 (i) { offset = buffer.writeUInt8(i, offset) }
18391 function writeUInt32 (i) { offset = buffer.writeUInt32LE(i, offset) }
18392 function writeInt32 (i) { offset = buffer.writeInt32LE(i, offset) }
18393 function writeUInt64 (i) { offset = bufferutils.writeUInt64LE(buffer, i, offset) }
18394 function writeVarInt (i) {
18395 varuint.encode(i, buffer, offset)
18396 offset += varuint.encode.bytes
18397 }
18398 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
18399 function writeVector (vector) { writeVarInt(vector.length); vector.forEach(writeVarSlice) }
8b095871 18400
9987f0c1 18401 writeInt32(this.version)
8b095871 18402
9987f0c1 18403 var hasWitnesses = __allowWitness && this.hasWitnesses()
8b095871 18404
9987f0c1
IC
18405 if (hasWitnesses) {
18406 writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER)
18407 writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG)
18408 }
8b095871 18409
9987f0c1 18410 writeVarInt(this.ins.length)
8b095871 18411
9987f0c1
IC
18412 this.ins.forEach(function (txIn) {
18413 writeSlice(txIn.hash)
18414 writeUInt32(txIn.index)
18415 writeVarSlice(txIn.script)
18416 writeUInt32(txIn.sequence)
18417 })
8b095871 18418
9987f0c1
IC
18419 writeVarInt(this.outs.length)
18420 this.outs.forEach(function (txOut) {
18421 if (!txOut.valueBuffer) {
18422 writeUInt64(txOut.value)
18423 } else {
18424 writeSlice(txOut.valueBuffer)
8b095871 18425 }
8b095871 18426
9987f0c1
IC
18427 writeVarSlice(txOut.script)
18428 })
8b095871 18429
9987f0c1
IC
18430 if (hasWitnesses) {
18431 this.ins.forEach(function (input) {
18432 writeVector(input.witness)
18433 })
18434 }
8b095871 18435
9987f0c1 18436 writeUInt32(this.locktime)
8b095871 18437
9987f0c1
IC
18438 // avoid slicing unless necessary
18439 if (initialOffset !== undefined) return buffer.slice(initialOffset, offset)
18440 return buffer
18441}
8b095871 18442
9987f0c1
IC
18443Transaction.prototype.toHex = function () {
18444 return this.toBuffer().toString('hex')
18445}
8b095871 18446
9987f0c1
IC
18447Transaction.prototype.setInputScript = function (index, scriptSig) {
18448 typeforce(types.tuple(types.Number, types.Buffer), arguments)
8b095871 18449
9987f0c1
IC
18450 this.ins[index].script = scriptSig
18451}
8b095871 18452
9987f0c1
IC
18453Transaction.prototype.setWitness = function (index, witness) {
18454 typeforce(types.tuple(types.Number, [types.Buffer]), arguments)
18455
18456 this.ins[index].witness = witness
18457}
18458
18459module.exports = Transaction
18460
18461},{"./bufferutils":44,"./crypto":45,"./script":52,"./types":78,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109,"varuint-bitcoin":111}],77:[function(require,module,exports){
18462var Buffer = require('safe-buffer').Buffer
18463var baddress = require('./address')
18464var bcrypto = require('./crypto')
18465var bscript = require('./script')
18466var networks = require('./networks')
18467var ops = require('bitcoin-ops')
18468var typeforce = require('typeforce')
18469var types = require('./types')
18470var scriptTypes = bscript.types
18471var SIGNABLE = [bscript.types.P2PKH, bscript.types.P2PK, bscript.types.MULTISIG]
18472var P2SH = SIGNABLE.concat([bscript.types.P2WPKH, bscript.types.P2WSH])
18473
18474var ECPair = require('./ecpair')
18475var ECSignature = require('./ecsignature')
18476var Transaction = require('./transaction')
18477
18478function extractChunks (type, chunks, script) {
18479 var pubKeys = []
18480 var signatures = []
18481 switch (type) {
18482 case scriptTypes.P2PKH:
18483 // if (redeemScript) throw new Error('Nonstandard... P2SH(P2PKH)')
18484 pubKeys = chunks.slice(1)
18485 signatures = chunks.slice(0, 1)
18486 break
18487
18488 case scriptTypes.P2PK:
18489 pubKeys[0] = script ? bscript.pubKey.output.decode(script) : undefined
18490 signatures = chunks.slice(0, 1)
18491 break
18492
18493 case scriptTypes.MULTISIG:
18494 if (script) {
18495 var multisig = bscript.multisig.output.decode(script)
18496 pubKeys = multisig.pubKeys
18497 }
18498
18499 signatures = chunks.slice(1).map(function (chunk) {
18500 return chunk.length === 0 ? undefined : chunk
18501 })
18502 break
18503 }
18504
18505 return {
18506 pubKeys: pubKeys,
18507 signatures: signatures
18508 }
18509}
18510function expandInput (scriptSig, witnessStack) {
18511 if (scriptSig.length === 0 && witnessStack.length === 0) return {}
18512
18513 var prevOutScript
18514 var prevOutType
18515 var scriptType
18516 var script
18517 var redeemScript
18518 var witnessScript
18519 var witnessScriptType
18520 var redeemScriptType
18521 var witness = false
18522 var p2wsh = false
18523 var p2sh = false
18524 var witnessProgram
18525 var chunks
18526
18527 var scriptSigChunks = bscript.decompile(scriptSig)
18528 var sigType = bscript.classifyInput(scriptSigChunks, true)
18529 if (sigType === scriptTypes.P2SH) {
18530 p2sh = true
18531 redeemScript = scriptSigChunks[scriptSigChunks.length - 1]
18532 redeemScriptType = bscript.classifyOutput(redeemScript)
18533 prevOutScript = bscript.scriptHash.output.encode(bcrypto.hash160(redeemScript))
18534 prevOutType = scriptTypes.P2SH
18535 script = redeemScript
18536 }
18537
18538 var classifyWitness = bscript.classifyWitness(witnessStack)
18539 if (classifyWitness === scriptTypes.P2WSH) {
18540 witnessScript = witnessStack[witnessStack.length - 1]
18541 witnessScriptType = bscript.classifyOutput(witnessScript)
18542 p2wsh = true
18543 if (scriptSig.length === 0) {
18544 prevOutScript = bscript.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
18545 prevOutType = scriptTypes.P2WSH
18546 if (typeof redeemScript !== 'undefined') {
18547 throw new Error('Redeem script given when unnecessary')
18548 }
18549 // bare witness
18550 } else {
18551 if (!redeemScript) {
18552 throw new Error('No redeemScript provided for P2WSH, but scriptSig non-empty')
18553 }
18554 witnessProgram = bscript.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
18555 if (!redeemScript.equals(witnessProgram)) {
18556 throw new Error('Redeem script didn\'t match witnessScript')
18557 }
8b095871 18558 }
8b095871 18559
9987f0c1
IC
18560 if (SIGNABLE.indexOf(bscript.classifyOutput(witnessScript)) === -1) {
18561 throw new Error('unsupported witness script')
18562 }
18563 script = witnessScript
18564 scriptType = witnessScriptType
18565 chunks = witnessStack.slice(0, -1)
18566 } else if (classifyWitness === scriptTypes.P2WPKH) {
18567 var key = witnessStack[witnessStack.length - 1]
18568 var keyHash = bcrypto.hash160(key)
18569 if (scriptSig.length === 0) {
18570 prevOutScript = bscript.witnessPubKeyHash.output.encode(keyHash)
18571 prevOutType = scriptTypes.P2WPKH
18572 if (typeof redeemScript !== 'undefined') {
18573 throw new Error('Redeem script given when unnecessary')
18574 }
18575 } else {
18576 if (!redeemScript) {
18577 throw new Error('No redeemScript provided for P2WPKH, but scriptSig wasn\'t empty')
18578 }
18579 witnessProgram = bscript.witnessPubKeyHash.output.encode(keyHash)
18580 if (!redeemScript.equals(witnessProgram)) {
18581 throw new Error('Redeem script did not have the right witness program')
18582 }
18583 }
8b095871 18584
9987f0c1
IC
18585 scriptType = scriptTypes.P2PKH
18586 chunks = witnessStack
18587 } else if (redeemScript) {
18588 if (P2SH.indexOf(redeemScriptType) === -1) {
18589 throw new Error('Bad redeemscript!')
8b095871 18590 }
8b095871 18591
9987f0c1
IC
18592 script = redeemScript
18593 scriptType = redeemScriptType
18594 chunks = scriptSigChunks.slice(0, -1)
18595 } else {
18596 prevOutType = scriptType = bscript.classifyInput(scriptSig)
18597 chunks = scriptSigChunks
8b095871 18598 }
8b095871 18599
9987f0c1 18600 var expanded = extractChunks(scriptType, chunks, script)
8b095871 18601
9987f0c1
IC
18602 var result = {
18603 pubKeys: expanded.pubKeys,
18604 signatures: expanded.signatures,
18605 prevOutScript: prevOutScript,
18606 prevOutType: prevOutType,
18607 signType: scriptType,
18608 signScript: script,
18609 witness: Boolean(witness)
18610 }
8b095871 18611
9987f0c1
IC
18612 if (p2sh) {
18613 result.redeemScript = redeemScript
18614 result.redeemScriptType = redeemScriptType
18615 }
8b095871 18616
9987f0c1
IC
18617 if (p2wsh) {
18618 result.witnessScript = witnessScript
18619 result.witnessScriptType = witnessScriptType
8b095871
IC
18620 }
18621
9987f0c1 18622 return result
8b095871
IC
18623}
18624
9987f0c1
IC
18625// could be done in expandInput, but requires the original Transaction for hashForSignature
18626function fixMultisigOrder (input, transaction, vin) {
18627 if (input.redeemScriptType !== scriptTypes.MULTISIG || !input.redeemScript) return
18628 if (input.pubKeys.length === input.signatures.length) return
8b095871 18629
9987f0c1 18630 var unmatched = input.signatures.concat()
8b095871 18631
9987f0c1
IC
18632 input.signatures = input.pubKeys.map(function (pubKey) {
18633 var keyPair = ECPair.fromPublicKeyBuffer(pubKey)
18634 var match
8b095871 18635
9987f0c1
IC
18636 // check for a signature
18637 unmatched.some(function (signature, i) {
18638 // skip if undefined || OP_0
18639 if (!signature) return false
8b095871 18640
9987f0c1
IC
18641 // TODO: avoid O(n) hashForSignature
18642 var parsed = ECSignature.parseScriptSignature(signature)
18643 var hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType)
8b095871 18644
9987f0c1
IC
18645 // skip if signature does not match pubKey
18646 if (!keyPair.verify(hash, parsed.signature)) return false
8b095871 18647
9987f0c1
IC
18648 // remove matched signature from unmatched
18649 unmatched[i] = undefined
18650 match = signature
8b095871 18651
9987f0c1
IC
18652 return true
18653 })
8b095871 18654
9987f0c1
IC
18655 return match
18656 })
18657}
8b095871 18658
9987f0c1
IC
18659function expandOutput (script, scriptType, ourPubKey) {
18660 typeforce(types.Buffer, script)
8b095871 18661
9987f0c1
IC
18662 var scriptChunks = bscript.decompile(script)
18663 if (!scriptType) {
18664 scriptType = bscript.classifyOutput(script)
8b095871 18665 }
8b095871 18666
9987f0c1 18667 var pubKeys = []
8b095871 18668
9987f0c1
IC
18669 switch (scriptType) {
18670 // does our hash160(pubKey) match the output scripts?
18671 case scriptTypes.P2PKH:
18672 if (!ourPubKey) break
8b095871 18673
9987f0c1
IC
18674 var pkh1 = scriptChunks[2]
18675 var pkh2 = bcrypto.hash160(ourPubKey)
18676 if (pkh1.equals(pkh2)) pubKeys = [ourPubKey]
18677 break
8b095871 18678
9987f0c1
IC
18679 // does our hash160(pubKey) match the output scripts?
18680 case scriptTypes.P2WPKH:
18681 if (!ourPubKey) break
8b095871 18682
9987f0c1
IC
18683 var wpkh1 = scriptChunks[1]
18684 var wpkh2 = bcrypto.hash160(ourPubKey)
18685 if (wpkh1.equals(wpkh2)) pubKeys = [ourPubKey]
18686 break
8b095871 18687
9987f0c1
IC
18688 case scriptTypes.P2PK:
18689 pubKeys = scriptChunks.slice(0, 1)
18690 break
18691
18692 case scriptTypes.MULTISIG:
18693 pubKeys = scriptChunks.slice(1, -2)
18694 break
8b095871 18695
9987f0c1
IC
18696 default: return { scriptType: scriptType }
18697 }
8b095871 18698
9987f0c1
IC
18699 return {
18700 pubKeys: pubKeys,
18701 scriptType: scriptType,
18702 signatures: pubKeys.map(function () { return undefined })
18703 }
8b095871
IC
18704}
18705
9987f0c1
IC
18706function checkP2shInput (input, redeemScriptHash) {
18707 if (input.prevOutType) {
18708 if (input.prevOutType !== scriptTypes.P2SH) throw new Error('PrevOutScript must be P2SH')
8b095871 18709
9987f0c1
IC
18710 var prevOutScriptScriptHash = bscript.decompile(input.prevOutScript)[1]
18711 if (!prevOutScriptScriptHash.equals(redeemScriptHash)) throw new Error('Inconsistent hash160(RedeemScript)')
18712 }
8b095871
IC
18713}
18714
9987f0c1
IC
18715function checkP2WSHInput (input, witnessScriptHash) {
18716 if (input.prevOutType) {
18717 if (input.prevOutType !== scriptTypes.P2WSH) throw new Error('PrevOutScript must be P2WSH')
8b095871 18718
9987f0c1
IC
18719 var scriptHash = bscript.decompile(input.prevOutScript)[1]
18720 if (!scriptHash.equals(witnessScriptHash)) throw new Error('Inconsistent sha25(WitnessScript)')
18721 }
8b095871
IC
18722}
18723
9987f0c1
IC
18724function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScript) {
18725 var expanded
18726 var prevOutType
18727 var prevOutScript
8b095871 18728
9987f0c1
IC
18729 var p2sh = false
18730 var p2shType
18731 var redeemScriptHash
18732
18733 var witness = false
18734 var p2wsh = false
18735 var witnessType
18736 var witnessScriptHash
18737
18738 var signType
18739 var signScript
18740
18741 if (redeemScript && witnessScript) {
18742 redeemScriptHash = bcrypto.hash160(redeemScript)
18743 witnessScriptHash = bcrypto.sha256(witnessScript)
18744 checkP2shInput(input, redeemScriptHash)
18745
18746 if (!redeemScript.equals(bscript.witnessScriptHash.output.encode(witnessScriptHash))) throw new Error('Witness script inconsistent with redeem script')
18747
18748 expanded = expandOutput(witnessScript, undefined, kpPubKey)
18749 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
18750 prevOutType = bscript.types.P2SH
18751 prevOutScript = bscript.scriptHash.output.encode(redeemScriptHash)
18752 p2sh = witness = p2wsh = true
18753 p2shType = bscript.types.P2WSH
18754 signType = witnessType = expanded.scriptType
18755 signScript = witnessScript
18756 } else if (redeemScript) {
18757 redeemScriptHash = bcrypto.hash160(redeemScript)
18758 checkP2shInput(input, redeemScriptHash)
18759
18760 expanded = expandOutput(redeemScript, undefined, kpPubKey)
18761 if (!expanded.pubKeys) throw new Error('RedeemScript not supported "' + bscript.toASM(redeemScript) + '"')
18762
18763 prevOutType = bscript.types.P2SH
18764 prevOutScript = bscript.scriptHash.output.encode(redeemScriptHash)
18765 p2sh = true
18766 signType = p2shType = expanded.scriptType
18767 signScript = redeemScript
18768 witness = signType === bscript.types.P2WPKH
18769 } else if (witnessScript) {
18770 witnessScriptHash = bcrypto.sha256(witnessScript)
18771 checkP2WSHInput(input, witnessScriptHash)
18772
18773 expanded = expandOutput(witnessScript, undefined, kpPubKey)
18774 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
18775
18776 prevOutType = bscript.types.P2WSH
18777 prevOutScript = bscript.witnessScriptHash.output.encode(witnessScriptHash)
18778 witness = p2wsh = true
18779 signType = witnessType = expanded.scriptType
18780 signScript = witnessScript
18781 } else if (input.prevOutType) {
18782 // embedded scripts are not possible without a redeemScript
18783 if (input.prevOutType === scriptTypes.P2SH ||
18784 input.prevOutType === scriptTypes.P2WSH) {
18785 throw new Error('PrevOutScript is ' + input.prevOutType + ', requires redeemScript')
18786 }
18787
18788 prevOutType = input.prevOutType
18789 prevOutScript = input.prevOutScript
18790 expanded = expandOutput(input.prevOutScript, input.prevOutType, kpPubKey)
18791 if (!expanded.pubKeys) return
18792
18793 witness = (input.prevOutType === scriptTypes.P2WPKH)
18794 signType = prevOutType
18795 signScript = prevOutScript
18796 } else {
18797 prevOutScript = bscript.pubKeyHash.output.encode(bcrypto.hash160(kpPubKey))
18798 expanded = expandOutput(prevOutScript, scriptTypes.P2PKH, kpPubKey)
18799 prevOutType = scriptTypes.P2PKH
18800 witness = false
18801 signType = prevOutType
18802 signScript = prevOutScript
18803 }
8b095871 18804
9987f0c1
IC
18805 if (witness && !types.Satoshi(witnessValue)) {
18806 throw new Error('Input was witness but not given witness value')
18807 }
8b095871 18808
9987f0c1
IC
18809 if (signType === scriptTypes.P2WPKH) {
18810 signScript = bscript.pubKeyHash.output.encode(bscript.witnessPubKeyHash.output.decode(signScript))
18811 }
8b095871 18812
9987f0c1
IC
18813 if (p2sh) {
18814 input.redeemScript = redeemScript
18815 input.redeemScriptType = p2shType
18816 }
8b095871 18817
9987f0c1
IC
18818 if (p2wsh) {
18819 input.witnessScript = witnessScript
18820 input.witnessScriptType = witnessType
18821 }
8b095871 18822
9987f0c1
IC
18823 input.pubKeys = expanded.pubKeys
18824 input.signatures = expanded.signatures
18825 input.signScript = signScript
18826 input.signType = signType
18827 input.prevOutScript = prevOutScript
18828 input.prevOutType = prevOutType
18829 input.witness = witness
8b095871
IC
18830}
18831
9987f0c1
IC
18832function buildStack (type, signatures, pubKeys, allowIncomplete) {
18833 if (type === scriptTypes.P2PKH) {
18834 if (signatures.length === 1 && Buffer.isBuffer(signatures[0]) && pubKeys.length === 1) return bscript.pubKeyHash.input.encodeStack(signatures[0], pubKeys[0])
18835 } else if (type === scriptTypes.P2PK) {
18836 if (signatures.length === 1 && Buffer.isBuffer(signatures[0])) return bscript.pubKey.input.encodeStack(signatures[0])
18837 } else if (type === scriptTypes.MULTISIG) {
18838 if (signatures.length > 0) {
18839 signatures = signatures.map(function (signature) {
18840 return signature || ops.OP_0
18841 })
18842 if (!allowIncomplete) {
18843 // remove blank signatures
18844 signatures = signatures.filter(function (x) { return x !== ops.OP_0 })
18845 }
8b095871 18846
9987f0c1
IC
18847 return bscript.multisig.input.encodeStack(signatures /* see if it's necessary first */)
18848 }
18849 } else {
18850 throw new Error('Not yet supported')
18851 }
8b095871 18852
9987f0c1 18853 if (!allowIncomplete) throw new Error('Not enough signatures provided')
8b095871 18854
9987f0c1 18855 return []
8b095871
IC
18856}
18857
9987f0c1
IC
18858function buildInput (input, allowIncomplete) {
18859 var scriptType = input.prevOutType
18860 var sig = []
18861 var witness = []
18862 if (SIGNABLE.indexOf(scriptType) !== -1) {
18863 sig = buildStack(scriptType, input.signatures, input.pubKeys, allowIncomplete)
8b095871
IC
18864 }
18865
9987f0c1
IC
18866 var p2sh = false
18867 if (scriptType === bscript.types.P2SH) {
18868 // We can remove this error later when we have a guarantee prepareInput
18869 // rejects unsignable scripts - it MUST be signable at this point.
18870 if (P2SH.indexOf(input.redeemScriptType) === -1) {
18871 throw new Error('Impossible to sign this type')
18872 }
18873 p2sh = true
18874 if (SIGNABLE.indexOf(input.redeemScriptType) !== -1) {
18875 sig = buildStack(input.redeemScriptType, input.signatures, input.pubKeys, allowIncomplete)
18876 }
18877 // If it wasn't SIGNABLE, it's witness, defer to that
18878 scriptType = input.redeemScriptType
8b095871
IC
18879 }
18880
9987f0c1
IC
18881 if (scriptType === bscript.types.P2WPKH) {
18882 // P2WPKH is a special case of P2PKH
18883 witness = buildStack(bscript.types.P2PKH, input.signatures, input.pubKeys, allowIncomplete)
18884 } else if (scriptType === bscript.types.P2WSH) {
18885 // We can remove this check later
18886 if (SIGNABLE.indexOf(input.witnessScriptType) !== -1) {
18887 witness = buildStack(input.witnessScriptType, input.signatures, input.pubKeys, allowIncomplete)
18888 witness.push(input.witnessScript)
18889 } else {
18890 // We can remove this error later when we have a guarantee prepareInput
18891 // rejects unsignble scripts - it MUST be signable at this point.
18892 throw new Error()
18893 }
8b095871 18894
9987f0c1 18895 scriptType = input.witnessScriptType
8b095871
IC
18896 }
18897
9987f0c1
IC
18898 // append redeemScript if necessary
18899 if (p2sh) {
18900 sig.push(input.redeemScript)
8b095871
IC
18901 }
18902
9987f0c1
IC
18903 return {
18904 type: scriptType,
18905 script: bscript.compile(sig),
18906 witness: witness
8b095871 18907 }
8b095871
IC
18908}
18909
9987f0c1
IC
18910function TransactionBuilder (network, maximumFeeRate) {
18911 this.prevTxMap = {}
18912 this.network = network || networks.bitcoin
8b095871 18913
9987f0c1
IC
18914 // WARNING: This is __NOT__ to be relied on, its just another potential safety mechanism (safety in-depth)
18915 this.maximumFeeRate = maximumFeeRate || 1000
8b095871 18916
9987f0c1
IC
18917 this.inputs = []
18918 this.tx = new Transaction()
8b095871
IC
18919}
18920
9987f0c1
IC
18921TransactionBuilder.prototype.setLockTime = function (locktime) {
18922 typeforce(types.UInt32, locktime)
8b095871 18923
9987f0c1
IC
18924 // if any signatures exist, throw
18925 if (this.inputs.some(function (input) {
18926 if (!input.signatures) return false
18927
18928 return input.signatures.some(function (s) { return s })
18929 })) {
18930 throw new Error('No, this would invalidate signatures')
18931 }
18932
18933 this.tx.locktime = locktime
8b095871
IC
18934}
18935
9987f0c1
IC
18936TransactionBuilder.prototype.setVersion = function (version) {
18937 typeforce(types.UInt32, version)
8b095871 18938
9987f0c1
IC
18939 // XXX: this might eventually become more complex depending on what the versions represent
18940 this.tx.version = version
18941}
8b095871 18942
9987f0c1
IC
18943TransactionBuilder.fromTransaction = function (transaction, network) {
18944 var txb = new TransactionBuilder(network)
8b095871 18945
9987f0c1
IC
18946 // Copy transaction fields
18947 txb.setVersion(transaction.version)
18948 txb.setLockTime(transaction.locktime)
8b095871 18949
9987f0c1
IC
18950 // Copy outputs (done first to avoid signature invalidation)
18951 transaction.outs.forEach(function (txOut) {
18952 txb.addOutput(txOut.script, txOut.value)
18953 })
8b095871 18954
9987f0c1
IC
18955 // Copy inputs
18956 transaction.ins.forEach(function (txIn) {
18957 txb.__addInputUnsafe(txIn.hash, txIn.index, {
18958 sequence: txIn.sequence,
18959 script: txIn.script,
18960 witness: txIn.witness
18961 })
8b095871
IC
18962 })
18963
9987f0c1
IC
18964 // fix some things not possible through the public API
18965 txb.inputs.forEach(function (input, i) {
18966 fixMultisigOrder(input, transaction, i)
18967 })
8b095871 18968
9987f0c1 18969 return txb
8b095871
IC
18970}
18971
9987f0c1
IC
18972TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOutScript) {
18973 if (!this.__canModifyInputs()) {
18974 throw new Error('No, this would invalidate signatures')
18975 }
8b095871 18976
9987f0c1 18977 var value
8b095871 18978
9987f0c1
IC
18979 // is it a hex string?
18980 if (typeof txHash === 'string') {
18981 // transaction hashs's are displayed in reverse order, un-reverse it
18982 txHash = Buffer.from(txHash, 'hex').reverse()
8b095871 18983
9987f0c1
IC
18984 // is it a Transaction object?
18985 } else if (txHash instanceof Transaction) {
18986 var txOut = txHash.outs[vout]
18987 prevOutScript = txOut.script
18988 value = txOut.value
8b095871 18989
9987f0c1
IC
18990 txHash = txHash.getHash()
18991 }
8b095871 18992
9987f0c1
IC
18993 return this.__addInputUnsafe(txHash, vout, {
18994 sequence: sequence,
18995 prevOutScript: prevOutScript,
18996 value: value
18997 })
18998}
8b095871 18999
9987f0c1
IC
19000TransactionBuilder.prototype.__addInputUnsafe = function (txHash, vout, options) {
19001 if (Transaction.isCoinbaseHash(txHash)) {
19002 throw new Error('coinbase inputs not supported')
19003 }
8b095871 19004
9987f0c1
IC
19005 var prevTxOut = txHash.toString('hex') + ':' + vout
19006 if (this.prevTxMap[prevTxOut] !== undefined) throw new Error('Duplicate TxOut: ' + prevTxOut)
8b095871 19007
9987f0c1 19008 var input = {}
8b095871 19009
9987f0c1
IC
19010 // derive what we can from the scriptSig
19011 if (options.script !== undefined) {
19012 input = expandInput(options.script, options.witness || [])
8b095871
IC
19013 }
19014
9987f0c1
IC
19015 // if an input value was given, retain it
19016 if (options.value !== undefined) {
19017 input.value = options.value
8b095871 19018 }
8b095871 19019
9987f0c1
IC
19020 // derive what we can from the previous transactions output script
19021 if (!input.prevOutScript && options.prevOutScript) {
19022 var prevOutType
8b095871 19023
9987f0c1
IC
19024 if (!input.pubKeys && !input.signatures) {
19025 var expanded = expandOutput(options.prevOutScript)
8b095871 19026
9987f0c1
IC
19027 if (expanded.pubKeys) {
19028 input.pubKeys = expanded.pubKeys
19029 input.signatures = expanded.signatures
19030 }
8b095871 19031
9987f0c1
IC
19032 prevOutType = expanded.scriptType
19033 }
8b095871 19034
9987f0c1
IC
19035 input.prevOutScript = options.prevOutScript
19036 input.prevOutType = prevOutType || bscript.classifyOutput(options.prevOutScript)
19037 }
8b095871 19038
9987f0c1
IC
19039 var vin = this.tx.addInput(txHash, vout, options.sequence, options.scriptSig)
19040 this.inputs[vin] = input
19041 this.prevTxMap[prevTxOut] = vin
8b095871 19042
9987f0c1
IC
19043 return vin
19044}
8b095871 19045
9987f0c1
IC
19046TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
19047 if (!this.__canModifyOutputs()) {
19048 throw new Error('No, this would invalidate signatures')
8b095871
IC
19049 }
19050
9987f0c1
IC
19051 // Attempt to get a script if it's a base58 address string
19052 if (typeof scriptPubKey === 'string') {
19053 scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network)
8b095871 19054 }
8b095871 19055
9987f0c1
IC
19056 return this.tx.addOutput(scriptPubKey, value)
19057}
8b095871 19058
9987f0c1
IC
19059TransactionBuilder.prototype.build = function () {
19060 return this.__build(false)
19061}
19062TransactionBuilder.prototype.buildIncomplete = function () {
19063 return this.__build(true)
19064}
8b095871 19065
9987f0c1
IC
19066TransactionBuilder.prototype.__build = function (allowIncomplete) {
19067 if (!allowIncomplete) {
19068 if (!this.tx.ins.length) throw new Error('Transaction has no inputs')
19069 if (!this.tx.outs.length) throw new Error('Transaction has no outputs')
19070 }
8b095871 19071
9987f0c1
IC
19072 var tx = this.tx.clone()
19073 // Create script signatures from inputs
19074 this.inputs.forEach(function (input, i) {
19075 var scriptType = input.witnessScriptType || input.redeemScriptType || input.prevOutType
19076 if (!scriptType && !allowIncomplete) throw new Error('Transaction is not complete')
19077 var result = buildInput(input, allowIncomplete)
8b095871 19078
9987f0c1
IC
19079 // skip if no result
19080 if (!allowIncomplete) {
19081 if (SIGNABLE.indexOf(result.type) === -1 && result.type !== bscript.types.P2WPKH) {
19082 throw new Error(result.type + ' not supported')
19083 }
19084 }
8b095871 19085
9987f0c1
IC
19086 tx.setInputScript(i, result.script)
19087 tx.setWitness(i, result.witness)
19088 })
8b095871 19089
9987f0c1
IC
19090 if (!allowIncomplete) {
19091 // do not rely on this, its merely a last resort
19092 if (this.__overMaximumFees(tx.byteLength())) {
19093 throw new Error('Transaction has absurd fees')
19094 }
19095 }
8b095871 19096
9987f0c1 19097 return tx
8b095871
IC
19098}
19099
9987f0c1
IC
19100function canSign (input) {
19101 return input.prevOutScript !== undefined &&
19102 input.signScript !== undefined &&
19103 input.pubKeys !== undefined &&
19104 input.signatures !== undefined &&
19105 input.signatures.length === input.pubKeys.length &&
19106 input.pubKeys.length > 0 &&
19107 input.witness !== undefined
8b095871
IC
19108}
19109
9987f0c1
IC
19110TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashType, witnessValue, witnessScript) {
19111 if (keyPair.network !== this.network) throw new Error('Inconsistent network')
19112 if (!this.inputs[vin]) throw new Error('No input at index: ' + vin)
19113 hashType = hashType || Transaction.SIGHASH_ALL
8b095871 19114
9987f0c1 19115 var input = this.inputs[vin]
8b095871 19116
9987f0c1
IC
19117 // if redeemScript was previously provided, enforce consistency
19118 if (input.redeemScript !== undefined &&
19119 redeemScript &&
19120 !input.redeemScript.equals(redeemScript)) {
19121 throw new Error('Inconsistent redeemScript')
19122 }
8b095871 19123
9987f0c1
IC
19124 var kpPubKey = keyPair.getPublicKeyBuffer()
19125 if (!canSign(input)) {
19126 prepareInput(input, kpPubKey, redeemScript, witnessValue, witnessScript)
19127 if (!canSign(input)) throw Error(input.prevOutType + ' not supported')
19128 }
8b095871 19129
9987f0c1
IC
19130 // ready to sign
19131 var signatureHash
19132 if (input.witness) {
19133 signatureHash = this.tx.hashForWitnessV0(vin, input.signScript, witnessValue, hashType)
8b095871 19134 } else {
9987f0c1 19135 signatureHash = this.tx.hashForSignature(vin, input.signScript, hashType)
8b095871 19136 }
9987f0c1
IC
19137 // enforce in order signing of public keys
19138 var signed = input.pubKeys.some(function (pubKey, i) {
19139 if (!kpPubKey.equals(pubKey)) return false
19140 if (input.signatures[i]) throw new Error('Signature already exists')
8b095871 19141
9987f0c1
IC
19142 input.signatures[i] = keyPair.sign(signatureHash).toScriptSignature(hashType)
19143 return true
19144 })
8b095871 19145
9987f0c1 19146 if (!signed) throw new Error('Key pair cannot sign for this input')
8b095871
IC
19147}
19148
9987f0c1
IC
19149function signatureHashType (buffer) {
19150 return buffer.readUInt8(buffer.length - 1)
8b095871
IC
19151}
19152
9987f0c1
IC
19153TransactionBuilder.prototype.__canModifyInputs = function () {
19154 return this.inputs.every(function (input) {
19155 // any signatures?
19156 if (input.signatures === undefined) return true
8b095871 19157
9987f0c1
IC
19158 return input.signatures.every(function (signature) {
19159 if (!signature) return true
19160 var hashType = signatureHashType(signature)
8b095871 19161
9987f0c1
IC
19162 // if SIGHASH_ANYONECANPAY is set, signatures would not
19163 // be invalidated by more inputs
19164 return hashType & Transaction.SIGHASH_ANYONECANPAY
19165 })
19166 })
8b095871
IC
19167}
19168
9987f0c1
IC
19169TransactionBuilder.prototype.__canModifyOutputs = function () {
19170 var nInputs = this.tx.ins.length
19171 var nOutputs = this.tx.outs.length
8b095871 19172
9987f0c1
IC
19173 return this.inputs.every(function (input) {
19174 if (input.signatures === undefined) return true
8b095871 19175
9987f0c1
IC
19176 return input.signatures.every(function (signature) {
19177 if (!signature) return true
19178 var hashType = signatureHashType(signature)
8b095871 19179
9987f0c1
IC
19180 var hashTypeMod = hashType & 0x1f
19181 if (hashTypeMod === Transaction.SIGHASH_NONE) return true
19182 if (hashTypeMod === Transaction.SIGHASH_SINGLE) {
19183 // if SIGHASH_SINGLE is set, and nInputs > nOutputs
19184 // some signatures would be invalidated by the addition
19185 // of more outputs
19186 return nInputs <= nOutputs
19187 }
19188 })
19189 })
8b095871
IC
19190}
19191
9987f0c1
IC
19192TransactionBuilder.prototype.__overMaximumFees = function (bytes) {
19193 // not all inputs will have .value defined
19194 var incoming = this.inputs.reduce(function (a, x) { return a + (x.value >>> 0) }, 0)
8b095871 19195
9987f0c1
IC
19196 // but all outputs do, and if we have any input value
19197 // we can immediately determine if the outputs are too small
19198 var outgoing = this.tx.outs.reduce(function (a, x) { return a + x.value }, 0)
19199 var fee = incoming - outgoing
19200 var feeRate = fee / bytes
8b095871 19201
9987f0c1 19202 return feeRate > this.maximumFeeRate
8b095871
IC
19203}
19204
9987f0c1 19205module.exports = TransactionBuilder
8b095871 19206
9987f0c1
IC
19207},{"./address":42,"./crypto":45,"./ecpair":47,"./ecsignature":48,"./networks":51,"./script":52,"./transaction":76,"./types":78,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109}],78:[function(require,module,exports){
19208var typeforce = require('typeforce')
8b095871 19209
9987f0c1
IC
19210var UINT31_MAX = Math.pow(2, 31) - 1
19211function UInt31 (value) {
19212 return typeforce.UInt32(value) && value <= UINT31_MAX
19213}
8b095871 19214
9987f0c1
IC
19215function BIP32Path (value) {
19216 return typeforce.String(value) && value.match(/^(m\/)?(\d+'?\/)*\d+'?$/)
19217}
19218BIP32Path.toJSON = function () { return 'BIP32 derivation path' }
8b095871 19219
9987f0c1
IC
19220var SATOSHI_MAX = 21 * 1e14
19221function Satoshi (value) {
19222 return typeforce.UInt53(value) && value <= SATOSHI_MAX
19223}
8b095871 19224
9987f0c1
IC
19225// external dependent types
19226var BigInt = typeforce.quacksLike('BigInteger')
19227var ECPoint = typeforce.quacksLike('Point')
8b095871 19228
9987f0c1
IC
19229// exposed, external API
19230var ECSignature = typeforce.compile({ r: BigInt, s: BigInt })
19231var Network = typeforce.compile({
19232 messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String),
19233 bip32: {
19234 public: typeforce.UInt32,
19235 private: typeforce.UInt32
19236 },
19237 pubKeyHash: typeforce.UInt8,
19238 scriptHash: typeforce.UInt8,
19239 wif: typeforce.UInt8
19240})
8b095871 19241
9987f0c1
IC
19242// extend typeforce types with ours
19243var types = {
19244 BigInt: BigInt,
19245 BIP32Path: BIP32Path,
19246 Buffer256bit: typeforce.BufferN(32),
19247 ECPoint: ECPoint,
19248 ECSignature: ECSignature,
19249 Hash160bit: typeforce.BufferN(20),
19250 Hash256bit: typeforce.BufferN(32),
19251 Network: Network,
19252 Satoshi: Satoshi,
19253 UInt31: UInt31
19254}
8b095871 19255
9987f0c1
IC
19256for (var typeName in typeforce) {
19257 types[typeName] = typeforce[typeName]
19258}
8b095871 19259
9987f0c1 19260module.exports = types
8b095871 19261
9987f0c1
IC
19262},{"typeforce":109}],79:[function(require,module,exports){
19263var basex = require('base-x')
19264var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
8b095871 19265
9987f0c1 19266module.exports = basex(ALPHABET)
8b095871 19267
9987f0c1
IC
19268},{"base-x":34}],80:[function(require,module,exports){
19269(function (Buffer){
19270'use strict'
8b095871 19271
9987f0c1
IC
19272var base58 = require('bs58')
19273var createHash = require('create-hash')
8b095871 19274
9987f0c1
IC
19275// SHA256(SHA256(buffer))
19276function sha256x2 (buffer) {
19277 var tmp = createHash('sha256').update(buffer).digest()
19278 return createHash('sha256').update(tmp).digest()
19279}
8b095871 19280
9987f0c1
IC
19281// Encode a buffer as a base58-check encoded string
19282function encode (payload) {
19283 var checksum = sha256x2(payload)
8b095871 19284
9987f0c1
IC
19285 return base58.encode(Buffer.concat([
19286 payload,
19287 checksum
19288 ], payload.length + 4))
19289}
8b095871 19290
9987f0c1
IC
19291function decodeRaw (buffer) {
19292 var payload = buffer.slice(0, -4)
19293 var checksum = buffer.slice(-4)
19294 var newChecksum = sha256x2(payload)
8b095871 19295
9987f0c1
IC
19296 if (checksum[0] ^ newChecksum[0] |
19297 checksum[1] ^ newChecksum[1] |
19298 checksum[2] ^ newChecksum[2] |
19299 checksum[3] ^ newChecksum[3]) return
8b095871 19300
9987f0c1
IC
19301 return payload
19302}
8b095871 19303
9987f0c1
IC
19304// Decode a base58-check encoded string to a buffer, no result if checksum is wrong
19305function decodeUnsafe (string) {
19306 var buffer = base58.decodeUnsafe(string)
19307 if (!buffer) return
8b095871 19308
9987f0c1
IC
19309 return decodeRaw(buffer)
19310}
8b095871 19311
9987f0c1
IC
19312function decode (string) {
19313 var buffer = base58.decode(string)
19314 var payload = decodeRaw(buffer)
19315 if (!payload) throw new Error('Invalid checksum')
19316 return payload
19317}
8b095871 19318
9987f0c1
IC
19319module.exports = {
19320 encode: encode,
19321 decode: decode,
19322 decodeUnsafe: decodeUnsafe
19323}
8b095871 19324
9987f0c1
IC
19325}).call(this,require("buffer").Buffer)
19326},{"bs58":79,"buffer":4,"create-hash":82}],81:[function(require,module,exports){
19327var Buffer = require('safe-buffer').Buffer
19328var Transform = require('stream').Transform
19329var StringDecoder = require('string_decoder').StringDecoder
19330var inherits = require('inherits')
8b095871 19331
9987f0c1
IC
19332function CipherBase (hashMode) {
19333 Transform.call(this)
19334 this.hashMode = typeof hashMode === 'string'
19335 if (this.hashMode) {
19336 this[hashMode] = this._finalOrDigest
19337 } else {
19338 this.final = this._finalOrDigest
8b095871 19339 }
9987f0c1
IC
19340 if (this._final) {
19341 this.__final = this._final
19342 this._final = null
19343 }
19344 this._decoder = null
19345 this._encoding = null
8b095871 19346}
9987f0c1 19347inherits(CipherBase, Transform)
8b095871 19348
9987f0c1
IC
19349CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
19350 if (typeof data === 'string') {
19351 data = Buffer.from(data, inputEnc)
19352 }
8b095871 19353
9987f0c1
IC
19354 var outData = this._update(data)
19355 if (this.hashMode) return this
8b095871 19356
9987f0c1
IC
19357 if (outputEnc) {
19358 outData = this._toString(outData, outputEnc)
19359 }
8b095871 19360
9987f0c1
IC
19361 return outData
19362}
8b095871 19363
9987f0c1
IC
19364CipherBase.prototype.setAutoPadding = function () {}
19365CipherBase.prototype.getAuthTag = function () {
19366 throw new Error('trying to get auth tag in unsupported state')
19367}
8b095871 19368
9987f0c1
IC
19369CipherBase.prototype.setAuthTag = function () {
19370 throw new Error('trying to set auth tag in unsupported state')
19371}
8b095871 19372
9987f0c1
IC
19373CipherBase.prototype.setAAD = function () {
19374 throw new Error('trying to set aad in unsupported state')
19375}
8b095871 19376
9987f0c1
IC
19377CipherBase.prototype._transform = function (data, _, next) {
19378 var err
19379 try {
19380 if (this.hashMode) {
19381 this._update(data)
19382 } else {
19383 this.push(this._update(data))
19384 }
19385 } catch (e) {
19386 err = e
19387 } finally {
19388 next(err)
19389 }
19390}
19391CipherBase.prototype._flush = function (done) {
19392 var err
19393 try {
19394 this.push(this.__final())
19395 } catch (e) {
19396 err = e
8b095871
IC
19397 }
19398
9987f0c1
IC
19399 done(err)
19400}
19401CipherBase.prototype._finalOrDigest = function (outputEnc) {
19402 var outData = this.__final() || Buffer.alloc(0)
19403 if (outputEnc) {
19404 outData = this._toString(outData, outputEnc, true)
19405 }
19406 return outData
8b095871
IC
19407}
19408
9987f0c1
IC
19409CipherBase.prototype._toString = function (value, enc, fin) {
19410 if (!this._decoder) {
19411 this._decoder = new StringDecoder(enc)
19412 this._encoding = enc
19413 }
8b095871 19414
9987f0c1 19415 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
8b095871 19416
9987f0c1
IC
19417 var out = this._decoder.write(value)
19418 if (fin) {
19419 out += this._decoder.end()
19420 }
8b095871 19421
9987f0c1
IC
19422 return out
19423}
8b095871 19424
9987f0c1 19425module.exports = CipherBase
8b095871 19426
9987f0c1
IC
19427},{"inherits":93,"safe-buffer":98,"stream":27,"string_decoder":28}],82:[function(require,module,exports){
19428(function (Buffer){
19429'use strict'
19430var inherits = require('inherits')
19431var md5 = require('./md5')
19432var RIPEMD160 = require('ripemd160')
19433var sha = require('sha.js')
8b095871 19434
9987f0c1
IC
19435var Base = require('cipher-base')
19436
19437function HashNoConstructor (hash) {
19438 Base.call(this, 'digest')
8b095871 19439
9987f0c1
IC
19440 this._hash = hash
19441 this.buffers = []
8b095871
IC
19442}
19443
9987f0c1 19444inherits(HashNoConstructor, Base)
8b095871 19445
9987f0c1
IC
19446HashNoConstructor.prototype._update = function (data) {
19447 this.buffers.push(data)
8b095871
IC
19448}
19449
9987f0c1
IC
19450HashNoConstructor.prototype._final = function () {
19451 var buf = Buffer.concat(this.buffers)
19452 var r = this._hash(buf)
19453 this.buffers = null
8b095871 19454
9987f0c1
IC
19455 return r
19456}
8b095871 19457
9987f0c1
IC
19458function Hash (hash) {
19459 Base.call(this, 'digest')
8b095871 19460
9987f0c1
IC
19461 this._hash = hash
19462}
8b095871 19463
9987f0c1 19464inherits(Hash, Base)
8b095871 19465
9987f0c1
IC
19466Hash.prototype._update = function (data) {
19467 this._hash.update(data)
19468}
8b095871 19469
9987f0c1
IC
19470Hash.prototype._final = function () {
19471 return this._hash.digest()
19472}
8b095871 19473
9987f0c1
IC
19474module.exports = function createHash (alg) {
19475 alg = alg.toLowerCase()
19476 if (alg === 'md5') return new HashNoConstructor(md5)
19477 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
8b095871 19478
9987f0c1
IC
19479 return new Hash(sha(alg))
19480}
8b095871 19481
9987f0c1
IC
19482}).call(this,require("buffer").Buffer)
19483},{"./md5":84,"buffer":4,"cipher-base":81,"inherits":93,"ripemd160":97,"sha.js":100}],83:[function(require,module,exports){
19484(function (Buffer){
19485'use strict'
19486var intSize = 4
19487var zeroBuffer = new Buffer(intSize)
19488zeroBuffer.fill(0)
8b095871 19489
9987f0c1
IC
19490var charSize = 8
19491var hashSize = 16
8b095871 19492
9987f0c1
IC
19493function toArray (buf) {
19494 if ((buf.length % intSize) !== 0) {
19495 var len = buf.length + (intSize - (buf.length % intSize))
19496 buf = Buffer.concat([buf, zeroBuffer], len)
19497 }
8b095871 19498
9987f0c1
IC
19499 var arr = new Array(buf.length >>> 2)
19500 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
19501 arr[j] = buf.readInt32LE(i)
8b095871
IC
19502 }
19503
9987f0c1 19504 return arr
8b095871
IC
19505}
19506
9987f0c1
IC
19507module.exports = function hash (buf, fn) {
19508 var arr = fn(toArray(buf), buf.length * charSize)
19509 buf = new Buffer(hashSize)
19510 for (var i = 0; i < arr.length; i++) {
19511 buf.writeInt32LE(arr[i], i << 2, true)
19512 }
19513 return buf
8b095871
IC
19514}
19515
19516}).call(this,require("buffer").Buffer)
9987f0c1
IC
19517},{"buffer":4}],84:[function(require,module,exports){
19518'use strict'
19519/*
19520 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
19521 * Digest Algorithm, as defined in RFC 1321.
19522 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
19523 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
19524 * Distributed under the BSD License
19525 * See http://pajhome.org.uk/crypt/md5 for more info.
19526 */
8b095871 19527
9987f0c1 19528var makeHash = require('./make-hash')
8b095871 19529
9987f0c1
IC
19530/*
19531 * Calculate the MD5 of an array of little-endian words, and a bit length
19532 */
19533function core_md5 (x, len) {
19534 /* append padding */
19535 x[len >> 5] |= 0x80 << ((len) % 32)
19536 x[(((len + 64) >>> 9) << 4) + 14] = len
19537
19538 var a = 1732584193
19539 var b = -271733879
19540 var c = -1732584194
19541 var d = 271733878
19542
19543 for (var i = 0; i < x.length; i += 16) {
19544 var olda = a
19545 var oldb = b
19546 var oldc = c
19547 var oldd = d
19548
19549 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
19550 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
19551 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
19552 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
19553 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
19554 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
19555 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
19556 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
19557 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
19558 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
19559 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
19560 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
19561 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
19562 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
19563 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
19564 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
19565
19566 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
19567 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
19568 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
19569 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
19570 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
19571 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
19572 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
19573 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
19574 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
19575 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
19576 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
19577 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
19578 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
19579 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
19580 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
19581 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
19582
19583 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
19584 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
19585 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
19586 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
19587 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
19588 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
19589 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
19590 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
19591 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
19592 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
19593 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
19594 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
19595 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
19596 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
19597 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
19598 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
19599
19600 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
19601 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
19602 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
19603 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
19604 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
19605 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
19606 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
19607 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
19608 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
19609 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
19610 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
19611 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
19612 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
19613 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
19614 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
19615 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
19616
19617 a = safe_add(a, olda)
19618 b = safe_add(b, oldb)
19619 c = safe_add(c, oldc)
19620 d = safe_add(d, oldd)
19621 }
19622
19623 return [a, b, c, d]
19624}
8b095871 19625
9987f0c1
IC
19626/*
19627 * These functions implement the four basic operations the algorithm uses.
19628 */
19629function md5_cmn (q, a, b, x, s, t) {
19630 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
8b095871
IC
19631}
19632
9987f0c1
IC
19633function md5_ff (a, b, c, d, x, s, t) {
19634 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
19635}
8b095871 19636
9987f0c1
IC
19637function md5_gg (a, b, c, d, x, s, t) {
19638 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
19639}
8b095871 19640
9987f0c1
IC
19641function md5_hh (a, b, c, d, x, s, t) {
19642 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
19643}
8b095871 19644
9987f0c1
IC
19645function md5_ii (a, b, c, d, x, s, t) {
19646 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
19647}
8b095871 19648
9987f0c1
IC
19649/*
19650 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
19651 * to work around bugs in some JS interpreters.
19652 */
19653function safe_add (x, y) {
19654 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
19655 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
19656 return (msw << 16) | (lsw & 0xFFFF)
19657}
8b095871 19658
9987f0c1
IC
19659/*
19660 * Bitwise rotate a 32-bit number to the left.
19661 */
19662function bit_rol (num, cnt) {
19663 return (num << cnt) | (num >>> (32 - cnt))
19664}
8b095871 19665
9987f0c1
IC
19666module.exports = function md5 (buf) {
19667 return makeHash(buf, core_md5)
8b095871
IC
19668}
19669
9987f0c1
IC
19670},{"./make-hash":83}],85:[function(require,module,exports){
19671'use strict'
19672var inherits = require('inherits')
19673var Legacy = require('./legacy')
19674var Base = require('cipher-base')
19675var Buffer = require('safe-buffer').Buffer
19676var md5 = require('create-hash/md5')
19677var RIPEMD160 = require('ripemd160')
8b095871 19678
9987f0c1 19679var sha = require('sha.js')
8b095871 19680
9987f0c1 19681var ZEROS = Buffer.alloc(128)
8b095871 19682
9987f0c1
IC
19683function Hmac (alg, key) {
19684 Base.call(this, 'digest')
19685 if (typeof key === 'string') {
19686 key = Buffer.from(key)
19687 }
8b095871 19688
9987f0c1 19689 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
8b095871 19690
9987f0c1
IC
19691 this._alg = alg
19692 this._key = key
19693 if (key.length > blocksize) {
19694 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
19695 key = hash.update(key).digest()
19696 } else if (key.length < blocksize) {
19697 key = Buffer.concat([key, ZEROS], blocksize)
19698 }
8b095871 19699
9987f0c1
IC
19700 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
19701 var opad = this._opad = Buffer.allocUnsafe(blocksize)
8b095871 19702
9987f0c1
IC
19703 for (var i = 0; i < blocksize; i++) {
19704 ipad[i] = key[i] ^ 0x36
19705 opad[i] = key[i] ^ 0x5C
8b095871 19706 }
9987f0c1
IC
19707 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
19708 this._hash.update(ipad)
19709}
8b095871 19710
9987f0c1
IC
19711inherits(Hmac, Base)
19712
19713Hmac.prototype._update = function (data) {
19714 this._hash.update(data)
8b095871
IC
19715}
19716
9987f0c1
IC
19717Hmac.prototype._final = function () {
19718 var h = this._hash.digest()
19719 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
19720 return hash.update(this._opad).update(h).digest()
8b095871
IC
19721}
19722
9987f0c1
IC
19723module.exports = function createHmac (alg, key) {
19724 alg = alg.toLowerCase()
19725 if (alg === 'rmd160' || alg === 'ripemd160') {
19726 return new Hmac('rmd160', key)
19727 }
19728 if (alg === 'md5') {
19729 return new Legacy(md5, key)
19730 }
19731 return new Hmac(alg, key)
19732}
8b095871 19733
9987f0c1
IC
19734},{"./legacy":86,"cipher-base":81,"create-hash/md5":84,"inherits":93,"ripemd160":97,"safe-buffer":98,"sha.js":100}],86:[function(require,module,exports){
19735'use strict'
19736var inherits = require('inherits')
19737var Buffer = require('safe-buffer').Buffer
8b095871 19738
9987f0c1 19739var Base = require('cipher-base')
8b095871 19740
9987f0c1
IC
19741var ZEROS = Buffer.alloc(128)
19742var blocksize = 64
8b095871 19743
9987f0c1
IC
19744function Hmac (alg, key) {
19745 Base.call(this, 'digest')
19746 if (typeof key === 'string') {
19747 key = Buffer.from(key)
8b095871
IC
19748 }
19749
9987f0c1
IC
19750 this._alg = alg
19751 this._key = key
8b095871 19752
9987f0c1
IC
19753 if (key.length > blocksize) {
19754 key = alg(key)
19755 } else if (key.length < blocksize) {
19756 key = Buffer.concat([key, ZEROS], blocksize)
19757 }
8b095871 19758
9987f0c1
IC
19759 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
19760 var opad = this._opad = Buffer.allocUnsafe(blocksize)
8b095871 19761
9987f0c1
IC
19762 for (var i = 0; i < blocksize; i++) {
19763 ipad[i] = key[i] ^ 0x36
19764 opad[i] = key[i] ^ 0x5C
19765 }
8b095871 19766
9987f0c1 19767 this._hash = [ipad]
8b095871
IC
19768}
19769
9987f0c1 19770inherits(Hmac, Base)
8b095871 19771
9987f0c1
IC
19772Hmac.prototype._update = function (data) {
19773 this._hash.push(data)
8b095871
IC
19774}
19775
9987f0c1
IC
19776Hmac.prototype._final = function () {
19777 var h = this._alg(Buffer.concat(this._hash))
19778 return this._alg(Buffer.concat([this._opad, h]))
8b095871 19779}
9987f0c1 19780module.exports = Hmac
8b095871 19781
9987f0c1 19782},{"cipher-base":81,"inherits":93,"safe-buffer":98}],87:[function(require,module,exports){
8b095871 19783var assert = require('assert')
8b095871
IC
19784var BigInteger = require('bigi')
19785
9987f0c1 19786var Point = require('./point')
8b095871 19787
9987f0c1
IC
19788function Curve (p, a, b, Gx, Gy, n, h) {
19789 this.p = p
19790 this.a = a
19791 this.b = b
19792 this.G = Point.fromAffine(this, Gx, Gy)
19793 this.n = n
19794 this.h = h
8b095871 19795
9987f0c1 19796 this.infinity = new Point(this, null, null, BigInteger.ZERO)
8b095871 19797
9987f0c1
IC
19798 // result caching
19799 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
8b095871 19800
9987f0c1
IC
19801 // determine size of p in bytes
19802 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
19803}
8b095871 19804
9987f0c1
IC
19805Curve.prototype.pointFromX = function (isOdd, x) {
19806 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
19807 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
8b095871 19808
9987f0c1
IC
19809 var y = beta
19810 if (beta.isEven() ^ !isOdd) {
19811 y = this.p.subtract(y) // -y % p
8b095871 19812 }
9987f0c1
IC
19813
19814 return Point.fromAffine(this, x, y)
8b095871
IC
19815}
19816
9987f0c1
IC
19817Curve.prototype.isInfinity = function (Q) {
19818 if (Q === this.infinity) return true
8b095871 19819
9987f0c1
IC
19820 return Q.z.signum() === 0 && Q.y.signum() !== 0
19821}
8b095871 19822
9987f0c1
IC
19823Curve.prototype.isOnCurve = function (Q) {
19824 if (this.isInfinity(Q)) return true
8b095871 19825
9987f0c1
IC
19826 var x = Q.affineX
19827 var y = Q.affineY
19828 var a = this.a
19829 var b = this.b
19830 var p = this.p
8b095871 19831
9987f0c1
IC
19832 // Check that xQ and yQ are integers in the interval [0, p - 1]
19833 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
19834 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
8b095871 19835
9987f0c1
IC
19836 // and check that y^2 = x^3 + ax + b (mod p)
19837 var lhs = y.square().mod(p)
19838 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
19839 return lhs.equals(rhs)
19840}
8b095871 19841
9987f0c1
IC
19842/**
19843 * Validate an elliptic curve point.
19844 *
19845 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
19846 */
19847Curve.prototype.validate = function (Q) {
19848 // Check Q != O
19849 assert(!this.isInfinity(Q), 'Point is at infinity')
19850 assert(this.isOnCurve(Q), 'Point is not on the curve')
19851
19852 // Check nQ = O (where Q is a scalar multiple of G)
19853 var nQ = Q.multiply(this.n)
19854 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
8b095871 19855
9987f0c1
IC
19856 return true
19857}
8b095871 19858
9987f0c1 19859module.exports = Curve
8b095871 19860
9987f0c1
IC
19861},{"./point":91,"assert":1,"bigi":37}],88:[function(require,module,exports){
19862module.exports={
19863 "secp128r1": {
19864 "p": "fffffffdffffffffffffffffffffffff",
19865 "a": "fffffffdfffffffffffffffffffffffc",
19866 "b": "e87579c11079f43dd824993c2cee5ed3",
19867 "n": "fffffffe0000000075a30d1b9038a115",
19868 "h": "01",
19869 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
19870 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
19871 },
19872 "secp160k1": {
19873 "p": "fffffffffffffffffffffffffffffffeffffac73",
19874 "a": "00",
19875 "b": "07",
19876 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
19877 "h": "01",
19878 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
19879 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
19880 },
19881 "secp160r1": {
19882 "p": "ffffffffffffffffffffffffffffffff7fffffff",
19883 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
19884 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
19885 "n": "0100000000000000000001f4c8f927aed3ca752257",
19886 "h": "01",
19887 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
19888 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
19889 },
19890 "secp192k1": {
19891 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
19892 "a": "00",
19893 "b": "03",
19894 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
19895 "h": "01",
19896 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
19897 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
19898 },
19899 "secp192r1": {
19900 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
19901 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
19902 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
19903 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
19904 "h": "01",
19905 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
19906 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
19907 },
19908 "secp256k1": {
19909 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
19910 "a": "00",
19911 "b": "07",
19912 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
19913 "h": "01",
19914 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
19915 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
19916 },
19917 "secp256r1": {
19918 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
19919 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
19920 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
19921 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
19922 "h": "01",
19923 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
19924 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
19925 }
8b095871
IC
19926}
19927
9987f0c1
IC
19928},{}],89:[function(require,module,exports){
19929var Point = require('./point')
19930var Curve = require('./curve')
8b095871 19931
9987f0c1 19932var getCurveByName = require('./names')
8b095871 19933
9987f0c1
IC
19934module.exports = {
19935 Curve: Curve,
19936 Point: Point,
19937 getCurveByName: getCurveByName
8b095871
IC
19938}
19939
9987f0c1
IC
19940},{"./curve":87,"./names":90,"./point":91}],90:[function(require,module,exports){
19941var BigInteger = require('bigi')
8b095871 19942
9987f0c1
IC
19943var curves = require('./curves.json')
19944var Curve = require('./curve')
8b095871 19945
9987f0c1
IC
19946function getCurveByName (name) {
19947 var curve = curves[name]
19948 if (!curve) return null
8b095871 19949
9987f0c1
IC
19950 var p = new BigInteger(curve.p, 16)
19951 var a = new BigInteger(curve.a, 16)
19952 var b = new BigInteger(curve.b, 16)
19953 var n = new BigInteger(curve.n, 16)
19954 var h = new BigInteger(curve.h, 16)
19955 var Gx = new BigInteger(curve.Gx, 16)
19956 var Gy = new BigInteger(curve.Gy, 16)
8b095871 19957
9987f0c1 19958 return new Curve(p, a, b, Gx, Gy, n, h)
8b095871
IC
19959}
19960
9987f0c1 19961module.exports = getCurveByName
8b095871 19962
9987f0c1
IC
19963},{"./curve":87,"./curves.json":88,"bigi":37}],91:[function(require,module,exports){
19964(function (Buffer){
19965var assert = require('assert')
19966var BigInteger = require('bigi')
8b095871 19967
9987f0c1 19968var THREE = BigInteger.valueOf(3)
8b095871 19969
9987f0c1
IC
19970function Point (curve, x, y, z) {
19971 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
8b095871 19972
9987f0c1
IC
19973 this.curve = curve
19974 this.x = x
19975 this.y = y
19976 this.z = z
19977 this._zInv = null
8b095871 19978
9987f0c1 19979 this.compressed = true
8b095871
IC
19980}
19981
9987f0c1
IC
19982Object.defineProperty(Point.prototype, 'zInv', {
19983 get: function () {
19984 if (this._zInv === null) {
19985 this._zInv = this.z.modInverse(this.curve.p)
19986 }
8b095871 19987
9987f0c1
IC
19988 return this._zInv
19989 }
19990})
8b095871 19991
9987f0c1
IC
19992Object.defineProperty(Point.prototype, 'affineX', {
19993 get: function () {
19994 return this.x.multiply(this.zInv).mod(this.curve.p)
19995 }
19996})
19997
19998Object.defineProperty(Point.prototype, 'affineY', {
19999 get: function () {
20000 return this.y.multiply(this.zInv).mod(this.curve.p)
20001 }
20002})
20003
20004Point.fromAffine = function (curve, x, y) {
20005 return new Point(curve, x, y, BigInteger.ONE)
8b095871
IC
20006}
20007
9987f0c1
IC
20008Point.prototype.equals = function (other) {
20009 if (other === this) return true
20010 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
20011 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
8b095871 20012
9987f0c1
IC
20013 // u = Y2 * Z1 - Y1 * Z2
20014 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
8b095871 20015
9987f0c1 20016 if (u.signum() !== 0) return false
8b095871 20017
9987f0c1
IC
20018 // v = X2 * Z1 - X1 * Z2
20019 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
8b095871 20020
9987f0c1
IC
20021 return v.signum() === 0
20022}
8b095871 20023
9987f0c1
IC
20024Point.prototype.negate = function () {
20025 var y = this.curve.p.subtract(this.y)
8b095871 20026
9987f0c1 20027 return new Point(this.curve, this.x, y, this.z)
8b095871
IC
20028}
20029
9987f0c1
IC
20030Point.prototype.add = function (b) {
20031 if (this.curve.isInfinity(this)) return b
20032 if (this.curve.isInfinity(b)) return this
20033
20034 var x1 = this.x
20035 var y1 = this.y
20036 var x2 = b.x
20037 var y2 = b.y
8b095871 20038
9987f0c1
IC
20039 // u = Y2 * Z1 - Y1 * Z2
20040 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
20041 // v = X2 * Z1 - X1 * Z2
20042 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
8b095871 20043
9987f0c1
IC
20044 if (v.signum() === 0) {
20045 if (u.signum() === 0) {
20046 return this.twice() // this == b, so double
20047 }
8b095871 20048
9987f0c1 20049 return this.curve.infinity // this = -b, so infinity
8b095871 20050 }
9987f0c1
IC
20051
20052 var v2 = v.square()
20053 var v3 = v2.multiply(v)
20054 var x1v2 = x1.multiply(v2)
20055 var zu2 = u.square().multiply(this.z)
20056
20057 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
20058 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
20059 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
20060 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)
20061 // z3 = v^3 * z1 * z2
20062 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
20063
20064 return new Point(this.curve, x3, y3, z3)
8b095871
IC
20065}
20066
9987f0c1
IC
20067Point.prototype.twice = function () {
20068 if (this.curve.isInfinity(this)) return this
20069 if (this.y.signum() === 0) return this.curve.infinity
8b095871 20070
9987f0c1
IC
20071 var x1 = this.x
20072 var y1 = this.y
8b095871 20073
9987f0c1
IC
20074 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
20075 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
20076 var a = this.curve.a
8b095871 20077
9987f0c1
IC
20078 // w = 3 * x1^2 + a * z1^2
20079 var w = x1.square().multiply(THREE)
8b095871 20080
9987f0c1
IC
20081 if (a.signum() !== 0) {
20082 w = w.add(this.z.square().multiply(a))
20083 }
8b095871 20084
9987f0c1
IC
20085 w = w.mod(this.curve.p)
20086 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
20087 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
20088 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
20089 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
20090 // z3 = 8 * (y1 * z1)^3
20091 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
8b095871 20092
9987f0c1 20093 return new Point(this.curve, x3, y3, z3)
8b095871
IC
20094}
20095
9987f0c1
IC
20096// Simple NAF (Non-Adjacent Form) multiplication algorithm
20097// TODO: modularize the multiplication algorithm
20098Point.prototype.multiply = function (k) {
20099 if (this.curve.isInfinity(this)) return this
20100 if (k.signum() === 0) return this.curve.infinity
8b095871 20101
9987f0c1
IC
20102 var e = k
20103 var h = e.multiply(THREE)
8b095871 20104
9987f0c1
IC
20105 var neg = this.negate()
20106 var R = this
8b095871 20107
9987f0c1
IC
20108 for (var i = h.bitLength() - 2; i > 0; --i) {
20109 var hBit = h.testBit(i)
20110 var eBit = e.testBit(i)
8b095871 20111
9987f0c1 20112 R = R.twice()
8b095871 20113
9987f0c1
IC
20114 if (hBit !== eBit) {
20115 R = R.add(hBit ? this : neg)
20116 }
8b095871
IC
20117 }
20118
9987f0c1
IC
20119 return R
20120}
8b095871 20121
9987f0c1
IC
20122// Compute this*j + x*k (simultaneous multiplication)
20123Point.prototype.multiplyTwo = function (j, x, k) {
20124 var i = Math.max(j.bitLength(), k.bitLength()) - 1
20125 var R = this.curve.infinity
20126 var both = this.add(x)
20127
20128 while (i >= 0) {
20129 var jBit = j.testBit(i)
20130 var kBit = k.testBit(i)
20131
20132 R = R.twice()
20133
20134 if (jBit) {
20135 if (kBit) {
20136 R = R.add(both)
20137 } else {
20138 R = R.add(this)
20139 }
20140 } else if (kBit) {
20141 R = R.add(x)
20142 }
20143 --i
8b095871
IC
20144 }
20145
9987f0c1
IC
20146 return R
20147}
8b095871 20148
9987f0c1
IC
20149Point.prototype.getEncoded = function (compressed) {
20150 if (compressed == null) compressed = this.compressed
20151 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
8b095871 20152
9987f0c1
IC
20153 var x = this.affineX
20154 var y = this.affineY
20155 var byteLength = this.curve.pLength
20156 var buffer
20157
20158 // 0x02/0x03 | X
20159 if (compressed) {
20160 buffer = new Buffer(1 + byteLength)
20161 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
8b095871 20162
9987f0c1 20163 // 0x04 | X | Y
8b095871 20164 } else {
9987f0c1
IC
20165 buffer = new Buffer(1 + byteLength + byteLength)
20166 buffer.writeUInt8(0x04, 0)
8b095871 20167
9987f0c1 20168 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
8b095871
IC
20169 }
20170
9987f0c1 20171 x.toBuffer(byteLength).copy(buffer, 1)
8b095871 20172
9987f0c1 20173 return buffer
8b095871
IC
20174}
20175
9987f0c1
IC
20176Point.decodeFrom = function (curve, buffer) {
20177 var type = buffer.readUInt8(0)
20178 var compressed = (type !== 4)
8b095871 20179
9987f0c1
IC
20180 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
20181 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
8b095871 20182
9987f0c1
IC
20183 var Q
20184 if (compressed) {
20185 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
20186 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
8b095871 20187
9987f0c1
IC
20188 var isOdd = (type === 0x03)
20189 Q = curve.pointFromX(isOdd, x)
20190 } else {
20191 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
8b095871 20192
9987f0c1
IC
20193 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
20194 Q = Point.fromAffine(curve, x, y)
20195 }
8b095871 20196
9987f0c1
IC
20197 Q.compressed = compressed
20198 return Q
8b095871
IC
20199}
20200
9987f0c1
IC
20201Point.prototype.toString = function () {
20202 if (this.curve.isInfinity(this)) return '(INFINITY)'
8b095871 20203
9987f0c1
IC
20204 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
20205}
8b095871 20206
9987f0c1 20207module.exports = Point
8b095871 20208
9987f0c1
IC
20209}).call(this,require("buffer").Buffer)
20210},{"assert":1,"bigi":37,"buffer":4}],92:[function(require,module,exports){
20211(function (Buffer){
20212'use strict'
20213var Transform = require('stream').Transform
20214var inherits = require('inherits')
8b095871 20215
9987f0c1
IC
20216function HashBase (blockSize) {
20217 Transform.call(this)
8b095871 20218
9987f0c1
IC
20219 this._block = new Buffer(blockSize)
20220 this._blockSize = blockSize
20221 this._blockOffset = 0
20222 this._length = [0, 0, 0, 0]
8b095871 20223
9987f0c1
IC
20224 this._finalized = false
20225}
8b095871 20226
9987f0c1 20227inherits(HashBase, Transform)
8b095871 20228
9987f0c1
IC
20229HashBase.prototype._transform = function (chunk, encoding, callback) {
20230 var error = null
20231 try {
20232 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
20233 this.update(chunk)
20234 } catch (err) {
20235 error = err
20236 }
8b095871 20237
9987f0c1
IC
20238 callback(error)
20239}
8b095871 20240
9987f0c1
IC
20241HashBase.prototype._flush = function (callback) {
20242 var error = null
20243 try {
20244 this.push(this._digest())
20245 } catch (err) {
20246 error = err
8b095871
IC
20247 }
20248
9987f0c1 20249 callback(error)
8b095871
IC
20250}
20251
9987f0c1
IC
20252HashBase.prototype.update = function (data, encoding) {
20253 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
20254 if (this._finalized) throw new Error('Digest already called')
20255 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
8b095871 20256
9987f0c1
IC
20257 // consume data
20258 var block = this._block
20259 var offset = 0
20260 while (this._blockOffset + data.length - offset >= this._blockSize) {
20261 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
20262 this._update()
20263 this._blockOffset = 0
20264 }
20265 while (offset < data.length) block[this._blockOffset++] = data[offset++]
8b095871 20266
9987f0c1
IC
20267 // update length
20268 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
20269 this._length[j] += carry
20270 carry = (this._length[j] / 0x0100000000) | 0
20271 if (carry > 0) this._length[j] -= 0x0100000000 * carry
20272 }
8b095871 20273
9987f0c1
IC
20274 return this
20275}
8b095871 20276
9987f0c1
IC
20277HashBase.prototype._update = function (data) {
20278 throw new Error('_update is not implemented')
20279}
8b095871 20280
9987f0c1
IC
20281HashBase.prototype.digest = function (encoding) {
20282 if (this._finalized) throw new Error('Digest already called')
20283 this._finalized = true
8b095871 20284
9987f0c1
IC
20285 var digest = this._digest()
20286 if (encoding !== undefined) digest = digest.toString(encoding)
20287 return digest
20288}
8b095871 20289
9987f0c1
IC
20290HashBase.prototype._digest = function () {
20291 throw new Error('_digest is not implemented')
20292}
8b095871 20293
9987f0c1 20294module.exports = HashBase
8b095871 20295
9987f0c1
IC
20296}).call(this,require("buffer").Buffer)
20297},{"buffer":4,"inherits":93,"stream":27}],93:[function(require,module,exports){
20298arguments[4][8][0].apply(exports,arguments)
20299},{"dup":8}],94:[function(require,module,exports){
20300(function (Buffer){
20301// constant-space merkle root calculation algorithm
20302module.exports = function fastRoot (values, digestFn) {
20303 if (!Array.isArray(values)) throw TypeError('Expected values Array')
20304 if (typeof digestFn !== 'function') throw TypeError('Expected digest Function')
8b095871 20305
9987f0c1
IC
20306 var length = values.length
20307 var results = values.concat()
8b095871 20308
9987f0c1
IC
20309 while (length > 1) {
20310 var j = 0
8b095871 20311
9987f0c1
IC
20312 for (var i = 0; i < length; i += 2, ++j) {
20313 var left = results[i]
20314 var right = i + 1 === length ? left : results[i + 1]
20315 var data = Buffer.concat([left, right])
8b095871 20316
9987f0c1 20317 results[j] = digestFn(data)
8b095871
IC
20318 }
20319
9987f0c1 20320 length = j
8b095871
IC
20321 }
20322
9987f0c1 20323 return results[0]
8b095871
IC
20324}
20325
8b095871 20326}).call(this,require("buffer").Buffer)
9987f0c1
IC
20327},{"buffer":4}],95:[function(require,module,exports){
20328var OPS = require('bitcoin-ops')
20329
20330function encodingLength (i) {
20331 return i < OPS.OP_PUSHDATA1 ? 1
20332 : i <= 0xff ? 2
20333 : i <= 0xffff ? 3
20334 : 5
8b095871
IC
20335}
20336
9987f0c1
IC
20337function encode (buffer, number, offset) {
20338 var size = encodingLength(number)
8b095871 20339
9987f0c1
IC
20340 // ~6 bit
20341 if (size === 1) {
20342 buffer.writeUInt8(number, offset)
8b095871 20343
9987f0c1
IC
20344 // 8 bit
20345 } else if (size === 2) {
20346 buffer.writeUInt8(OPS.OP_PUSHDATA1, offset)
20347 buffer.writeUInt8(number, offset + 1)
20348
20349 // 16 bit
20350 } else if (size === 3) {
20351 buffer.writeUInt8(OPS.OP_PUSHDATA2, offset)
20352 buffer.writeUInt16LE(number, offset + 1)
8b095871 20353
9987f0c1
IC
20354 // 32 bit
20355 } else {
20356 buffer.writeUInt8(OPS.OP_PUSHDATA4, offset)
20357 buffer.writeUInt32LE(number, offset + 1)
20358 }
8b095871 20359
9987f0c1 20360 return size
8b095871
IC
20361}
20362
9987f0c1
IC
20363function decode (buffer, offset) {
20364 var opcode = buffer.readUInt8(offset)
20365 var number, size
8b095871 20366
9987f0c1
IC
20367 // ~6 bit
20368 if (opcode < OPS.OP_PUSHDATA1) {
20369 number = opcode
20370 size = 1
8b095871 20371
9987f0c1
IC
20372 // 8 bit
20373 } else if (opcode === OPS.OP_PUSHDATA1) {
20374 if (offset + 2 > buffer.length) return null
20375 number = buffer.readUInt8(offset + 1)
20376 size = 2
8b095871 20377
9987f0c1
IC
20378 // 16 bit
20379 } else if (opcode === OPS.OP_PUSHDATA2) {
20380 if (offset + 3 > buffer.length) return null
20381 number = buffer.readUInt16LE(offset + 1)
20382 size = 3
8b095871 20383
9987f0c1
IC
20384 // 32 bit
20385 } else {
20386 if (offset + 5 > buffer.length) return null
20387 if (opcode !== OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode')
8b095871 20388
9987f0c1
IC
20389 number = buffer.readUInt32LE(offset + 1)
20390 size = 5
20391 }
8b095871 20392
9987f0c1
IC
20393 return {
20394 opcode: opcode,
20395 number: number,
20396 size: size
20397 }
8b095871
IC
20398}
20399
20400module.exports = {
9987f0c1
IC
20401 encodingLength: encodingLength,
20402 encode: encode,
20403 decode: decode
8b095871
IC
20404}
20405
9987f0c1
IC
20406},{"bitcoin-ops":40}],96:[function(require,module,exports){
20407(function (process,global){
20408'use strict'
8b095871 20409
9987f0c1
IC
20410function oldBrowser () {
20411 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
8b095871
IC
20412}
20413
9987f0c1
IC
20414var Buffer = require('safe-buffer').Buffer
20415var crypto = global.crypto || global.msCrypto
8b095871 20416
9987f0c1
IC
20417if (crypto && crypto.getRandomValues) {
20418 module.exports = randomBytes
20419} else {
20420 module.exports = oldBrowser
20421}
8b095871 20422
9987f0c1
IC
20423function randomBytes (size, cb) {
20424 // phantomjs needs to throw
20425 if (size > 65536) throw new Error('requested too many random bytes')
20426 // in case browserify isn't using the Uint8Array version
20427 var rawBytes = new global.Uint8Array(size)
8b095871 20428
9987f0c1
IC
20429 // This will not work in older browsers.
20430 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
20431 if (size > 0) { // getRandomValues fails on IE if size == 0
20432 crypto.getRandomValues(rawBytes)
8b095871 20433 }
8b095871 20434
9987f0c1
IC
20435 // XXX: phantomjs doesn't like a buffer being passed here
20436 var bytes = Buffer.from(rawBytes.buffer)
8b095871 20437
9987f0c1
IC
20438 if (typeof cb === 'function') {
20439 return process.nextTick(function () {
20440 cb(null, bytes)
20441 })
20442 }
8b095871 20443
9987f0c1 20444 return bytes
8b095871
IC
20445}
20446
9987f0c1
IC
20447}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
20448},{"_process":12,"safe-buffer":98}],97:[function(require,module,exports){
20449(function (Buffer){
20450'use strict'
20451var inherits = require('inherits')
20452var HashBase = require('hash-base')
8b095871 20453
9987f0c1
IC
20454function RIPEMD160 () {
20455 HashBase.call(this, 64)
8b095871 20456
9987f0c1
IC
20457 // state
20458 this._a = 0x67452301
20459 this._b = 0xefcdab89
20460 this._c = 0x98badcfe
20461 this._d = 0x10325476
20462 this._e = 0xc3d2e1f0
8b095871
IC
20463}
20464
9987f0c1
IC
20465inherits(RIPEMD160, HashBase)
20466
20467RIPEMD160.prototype._update = function () {
20468 var m = new Array(16)
20469 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
20470
20471 var al = this._a
20472 var bl = this._b
20473 var cl = this._c
20474 var dl = this._d
20475 var el = this._e
20476
20477 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
20478 // K = 0x00000000
20479 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
20480 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
20481 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
20482 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
20483 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
20484 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
20485 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
20486 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
20487 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
20488 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
20489 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
20490 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
20491 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
20492 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
20493 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
20494 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
20495 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
20496
20497 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
20498 // K = 0x5a827999
20499 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
20500 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
20501 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
20502 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
20503 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
20504 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
20505 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
20506 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
20507 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
20508 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
20509 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
20510 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
20511 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
20512 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
20513 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
20514 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
20515 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
20516
20517 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
20518 // K = 0x6ed9eba1
20519 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
20520 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
20521 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
20522 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
20523 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
20524 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
20525 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
20526 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
20527 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
20528 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
20529 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
20530 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
20531 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
20532 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
20533 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
20534 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
20535 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
20536
20537 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
20538 // K = 0x8f1bbcdc
20539 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
20540 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
20541 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
20542 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
20543 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
20544 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
20545 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
20546 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
20547 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
20548 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
20549 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
20550 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
20551 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
20552 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
20553 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
20554 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
20555 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
20556
20557 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
20558 // K = 0xa953fd4e
20559 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
20560 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
20561 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
20562 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
20563 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
20564 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
20565 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
20566 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
20567 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
20568 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
20569 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
20570 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
20571 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
20572 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
20573 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
20574 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
20575 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
20576
20577 var ar = this._a
20578 var br = this._b
20579 var cr = this._c
20580 var dr = this._d
20581 var er = this._e
20582
20583 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
20584 // K' = 0x50a28be6
20585 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
20586 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
20587 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
20588 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
20589 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
20590 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
20591 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
20592 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
20593 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
20594 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
20595 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
20596 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
20597 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
20598 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
20599 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
20600 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
20601 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
20602
20603 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
20604 // K' = 0x5c4dd124
20605 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
20606 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
20607 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
20608 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
20609 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
20610 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
20611 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
20612 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
20613 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
20614 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
20615 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
20616 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
20617 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
20618 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
20619 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
20620 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
20621 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
20622
20623 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
20624 // K' = 0x6d703ef3
20625 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
20626 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
20627 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
20628 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
20629 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
20630 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
20631 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
20632 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
20633 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
20634 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
20635 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
20636 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
20637 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
20638 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
20639 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
20640 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
20641 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
20642
20643 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
20644 // K' = 0x7a6d76e9
20645 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
20646 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
20647 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
20648 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
20649 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
20650 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
20651 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
20652 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
20653 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
20654 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
20655 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
20656 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
20657 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
20658 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
20659 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
20660 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
20661 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
20662
20663 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
20664 // K' = 0x00000000
20665 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
20666 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
20667 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
20668 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
20669 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
20670 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
20671 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
20672 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
20673 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
20674 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
20675 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
20676 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
20677 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
20678 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
20679 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
20680 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
20681 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
20682
20683 // change state
20684 var t = (this._b + cl + dr) | 0
20685 this._b = (this._c + dl + er) | 0
20686 this._c = (this._d + el + ar) | 0
20687 this._d = (this._e + al + br) | 0
20688 this._e = (this._a + bl + cr) | 0
20689 this._a = t
20690}
20691
20692RIPEMD160.prototype._digest = function () {
20693 // create padding and handle blocks
20694 this._block[this._blockOffset++] = 0x80
20695 if (this._blockOffset > 56) {
20696 this._block.fill(0, this._blockOffset, 64)
20697 this._update()
20698 this._blockOffset = 0
20699 }
20700
20701 this._block.fill(0, this._blockOffset, 56)
20702 this._block.writeUInt32LE(this._length[0], 56)
20703 this._block.writeUInt32LE(this._length[1], 60)
20704 this._update()
20705
20706 // produce result
20707 var buffer = new Buffer(20)
20708 buffer.writeInt32LE(this._a, 0)
20709 buffer.writeInt32LE(this._b, 4)
20710 buffer.writeInt32LE(this._c, 8)
20711 buffer.writeInt32LE(this._d, 12)
20712 buffer.writeInt32LE(this._e, 16)
20713 return buffer
20714}
8b095871 20715
9987f0c1
IC
20716function rotl (x, n) {
20717 return (x << n) | (x >>> (32 - n))
20718}
8b095871 20719
9987f0c1
IC
20720function fn1 (a, b, c, d, e, m, k, s) {
20721 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
20722}
8b095871 20723
9987f0c1
IC
20724function fn2 (a, b, c, d, e, m, k, s) {
20725 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
20726}
8b095871 20727
9987f0c1
IC
20728function fn3 (a, b, c, d, e, m, k, s) {
20729 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
20730}
8b095871 20731
9987f0c1
IC
20732function fn4 (a, b, c, d, e, m, k, s) {
20733 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
20734}
8b095871 20735
9987f0c1
IC
20736function fn5 (a, b, c, d, e, m, k, s) {
20737 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
20738}
8b095871 20739
9987f0c1 20740module.exports = RIPEMD160
8b095871 20741
9987f0c1
IC
20742}).call(this,require("buffer").Buffer)
20743},{"buffer":4,"hash-base":92,"inherits":93}],98:[function(require,module,exports){
20744arguments[4][26][0].apply(exports,arguments)
20745},{"buffer":4,"dup":26}],99:[function(require,module,exports){
20746(function (Buffer){
20747// prototype class for hash functions
20748function Hash (blockSize, finalSize) {
20749 this._block = new Buffer(blockSize)
20750 this._finalSize = finalSize
20751 this._blockSize = blockSize
20752 this._len = 0
20753 this._s = 0
20754}
20755
20756Hash.prototype.update = function (data, enc) {
20757 if (typeof data === 'string') {
20758 enc = enc || 'utf8'
20759 data = new Buffer(data, enc)
8b095871
IC
20760 }
20761
9987f0c1
IC
20762 var l = this._len += data.length
20763 var s = this._s || 0
20764 var f = 0
20765 var buffer = this._block
8b095871 20766
9987f0c1
IC
20767 while (s < l) {
20768 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
20769 var ch = (t - f)
8b095871 20770
9987f0c1
IC
20771 for (var i = 0; i < ch; i++) {
20772 buffer[(s % this._blockSize) + i] = data[i + f]
8b095871
IC
20773 }
20774
9987f0c1
IC
20775 s += ch
20776 f += ch
8b095871 20777
9987f0c1
IC
20778 if ((s % this._blockSize) === 0) {
20779 this._update(buffer)
20780 }
20781 }
20782 this._s = s
8b095871 20783
9987f0c1
IC
20784 return this
20785}
8b095871 20786
9987f0c1
IC
20787Hash.prototype.digest = function (enc) {
20788 // Suppose the length of the message M, in bits, is l
20789 var l = this._len * 8
8b095871 20790
9987f0c1
IC
20791 // Append the bit 1 to the end of the message
20792 this._block[this._len % this._blockSize] = 0x80
8b095871 20793
9987f0c1
IC
20794 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
20795 this._block.fill(0, this._len % this._blockSize + 1)
8b095871 20796
9987f0c1
IC
20797 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
20798 this._update(this._block)
20799 this._block.fill(0)
20800 }
8b095871 20801
9987f0c1
IC
20802 // to this append the block which is equal to the number l written in binary
20803 // TODO: handle case where l is > Math.pow(2, 29)
20804 this._block.writeInt32BE(l, this._blockSize - 4)
8b095871 20805
9987f0c1 20806 var hash = this._update(this._block) || this._hash()
8b095871 20807
9987f0c1 20808 return enc ? hash.toString(enc) : hash
8b095871
IC
20809}
20810
9987f0c1
IC
20811Hash.prototype._update = function () {
20812 throw new Error('_update must be implemented by subclass')
8b095871
IC
20813}
20814
9987f0c1 20815module.exports = Hash
8b095871 20816
9987f0c1
IC
20817}).call(this,require("buffer").Buffer)
20818},{"buffer":4}],100:[function(require,module,exports){
20819var exports = module.exports = function SHA (algorithm) {
20820 algorithm = algorithm.toLowerCase()
8b095871 20821
9987f0c1
IC
20822 var Algorithm = exports[algorithm]
20823 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8b095871 20824
9987f0c1 20825 return new Algorithm()
8b095871
IC
20826}
20827
9987f0c1
IC
20828exports.sha = require('./sha')
20829exports.sha1 = require('./sha1')
20830exports.sha224 = require('./sha224')
20831exports.sha256 = require('./sha256')
20832exports.sha384 = require('./sha384')
20833exports.sha512 = require('./sha512')
8b095871 20834
9987f0c1 20835},{"./sha":101,"./sha1":102,"./sha224":103,"./sha256":104,"./sha384":105,"./sha512":106}],101:[function(require,module,exports){
8b095871 20836(function (Buffer){
9987f0c1
IC
20837/*
20838 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
20839 * in FIPS PUB 180-1
20840 * This source code is derived from sha1.js of the same repository.
20841 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
20842 * operation was added.
20843 */
8b095871 20844
9987f0c1
IC
20845var inherits = require('inherits')
20846var Hash = require('./hash')
8b095871 20847
9987f0c1
IC
20848var K = [
20849 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
20850]
8b095871 20851
9987f0c1 20852var W = new Array(80)
8b095871 20853
9987f0c1
IC
20854function Sha () {
20855 this.init()
20856 this._w = W
8b095871 20857
9987f0c1 20858 Hash.call(this, 64, 56)
8b095871
IC
20859}
20860
9987f0c1 20861inherits(Sha, Hash)
8b095871 20862
9987f0c1
IC
20863Sha.prototype.init = function () {
20864 this._a = 0x67452301
20865 this._b = 0xefcdab89
20866 this._c = 0x98badcfe
20867 this._d = 0x10325476
20868 this._e = 0xc3d2e1f0
8b095871 20869
9987f0c1 20870 return this
8b095871
IC
20871}
20872
9987f0c1
IC
20873function rotl5 (num) {
20874 return (num << 5) | (num >>> 27)
8b095871
IC
20875}
20876
9987f0c1
IC
20877function rotl30 (num) {
20878 return (num << 30) | (num >>> 2)
8b095871
IC
20879}
20880
9987f0c1
IC
20881function ft (s, b, c, d) {
20882 if (s === 0) return (b & c) | ((~b) & d)
20883 if (s === 2) return (b & c) | (b & d) | (c & d)
20884 return b ^ c ^ d
8b095871
IC
20885}
20886
9987f0c1
IC
20887Sha.prototype._update = function (M) {
20888 var W = this._w
8b095871 20889
9987f0c1
IC
20890 var a = this._a | 0
20891 var b = this._b | 0
20892 var c = this._c | 0
20893 var d = this._d | 0
20894 var e = this._e | 0
8b095871 20895
9987f0c1
IC
20896 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
20897 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
8b095871 20898
9987f0c1
IC
20899 for (var j = 0; j < 80; ++j) {
20900 var s = ~~(j / 20)
20901 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
8b095871 20902
9987f0c1
IC
20903 e = d
20904 d = c
20905 c = rotl30(b)
20906 b = a
20907 a = t
20908 }
8b095871 20909
9987f0c1
IC
20910 this._a = (a + this._a) | 0
20911 this._b = (b + this._b) | 0
20912 this._c = (c + this._c) | 0
20913 this._d = (d + this._d) | 0
20914 this._e = (e + this._e) | 0
8b095871
IC
20915}
20916
9987f0c1
IC
20917Sha.prototype._hash = function () {
20918 var H = new Buffer(20)
8b095871 20919
9987f0c1
IC
20920 H.writeInt32BE(this._a | 0, 0)
20921 H.writeInt32BE(this._b | 0, 4)
20922 H.writeInt32BE(this._c | 0, 8)
20923 H.writeInt32BE(this._d | 0, 12)
20924 H.writeInt32BE(this._e | 0, 16)
8b095871 20925
9987f0c1 20926 return H
8b095871
IC
20927}
20928
9987f0c1 20929module.exports = Sha
8b095871 20930
9987f0c1
IC
20931}).call(this,require("buffer").Buffer)
20932},{"./hash":99,"buffer":4,"inherits":93}],102:[function(require,module,exports){
20933(function (Buffer){
20934/*
20935 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
20936 * in FIPS PUB 180-1
20937 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
20938 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
20939 * Distributed under the BSD License
20940 * See http://pajhome.org.uk/crypt/md5 for details.
20941 */
8b095871 20942
9987f0c1
IC
20943var inherits = require('inherits')
20944var Hash = require('./hash')
8b095871 20945
9987f0c1
IC
20946var K = [
20947 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
20948]
8b095871 20949
9987f0c1 20950var W = new Array(80)
8b095871 20951
9987f0c1
IC
20952function Sha1 () {
20953 this.init()
20954 this._w = W
8b095871 20955
9987f0c1 20956 Hash.call(this, 64, 56)
8b095871
IC
20957}
20958
9987f0c1 20959inherits(Sha1, Hash)
8b095871 20960
9987f0c1
IC
20961Sha1.prototype.init = function () {
20962 this._a = 0x67452301
20963 this._b = 0xefcdab89
20964 this._c = 0x98badcfe
20965 this._d = 0x10325476
20966 this._e = 0xc3d2e1f0
8b095871 20967
9987f0c1 20968 return this
8b095871
IC
20969}
20970
9987f0c1
IC
20971function rotl1 (num) {
20972 return (num << 1) | (num >>> 31)
20973}
8b095871 20974
9987f0c1
IC
20975function rotl5 (num) {
20976 return (num << 5) | (num >>> 27)
8b095871
IC
20977}
20978
9987f0c1
IC
20979function rotl30 (num) {
20980 return (num << 30) | (num >>> 2)
8b095871
IC
20981}
20982
9987f0c1
IC
20983function ft (s, b, c, d) {
20984 if (s === 0) return (b & c) | ((~b) & d)
20985 if (s === 2) return (b & c) | (b & d) | (c & d)
20986 return b ^ c ^ d
8b095871
IC
20987}
20988
9987f0c1
IC
20989Sha1.prototype._update = function (M) {
20990 var W = this._w
8b095871 20991
9987f0c1
IC
20992 var a = this._a | 0
20993 var b = this._b | 0
20994 var c = this._c | 0
20995 var d = this._d | 0
20996 var e = this._e | 0
8b095871 20997
9987f0c1
IC
20998 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
20999 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
8b095871 21000
9987f0c1
IC
21001 for (var j = 0; j < 80; ++j) {
21002 var s = ~~(j / 20)
21003 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
8b095871 21004
9987f0c1
IC
21005 e = d
21006 d = c
21007 c = rotl30(b)
21008 b = a
21009 a = t
21010 }
8b095871 21011
9987f0c1
IC
21012 this._a = (a + this._a) | 0
21013 this._b = (b + this._b) | 0
21014 this._c = (c + this._c) | 0
21015 this._d = (d + this._d) | 0
21016 this._e = (e + this._e) | 0
8b095871
IC
21017}
21018
9987f0c1
IC
21019Sha1.prototype._hash = function () {
21020 var H = new Buffer(20)
21021
21022 H.writeInt32BE(this._a | 0, 0)
21023 H.writeInt32BE(this._b | 0, 4)
21024 H.writeInt32BE(this._c | 0, 8)
21025 H.writeInt32BE(this._d | 0, 12)
21026 H.writeInt32BE(this._e | 0, 16)
8b095871 21027
9987f0c1 21028 return H
8b095871
IC
21029}
21030
9987f0c1 21031module.exports = Sha1
8b095871 21032
9987f0c1
IC
21033}).call(this,require("buffer").Buffer)
21034},{"./hash":99,"buffer":4,"inherits":93}],103:[function(require,module,exports){
21035(function (Buffer){
21036/**
21037 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
21038 * in FIPS 180-2
21039 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
21040 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
21041 *
21042 */
8b095871 21043
9987f0c1
IC
21044var inherits = require('inherits')
21045var Sha256 = require('./sha256')
21046var Hash = require('./hash')
8b095871 21047
9987f0c1 21048var W = new Array(64)
8b095871 21049
9987f0c1
IC
21050function Sha224 () {
21051 this.init()
8b095871 21052
9987f0c1 21053 this._w = W // new Array(64)
8b095871 21054
9987f0c1 21055 Hash.call(this, 64, 56)
8b095871
IC
21056}
21057
9987f0c1 21058inherits(Sha224, Sha256)
8b095871 21059
9987f0c1
IC
21060Sha224.prototype.init = function () {
21061 this._a = 0xc1059ed8
21062 this._b = 0x367cd507
21063 this._c = 0x3070dd17
21064 this._d = 0xf70e5939
21065 this._e = 0xffc00b31
21066 this._f = 0x68581511
21067 this._g = 0x64f98fa7
21068 this._h = 0xbefa4fa4
21069
21070 return this
8b095871
IC
21071}
21072
9987f0c1
IC
21073Sha224.prototype._hash = function () {
21074 var H = new Buffer(28)
8b095871 21075
9987f0c1
IC
21076 H.writeInt32BE(this._a, 0)
21077 H.writeInt32BE(this._b, 4)
21078 H.writeInt32BE(this._c, 8)
21079 H.writeInt32BE(this._d, 12)
21080 H.writeInt32BE(this._e, 16)
21081 H.writeInt32BE(this._f, 20)
21082 H.writeInt32BE(this._g, 24)
8b095871 21083
9987f0c1 21084 return H
8b095871
IC
21085}
21086
9987f0c1 21087module.exports = Sha224
8b095871 21088
9987f0c1
IC
21089}).call(this,require("buffer").Buffer)
21090},{"./hash":99,"./sha256":104,"buffer":4,"inherits":93}],104:[function(require,module,exports){
21091(function (Buffer){
21092/**
21093 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
21094 * in FIPS 180-2
21095 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
21096 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
21097 *
21098 */
8b095871 21099
9987f0c1
IC
21100var inherits = require('inherits')
21101var Hash = require('./hash')
8b095871 21102
9987f0c1
IC
21103var K = [
21104 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
21105 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
21106 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
21107 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
21108 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
21109 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
21110 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
21111 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
21112 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
21113 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
21114 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
21115 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
21116 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
21117 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
21118 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
21119 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
21120]
8b095871 21121
9987f0c1 21122var W = new Array(64)
8b095871 21123
9987f0c1
IC
21124function Sha256 () {
21125 this.init()
8b095871 21126
9987f0c1 21127 this._w = W // new Array(64)
8b095871 21128
9987f0c1
IC
21129 Hash.call(this, 64, 56)
21130}
8b095871 21131
9987f0c1 21132inherits(Sha256, Hash)
8b095871 21133
9987f0c1
IC
21134Sha256.prototype.init = function () {
21135 this._a = 0x6a09e667
21136 this._b = 0xbb67ae85
21137 this._c = 0x3c6ef372
21138 this._d = 0xa54ff53a
21139 this._e = 0x510e527f
21140 this._f = 0x9b05688c
21141 this._g = 0x1f83d9ab
21142 this._h = 0x5be0cd19
8b095871 21143
9987f0c1
IC
21144 return this
21145}
8b095871 21146
9987f0c1
IC
21147function ch (x, y, z) {
21148 return z ^ (x & (y ^ z))
8b095871
IC
21149}
21150
9987f0c1
IC
21151function maj (x, y, z) {
21152 return (x & y) | (z & (x | y))
8b095871
IC
21153}
21154
9987f0c1
IC
21155function sigma0 (x) {
21156 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
8b095871
IC
21157}
21158
9987f0c1
IC
21159function sigma1 (x) {
21160 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
21161}
8b095871 21162
9987f0c1
IC
21163function gamma0 (x) {
21164 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
21165}
8b095871 21166
9987f0c1
IC
21167function gamma1 (x) {
21168 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
21169}
8b095871 21170
9987f0c1
IC
21171Sha256.prototype._update = function (M) {
21172 var W = this._w
8b095871 21173
9987f0c1
IC
21174 var a = this._a | 0
21175 var b = this._b | 0
21176 var c = this._c | 0
21177 var d = this._d | 0
21178 var e = this._e | 0
21179 var f = this._f | 0
21180 var g = this._g | 0
21181 var h = this._h | 0
8b095871 21182
9987f0c1
IC
21183 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
21184 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
8b095871 21185
9987f0c1
IC
21186 for (var j = 0; j < 64; ++j) {
21187 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
21188 var T2 = (sigma0(a) + maj(a, b, c)) | 0
8b095871 21189
9987f0c1
IC
21190 h = g
21191 g = f
21192 f = e
21193 e = (d + T1) | 0
21194 d = c
21195 c = b
21196 b = a
21197 a = (T1 + T2) | 0
8b095871
IC
21198 }
21199
9987f0c1
IC
21200 this._a = (a + this._a) | 0
21201 this._b = (b + this._b) | 0
21202 this._c = (c + this._c) | 0
21203 this._d = (d + this._d) | 0
21204 this._e = (e + this._e) | 0
21205 this._f = (f + this._f) | 0
21206 this._g = (g + this._g) | 0
21207 this._h = (h + this._h) | 0
8b095871
IC
21208}
21209
9987f0c1
IC
21210Sha256.prototype._hash = function () {
21211 var H = new Buffer(32)
8b095871 21212
9987f0c1
IC
21213 H.writeInt32BE(this._a, 0)
21214 H.writeInt32BE(this._b, 4)
21215 H.writeInt32BE(this._c, 8)
21216 H.writeInt32BE(this._d, 12)
21217 H.writeInt32BE(this._e, 16)
21218 H.writeInt32BE(this._f, 20)
21219 H.writeInt32BE(this._g, 24)
21220 H.writeInt32BE(this._h, 28)
8b095871 21221
9987f0c1 21222 return H
8b095871
IC
21223}
21224
9987f0c1 21225module.exports = Sha256
8b095871 21226
9987f0c1
IC
21227}).call(this,require("buffer").Buffer)
21228},{"./hash":99,"buffer":4,"inherits":93}],105:[function(require,module,exports){
21229(function (Buffer){
21230var inherits = require('inherits')
21231var SHA512 = require('./sha512')
21232var Hash = require('./hash')
8b095871 21233
9987f0c1 21234var W = new Array(160)
8b095871 21235
9987f0c1
IC
21236function Sha384 () {
21237 this.init()
21238 this._w = W
8b095871 21239
9987f0c1
IC
21240 Hash.call(this, 128, 112)
21241}
8b095871 21242
9987f0c1 21243inherits(Sha384, SHA512)
8b095871 21244
9987f0c1
IC
21245Sha384.prototype.init = function () {
21246 this._ah = 0xcbbb9d5d
21247 this._bh = 0x629a292a
21248 this._ch = 0x9159015a
21249 this._dh = 0x152fecd8
21250 this._eh = 0x67332667
21251 this._fh = 0x8eb44a87
21252 this._gh = 0xdb0c2e0d
21253 this._hh = 0x47b5481d
8b095871 21254
9987f0c1
IC
21255 this._al = 0xc1059ed8
21256 this._bl = 0x367cd507
21257 this._cl = 0x3070dd17
21258 this._dl = 0xf70e5939
21259 this._el = 0xffc00b31
21260 this._fl = 0x68581511
21261 this._gl = 0x64f98fa7
21262 this._hl = 0xbefa4fa4
8b095871 21263
9987f0c1 21264 return this
8b095871
IC
21265}
21266
9987f0c1
IC
21267Sha384.prototype._hash = function () {
21268 var H = new Buffer(48)
8b095871 21269
9987f0c1
IC
21270 function writeInt64BE (h, l, offset) {
21271 H.writeInt32BE(h, offset)
21272 H.writeInt32BE(l, offset + 4)
21273 }
8b095871 21274
9987f0c1
IC
21275 writeInt64BE(this._ah, this._al, 0)
21276 writeInt64BE(this._bh, this._bl, 8)
21277 writeInt64BE(this._ch, this._cl, 16)
21278 writeInt64BE(this._dh, this._dl, 24)
21279 writeInt64BE(this._eh, this._el, 32)
21280 writeInt64BE(this._fh, this._fl, 40)
8b095871 21281
9987f0c1
IC
21282 return H
21283}
8b095871 21284
9987f0c1 21285module.exports = Sha384
8b095871 21286
9987f0c1
IC
21287}).call(this,require("buffer").Buffer)
21288},{"./hash":99,"./sha512":106,"buffer":4,"inherits":93}],106:[function(require,module,exports){
21289(function (Buffer){
21290var inherits = require('inherits')
21291var Hash = require('./hash')
8b095871 21292
9987f0c1
IC
21293var K = [
21294 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
21295 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
21296 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
21297 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
21298 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
21299 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
21300 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
21301 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
21302 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
21303 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
21304 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
21305 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
21306 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
21307 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
21308 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
21309 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
21310 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
21311 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
21312 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
21313 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
21314 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
21315 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
21316 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
21317 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
21318 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
21319 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
21320 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
21321 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
21322 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
21323 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
21324 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
21325 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
21326 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
21327 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
21328 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
21329 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
21330 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
21331 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
21332 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
21333 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
21334]
8b095871 21335
9987f0c1 21336var W = new Array(160)
8b095871 21337
9987f0c1
IC
21338function Sha512 () {
21339 this.init()
21340 this._w = W
8b095871 21341
9987f0c1
IC
21342 Hash.call(this, 128, 112)
21343}
8b095871 21344
9987f0c1 21345inherits(Sha512, Hash)
8b095871 21346
9987f0c1
IC
21347Sha512.prototype.init = function () {
21348 this._ah = 0x6a09e667
21349 this._bh = 0xbb67ae85
21350 this._ch = 0x3c6ef372
21351 this._dh = 0xa54ff53a
21352 this._eh = 0x510e527f
21353 this._fh = 0x9b05688c
21354 this._gh = 0x1f83d9ab
21355 this._hh = 0x5be0cd19
8b095871 21356
9987f0c1
IC
21357 this._al = 0xf3bcc908
21358 this._bl = 0x84caa73b
21359 this._cl = 0xfe94f82b
21360 this._dl = 0x5f1d36f1
21361 this._el = 0xade682d1
21362 this._fl = 0x2b3e6c1f
21363 this._gl = 0xfb41bd6b
21364 this._hl = 0x137e2179
8b095871 21365
9987f0c1 21366 return this
8b095871
IC
21367}
21368
9987f0c1
IC
21369function Ch (x, y, z) {
21370 return z ^ (x & (y ^ z))
8b095871
IC
21371}
21372
9987f0c1
IC
21373function maj (x, y, z) {
21374 return (x & y) | (z & (x | y))
8b095871
IC
21375}
21376
9987f0c1
IC
21377function sigma0 (x, xl) {
21378 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
21379}
8b095871 21380
9987f0c1
IC
21381function sigma1 (x, xl) {
21382 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
21383}
8b095871 21384
9987f0c1
IC
21385function Gamma0 (x, xl) {
21386 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
8b095871
IC
21387}
21388
9987f0c1
IC
21389function Gamma0l (x, xl) {
21390 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
21391}
8b095871 21392
9987f0c1
IC
21393function Gamma1 (x, xl) {
21394 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
21395}
8b095871 21396
9987f0c1
IC
21397function Gamma1l (x, xl) {
21398 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
21399}
8b095871 21400
9987f0c1
IC
21401function getCarry (a, b) {
21402 return (a >>> 0) < (b >>> 0) ? 1 : 0
8b095871
IC
21403}
21404
9987f0c1
IC
21405Sha512.prototype._update = function (M) {
21406 var W = this._w
8b095871 21407
9987f0c1
IC
21408 var ah = this._ah | 0
21409 var bh = this._bh | 0
21410 var ch = this._ch | 0
21411 var dh = this._dh | 0
21412 var eh = this._eh | 0
21413 var fh = this._fh | 0
21414 var gh = this._gh | 0
21415 var hh = this._hh | 0
8b095871 21416
9987f0c1
IC
21417 var al = this._al | 0
21418 var bl = this._bl | 0
21419 var cl = this._cl | 0
21420 var dl = this._dl | 0
21421 var el = this._el | 0
21422 var fl = this._fl | 0
21423 var gl = this._gl | 0
21424 var hl = this._hl | 0
8b095871 21425
9987f0c1
IC
21426 for (var i = 0; i < 32; i += 2) {
21427 W[i] = M.readInt32BE(i * 4)
21428 W[i + 1] = M.readInt32BE(i * 4 + 4)
21429 }
21430 for (; i < 160; i += 2) {
21431 var xh = W[i - 15 * 2]
21432 var xl = W[i - 15 * 2 + 1]
21433 var gamma0 = Gamma0(xh, xl)
21434 var gamma0l = Gamma0l(xl, xh)
8b095871 21435
9987f0c1
IC
21436 xh = W[i - 2 * 2]
21437 xl = W[i - 2 * 2 + 1]
21438 var gamma1 = Gamma1(xh, xl)
21439 var gamma1l = Gamma1l(xl, xh)
8b095871 21440
9987f0c1
IC
21441 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
21442 var Wi7h = W[i - 7 * 2]
21443 var Wi7l = W[i - 7 * 2 + 1]
8b095871 21444
9987f0c1
IC
21445 var Wi16h = W[i - 16 * 2]
21446 var Wi16l = W[i - 16 * 2 + 1]
8b095871 21447
9987f0c1
IC
21448 var Wil = (gamma0l + Wi7l) | 0
21449 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
21450 Wil = (Wil + gamma1l) | 0
21451 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
21452 Wil = (Wil + Wi16l) | 0
21453 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
8b095871 21454
9987f0c1
IC
21455 W[i] = Wih
21456 W[i + 1] = Wil
8b095871
IC
21457 }
21458
9987f0c1
IC
21459 for (var j = 0; j < 160; j += 2) {
21460 Wih = W[j]
21461 Wil = W[j + 1]
8b095871 21462
9987f0c1
IC
21463 var majh = maj(ah, bh, ch)
21464 var majl = maj(al, bl, cl)
8b095871 21465
9987f0c1
IC
21466 var sigma0h = sigma0(ah, al)
21467 var sigma0l = sigma0(al, ah)
21468 var sigma1h = sigma1(eh, el)
21469 var sigma1l = sigma1(el, eh)
8b095871 21470
9987f0c1
IC
21471 // t1 = h + sigma1 + ch + K[j] + W[j]
21472 var Kih = K[j]
21473 var Kil = K[j + 1]
8b095871 21474
9987f0c1
IC
21475 var chh = Ch(eh, fh, gh)
21476 var chl = Ch(el, fl, gl)
8b095871 21477
9987f0c1
IC
21478 var t1l = (hl + sigma1l) | 0
21479 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
21480 t1l = (t1l + chl) | 0
21481 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
21482 t1l = (t1l + Kil) | 0
21483 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
21484 t1l = (t1l + Wil) | 0
21485 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
8b095871 21486
9987f0c1
IC
21487 // t2 = sigma0 + maj
21488 var t2l = (sigma0l + majl) | 0
21489 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
21490
21491 hh = gh
21492 hl = gl
21493 gh = fh
21494 gl = fl
21495 fh = eh
21496 fl = el
21497 el = (dl + t1l) | 0
21498 eh = (dh + t1h + getCarry(el, dl)) | 0
21499 dh = ch
21500 dl = cl
21501 ch = bh
21502 cl = bl
21503 bh = ah
21504 bl = al
21505 al = (t1l + t2l) | 0
21506 ah = (t1h + t2h + getCarry(al, t1l)) | 0
21507 }
8b095871 21508
9987f0c1
IC
21509 this._al = (this._al + al) | 0
21510 this._bl = (this._bl + bl) | 0
21511 this._cl = (this._cl + cl) | 0
21512 this._dl = (this._dl + dl) | 0
21513 this._el = (this._el + el) | 0
21514 this._fl = (this._fl + fl) | 0
21515 this._gl = (this._gl + gl) | 0
21516 this._hl = (this._hl + hl) | 0
8b095871 21517
9987f0c1
IC
21518 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
21519 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
21520 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
21521 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
21522 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
21523 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
21524 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
21525 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
21526}
8b095871 21527
9987f0c1
IC
21528Sha512.prototype._hash = function () {
21529 var H = new Buffer(64)
8b095871 21530
9987f0c1
IC
21531 function writeInt64BE (h, l, offset) {
21532 H.writeInt32BE(h, offset)
21533 H.writeInt32BE(l, offset + 4)
8b095871
IC
21534 }
21535
9987f0c1
IC
21536 writeInt64BE(this._ah, this._al, 0)
21537 writeInt64BE(this._bh, this._bl, 8)
21538 writeInt64BE(this._ch, this._cl, 16)
21539 writeInt64BE(this._dh, this._dl, 24)
21540 writeInt64BE(this._eh, this._el, 32)
21541 writeInt64BE(this._fh, this._fl, 40)
21542 writeInt64BE(this._gh, this._gl, 48)
21543 writeInt64BE(this._hh, this._hl, 56)
21544
21545 return H
8b095871
IC
21546}
21547
9987f0c1 21548module.exports = Sha512
8b095871 21549
9987f0c1
IC
21550}).call(this,require("buffer").Buffer)
21551},{"./hash":99,"buffer":4,"inherits":93}],107:[function(require,module,exports){
21552var inherits = require('inherits')
21553var native = require('./native')
8b095871 21554
9987f0c1
IC
21555function TfTypeError (type, value, valueTypeName) {
21556 this.__error = Error.call(this)
21557 this.__type = type
21558 this.__value = value
21559 this.__valueTypeName = valueTypeName
8b095871 21560
9987f0c1
IC
21561 var message
21562 Object.defineProperty(this, 'message', {
21563 enumerable: true,
21564 get: function () {
21565 if (message) return message
8b095871 21566
9987f0c1
IC
21567 valueTypeName = valueTypeName || getValueTypeName(value)
21568 message = tfErrorString(type, value, valueTypeName)
8b095871 21569
9987f0c1
IC
21570 return message
21571 }
8b095871 21572 })
9987f0c1 21573}
8b095871 21574
9987f0c1
IC
21575function TfPropertyTypeError (type, property, label, value, error, valueTypeName) {
21576 this.__error = error || Error.call(this)
21577 this.__label = label
21578 this.__property = property
21579 this.__type = type
21580 this.__value = value
21581 this.__valueTypeName = valueTypeName
8b095871 21582
9987f0c1
IC
21583 var message
21584 Object.defineProperty(this, 'message', {
21585 enumerable: true,
21586 get: function () {
21587 if (message) return message
21588 if (type) {
21589 valueTypeName = valueTypeName || getValueTypeName(value)
21590 message = tfPropertyErrorString(type, label, property, value, valueTypeName)
21591 } else {
21592 message = 'Unexpected property "' + property + '"'
21593 }
8b095871 21594
9987f0c1
IC
21595 return message
21596 }
8b095871 21597 })
8b095871
IC
21598}
21599
9987f0c1
IC
21600// inherit from Error, assign stack
21601[TfTypeError, TfPropertyTypeError].forEach(function (tfErrorType) {
21602 inherits(tfErrorType, Error)
21603 Object.defineProperty(tfErrorType, 'stack', {
21604 get: function () { return this.__error.stack }
21605 })
21606})
8b095871 21607
9987f0c1
IC
21608function tfCustomError (expected, actual) {
21609 return new TfTypeError(expected, {}, actual)
21610}
8b095871 21611
9987f0c1
IC
21612function tfSubError (e, property, label) {
21613 // sub child?
21614 if (e instanceof TfPropertyTypeError) {
21615 property = property + '.' + e.__property
21616 label = e.__label
8b095871 21617
9987f0c1
IC
21618 return new TfPropertyTypeError(
21619 e.__type, property, label, e.__value, e.__error, e.__valueTypeName
21620 )
8b095871
IC
21621 }
21622
9987f0c1
IC
21623 // child?
21624 if (e instanceof TfTypeError) {
21625 return new TfPropertyTypeError(
21626 e.__type, property, label, e.__value, e.__error, e.__valueTypeName
21627 )
21628 }
8b095871 21629
9987f0c1
IC
21630 return e
21631}
8b095871 21632
9987f0c1
IC
21633function getTypeName (fn) {
21634 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1]
21635}
8b095871 21636
9987f0c1
IC
21637function getValueTypeName (value) {
21638 return native.Nil(value) ? '' : getTypeName(value.constructor)
21639}
8b095871 21640
9987f0c1
IC
21641function getValue (value) {
21642 if (native.Function(value)) return ''
21643 if (native.String(value)) return JSON.stringify(value)
21644 if (value && native.Object(value)) return ''
21645 return value
21646}
8b095871 21647
9987f0c1
IC
21648function tfJSON (type) {
21649 if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type)
21650 if (native.Array(type)) return 'Array'
21651 if (type && native.Object(type)) return 'Object'
8b095871 21652
9987f0c1
IC
21653 return type !== undefined ? type : ''
21654}
8b095871 21655
9987f0c1
IC
21656function tfErrorString (type, value, valueTypeName) {
21657 var valueJson = getValue(value)
8b095871 21658
9987f0c1
IC
21659 return 'Expected ' + tfJSON(type) + ', got' +
21660 (valueTypeName !== '' ? ' ' + valueTypeName : '') +
21661 (valueJson !== '' ? ' ' + valueJson : '')
8b095871
IC
21662}
21663
9987f0c1
IC
21664function tfPropertyErrorString (type, label, name, value, valueTypeName) {
21665 var description = '" of type '
21666 if (label === 'key') description = '" with key type '
8b095871 21667
9987f0c1 21668 return tfErrorString('property "' + tfJSON(name) + description + tfJSON(type), value, valueTypeName)
8b095871
IC
21669}
21670
9987f0c1
IC
21671module.exports = {
21672 TfTypeError: TfTypeError,
21673 TfPropertyTypeError: TfPropertyTypeError,
21674 tfCustomError: tfCustomError,
21675 tfSubError: tfSubError,
21676 tfJSON: tfJSON,
21677 getValueTypeName: getValueTypeName
8b095871
IC
21678}
21679
9987f0c1
IC
21680},{"./native":110,"inherits":93}],108:[function(require,module,exports){
21681(function (Buffer){
21682var NATIVE = require('./native')
21683var ERRORS = require('./errors')
21684
21685function _Buffer (value) {
21686 return Buffer.isBuffer(value)
8b095871
IC
21687}
21688
9987f0c1
IC
21689function Hex (value) {
21690 return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value)
21691}
8b095871 21692
9987f0c1
IC
21693function _LengthN (type, length) {
21694 var name = type.toJSON()
8b095871 21695
9987f0c1
IC
21696 function Length (value) {
21697 if (!type(value)) return false
21698 if (value.length === length) return true
8b095871 21699
9987f0c1
IC
21700 throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')')
21701 }
21702 Length.toJSON = function () { return name }
8b095871 21703
9987f0c1
IC
21704 return Length
21705}
8b095871 21706
9987f0c1
IC
21707var _ArrayN = _LengthN.bind(null, NATIVE.Array)
21708var _BufferN = _LengthN.bind(null, _Buffer)
21709var _HexN = _LengthN.bind(null, Hex)
8b095871 21710
9987f0c1 21711var UINT53_MAX = Math.pow(2, 53) - 1
8b095871 21712
9987f0c1
IC
21713function Finite (value) {
21714 return typeof value === 'number' && isFinite(value)
21715}
21716function Int8 (value) { return ((value << 24) >> 24) === value }
21717function Int16 (value) { return ((value << 16) >> 16) === value }
21718function Int32 (value) { return (value | 0) === value }
21719function UInt8 (value) { return (value & 0xff) === value }
21720function UInt16 (value) { return (value & 0xffff) === value }
21721function UInt32 (value) { return (value >>> 0) === value }
21722function UInt53 (value) {
21723 return typeof value === 'number' &&
21724 value >= 0 &&
21725 value <= UINT53_MAX &&
21726 Math.floor(value) === value
21727}
8b095871 21728
9987f0c1
IC
21729var types = {
21730 ArrayN: _ArrayN,
21731 Buffer: _Buffer,
21732 BufferN: _BufferN,
21733 Finite: Finite,
21734 Hex: Hex,
21735 HexN: _HexN,
21736 Int8: Int8,
21737 Int16: Int16,
21738 Int32: Int32,
21739 UInt8: UInt8,
21740 UInt16: UInt16,
21741 UInt32: UInt32,
21742 UInt53: UInt53
21743}
8b095871 21744
9987f0c1
IC
21745for (var typeName in types) {
21746 types[typeName].toJSON = function (t) {
21747 return t
21748 }.bind(null, typeName)
21749}
8b095871 21750
9987f0c1 21751module.exports = types
8b095871 21752
9987f0c1
IC
21753}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
21754},{"../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":9,"./errors":107,"./native":110}],109:[function(require,module,exports){
21755var ERRORS = require('./errors')
21756var NATIVE = require('./native')
8b095871 21757
9987f0c1
IC
21758// short-hand
21759var tfJSON = ERRORS.tfJSON
21760var TfTypeError = ERRORS.TfTypeError
21761var TfPropertyTypeError = ERRORS.TfPropertyTypeError
21762var tfSubError = ERRORS.tfSubError
21763var getValueTypeName = ERRORS.getValueTypeName
8b095871 21764
9987f0c1
IC
21765var TYPES = {
21766 arrayOf: function arrayOf (type) {
21767 type = compile(type)
8b095871 21768
9987f0c1
IC
21769 function _arrayOf (array, strict) {
21770 if (!NATIVE.Array(array)) return false
8b095871 21771
9987f0c1
IC
21772 return array.every(function (value, i) {
21773 try {
21774 return typeforce(type, value, strict)
21775 } catch (e) {
21776 throw tfSubError(e, i)
21777 }
21778 })
8b095871 21779 }
9987f0c1 21780 _arrayOf.toJSON = function () { return '[' + tfJSON(type) + ']' }
8b095871 21781
9987f0c1
IC
21782 return _arrayOf
21783 },
8b095871 21784
9987f0c1
IC
21785 maybe: function maybe (type) {
21786 type = compile(type)
8b095871 21787
9987f0c1
IC
21788 function _maybe (value, strict) {
21789 return NATIVE.Nil(value) || type(value, strict, maybe)
21790 }
21791 _maybe.toJSON = function () { return '?' + tfJSON(type) }
8b095871 21792
9987f0c1
IC
21793 return _maybe
21794 },
8b095871 21795
9987f0c1
IC
21796 map: function map (propertyType, propertyKeyType) {
21797 propertyType = compile(propertyType)
21798 if (propertyKeyType) propertyKeyType = compile(propertyKeyType)
8b095871 21799
9987f0c1
IC
21800 function _map (value, strict) {
21801 if (!NATIVE.Object(value, strict)) return false
21802 if (NATIVE.Nil(value, strict)) return false
8b095871 21803
9987f0c1
IC
21804 for (var propertyName in value) {
21805 try {
21806 if (propertyKeyType) {
21807 typeforce(propertyKeyType, propertyName, strict)
21808 }
21809 } catch (e) {
21810 throw tfSubError(e, propertyName, 'key')
8b095871
IC
21811 }
21812
9987f0c1
IC
21813 try {
21814 var propertyValue = value[propertyName]
21815 typeforce(propertyType, propertyValue, strict)
21816 } catch (e) {
21817 throw tfSubError(e, propertyName)
8b095871
IC
21818 }
21819 }
21820
9987f0c1
IC
21821 return true
21822 }
8b095871 21823
9987f0c1
IC
21824 if (propertyKeyType) {
21825 _map.toJSON = function () {
21826 return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}'
8b095871 21827 }
9987f0c1
IC
21828 } else {
21829 _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' }
8b095871
IC
21830 }
21831
9987f0c1
IC
21832 return _map
21833 },
8b095871 21834
9987f0c1
IC
21835 object: function object (uncompiled) {
21836 var type = {}
8b095871 21837
9987f0c1
IC
21838 for (var typePropertyName in uncompiled) {
21839 type[typePropertyName] = compile(uncompiled[typePropertyName])
21840 }
8b095871 21841
9987f0c1
IC
21842 function _object (value, strict) {
21843 if (!NATIVE.Object(value)) return false
21844 if (NATIVE.Nil(value)) return false
8b095871 21845
9987f0c1 21846 var propertyName
8b095871 21847
9987f0c1
IC
21848 try {
21849 for (propertyName in type) {
21850 var propertyType = type[propertyName]
21851 var propertyValue = value[propertyName]
8b095871 21852
9987f0c1
IC
21853 typeforce(propertyType, propertyValue, strict)
21854 }
21855 } catch (e) {
21856 throw tfSubError(e, propertyName)
21857 }
8b095871 21858
9987f0c1
IC
21859 if (strict) {
21860 for (propertyName in value) {
21861 if (type[propertyName]) continue
8b095871 21862
9987f0c1
IC
21863 throw new TfPropertyTypeError(undefined, propertyName)
21864 }
21865 }
8b095871 21866
9987f0c1
IC
21867 return true
21868 }
21869 _object.toJSON = function () { return tfJSON(type) }
8b095871 21870
9987f0c1
IC
21871 return _object
21872 },
8b095871 21873
9987f0c1
IC
21874 oneOf: function oneOf () {
21875 var types = [].slice.call(arguments).map(compile)
8b095871 21876
9987f0c1
IC
21877 function _oneOf (value, strict) {
21878 return types.some(function (type) {
21879 try {
21880 return typeforce(type, value, strict)
21881 } catch (e) {
21882 return false
21883 }
21884 })
21885 }
21886 _oneOf.toJSON = function () { return types.map(tfJSON).join('|') }
8b095871 21887
9987f0c1
IC
21888 return _oneOf
21889 },
8b095871 21890
9987f0c1
IC
21891 quacksLike: function quacksLike (type) {
21892 function _quacksLike (value) {
21893 return type === getValueTypeName(value)
21894 }
21895 _quacksLike.toJSON = function () { return type }
8b095871 21896
9987f0c1
IC
21897 return _quacksLike
21898 },
8b095871 21899
9987f0c1
IC
21900 tuple: function tuple () {
21901 var types = [].slice.call(arguments).map(compile)
8b095871 21902
9987f0c1
IC
21903 function _tuple (values, strict) {
21904 return types.every(function (type, i) {
21905 try {
21906 return typeforce(type, values[i], strict)
21907 } catch (e) {
21908 throw tfSubError(e, i)
21909 }
21910 }) && (!strict || values.length === arguments.length)
21911 }
21912 _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' }
8b095871 21913
9987f0c1
IC
21914 return _tuple
21915 },
8b095871 21916
9987f0c1
IC
21917 value: function value (expected) {
21918 function _value (actual) {
21919 return actual === expected
21920 }
21921 _value.toJSON = function () { return expected }
8b095871 21922
9987f0c1 21923 return _value
8b095871
IC
21924 }
21925}
21926
9987f0c1
IC
21927function compile (type) {
21928 if (NATIVE.String(type)) {
21929 if (type[0] === '?') return TYPES.maybe(compile(type.slice(1)))
8b095871 21930
9987f0c1
IC
21931 return NATIVE[type] || TYPES.quacksLike(type)
21932 } else if (type && NATIVE.Object(type)) {
21933 if (NATIVE.Array(type)) return TYPES.arrayOf(compile(type[0]))
8b095871 21934
9987f0c1
IC
21935 return TYPES.object(type)
21936 } else if (NATIVE.Function(type)) {
21937 return type
21938 }
8b095871 21939
9987f0c1
IC
21940 return TYPES.value(type)
21941}
8b095871 21942
9987f0c1
IC
21943function typeforce (type, value, strict, surrogate) {
21944 if (NATIVE.Function(type)) {
21945 if (type(value, strict)) return true
8b095871 21946
9987f0c1 21947 throw new TfTypeError(surrogate || type, value)
ab78acc6 21948 }
8b095871 21949
9987f0c1
IC
21950 // JIT
21951 return typeforce(compile(type), value, strict)
21952}
8b095871 21953
9987f0c1
IC
21954// assign types to typeforce function
21955for (var typeName in NATIVE) {
21956 typeforce[typeName] = NATIVE[typeName]
8b095871
IC
21957}
21958
9987f0c1
IC
21959for (typeName in TYPES) {
21960 typeforce[typeName] = TYPES[typeName]
8b095871
IC
21961}
21962
9987f0c1
IC
21963var EXTRA = require('./extra')
21964for (typeName in EXTRA) {
21965 typeforce[typeName] = EXTRA[typeName]
8b095871
IC
21966}
21967
9987f0c1
IC
21968// async wrapper
21969function __async (type, value, strict, callback) {
21970 // default to falsy strict if using shorthand overload
21971 if (typeof strict === 'function') return __async(type, value, false, strict)
8b095871 21972
9987f0c1
IC
21973 try {
21974 typeforce(type, value, strict)
21975 } catch (e) {
21976 return callback(e)
21977 }
8b095871 21978
9987f0c1
IC
21979 callback()
21980}
8b095871 21981
9987f0c1
IC
21982typeforce.async = __async
21983typeforce.compile = compile
21984typeforce.TfTypeError = TfTypeError
21985typeforce.TfPropertyTypeError = TfPropertyTypeError
8b095871 21986
9987f0c1 21987module.exports = typeforce
8b095871 21988
9987f0c1
IC
21989},{"./errors":107,"./extra":108,"./native":110}],110:[function(require,module,exports){
21990var types = {
21991 Array: function (value) { return value !== null && value !== undefined && value.constructor === Array },
21992 Boolean: function (value) { return typeof value === 'boolean' },
21993 Function: function (value) { return typeof value === 'function' },
21994 Nil: function (value) { return value === undefined || value === null },
21995 Number: function (value) { return typeof value === 'number' },
21996 Object: function (value) { return typeof value === 'object' },
21997 String: function (value) { return typeof value === 'string' },
21998 '': function () { return true }
21999}
8b095871 22000
9987f0c1
IC
22001// TODO: deprecate
22002types.Null = types.Nil
8b095871 22003
9987f0c1
IC
22004for (var typeName in types) {
22005 types[typeName].toJSON = function (t) {
22006 return t
22007 }.bind(null, typeName)
22008}
8b095871 22009
9987f0c1 22010module.exports = types
8b095871 22011
9987f0c1
IC
22012},{}],111:[function(require,module,exports){
22013(function (Buffer){
22014'use strict'
8b095871 22015
9987f0c1
IC
22016// Number.MAX_SAFE_INTEGER
22017var MAX_SAFE_INTEGER = 9007199254740991
8b095871 22018
9987f0c1
IC
22019function checkUInt53 (n) {
22020 if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range')
8b095871
IC
22021}
22022
9987f0c1
IC
22023function encode (number, buffer, offset) {
22024 checkUInt53(number)
8b095871 22025
9987f0c1
IC
22026 if (!buffer) buffer = new Buffer(encodingLength(number))
22027 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
22028 if (!offset) offset = 0
8b095871 22029
9987f0c1
IC
22030 // 8 bit
22031 if (number < 0xfd) {
22032 buffer.writeUInt8(number, offset)
22033 encode.bytes = 1
8b095871 22034
9987f0c1
IC
22035 // 16 bit
22036 } else if (number <= 0xffff) {
22037 buffer.writeUInt8(0xfd, offset)
22038 buffer.writeUInt16LE(number, offset + 1)
22039 encode.bytes = 3
8b095871 22040
9987f0c1
IC
22041 // 32 bit
22042 } else if (number <= 0xffffffff) {
22043 buffer.writeUInt8(0xfe, offset)
22044 buffer.writeUInt32LE(number, offset + 1)
22045 encode.bytes = 5
8b095871 22046
9987f0c1
IC
22047 // 64 bit
22048 } else {
22049 buffer.writeUInt8(0xff, offset)
22050 buffer.writeUInt32LE(number >>> 0, offset + 1)
22051 buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5)
22052 encode.bytes = 9
ab78acc6 22053 }
8b095871 22054
9987f0c1 22055 return buffer
8b095871
IC
22056}
22057
9987f0c1
IC
22058function decode (buffer, offset) {
22059 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
22060 if (!offset) offset = 0
8b095871 22061
9987f0c1 22062 var first = buffer.readUInt8(offset)
8b095871 22063
9987f0c1
IC
22064 // 8 bit
22065 if (first < 0xfd) {
22066 decode.bytes = 1
22067 return first
8b095871 22068
9987f0c1
IC
22069 // 16 bit
22070 } else if (first === 0xfd) {
22071 decode.bytes = 3
22072 return buffer.readUInt16LE(offset + 1)
8b095871 22073
9987f0c1
IC
22074 // 32 bit
22075 } else if (first === 0xfe) {
22076 decode.bytes = 5
22077 return buffer.readUInt32LE(offset + 1)
8b095871 22078
9987f0c1
IC
22079 // 64 bit
22080 } else {
22081 decode.bytes = 9
22082 var lo = buffer.readUInt32LE(offset + 1)
22083 var hi = buffer.readUInt32LE(offset + 5)
22084 var number = hi * 0x0100000000 + lo
22085 checkUInt53(number)
8b095871 22086
9987f0c1 22087 return number
8b095871 22088 }
ab78acc6
IC
22089}
22090
9987f0c1
IC
22091function encodingLength (number) {
22092 checkUInt53(number)
8b095871 22093
9987f0c1
IC
22094 return (
22095 number < 0xfd ? 1
22096 : number <= 0xffff ? 3
22097 : number <= 0xffffffff ? 5
22098 : 9
22099 )
ab78acc6 22100}
3af2954a 22101
9987f0c1 22102module.exports = { encode: encode, decode: decode, encodingLength: encodingLength }
3af2954a 22103
9987f0c1
IC
22104}).call(this,require("buffer").Buffer)
22105},{"buffer":4}],112:[function(require,module,exports){
22106(function (Buffer){
22107var bs58check = require('bs58check')
3af2954a 22108
9987f0c1
IC
22109function decodeRaw (buffer, version) {
22110 // check version only if defined
22111 if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version')
3af2954a 22112
9987f0c1
IC
22113 // uncompressed
22114 if (buffer.length === 33) {
22115 return {
22116 version: buffer[0],
22117 privateKey: buffer.slice(1, 33),
22118 compressed: false
ab78acc6 22119 }
9987f0c1 22120 }
8b095871 22121
9987f0c1
IC
22122 // invalid length
22123 if (buffer.length !== 34) throw new Error('Invalid WIF length')
8b095871 22124
9987f0c1
IC
22125 // invalid compression flag
22126 if (buffer[33] !== 0x01) throw new Error('Invalid compression flag')
8b095871 22127
9987f0c1
IC
22128 return {
22129 version: buffer[0],
22130 privateKey: buffer.slice(1, 33),
22131 compressed: true
22132 }
22133}
3af2954a 22134
9987f0c1
IC
22135function encodeRaw (version, privateKey, compressed) {
22136 var result = new Buffer(compressed ? 34 : 33)
8b095871 22137
9987f0c1
IC
22138 result.writeUInt8(version, 0)
22139 privateKey.copy(result, 1)
3af2954a 22140
9987f0c1
IC
22141 if (compressed) {
22142 result[33] = 0x01
22143 }
8b095871 22144
9987f0c1
IC
22145 return result
22146}
8b095871 22147
9987f0c1
IC
22148function decode (string, version) {
22149 return decodeRaw(bs58check.decode(string), version)
ab78acc6 22150}
3af2954a 22151
9987f0c1
IC
22152function encode (version, privateKey, compressed) {
22153 if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed))
8b095871 22154
9987f0c1
IC
22155 return bs58check.encode(
22156 encodeRaw(
22157 version.version,
22158 version.privateKey,
22159 version.compressed
22160 )
22161 )
ab78acc6 22162}
3af2954a 22163
9987f0c1
IC
22164module.exports = {
22165 decode: decode,
22166 decodeRaw: decodeRaw,
22167 encode: encode,
22168 encodeRaw: encodeRaw
22169}
8b095871
IC
22170
22171}).call(this,require("buffer").Buffer)
9987f0c1 22172},{"bs58check":80,"buffer":4}]},{},[33])(33)
8d18f379
IC
22173});
22174</script>
9987f0c1 22175 <script>bitcoinjs.bitcoin.networks.shadow = {
861750ae 22176 messagePrefix: 'unused',
8b095871
IC
22177 bip32: {
22178 public: 0xEE80286A,
22179 private: 0xEE8031E8
22180 },
22181 pubKeyHash: 0x3f,
22182 scriptHash: 0x7d,
861750ae 22183 wif: 0xbf
8b095871
IC
22184};
22185
9987f0c1 22186bitcoinjs.bitcoin.networks.shadowtn = {
861750ae 22187 messagePrefix: 'unused',
8b095871
IC
22188 bip32: {
22189 public: 0x76C0FDFB,
22190 private: 0x76C1077A
22191 },
22192 pubKeyHash: 0x7f,
22193 scriptHash: 0xc4,
861750ae 22194 wif: 0xff
8b095871 22195};
3af2954a 22196
9987f0c1 22197bitcoinjs.bitcoin.networks.clam = {
861750ae 22198 messagePrefix: 'unused',
8b095871
IC
22199 bip32: {
22200 public: 0xa8c26d64,
22201 private: 0xa8c17826
22202 },
22203 pubKeyHash: 0x89,
9987f0c1 22204 scriptHash: 0x00, // TODO set this correctly
861750ae 22205 wif: 0x85
8b095871 22206};
3af2954a 22207
9987f0c1 22208bitcoinjs.bitcoin.networks.crown = {
861750ae 22209 messagePrefix: 'unused',
0921f370 22210 bip32: {
22211 public: 0x0488b21e,
22212 private: 0x0488ade4
22213 },
22214 pubKeyHash: 0x00,
22215 scriptHash: 0x05,
861750ae 22216 wif: 0x80
0921f370 22217};
22218
9987f0c1 22219bitcoinjs.bitcoin.networks.dash = {
861750ae 22220 messagePrefix: 'unused',
8b095871
IC
22221 bip32: {
22222 public: 0x0488b21e,
22223 private: 0x0488ade4
22224 },
22225 pubKeyHash: 0x4c,
22226 scriptHash: 0x10,
861750ae 22227 wif: 0xcc
8b095871 22228};
ab78acc6 22229
56ad9601 22230bitcoinjs.bitcoin.networks.maza = {
861750ae 22231 messagePrefix: 'unused',
56ad9601
JS
22232 bip32: {
22233 public: 0x0488b21e,
22234 private: 0x0488ade4
22235 },
22236 pubKeyHash: 0x32,
22237 scriptHash: 0x09,
861750ae 22238 wif: 0xe0
56ad9601
JS
22239};
22240
9987f0c1 22241bitcoinjs.bitcoin.networks.dashtn = {
861750ae 22242 messagePrefix: 'unused',
c0386f3b
KR
22243 bip32: {
22244 public: 0x043587cf,
22245 private: 0x04358394
22246 },
22247 pubKeyHash: 0x8c,
22248 scriptHash: 0x13,
861750ae 22249 wif: 0xef
c0386f3b
KR
22250};
22251
9987f0c1 22252bitcoinjs.bitcoin.networks.game = {
861750ae 22253 messagePrefix: 'unused',
f88fab20 22254 bip32: {
22255 public: 0x0488b21e,
22256 private: 0x0488ade4
22257 },
22258 pubKeyHash: 0x26,
22259 scriptHash: 0x05,
861750ae 22260 wif: 0xa6
f88fab20 22261};
22262
9987f0c1 22263bitcoinjs.bitcoin.networks.namecoin = {
861750ae 22264 messagePrefix: 'unused',
8b095871
IC
22265 bip32: {
22266 public: 0x0488b21e,
22267 private: 0x0488ade4
22268 },
22269 pubKeyHash: 0x34,
9987f0c1 22270 scriptHash: 0x00, // TODO set this correctly
861750ae 22271 wif: 0x80
8b095871 22272};
3af2954a 22273
9987f0c1 22274bitcoinjs.bitcoin.networks.peercoin = {
861750ae 22275 messagePrefix: 'unused',
8b095871
IC
22276 bip32: {
22277 public: 0x0488b21e,
22278 private: 0x0488ade4
22279 },
22280 pubKeyHash: 0x37,
9987f0c1 22281 scriptHash: 0x00, // TODO set this correctly
861750ae 22282 wif: 0xb7
8b095871 22283};
3af2954a 22284
9987f0c1 22285bitcoinjs.bitcoin.networks.slimcoin = {
861750ae 22286 messagePrefix: 'unused',
01e81e53
GH
22287 bip32: {
22288 public: 0xef6adf10,
22289 private: 0xef69ea80
22290 },
22291 pubKeyHash: 0x3f,
22292 scriptHash: 0x7d,
861750ae 22293 wif: 0x46
01e81e53
GH
22294};
22295
9987f0c1 22296bitcoinjs.bitcoin.networks.slimcointn = {
861750ae 22297 messagePrefix: 'unused',
01e81e53
GH
22298 bip32: {
22299 public: 0x043587CF,
22300 private: 0x04358394
22301 },
22302 pubKeyHash: 0x6f,
22303 scriptHash: 0xc4,
861750ae 22304 wif: 0x57
01e81e53
GH
22305};
22306
9987f0c1
IC
22307bitcoinjs.bitcoin.networks.dogecoin = {
22308 messagePrefix: '\x19Dogecoin Signed Message:\n',
22309 bip32: {
22310 public: 0x02facafd,
22311 private: 0x02fac398
22312 },
22313 pubKeyHash: 0x1e,
22314 scriptHash: 0x16,
861750ae
JC
22315 wif: 0x9e
22316};
9987f0c1
IC
22317
22318bitcoinjs.bitcoin.networks.viacoin = {
22319 messagePrefix: '\x18Viacoin Signed Message:\n',
22320 bip32: {
22321 public: 0x0488b21e,
22322 private: 0x0488ade4
22323 },
22324 pubKeyHash: 0x47,
22325 scriptHash: 0x21,
861750ae
JC
22326 wif: 0xc7
22327};
9987f0c1
IC
22328
22329bitcoinjs.bitcoin.networks.viacointestnet = {
22330 messagePrefix: '\x18Viacoin Signed Message:\n',
22331 bip32: {
22332 public: 0x043587cf,
22333 private: 0x04358394
22334 },
22335 pubKeyHash: 0x7f,
22336 scriptHash: 0xc4,
861750ae
JC
22337 wif: 0xff
22338};
9987f0c1
IC
22339
22340bitcoinjs.bitcoin.networks.gamerscoin = {
22341 messagePrefix: '\x19Gamerscoin Signed Message:\n',
22342 bip32: {
22343 public: 0x019da462,
22344 private: 0x019d9cfe
22345 },
22346 pubKeyHash: 0x26,
22347 scriptHash: 0x05,
861750ae
JC
22348 wif: 0xA6
22349};
9987f0c1
IC
22350
22351bitcoinjs.bitcoin.networks.jumbucks = {
22352 messagePrefix: '\x19Jumbucks Signed Message:\n',
22353 bip32: {
22354 public: 0x037a689a,
22355 private: 0x037a6460
22356 },
22357 pubKeyHash: 0x2b,
22358 scriptHash: 0x05,
861750ae
JC
22359 wif: 0xab
22360};
9987f0c1
IC
22361
22362bitcoinjs.bitcoin.networks.zetacoin = {
22363 messagePrefix: '\x18Zetacoin Signed Message:\n',
22364 bip32: {
22365 public: 0x0488b21e,
22366 private: 0x0488ade4
22367 },
22368 pubKeyHash: 0x50,
22369 scriptHash: 0x09,
861750ae
JC
22370 wif: 0xe0
22371};
b3cc3930
IC
22372
22373bitcoinjs.bitcoin.networks.myriadcoin = {
861750ae 22374 messagePrefix: 'unused',
b3cc3930
IC
22375 bip32: {
22376 public: 0x0488b21e,
22377 private: 0x0488ade4
22378 },
22379 pubKeyHash: 0x32,
22380 scriptHash: 0x00, // TODO set this correctly
861750ae 22381 wif: 0xb2
b3cc3930 22382};
f128bd58
IC
22383
22384bitcoinjs.bitcoin.networks.pivx = {
861750ae 22385 messagePrefix: 'unused',
f128bd58
IC
22386 bip32: {
22387 public: 0x022d2533,
22388 private: 0x0221312b
22389 },
22390 pubKeyHash: 0x1e,
22391 scriptHash: 0x0d,
861750ae 22392 wif: 0xd4
f128bd58
IC
22393};
22394
22395bitcoinjs.bitcoin.networks.pivxtestnet = {
861750ae 22396 messagePrefix: 'unused',
f128bd58
IC
22397 bip32: {
22398 public: 0x3a8061a0,
22399 private: 0x3a805837
22400 },
22401 pubKeyHash: 0x8b,
22402 scriptHash: 0x13,
861750ae 22403 wif: 0xef
f128bd58 22404};
1102f201
IC
22405
22406bitcoinjs.bitcoin.networks.fujicoin = {
22407 messagePrefix: '\x19FujiCoin Signed Message:\n',
22408 bip32: {
22409 public: 0x0488b21e,
22410 private: 0x0488ade4
22411 },
22412 pubKeyHash: 0x24,
22413 scriptHash: 0x10,
22414 wif: 0xa4
22415};
0f6b34d6
IC
22416
22417bitcoinjs.bitcoin.networks.nubits = {
22418 messagePrefix: '\x18Nu Signed Message:\n',
22419 bip32: {
22420 public: 0x0488b21e,
22421 private: 0x0488ade4
22422 },
22423 pubKeyHash: 0x19,
22424 scriptHash: 0x1a,
22425 wif: 0x96,
22426};
22427
39608073
RS
22428bitcoinjs.bitcoin.networks.bgold = {
22429 messagePrefix: 'unused',
22430 bip32: {
22431 public: 0x0488b21e,
22432 private: 0x0488ade4
22433 },
22434 pubKeyHash: 38,
22435 scriptHash: 23,
22436 wif: 128
22437};
22438
0f6b34d6
IC
22439bitcoinjs.bitcoin.networks.bitcoinCashBitbpay = {
22440 messagePrefix: '\x18Bitcoin Signed Message:\n',
22441 bip32: {
22442 public: 0x0488b21e,
22443 private: 0x0488ade4
22444 },
22445 pubKeyHash: 0x1c,
22446 scriptHash: 0x28,
22447 wif: 0x80
22448};
22449
924727ed
IC
22450bitcoinjs.bitcoin.networks.monacoin = {
22451 messagePrefix: '\x18Monacoin Signed Message:\n',
22452 bip32: {
22453 public: 0x0488b21e,
22454 private: 0x0488ade4
22455 },
22456 pubKeyHash: 0x32,
22457 scriptHash: 0x37,
22458 wif: 0xb0
22459};
22460
0f6b34d6
IC
22461bitcoinjs.bitcoin.networks.bitcoinBip49 = {
22462 messagePrefix: '\x18Bitcoin Signed Message:\n',
22463 bip32: {
22464 public: 0x049d7cb2,
22465 private: 0x049d7878
22466 },
22467 pubKeyHash: 0x00,
22468 scriptHash: 0x05,
22469 wif: 0x80
22470};
22471
22472bitcoinjs.bitcoin.networks.testnetBip49 = {
22473 messagePrefix: '\x18Bitcoin Signed Message:\n',
22474 bip32: {
22475 public: 0x044a5262,
22476 private: 0x044a4e28
22477 },
22478 pubKeyHash: 0x6f,
22479 scriptHash: 0xc4,
22480 wif: 0xef
22481};
22482
22483bitcoinjs.bitcoin.networks.litecoinBip49 = {
22484 messagePrefix: '\x19Litecoin Signed Message:\n',
22485 bip32: {
22486 public: 0x01b26ef6,
22487 private: 0x01b26792
22488 },
22489 pubKeyHash: 0x30,
22490 scriptHash: 0x32,
22491 wif: 0xb0
22492};
8b095871
IC
22493</script>
22494 <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.ethUtil = 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){
22495(function (global){
22496'use strict';
3af2954a 22497
8b095871
IC
22498// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
22499// original notice:
3af2954a 22500
8b095871
IC
22501/*!
22502 * The buffer module from node.js, for the browser.
22503 *
22504 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
22505 * @license MIT
22506 */
22507function compare(a, b) {
22508 if (a === b) {
22509 return 0;
22510 }
3af2954a 22511
8b095871
IC
22512 var x = a.length;
22513 var y = b.length;
3af2954a 22514
8b095871
IC
22515 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
22516 if (a[i] !== b[i]) {
22517 x = a[i];
22518 y = b[i];
22519 break;
22520 }
22521 }
3af2954a 22522
8b095871
IC
22523 if (x < y) {
22524 return -1;
22525 }
22526 if (y < x) {
22527 return 1;
22528 }
22529 return 0;
ab78acc6 22530}
8b095871
IC
22531function isBuffer(b) {
22532 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
22533 return global.Buffer.isBuffer(b);
22534 }
22535 return !!(b != null && b._isBuffer);
ab78acc6 22536}
3af2954a 22537
8b095871
IC
22538// based on node assert, original notice:
22539
22540// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
22541//
22542// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
22543//
22544// Originally from narwhal.js (http://narwhaljs.org)
22545// Copyright (c) 2009 Thomas Robinson <280north.com>
22546//
22547// Permission is hereby granted, free of charge, to any person obtaining a copy
22548// of this software and associated documentation files (the 'Software'), to
22549// deal in the Software without restriction, including without limitation the
22550// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
22551// sell copies of the Software, and to permit persons to whom the Software is
22552// furnished to do so, subject to the following conditions:
22553//
22554// The above copyright notice and this permission notice shall be included in
22555// all copies or substantial portions of the Software.
22556//
22557// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22558// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22559// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22560// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
22561// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22562// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22563
22564var util = require('util/');
22565var hasOwn = Object.prototype.hasOwnProperty;
22566var pSlice = Array.prototype.slice;
22567var functionsHaveNames = (function () {
22568 return function foo() {}.name === 'foo';
22569}());
22570function pToString (obj) {
22571 return Object.prototype.toString.call(obj);
22572}
22573function isView(arrbuf) {
22574 if (isBuffer(arrbuf)) {
22575 return false;
ab78acc6 22576 }
8b095871
IC
22577 if (typeof global.ArrayBuffer !== 'function') {
22578 return false;
22579 }
22580 if (typeof ArrayBuffer.isView === 'function') {
22581 return ArrayBuffer.isView(arrbuf);
22582 }
22583 if (!arrbuf) {
22584 return false;
22585 }
22586 if (arrbuf instanceof DataView) {
22587 return true;
22588 }
22589 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
22590 return true;
22591 }
22592 return false;
ab78acc6 22593}
8b095871
IC
22594// 1. The assert module provides functions that throw
22595// AssertionError's when particular conditions are not met. The
22596// assert module must conform to the following interface.
3af2954a 22597
8b095871 22598var assert = module.exports = ok;
3af2954a 22599
8b095871
IC
22600// 2. The AssertionError is defined in assert.
22601// new assert.AssertionError({ message: message,
22602// actual: actual,
22603// expected: expected })
22604
22605var regex = /\s*function\s+([^\(\s]*)\s*/;
22606// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
22607function getName(func) {
22608 if (!util.isFunction(func)) {
22609 return;
22610 }
22611 if (functionsHaveNames) {
22612 return func.name;
22613 }
22614 var str = func.toString();
22615 var match = str.match(regex);
22616 return match && match[1];
ab78acc6 22617}
8b095871
IC
22618assert.AssertionError = function AssertionError(options) {
22619 this.name = 'AssertionError';
22620 this.actual = options.actual;
22621 this.expected = options.expected;
22622 this.operator = options.operator;
22623 if (options.message) {
22624 this.message = options.message;
22625 this.generatedMessage = false;
22626 } else {
22627 this.message = getMessage(this);
22628 this.generatedMessage = true;
22629 }
22630 var stackStartFunction = options.stackStartFunction || fail;
22631 if (Error.captureStackTrace) {
22632 Error.captureStackTrace(this, stackStartFunction);
22633 } else {
22634 // non v8 browsers so we can have a stacktrace
22635 var err = new Error();
22636 if (err.stack) {
22637 var out = err.stack;
22638
22639 // try to strip useless frames
22640 var fn_name = getName(stackStartFunction);
22641 var idx = out.indexOf('\n' + fn_name);
22642 if (idx >= 0) {
22643 // once we have located the function frame
22644 // we need to strip out everything before it (and its line)
22645 var next_line = out.indexOf('\n', idx + 1);
22646 out = out.substring(next_line + 1);
22647 }
3af2954a 22648
8b095871
IC
22649 this.stack = out;
22650 }
22651 }
22652};
3af2954a 22653
8b095871
IC
22654// assert.AssertionError instanceof Error
22655util.inherits(assert.AssertionError, Error);
3af2954a 22656
8b095871
IC
22657function truncate(s, n) {
22658 if (typeof s === 'string') {
22659 return s.length < n ? s : s.slice(0, n);
22660 } else {
22661 return s;
3af2954a 22662 }
ab78acc6 22663}
8b095871
IC
22664function inspect(something) {
22665 if (functionsHaveNames || !util.isFunction(something)) {
22666 return util.inspect(something);
22667 }
22668 var rawname = getName(something);
22669 var name = rawname ? ': ' + rawname : '';
22670 return '[Function' + name + ']';
22671}
22672function getMessage(self) {
22673 return truncate(inspect(self.actual), 128) + ' ' +
22674 self.operator + ' ' +
22675 truncate(inspect(self.expected), 128);
ab78acc6 22676}
3af2954a 22677
8b095871
IC
22678// At present only the three keys mentioned above are used and
22679// understood by the spec. Implementations or sub modules can pass
22680// other keys to the AssertionError's constructor - they will be
22681// ignored.
3af2954a 22682
8b095871
IC
22683// 3. All of the following functions must throw an AssertionError
22684// when a corresponding condition is not met, with a message that
22685// may be undefined if not provided. All assertion methods provide
22686// both the actual and expected values to the assertion error for
22687// display purposes.
3af2954a 22688
8b095871
IC
22689function fail(actual, expected, message, operator, stackStartFunction) {
22690 throw new assert.AssertionError({
22691 message: message,
22692 actual: actual,
22693 expected: expected,
22694 operator: operator,
22695 stackStartFunction: stackStartFunction
22696 });
ab78acc6 22697}
3af2954a 22698
8b095871
IC
22699// EXTENSION! allows for well behaved errors defined elsewhere.
22700assert.fail = fail;
3af2954a 22701
8b095871
IC
22702// 4. Pure assertion tests whether a value is truthy, as determined
22703// by !!guard.
22704// assert.ok(guard, message_opt);
22705// This statement is equivalent to assert.equal(true, !!guard,
22706// message_opt);. To test strictly for the value true, use
22707// assert.strictEqual(true, guard, message_opt);.
3af2954a 22708
8b095871
IC
22709function ok(value, message) {
22710 if (!value) fail(value, true, message, '==', assert.ok);
ab78acc6 22711}
8b095871 22712assert.ok = ok;
3af2954a 22713
8b095871
IC
22714// 5. The equality assertion tests shallow, coercive equality with
22715// ==.
22716// assert.equal(actual, expected, message_opt);
3af2954a 22717
8b095871
IC
22718assert.equal = function equal(actual, expected, message) {
22719 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
22720};
3af2954a 22721
8b095871
IC
22722// 6. The non-equality assertion tests for whether two objects are not equal
22723// with != assert.notEqual(actual, expected, message_opt);
3af2954a 22724
8b095871
IC
22725assert.notEqual = function notEqual(actual, expected, message) {
22726 if (actual == expected) {
22727 fail(actual, expected, message, '!=', assert.notEqual);
ab78acc6 22728 }
8b095871
IC
22729};
22730
22731// 7. The equivalence assertion tests a deep equality relation.
22732// assert.deepEqual(actual, expected, message_opt);
22733
22734assert.deepEqual = function deepEqual(actual, expected, message) {
22735 if (!_deepEqual(actual, expected, false)) {
22736 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
ab78acc6 22737 }
8b095871 22738};
3af2954a 22739
8b095871
IC
22740assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
22741 if (!_deepEqual(actual, expected, true)) {
22742 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
3af2954a 22743 }
8b095871
IC
22744};
22745
22746function _deepEqual(actual, expected, strict, memos) {
22747 // 7.1. All identical values are equivalent, as determined by ===.
22748 if (actual === expected) {
22749 return true;
22750 } else if (isBuffer(actual) && isBuffer(expected)) {
22751 return compare(actual, expected) === 0;
22752
22753 // 7.2. If the expected value is a Date object, the actual value is
22754 // equivalent if it is also a Date object that refers to the same time.
22755 } else if (util.isDate(actual) && util.isDate(expected)) {
22756 return actual.getTime() === expected.getTime();
22757
22758 // 7.3 If the expected value is a RegExp object, the actual value is
22759 // equivalent if it is also a RegExp object with the same source and
22760 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
22761 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
22762 return actual.source === expected.source &&
22763 actual.global === expected.global &&
22764 actual.multiline === expected.multiline &&
22765 actual.lastIndex === expected.lastIndex &&
22766 actual.ignoreCase === expected.ignoreCase;
22767
22768 // 7.4. Other pairs that do not both pass typeof value == 'object',
22769 // equivalence is determined by ==.
22770 } else if ((actual === null || typeof actual !== 'object') &&
22771 (expected === null || typeof expected !== 'object')) {
22772 return strict ? actual === expected : actual == expected;
22773
22774 // If both values are instances of typed arrays, wrap their underlying
22775 // ArrayBuffers in a Buffer each to increase performance
22776 // This optimization requires the arrays to have the same type as checked by
22777 // Object.prototype.toString (aka pToString). Never perform binary
22778 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
22779 // bit patterns are not identical.
22780 } else if (isView(actual) && isView(expected) &&
22781 pToString(actual) === pToString(expected) &&
22782 !(actual instanceof Float32Array ||
22783 actual instanceof Float64Array)) {
22784 return compare(new Uint8Array(actual.buffer),
22785 new Uint8Array(expected.buffer)) === 0;
22786
22787 // 7.5 For all other Object pairs, including Array objects, equivalence is
22788 // determined by having the same number of owned properties (as verified
22789 // with Object.prototype.hasOwnProperty.call), the same set of keys
22790 // (although not necessarily the same order), equivalent values for every
22791 // corresponding key, and an identical 'prototype' property. Note: this
22792 // accounts for both named and indexed properties on Arrays.
22793 } else if (isBuffer(actual) !== isBuffer(expected)) {
22794 return false;
22795 } else {
22796 memos = memos || {actual: [], expected: []};
3af2954a 22797
8b095871
IC
22798 var actualIndex = memos.actual.indexOf(actual);
22799 if (actualIndex !== -1) {
22800 if (actualIndex === memos.expected.indexOf(expected)) {
22801 return true;
ab78acc6 22802 }
3af2954a 22803 }
8b095871
IC
22804
22805 memos.actual.push(actual);
22806 memos.expected.push(expected);
22807
22808 return objEquiv(actual, expected, strict, memos);
3af2954a 22809 }
ab78acc6 22810}
3af2954a 22811
8b095871
IC
22812function isArguments(object) {
22813 return Object.prototype.toString.call(object) == '[object Arguments]';
ab78acc6 22814}
3af2954a 22815
8b095871
IC
22816function objEquiv(a, b, strict, actualVisitedObjects) {
22817 if (a === null || a === undefined || b === null || b === undefined)
22818 return false;
22819 // if one is a primitive, the other must be same
22820 if (util.isPrimitive(a) || util.isPrimitive(b))
22821 return a === b;
22822 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
22823 return false;
22824 var aIsArgs = isArguments(a);
22825 var bIsArgs = isArguments(b);
22826 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
22827 return false;
22828 if (aIsArgs) {
22829 a = pSlice.call(a);
22830 b = pSlice.call(b);
22831 return _deepEqual(a, b, strict);
22832 }
22833 var ka = objectKeys(a);
22834 var kb = objectKeys(b);
22835 var key, i;
22836 // having the same number of owned properties (keys incorporates
22837 // hasOwnProperty)
22838 if (ka.length !== kb.length)
22839 return false;
22840 //the same set of keys (although not necessarily the same order),
22841 ka.sort();
22842 kb.sort();
22843 //~~~cheap key test
22844 for (i = ka.length - 1; i >= 0; i--) {
22845 if (ka[i] !== kb[i])
22846 return false;
22847 }
22848 //equivalent values for every corresponding key, and
22849 //~~~possibly expensive deep test
22850 for (i = ka.length - 1; i >= 0; i--) {
22851 key = ka[i];
22852 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
22853 return false;
22854 }
22855 return true;
ab78acc6 22856}
3af2954a 22857
8b095871
IC
22858// 8. The non-equivalence assertion tests for any deep inequality.
22859// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 22860
8b095871
IC
22861assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
22862 if (_deepEqual(actual, expected, false)) {
22863 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 22864 }
8b095871 22865};
3af2954a 22866
8b095871
IC
22867assert.notDeepStrictEqual = notDeepStrictEqual;
22868function notDeepStrictEqual(actual, expected, message) {
22869 if (_deepEqual(actual, expected, true)) {
22870 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
22871 }
ab78acc6 22872}
3af2954a 22873
3af2954a 22874
8b095871
IC
22875// 9. The strict equality assertion tests strict equality, as determined by ===.
22876// assert.strictEqual(actual, expected, message_opt);
3af2954a 22877
8b095871
IC
22878assert.strictEqual = function strictEqual(actual, expected, message) {
22879 if (actual !== expected) {
22880 fail(actual, expected, message, '===', assert.strictEqual);
22881 }
22882};
3af2954a 22883
8b095871
IC
22884// 10. The strict non-equality assertion tests for strict inequality, as
22885// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 22886
8b095871
IC
22887assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
22888 if (actual === expected) {
22889 fail(actual, expected, message, '!==', assert.notStrictEqual);
22890 }
22891};
3af2954a 22892
8b095871
IC
22893function expectedException(actual, expected) {
22894 if (!actual || !expected) {
22895 return false;
22896 }
3af2954a 22897
8b095871
IC
22898 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
22899 return expected.test(actual);
22900 }
3af2954a 22901
8b095871
IC
22902 try {
22903 if (actual instanceof expected) {
22904 return true;
22905 }
22906 } catch (e) {
22907 // Ignore. The instanceof check doesn't work for arrow functions.
22908 }
3af2954a 22909
8b095871
IC
22910 if (Error.isPrototypeOf(expected)) {
22911 return false;
22912 }
22913
22914 return expected.call({}, actual) === true;
ab78acc6 22915}
3af2954a 22916
8b095871
IC
22917function _tryBlock(block) {
22918 var error;
22919 try {
22920 block();
22921 } catch (e) {
22922 error = e;
22923 }
22924 return error;
ab78acc6 22925}
3af2954a 22926
8b095871
IC
22927function _throws(shouldThrow, block, expected, message) {
22928 var actual;
22929
22930 if (typeof block !== 'function') {
22931 throw new TypeError('"block" argument must be a function');
3af2954a 22932 }
8b095871
IC
22933
22934 if (typeof expected === 'string') {
22935 message = expected;
22936 expected = null;
ab78acc6 22937 }
8b095871
IC
22938
22939 actual = _tryBlock(block);
22940
22941 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
22942 (message ? ' ' + message : '.');
22943
22944 if (shouldThrow && !actual) {
22945 fail(actual, expected, 'Missing expected exception' + message);
ab78acc6 22946 }
8b095871
IC
22947
22948 var userProvidedMessage = typeof message === 'string';
22949 var isUnwantedException = !shouldThrow && util.isError(actual);
22950 var isUnexpectedException = !shouldThrow && actual && !expected;
22951
22952 if ((isUnwantedException &&
22953 userProvidedMessage &&
22954 expectedException(actual, expected)) ||
22955 isUnexpectedException) {
22956 fail(actual, expected, 'Got unwanted exception' + message);
ab78acc6 22957 }
3af2954a 22958
8b095871
IC
22959 if ((shouldThrow && actual && expected &&
22960 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
22961 throw actual;
22962 }
ab78acc6 22963}
3af2954a 22964
8b095871
IC
22965// 11. Expected to throw an error:
22966// assert.throws(block, Error_opt, message_opt);
22967
22968assert.throws = function(block, /*optional*/error, /*optional*/message) {
22969 _throws(true, block, error, message);
22970};
22971
22972// EXTENSION! This is annoying to write outside this module.
22973assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
22974 _throws(false, block, error, message);
22975};
22976
22977assert.ifError = function(err) { if (err) throw err; };
22978
22979var objectKeys = Object.keys || function (obj) {
22980 var keys = [];
22981 for (var key in obj) {
22982 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 22983 }
8b095871
IC
22984 return keys;
22985};
3af2954a 22986
8b095871
IC
22987}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
22988},{"util/":30}],2:[function(require,module,exports){
22989'use strict'
22990
22991exports.byteLength = byteLength
22992exports.toByteArray = toByteArray
22993exports.fromByteArray = fromByteArray
22994
22995var lookup = []
22996var revLookup = []
22997var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
22998
22999var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
23000for (var i = 0, len = code.length; i < len; ++i) {
23001 lookup[i] = code[i]
23002 revLookup[code.charCodeAt(i)] = i
23003}
23004
23005revLookup['-'.charCodeAt(0)] = 62
23006revLookup['_'.charCodeAt(0)] = 63
23007
23008function placeHoldersCount (b64) {
23009 var len = b64.length
23010 if (len % 4 > 0) {
23011 throw new Error('Invalid string. Length must be a multiple of 4')
23012 }
23013
23014 // the number of equal signs (place holders)
23015 // if there are two placeholders, than the two characters before it
23016 // represent one byte
23017 // if there is only one, then the three characters before it represent 2 bytes
23018 // this is just a cheap hack to not do indexOf twice
23019 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
ab78acc6
IC
23020}
23021
8b095871
IC
23022function byteLength (b64) {
23023 // base64 is 4/3 + up to two characters of the original data
23024 return b64.length * 3 / 4 - placeHoldersCount(b64)
ab78acc6 23025}
3af2954a 23026
8b095871
IC
23027function toByteArray (b64) {
23028 var i, j, l, tmp, placeHolders, arr
23029 var len = b64.length
23030 placeHolders = placeHoldersCount(b64)
23031
23032 arr = new Arr(len * 3 / 4 - placeHolders)
23033
23034 // if there are placeholders, only get up to the last complete 4 chars
23035 l = placeHolders > 0 ? len - 4 : len
23036
23037 var L = 0
23038
23039 for (i = 0, j = 0; i < l; i += 4, j += 3) {
23040 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
23041 arr[L++] = (tmp >> 16) & 0xFF
23042 arr[L++] = (tmp >> 8) & 0xFF
23043 arr[L++] = tmp & 0xFF
23044 }
23045
23046 if (placeHolders === 2) {
23047 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
23048 arr[L++] = tmp & 0xFF
23049 } else if (placeHolders === 1) {
23050 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
23051 arr[L++] = (tmp >> 8) & 0xFF
23052 arr[L++] = tmp & 0xFF
23053 }
23054
23055 return arr
ab78acc6 23056}
3af2954a 23057
8b095871
IC
23058function tripletToBase64 (num) {
23059 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
ab78acc6 23060}
3af2954a 23061
8b095871
IC
23062function encodeChunk (uint8, start, end) {
23063 var tmp
23064 var output = []
23065 for (var i = start; i < end; i += 3) {
23066 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
23067 output.push(tripletToBase64(tmp))
23068 }
23069 return output.join('')
ab78acc6 23070}
3af2954a 23071
8b095871
IC
23072function fromByteArray (uint8) {
23073 var tmp
23074 var len = uint8.length
23075 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
23076 var output = ''
23077 var parts = []
23078 var maxChunkLength = 16383 // must be multiple of 3
23079
23080 // go through the array every three bytes, we'll deal with trailing stuff later
23081 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
23082 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
23083 }
23084
23085 // pad the end with zeros, but make sure to not forget the extra bytes
23086 if (extraBytes === 1) {
23087 tmp = uint8[len - 1]
23088 output += lookup[tmp >> 2]
23089 output += lookup[(tmp << 4) & 0x3F]
23090 output += '=='
23091 } else if (extraBytes === 2) {
23092 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
23093 output += lookup[tmp >> 10]
23094 output += lookup[(tmp >> 4) & 0x3F]
23095 output += lookup[(tmp << 2) & 0x3F]
23096 output += '='
23097 }
23098
23099 parts.push(output)
23100
23101 return parts.join('')
ab78acc6 23102}
3af2954a 23103
8b095871 23104},{}],3:[function(require,module,exports){
3af2954a 23105
8b095871
IC
23106},{}],4:[function(require,module,exports){
23107(function (global){
23108'use strict';
23109
23110var buffer = require('buffer');
23111var Buffer = buffer.Buffer;
23112var SlowBuffer = buffer.SlowBuffer;
23113var MAX_LEN = buffer.kMaxLength || 2147483647;
23114exports.alloc = function alloc(size, fill, encoding) {
23115 if (typeof Buffer.alloc === 'function') {
23116 return Buffer.alloc(size, fill, encoding);
ab78acc6 23117 }
8b095871
IC
23118 if (typeof encoding === 'number') {
23119 throw new TypeError('encoding must not be number');
23120 }
23121 if (typeof size !== 'number') {
23122 throw new TypeError('size must be a number');
23123 }
23124 if (size > MAX_LEN) {
23125 throw new RangeError('size is too large');
23126 }
23127 var enc = encoding;
23128 var _fill = fill;
23129 if (_fill === undefined) {
23130 enc = undefined;
23131 _fill = 0;
23132 }
23133 var buf = new Buffer(size);
23134 if (typeof _fill === 'string') {
23135 var fillBuf = new Buffer(_fill, enc);
23136 var flen = fillBuf.length;
23137 var i = -1;
23138 while (++i < size) {
23139 buf[i] = fillBuf[i % flen];
ab78acc6 23140 }
ab78acc6 23141 } else {
8b095871 23142 buf.fill(_fill);
ab78acc6 23143 }
8b095871 23144 return buf;
ab78acc6 23145}
8b095871
IC
23146exports.allocUnsafe = function allocUnsafe(size) {
23147 if (typeof Buffer.allocUnsafe === 'function') {
23148 return Buffer.allocUnsafe(size);
23149 }
23150 if (typeof size !== 'number') {
23151 throw new TypeError('size must be a number');
23152 }
23153 if (size > MAX_LEN) {
23154 throw new RangeError('size is too large');
23155 }
23156 return new Buffer(size);
ab78acc6 23157}
8b095871
IC
23158exports.from = function from(value, encodingOrOffset, length) {
23159 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
23160 return Buffer.from(value, encodingOrOffset, length);
23161 }
23162 if (typeof value === 'number') {
23163 throw new TypeError('"value" argument must not be a number');
23164 }
23165 if (typeof value === 'string') {
23166 return new Buffer(value, encodingOrOffset);
23167 }
23168 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
23169 var offset = encodingOrOffset;
23170 if (arguments.length === 1) {
23171 return new Buffer(value);
23172 }
23173 if (typeof offset === 'undefined') {
23174 offset = 0;
23175 }
23176 var len = length;
23177 if (typeof len === 'undefined') {
23178 len = value.byteLength - offset;
23179 }
23180 if (offset >= value.byteLength) {
23181 throw new RangeError('\'offset\' is out of bounds');
23182 }
23183 if (len > value.byteLength - offset) {
23184 throw new RangeError('\'length\' is out of bounds');
23185 }
23186 return new Buffer(value.slice(offset, offset + len));
23187 }
23188 if (Buffer.isBuffer(value)) {
23189 var out = new Buffer(value.length);
23190 value.copy(out, 0, 0, value.length);
23191 return out;
23192 }
23193 if (value) {
23194 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
23195 return new Buffer(value);
23196 }
23197 if (value.type === 'Buffer' && Array.isArray(value.data)) {
23198 return new Buffer(value.data);
23199 }
23200 }
3af2954a 23201
8b095871 23202 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
ab78acc6 23203}
8b095871
IC
23204exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
23205 if (typeof Buffer.allocUnsafeSlow === 'function') {
23206 return Buffer.allocUnsafeSlow(size);
23207 }
23208 if (typeof size !== 'number') {
23209 throw new TypeError('size must be a number');
23210 }
23211 if (size >= MAX_LEN) {
23212 throw new RangeError('size is too large');
23213 }
23214 return new SlowBuffer(size);
ab78acc6 23215}
3af2954a 23216
8b095871
IC
23217}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
23218},{"buffer":5}],5:[function(require,module,exports){
23219/*!
23220 * The buffer module from node.js, for the browser.
23221 *
23222 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
23223 * @license MIT
23224 */
23225/* eslint-disable no-proto */
3af2954a 23226
8b095871 23227'use strict'
3af2954a 23228
8b095871
IC
23229var base64 = require('base64-js')
23230var ieee754 = require('ieee754')
3af2954a 23231
8b095871
IC
23232exports.Buffer = Buffer
23233exports.SlowBuffer = SlowBuffer
23234exports.INSPECT_MAX_BYTES = 50
23235
23236var K_MAX_LENGTH = 0x7fffffff
23237exports.kMaxLength = K_MAX_LENGTH
23238
23239/**
23240 * If `Buffer.TYPED_ARRAY_SUPPORT`:
23241 * === true Use Uint8Array implementation (fastest)
23242 * === false Print warning and recommend using `buffer` v4.x which has an Object
23243 * implementation (most compatible, even IE6)
23244 *
23245 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
23246 * Opera 11.6+, iOS 4.2+.
23247 *
23248 * We report that the browser does not support typed arrays if the are not subclassable
23249 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
23250 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
23251 * for __proto__ and has a buggy typed array implementation.
23252 */
23253Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
23254
23255if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
23256 typeof console.error === 'function') {
23257 console.error(
23258 'This browser lacks typed array (Uint8Array) support which is required by ' +
23259 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
23260 )
ab78acc6 23261}
3af2954a 23262
8b095871
IC
23263function typedArraySupport () {
23264 // Can typed array instances can be augmented?
23265 try {
23266 var arr = new Uint8Array(1)
23267 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
23268 return arr.foo() === 42
23269 } catch (e) {
23270 return false
23271 }
ab78acc6 23272}
3af2954a 23273
8b095871
IC
23274function createBuffer (length) {
23275 if (length > K_MAX_LENGTH) {
23276 throw new RangeError('Invalid typed array length')
3af2954a 23277 }
8b095871
IC
23278 // Return an augmented `Uint8Array` instance
23279 var buf = new Uint8Array(length)
23280 buf.__proto__ = Buffer.prototype
23281 return buf
ab78acc6 23282}
3af2954a 23283
8b095871
IC
23284/**
23285 * The Buffer constructor returns instances of `Uint8Array` that have their
23286 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
23287 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
23288 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
23289 * returns a single octet.
23290 *
23291 * The `Uint8Array` prototype remains unmodified.
23292 */
3af2954a 23293
8b095871
IC
23294function Buffer (arg, encodingOrOffset, length) {
23295 // Common case.
23296 if (typeof arg === 'number') {
23297 if (typeof encodingOrOffset === 'string') {
23298 throw new Error(
23299 'If encoding is specified then the first argument must be a string'
23300 )
23301 }
23302 return allocUnsafe(arg)
23303 }
23304 return from(arg, encodingOrOffset, length)
ab78acc6 23305}
3af2954a 23306
8b095871
IC
23307// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
23308if (typeof Symbol !== 'undefined' && Symbol.species &&
23309 Buffer[Symbol.species] === Buffer) {
23310 Object.defineProperty(Buffer, Symbol.species, {
23311 value: null,
23312 configurable: true,
23313 enumerable: false,
23314 writable: false
23315 })
ab78acc6 23316}
3af2954a 23317
8b095871 23318Buffer.poolSize = 8192 // not used by this implementation
3af2954a 23319
8b095871
IC
23320function from (value, encodingOrOffset, length) {
23321 if (typeof value === 'number') {
23322 throw new TypeError('"value" argument must not be a number')
23323 }
3af2954a 23324
8b095871
IC
23325 if (value instanceof ArrayBuffer) {
23326 return fromArrayBuffer(value, encodingOrOffset, length)
23327 }
3af2954a 23328
8b095871
IC
23329 if (typeof value === 'string') {
23330 return fromString(value, encodingOrOffset)
23331 }
3af2954a 23332
8b095871 23333 return fromObject(value)
ab78acc6 23334}
3af2954a 23335
8b095871
IC
23336/**
23337 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
23338 * if value is a number.
23339 * Buffer.from(str[, encoding])
23340 * Buffer.from(array)
23341 * Buffer.from(buffer)
23342 * Buffer.from(arrayBuffer[, byteOffset[, length]])
23343 **/
23344Buffer.from = function (value, encodingOrOffset, length) {
23345 return from(value, encodingOrOffset, length)
ab78acc6 23346}
3af2954a 23347
8b095871
IC
23348// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
23349// https://github.com/feross/buffer/pull/148
23350Buffer.prototype.__proto__ = Uint8Array.prototype
23351Buffer.__proto__ = Uint8Array
23352
23353function assertSize (size) {
23354 if (typeof size !== 'number') {
23355 throw new TypeError('"size" argument must be a number')
23356 } else if (size < 0) {
23357 throw new RangeError('"size" argument must not be negative')
23358 }
23359}
23360
23361function alloc (size, fill, encoding) {
23362 assertSize(size)
23363 if (size <= 0) {
23364 return createBuffer(size)
3af2954a 23365 }
8b095871
IC
23366 if (fill !== undefined) {
23367 // Only pay attention to encoding if it's a string. This
23368 // prevents accidentally sending in a number that would
23369 // be interpretted as a start offset.
23370 return typeof encoding === 'string'
23371 ? createBuffer(size).fill(fill, encoding)
23372 : createBuffer(size).fill(fill)
23373 }
23374 return createBuffer(size)
ab78acc6 23375}
3af2954a 23376
8b095871
IC
23377/**
23378 * Creates a new filled Buffer instance.
23379 * alloc(size[, fill[, encoding]])
23380 **/
23381Buffer.alloc = function (size, fill, encoding) {
23382 return alloc(size, fill, encoding)
ab78acc6 23383}
3af2954a 23384
8b095871
IC
23385function allocUnsafe (size) {
23386 assertSize(size)
23387 return createBuffer(size < 0 ? 0 : checked(size) | 0)
ab78acc6 23388}
3af2954a 23389
8b095871
IC
23390/**
23391 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
23392 * */
23393Buffer.allocUnsafe = function (size) {
23394 return allocUnsafe(size)
23395}
23396/**
23397 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
23398 */
23399Buffer.allocUnsafeSlow = function (size) {
23400 return allocUnsafe(size)
ab78acc6 23401}
3af2954a 23402
8b095871
IC
23403function fromString (string, encoding) {
23404 if (typeof encoding !== 'string' || encoding === '') {
23405 encoding = 'utf8'
23406 }
23407
23408 if (!Buffer.isEncoding(encoding)) {
23409 throw new TypeError('"encoding" must be a valid string encoding')
23410 }
23411
23412 var length = byteLength(string, encoding) | 0
23413 var buf = createBuffer(length)
23414
23415 var actual = buf.write(string, encoding)
23416
23417 if (actual !== length) {
23418 // Writing a hex string, for example, that contains invalid characters will
23419 // cause everything after the first invalid character to be ignored. (e.g.
23420 // 'abxxcd' will be treated as 'ab')
23421 buf = buf.slice(0, actual)
23422 }
23423
23424 return buf
ab78acc6 23425}
3af2954a 23426
8b095871
IC
23427function fromArrayLike (array) {
23428 var length = array.length < 0 ? 0 : checked(array.length) | 0
23429 var buf = createBuffer(length)
23430 for (var i = 0; i < length; i += 1) {
23431 buf[i] = array[i] & 255
23432 }
23433 return buf
23434}
3af2954a 23435
8b095871
IC
23436function fromArrayBuffer (array, byteOffset, length) {
23437 if (byteOffset < 0 || array.byteLength < byteOffset) {
23438 throw new RangeError('\'offset\' is out of bounds')
23439 }
3af2954a 23440
8b095871
IC
23441 if (array.byteLength < byteOffset + (length || 0)) {
23442 throw new RangeError('\'length\' is out of bounds')
ab78acc6
IC
23443 }
23444
8b095871
IC
23445 var buf
23446 if (byteOffset === undefined && length === undefined) {
23447 buf = new Uint8Array(array)
23448 } else if (length === undefined) {
23449 buf = new Uint8Array(array, byteOffset)
23450 } else {
23451 buf = new Uint8Array(array, byteOffset, length)
23452 }
3af2954a 23453
8b095871
IC
23454 // Return an augmented `Uint8Array` instance
23455 buf.__proto__ = Buffer.prototype
23456 return buf
23457}
23458
23459function fromObject (obj) {
23460 if (Buffer.isBuffer(obj)) {
23461 var len = checked(obj.length) | 0
23462 var buf = createBuffer(len)
23463
23464 if (buf.length === 0) {
23465 return buf
ab78acc6 23466 }
8b095871
IC
23467
23468 obj.copy(buf, 0, 0, len)
23469 return buf
23470 }
23471
23472 if (obj) {
23473 if (ArrayBuffer.isView(obj) || 'length' in obj) {
23474 if (typeof obj.length !== 'number' || isnan(obj.length)) {
23475 return createBuffer(0)
ab78acc6 23476 }
8b095871 23477 return fromArrayLike(obj)
ab78acc6 23478 }
3af2954a 23479
8b095871
IC
23480 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
23481 return fromArrayLike(obj.data)
3af2954a
IC
23482 }
23483 }
8b095871
IC
23484
23485 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
ab78acc6 23486}
3af2954a 23487
8b095871
IC
23488function checked (length) {
23489 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
23490 // length is NaN (which is otherwise coerced to zero.)
23491 if (length >= K_MAX_LENGTH) {
23492 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
23493 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
ab78acc6 23494 }
8b095871
IC
23495 return length | 0
23496}
23497
23498function SlowBuffer (length) {
23499 if (+length != length) { // eslint-disable-line eqeqeq
23500 length = 0
3af2954a 23501 }
8b095871 23502 return Buffer.alloc(+length)
ab78acc6 23503}
3af2954a 23504
8b095871
IC
23505Buffer.isBuffer = function isBuffer (b) {
23506 return b != null && b._isBuffer === true
ab78acc6 23507}
3af2954a 23508
8b095871
IC
23509Buffer.compare = function compare (a, b) {
23510 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
23511 throw new TypeError('Arguments must be Buffers')
23512 }
23513
23514 if (a === b) return 0
23515
23516 var x = a.length
23517 var y = b.length
23518
23519 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
23520 if (a[i] !== b[i]) {
23521 x = a[i]
23522 y = b[i]
23523 break
ab78acc6
IC
23524 }
23525 }
8b095871
IC
23526
23527 if (x < y) return -1
23528 if (y < x) return 1
23529 return 0
23530}
23531
23532Buffer.isEncoding = function isEncoding (encoding) {
23533 switch (String(encoding).toLowerCase()) {
23534 case 'hex':
23535 case 'utf8':
23536 case 'utf-8':
23537 case 'ascii':
23538 case 'latin1':
23539 case 'binary':
23540 case 'base64':
23541 case 'ucs2':
23542 case 'ucs-2':
23543 case 'utf16le':
23544 case 'utf-16le':
23545 return true
23546 default:
23547 return false
23548 }
ab78acc6
IC
23549}
23550
8b095871
IC
23551Buffer.concat = function concat (list, length) {
23552 if (!Array.isArray(list)) {
23553 throw new TypeError('"list" argument must be an Array of Buffers')
23554 }
ab78acc6 23555
8b095871
IC
23556 if (list.length === 0) {
23557 return Buffer.alloc(0)
23558 }
ab78acc6 23559
8b095871
IC
23560 var i
23561 if (length === undefined) {
23562 length = 0
23563 for (i = 0; i < list.length; ++i) {
23564 length += list[i].length
23565 }
3af2954a 23566 }
8b095871
IC
23567
23568 var buffer = Buffer.allocUnsafe(length)
23569 var pos = 0
23570 for (i = 0; i < list.length; ++i) {
23571 var buf = list[i]
23572 if (!Buffer.isBuffer(buf)) {
23573 throw new TypeError('"list" argument must be an Array of Buffers')
23574 }
23575 buf.copy(buffer, pos)
23576 pos += buf.length
ab78acc6 23577 }
8b095871 23578 return buffer
ab78acc6
IC
23579}
23580
8b095871
IC
23581function byteLength (string, encoding) {
23582 if (Buffer.isBuffer(string)) {
23583 return string.length
23584 }
23585 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
23586 return string.byteLength
23587 }
23588 if (typeof string !== 'string') {
23589 string = '' + string
23590 }
23591
23592 var len = string.length
23593 if (len === 0) return 0
23594
23595 // Use a for loop to avoid recursion
23596 var loweredCase = false
23597 for (;;) {
23598 switch (encoding) {
23599 case 'ascii':
23600 case 'latin1':
23601 case 'binary':
23602 return len
23603 case 'utf8':
23604 case 'utf-8':
23605 case undefined:
23606 return utf8ToBytes(string).length
23607 case 'ucs2':
23608 case 'ucs-2':
23609 case 'utf16le':
23610 case 'utf-16le':
23611 return len * 2
23612 case 'hex':
23613 return len >>> 1
23614 case 'base64':
23615 return base64ToBytes(string).length
23616 default:
23617 if (loweredCase) return utf8ToBytes(string).length // assume utf8
23618 encoding = ('' + encoding).toLowerCase()
23619 loweredCase = true
ab78acc6 23620 }
3af2954a 23621 }
ab78acc6 23622}
8b095871 23623Buffer.byteLength = byteLength
3af2954a 23624
8b095871
IC
23625function slowToString (encoding, start, end) {
23626 var loweredCase = false
3af2954a 23627
8b095871
IC
23628 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
23629 // property of a typed array.
3af2954a 23630
8b095871
IC
23631 // This behaves neither like String nor Uint8Array in that we set start/end
23632 // to their upper/lower bounds if the value passed is out of range.
23633 // undefined is handled specially as per ECMA-262 6th Edition,
23634 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
23635 if (start === undefined || start < 0) {
23636 start = 0
23637 }
23638 // Return early if start > this.length. Done here to prevent potential uint32
23639 // coercion fail below.
23640 if (start > this.length) {
23641 return ''
23642 }
3af2954a 23643
8b095871
IC
23644 if (end === undefined || end > this.length) {
23645 end = this.length
23646 }
3af2954a 23647
8b095871
IC
23648 if (end <= 0) {
23649 return ''
23650 }
3af2954a 23651
8b095871
IC
23652 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
23653 end >>>= 0
23654 start >>>= 0
3af2954a 23655
8b095871
IC
23656 if (end <= start) {
23657 return ''
3af2954a
IC
23658 }
23659
8b095871 23660 if (!encoding) encoding = 'utf8'
3af2954a 23661
8b095871
IC
23662 while (true) {
23663 switch (encoding) {
23664 case 'hex':
23665 return hexSlice(this, start, end)
23666
23667 case 'utf8':
23668 case 'utf-8':
23669 return utf8Slice(this, start, end)
23670
23671 case 'ascii':
23672 return asciiSlice(this, start, end)
23673
23674 case 'latin1':
23675 case 'binary':
23676 return latin1Slice(this, start, end)
23677
23678 case 'base64':
23679 return base64Slice(this, start, end)
23680
23681 case 'ucs2':
23682 case 'ucs-2':
23683 case 'utf16le':
23684 case 'utf-16le':
23685 return utf16leSlice(this, start, end)
23686
23687 default:
23688 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
23689 encoding = (encoding + '').toLowerCase()
23690 loweredCase = true
23691 }
23692 }
ab78acc6 23693}
3af2954a 23694
8b095871
IC
23695// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
23696// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
23697// reliably in a browserify context because there could be multiple different
23698// copies of the 'buffer' package in use. This method works even for Buffer
23699// instances that were created from another copy of the `buffer` package.
23700// See: https://github.com/feross/buffer/issues/154
23701Buffer.prototype._isBuffer = true
23702
23703function swap (b, n, m) {
23704 var i = b[n]
23705 b[n] = b[m]
23706 b[m] = i
ab78acc6 23707}
3af2954a 23708
8b095871
IC
23709Buffer.prototype.swap16 = function swap16 () {
23710 var len = this.length
23711 if (len % 2 !== 0) {
23712 throw new RangeError('Buffer size must be a multiple of 16-bits')
23713 }
23714 for (var i = 0; i < len; i += 2) {
23715 swap(this, i, i + 1)
23716 }
23717 return this
23718}
3af2954a 23719
8b095871
IC
23720Buffer.prototype.swap32 = function swap32 () {
23721 var len = this.length
23722 if (len % 4 !== 0) {
23723 throw new RangeError('Buffer size must be a multiple of 32-bits')
23724 }
23725 for (var i = 0; i < len; i += 4) {
23726 swap(this, i, i + 3)
23727 swap(this, i + 1, i + 2)
23728 }
23729 return this
23730}
3af2954a 23731
8b095871
IC
23732Buffer.prototype.swap64 = function swap64 () {
23733 var len = this.length
23734 if (len % 8 !== 0) {
23735 throw new RangeError('Buffer size must be a multiple of 64-bits')
3af2954a 23736 }
8b095871
IC
23737 for (var i = 0; i < len; i += 8) {
23738 swap(this, i, i + 7)
23739 swap(this, i + 1, i + 6)
23740 swap(this, i + 2, i + 5)
23741 swap(this, i + 3, i + 4)
23742 }
23743 return this
23744}
3af2954a 23745
8b095871
IC
23746Buffer.prototype.toString = function toString () {
23747 var length = this.length
23748 if (length === 0) return ''
23749 if (arguments.length === 0) return utf8Slice(this, 0, length)
23750 return slowToString.apply(this, arguments)
ab78acc6 23751}
3af2954a 23752
8b095871
IC
23753Buffer.prototype.equals = function equals (b) {
23754 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
23755 if (this === b) return true
23756 return Buffer.compare(this, b) === 0
23757}
3af2954a 23758
8b095871
IC
23759Buffer.prototype.inspect = function inspect () {
23760 var str = ''
23761 var max = exports.INSPECT_MAX_BYTES
23762 if (this.length > 0) {
23763 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
23764 if (this.length > max) str += ' ... '
23765 }
23766 return '<Buffer ' + str + '>'
ab78acc6 23767}
3af2954a 23768
8b095871
IC
23769Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
23770 if (!Buffer.isBuffer(target)) {
23771 throw new TypeError('Argument must be a Buffer')
23772 }
3af2954a 23773
8b095871
IC
23774 if (start === undefined) {
23775 start = 0
23776 }
23777 if (end === undefined) {
23778 end = target ? target.length : 0
23779 }
23780 if (thisStart === undefined) {
23781 thisStart = 0
23782 }
23783 if (thisEnd === undefined) {
23784 thisEnd = this.length
23785 }
3af2954a 23786
8b095871
IC
23787 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
23788 throw new RangeError('out of range index')
23789 }
3af2954a 23790
8b095871
IC
23791 if (thisStart >= thisEnd && start >= end) {
23792 return 0
23793 }
23794 if (thisStart >= thisEnd) {
23795 return -1
23796 }
23797 if (start >= end) {
23798 return 1
23799 }
3af2954a 23800
8b095871
IC
23801 start >>>= 0
23802 end >>>= 0
23803 thisStart >>>= 0
23804 thisEnd >>>= 0
3af2954a 23805
8b095871 23806 if (this === target) return 0
3af2954a 23807
8b095871
IC
23808 var x = thisEnd - thisStart
23809 var y = end - start
23810 var len = Math.min(x, y)
23811
23812 var thisCopy = this.slice(thisStart, thisEnd)
23813 var targetCopy = target.slice(start, end)
23814
23815 for (var i = 0; i < len; ++i) {
23816 if (thisCopy[i] !== targetCopy[i]) {
23817 x = thisCopy[i]
23818 y = targetCopy[i]
23819 break
3af2954a 23820 }
8b095871
IC
23821 }
23822
23823 if (x < y) return -1
23824 if (y < x) return 1
23825 return 0
ab78acc6 23826}
3af2954a 23827
8b095871
IC
23828// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
23829// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
ab78acc6 23830//
8b095871
IC
23831// Arguments:
23832// - buffer - a Buffer to search
23833// - val - a string, Buffer, or number
23834// - byteOffset - an index into `buffer`; will be clamped to an int32
23835// - encoding - an optional encoding, relevant is val is a string
23836// - dir - true for indexOf, false for lastIndexOf
23837function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
23838 // Empty buffer means no match
23839 if (buffer.length === 0) return -1
23840
23841 // Normalize byteOffset
23842 if (typeof byteOffset === 'string') {
23843 encoding = byteOffset
23844 byteOffset = 0
23845 } else if (byteOffset > 0x7fffffff) {
23846 byteOffset = 0x7fffffff
23847 } else if (byteOffset < -0x80000000) {
23848 byteOffset = -0x80000000
23849 }
23850 byteOffset = +byteOffset // Coerce to Number.
23851 if (isNaN(byteOffset)) {
23852 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
23853 byteOffset = dir ? 0 : (buffer.length - 1)
23854 }
23855
23856 // Normalize byteOffset: negative offsets start from the end of the buffer
23857 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
23858 if (byteOffset >= buffer.length) {
23859 if (dir) return -1
23860 else byteOffset = buffer.length - 1
23861 } else if (byteOffset < 0) {
23862 if (dir) byteOffset = 0
23863 else return -1
23864 }
23865
23866 // Normalize val
23867 if (typeof val === 'string') {
23868 val = Buffer.from(val, encoding)
23869 }
3af2954a 23870
8b095871
IC
23871 // Finally, search either indexOf (if dir is true) or lastIndexOf
23872 if (Buffer.isBuffer(val)) {
23873 // Special case: looking for empty string/buffer always fails
23874 if (val.length === 0) {
23875 return -1
23876 }
23877 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
23878 } else if (typeof val === 'number') {
23879 val = val & 0xFF // Search for a byte value [0-255]
23880 if (typeof Uint8Array.prototype.indexOf === 'function') {
23881 if (dir) {
23882 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
23883 } else {
23884 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
23885 }
23886 }
23887 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
23888 }
3af2954a 23889
8b095871
IC
23890 throw new TypeError('val must be string, number or Buffer')
23891}
3af2954a 23892
8b095871
IC
23893function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
23894 var indexSize = 1
23895 var arrLength = arr.length
23896 var valLength = val.length
3af2954a 23897
8b095871
IC
23898 if (encoding !== undefined) {
23899 encoding = String(encoding).toLowerCase()
23900 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
23901 encoding === 'utf16le' || encoding === 'utf-16le') {
23902 if (arr.length < 2 || val.length < 2) {
23903 return -1
23904 }
23905 indexSize = 2
23906 arrLength /= 2
23907 valLength /= 2
23908 byteOffset /= 2
23909 }
23910 }
3af2954a 23911
8b095871
IC
23912 function read (buf, i) {
23913 if (indexSize === 1) {
23914 return buf[i]
23915 } else {
23916 return buf.readUInt16BE(i * indexSize)
23917 }
23918 }
3af2954a 23919
8b095871
IC
23920 var i
23921 if (dir) {
23922 var foundIndex = -1
23923 for (i = byteOffset; i < arrLength; i++) {
23924 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
23925 if (foundIndex === -1) foundIndex = i
23926 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
23927 } else {
23928 if (foundIndex !== -1) i -= i - foundIndex
23929 foundIndex = -1
23930 }
23931 }
ab78acc6 23932 } else {
8b095871
IC
23933 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
23934 for (i = byteOffset; i >= 0; i--) {
23935 var found = true
23936 for (var j = 0; j < valLength; j++) {
23937 if (read(arr, i + j) !== read(val, j)) {
23938 found = false
23939 break
23940 }
23941 }
23942 if (found) return i
23943 }
ab78acc6 23944 }
3af2954a 23945
8b095871
IC
23946 return -1
23947}
3af2954a 23948
8b095871
IC
23949Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
23950 return this.indexOf(val, byteOffset, encoding) !== -1
23951}
23952
23953Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
23954 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
23955}
3af2954a 23956
8b095871
IC
23957Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
23958 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
23959}
23960
23961function hexWrite (buf, string, offset, length) {
23962 offset = Number(offset) || 0
23963 var remaining = buf.length - offset
23964 if (!length) {
23965 length = remaining
23966 } else {
23967 length = Number(length)
23968 if (length > remaining) {
23969 length = remaining
3af2954a 23970 }
3af2954a
IC
23971 }
23972
8b095871
IC
23973 // must be an even number of digits
23974 var strLen = string.length
23975 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
3af2954a 23976
8b095871
IC
23977 if (length > strLen / 2) {
23978 length = strLen / 2
ab78acc6 23979 }
8b095871
IC
23980 for (var i = 0; i < length; ++i) {
23981 var parsed = parseInt(string.substr(i * 2, 2), 16)
23982 if (isNaN(parsed)) return i
23983 buf[offset + i] = parsed
ab78acc6 23984 }
8b095871 23985 return i
ab78acc6 23986}
3af2954a 23987
8b095871
IC
23988function utf8Write (buf, string, offset, length) {
23989 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
ab78acc6 23990}
3af2954a 23991
8b095871
IC
23992function asciiWrite (buf, string, offset, length) {
23993 return blitBuffer(asciiToBytes(string), buf, offset, length)
ab78acc6 23994}
3af2954a 23995
8b095871
IC
23996function latin1Write (buf, string, offset, length) {
23997 return asciiWrite(buf, string, offset, length)
ab78acc6 23998}
3af2954a 23999
8b095871
IC
24000function base64Write (buf, string, offset, length) {
24001 return blitBuffer(base64ToBytes(string), buf, offset, length)
ab78acc6 24002}
3af2954a 24003
8b095871
IC
24004function ucs2Write (buf, string, offset, length) {
24005 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
24006}
3af2954a 24007
8b095871
IC
24008Buffer.prototype.write = function write (string, offset, length, encoding) {
24009 // Buffer#write(string)
24010 if (offset === undefined) {
24011 encoding = 'utf8'
24012 length = this.length
24013 offset = 0
24014 // Buffer#write(string, encoding)
24015 } else if (length === undefined && typeof offset === 'string') {
24016 encoding = offset
24017 length = this.length
24018 offset = 0
24019 // Buffer#write(string, offset[, length][, encoding])
24020 } else if (isFinite(offset)) {
24021 offset = offset >>> 0
24022 if (isFinite(length)) {
24023 length = length >>> 0
24024 if (encoding === undefined) encoding = 'utf8'
24025 } else {
24026 encoding = length
24027 length = undefined
24028 }
24029 } else {
24030 throw new Error(
24031 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
24032 )
3af2954a
IC
24033 }
24034
8b095871
IC
24035 var remaining = this.length - offset
24036 if (length === undefined || length > remaining) length = remaining
3af2954a 24037
8b095871
IC
24038 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
24039 throw new RangeError('Attempt to write outside buffer bounds')
ab78acc6 24040 }
3af2954a 24041
8b095871 24042 if (!encoding) encoding = 'utf8'
3af2954a 24043
8b095871
IC
24044 var loweredCase = false
24045 for (;;) {
24046 switch (encoding) {
24047 case 'hex':
24048 return hexWrite(this, string, offset, length)
3af2954a 24049
8b095871
IC
24050 case 'utf8':
24051 case 'utf-8':
24052 return utf8Write(this, string, offset, length)
3af2954a 24053
8b095871
IC
24054 case 'ascii':
24055 return asciiWrite(this, string, offset, length)
3af2954a 24056
8b095871
IC
24057 case 'latin1':
24058 case 'binary':
24059 return latin1Write(this, string, offset, length)
3af2954a 24060
8b095871
IC
24061 case 'base64':
24062 // Warning: maxLength not taken into account in base64Write
24063 return base64Write(this, string, offset, length)
3af2954a 24064
8b095871
IC
24065 case 'ucs2':
24066 case 'ucs-2':
24067 case 'utf16le':
24068 case 'utf-16le':
24069 return ucs2Write(this, string, offset, length)
3af2954a 24070
8b095871
IC
24071 default:
24072 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
24073 encoding = ('' + encoding).toLowerCase()
24074 loweredCase = true
24075 }
3af2954a 24076 }
ab78acc6 24077}
3af2954a 24078
8b095871
IC
24079Buffer.prototype.toJSON = function toJSON () {
24080 return {
24081 type: 'Buffer',
24082 data: Array.prototype.slice.call(this._arr || this, 0)
3af2954a 24083 }
ab78acc6
IC
24084}
24085
8b095871
IC
24086function base64Slice (buf, start, end) {
24087 if (start === 0 && end === buf.length) {
24088 return base64.fromByteArray(buf)
24089 } else {
24090 return base64.fromByteArray(buf.slice(start, end))
3af2954a 24091 }
8b095871 24092}
3af2954a 24093
8b095871
IC
24094function utf8Slice (buf, start, end) {
24095 end = Math.min(buf.length, end)
24096 var res = []
3af2954a 24097
8b095871
IC
24098 var i = start
24099 while (i < end) {
24100 var firstByte = buf[i]
24101 var codePoint = null
24102 var bytesPerSequence = (firstByte > 0xEF) ? 4
24103 : (firstByte > 0xDF) ? 3
24104 : (firstByte > 0xBF) ? 2
24105 : 1
3af2954a 24106
8b095871
IC
24107 if (i + bytesPerSequence <= end) {
24108 var secondByte, thirdByte, fourthByte, tempCodePoint
3af2954a 24109
8b095871
IC
24110 switch (bytesPerSequence) {
24111 case 1:
24112 if (firstByte < 0x80) {
24113 codePoint = firstByte
24114 }
24115 break
24116 case 2:
24117 secondByte = buf[i + 1]
24118 if ((secondByte & 0xC0) === 0x80) {
24119 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
24120 if (tempCodePoint > 0x7F) {
24121 codePoint = tempCodePoint
24122 }
24123 }
24124 break
24125 case 3:
24126 secondByte = buf[i + 1]
24127 thirdByte = buf[i + 2]
24128 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
24129 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
24130 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
24131 codePoint = tempCodePoint
24132 }
24133 }
24134 break
24135 case 4:
24136 secondByte = buf[i + 1]
24137 thirdByte = buf[i + 2]
24138 fourthByte = buf[i + 3]
24139 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
24140 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
24141 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
24142 codePoint = tempCodePoint
24143 }
24144 }
24145 }
24146 }
3af2954a 24147
8b095871
IC
24148 if (codePoint === null) {
24149 // we did not generate a valid codePoint so insert a
24150 // replacement char (U+FFFD) and advance only 1 byte
24151 codePoint = 0xFFFD
24152 bytesPerSequence = 1
24153 } else if (codePoint > 0xFFFF) {
24154 // encode to utf16 (surrogate pair dance)
24155 codePoint -= 0x10000
24156 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
24157 codePoint = 0xDC00 | codePoint & 0x3FF
24158 }
24159
24160 res.push(codePoint)
24161 i += bytesPerSequence
3af2954a
IC
24162 }
24163
8b095871 24164 return decodeCodePointsArray(res)
ab78acc6 24165}
3af2954a 24166
8b095871
IC
24167// Based on http://stackoverflow.com/a/22747272/680742, the browser with
24168// the lowest limit is Chrome, with 0x10000 args.
24169// We go 1 magnitude less, for safety
24170var MAX_ARGUMENTS_LENGTH = 0x1000
3af2954a 24171
8b095871
IC
24172function decodeCodePointsArray (codePoints) {
24173 var len = codePoints.length
24174 if (len <= MAX_ARGUMENTS_LENGTH) {
24175 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
3af2954a
IC
24176 }
24177
8b095871
IC
24178 // Decode in chunks to avoid "call stack size exceeded".
24179 var res = ''
24180 var i = 0
24181 while (i < len) {
24182 res += String.fromCharCode.apply(
24183 String,
24184 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
24185 )
3af2954a 24186 }
8b095871
IC
24187 return res
24188}
3af2954a 24189
8b095871
IC
24190function asciiSlice (buf, start, end) {
24191 var ret = ''
24192 end = Math.min(buf.length, end)
3af2954a 24193
8b095871
IC
24194 for (var i = start; i < end; ++i) {
24195 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 24196 }
8b095871
IC
24197 return ret
24198}
3af2954a 24199
8b095871
IC
24200function latin1Slice (buf, start, end) {
24201 var ret = ''
24202 end = Math.min(buf.length, end)
3af2954a 24203
8b095871
IC
24204 for (var i = start; i < end; ++i) {
24205 ret += String.fromCharCode(buf[i])
3af2954a 24206 }
8b095871 24207 return ret
ab78acc6 24208}
3af2954a 24209
8b095871
IC
24210function hexSlice (buf, start, end) {
24211 var len = buf.length
3af2954a 24212
8b095871
IC
24213 if (!start || start < 0) start = 0
24214 if (!end || end < 0 || end > len) end = len
3af2954a 24215
8b095871
IC
24216 var out = ''
24217 for (var i = start; i < end; ++i) {
24218 out += toHex(buf[i])
3af2954a 24219 }
8b095871
IC
24220 return out
24221}
3af2954a 24222
8b095871
IC
24223function utf16leSlice (buf, start, end) {
24224 var bytes = buf.slice(start, end)
24225 var res = ''
24226 for (var i = 0; i < bytes.length; i += 2) {
24227 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
24228 }
24229 return res
24230}
3af2954a 24231
8b095871
IC
24232Buffer.prototype.slice = function slice (start, end) {
24233 var len = this.length
24234 start = ~~start
24235 end = end === undefined ? len : ~~end
3af2954a 24236
8b095871
IC
24237 if (start < 0) {
24238 start += len
24239 if (start < 0) start = 0
24240 } else if (start > len) {
24241 start = len
24242 }
3af2954a 24243
8b095871
IC
24244 if (end < 0) {
24245 end += len
24246 if (end < 0) end = 0
24247 } else if (end > len) {
24248 end = len
24249 }
3af2954a 24250
8b095871 24251 if (end < start) end = start
3af2954a 24252
8b095871
IC
24253 var newBuf = this.subarray(start, end)
24254 // Return an augmented `Uint8Array` instance
24255 newBuf.__proto__ = Buffer.prototype
24256 return newBuf
24257}
3af2954a 24258
8b095871
IC
24259/*
24260 * Need to make sure that buffer isn't trying to write out of bounds.
ab78acc6 24261 */
8b095871
IC
24262function checkOffset (offset, ext, length) {
24263 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
24264 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
ab78acc6 24265}
3af2954a 24266
8b095871
IC
24267Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
24268 offset = offset >>> 0
24269 byteLength = byteLength >>> 0
24270 if (!noAssert) checkOffset(offset, byteLength, this.length)
24271
24272 var val = this[offset]
24273 var mul = 1
24274 var i = 0
24275 while (++i < byteLength && (mul *= 0x100)) {
24276 val += this[offset + i] * mul
3af2954a
IC
24277 }
24278
8b095871
IC
24279 return val
24280}
3af2954a 24281
8b095871
IC
24282Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
24283 offset = offset >>> 0
24284 byteLength = byteLength >>> 0
24285 if (!noAssert) {
24286 checkOffset(offset, byteLength, this.length)
ab78acc6 24287 }
3af2954a 24288
8b095871
IC
24289 var val = this[offset + --byteLength]
24290 var mul = 1
24291 while (byteLength > 0 && (mul *= 0x100)) {
24292 val += this[offset + --byteLength] * mul
ab78acc6 24293 }
3af2954a 24294
8b095871 24295 return val
ab78acc6 24296}
3af2954a 24297
8b095871
IC
24298Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
24299 offset = offset >>> 0
24300 if (!noAssert) checkOffset(offset, 1, this.length)
24301 return this[offset]
ab78acc6 24302}
3af2954a 24303
8b095871
IC
24304Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
24305 offset = offset >>> 0
24306 if (!noAssert) checkOffset(offset, 2, this.length)
24307 return this[offset] | (this[offset + 1] << 8)
24308}
3af2954a 24309
8b095871
IC
24310Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
24311 offset = offset >>> 0
24312 if (!noAssert) checkOffset(offset, 2, this.length)
24313 return (this[offset] << 8) | this[offset + 1]
24314}
3af2954a 24315
8b095871
IC
24316Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
24317 offset = offset >>> 0
24318 if (!noAssert) checkOffset(offset, 4, this.length)
24319
24320 return ((this[offset]) |
24321 (this[offset + 1] << 8) |
24322 (this[offset + 2] << 16)) +
24323 (this[offset + 3] * 0x1000000)
ab78acc6 24324}
3af2954a 24325
8b095871
IC
24326Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
24327 offset = offset >>> 0
24328 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 24329
8b095871
IC
24330 return (this[offset] * 0x1000000) +
24331 ((this[offset + 1] << 16) |
24332 (this[offset + 2] << 8) |
24333 this[offset + 3])
24334}
3af2954a 24335
8b095871
IC
24336Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
24337 offset = offset >>> 0
24338 byteLength = byteLength >>> 0
24339 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 24340
8b095871
IC
24341 var val = this[offset]
24342 var mul = 1
24343 var i = 0
24344 while (++i < byteLength && (mul *= 0x100)) {
24345 val += this[offset + i] * mul
3af2954a 24346 }
8b095871 24347 mul *= 0x80
3af2954a 24348
8b095871 24349 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3af2954a 24350
8b095871 24351 return val
ab78acc6 24352}
3af2954a 24353
8b095871
IC
24354Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
24355 offset = offset >>> 0
24356 byteLength = byteLength >>> 0
24357 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 24358
8b095871
IC
24359 var i = byteLength
24360 var mul = 1
24361 var val = this[offset + --i]
24362 while (i > 0 && (mul *= 0x100)) {
24363 val += this[offset + --i] * mul
3af2954a 24364 }
8b095871 24365 mul *= 0x80
3af2954a 24366
8b095871
IC
24367 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
24368
24369 return val
ab78acc6 24370}
3af2954a 24371
8b095871
IC
24372Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
24373 offset = offset >>> 0
24374 if (!noAssert) checkOffset(offset, 1, this.length)
24375 if (!(this[offset] & 0x80)) return (this[offset])
24376 return ((0xff - this[offset] + 1) * -1)
ab78acc6 24377}
3af2954a 24378
8b095871
IC
24379Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
24380 offset = offset >>> 0
24381 if (!noAssert) checkOffset(offset, 2, this.length)
24382 var val = this[offset] | (this[offset + 1] << 8)
24383 return (val & 0x8000) ? val | 0xFFFF0000 : val
ab78acc6 24384}
3af2954a 24385
8b095871
IC
24386Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
24387 offset = offset >>> 0
24388 if (!noAssert) checkOffset(offset, 2, this.length)
24389 var val = this[offset + 1] | (this[offset] << 8)
24390 return (val & 0x8000) ? val | 0xFFFF0000 : val
24391}
ab78acc6 24392
8b095871
IC
24393Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
24394 offset = offset >>> 0
24395 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 24396
8b095871
IC
24397 return (this[offset]) |
24398 (this[offset + 1] << 8) |
24399 (this[offset + 2] << 16) |
24400 (this[offset + 3] << 24)
ab78acc6 24401}
3af2954a 24402
8b095871
IC
24403Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
24404 offset = offset >>> 0
24405 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 24406
8b095871
IC
24407 return (this[offset] << 24) |
24408 (this[offset + 1] << 16) |
24409 (this[offset + 2] << 8) |
24410 (this[offset + 3])
24411}
3af2954a 24412
8b095871
IC
24413Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
24414 offset = offset >>> 0
24415 if (!noAssert) checkOffset(offset, 4, this.length)
24416 return ieee754.read(this, offset, true, 23, 4)
ab78acc6 24417}
3af2954a 24418
8b095871
IC
24419Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
24420 offset = offset >>> 0
24421 if (!noAssert) checkOffset(offset, 4, this.length)
24422 return ieee754.read(this, offset, false, 23, 4)
ab78acc6 24423}
3af2954a 24424
8b095871
IC
24425Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
24426 offset = offset >>> 0
24427 if (!noAssert) checkOffset(offset, 8, this.length)
24428 return ieee754.read(this, offset, true, 52, 8)
24429}
3af2954a 24430
8b095871
IC
24431Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
24432 offset = offset >>> 0
24433 if (!noAssert) checkOffset(offset, 8, this.length)
24434 return ieee754.read(this, offset, false, 52, 8)
ab78acc6 24435}
3af2954a 24436
8b095871
IC
24437function checkInt (buf, value, offset, ext, max, min) {
24438 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
24439 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
24440 if (offset + ext > buf.length) throw new RangeError('Index out of range')
ab78acc6 24441}
3af2954a 24442
8b095871
IC
24443Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
24444 value = +value
24445 offset = offset >>> 0
24446 byteLength = byteLength >>> 0
24447 if (!noAssert) {
24448 var maxBytes = Math.pow(2, 8 * byteLength) - 1
24449 checkInt(this, value, offset, byteLength, maxBytes, 0)
3af2954a
IC
24450 }
24451
8b095871 24452 var mul = 1
ab78acc6 24453 var i = 0
8b095871
IC
24454 this[offset] = value & 0xFF
24455 while (++i < byteLength && (mul *= 0x100)) {
24456 this[offset + i] = (value / mul) & 0xFF
24457 }
3af2954a 24458
8b095871
IC
24459 return offset + byteLength
24460}
24461
24462Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
24463 value = +value
24464 offset = offset >>> 0
24465 byteLength = byteLength >>> 0
24466 if (!noAssert) {
24467 var maxBytes = Math.pow(2, 8 * byteLength) - 1
24468 checkInt(this, value, offset, byteLength, maxBytes, 0)
ab78acc6 24469 }
3af2954a 24470
8b095871
IC
24471 var i = byteLength - 1
24472 var mul = 1
24473 this[offset + i] = value & 0xFF
24474 while (--i >= 0 && (mul *= 0x100)) {
24475 this[offset + i] = (value / mul) & 0xFF
ab78acc6 24476 }
3af2954a 24477
8b095871
IC
24478 return offset + byteLength
24479}
24480
24481Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
24482 value = +value
24483 offset = offset >>> 0
24484 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
24485 this[offset] = (value & 0xff)
24486 return offset + 1
24487}
24488
24489Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
24490 value = +value
24491 offset = offset >>> 0
24492 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
24493 this[offset] = (value & 0xff)
24494 this[offset + 1] = (value >>> 8)
24495 return offset + 2
24496}
24497
24498Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
24499 value = +value
24500 offset = offset >>> 0
24501 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
24502 this[offset] = (value >>> 8)
24503 this[offset + 1] = (value & 0xff)
24504 return offset + 2
ab78acc6 24505}
3af2954a 24506
8b095871
IC
24507Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
24508 value = +value
24509 offset = offset >>> 0
24510 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
24511 this[offset + 3] = (value >>> 24)
24512 this[offset + 2] = (value >>> 16)
24513 this[offset + 1] = (value >>> 8)
24514 this[offset] = (value & 0xff)
24515 return offset + 4
ab78acc6 24516}
3af2954a 24517
8b095871
IC
24518Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
24519 value = +value
24520 offset = offset >>> 0
24521 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
24522 this[offset] = (value >>> 24)
24523 this[offset + 1] = (value >>> 16)
24524 this[offset + 2] = (value >>> 8)
24525 this[offset + 3] = (value & 0xff)
24526 return offset + 4
24527}
3af2954a 24528
8b095871
IC
24529Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
24530 value = +value
24531 offset = offset >>> 0
24532 if (!noAssert) {
24533 var limit = Math.pow(2, (8 * byteLength) - 1)
24534
24535 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3af2954a
IC
24536 }
24537
8b095871
IC
24538 var i = 0
24539 var mul = 1
24540 var sub = 0
24541 this[offset] = value & 0xFF
24542 while (++i < byteLength && (mul *= 0x100)) {
24543 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
24544 sub = 1
ab78acc6 24545 }
8b095871 24546 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a
IC
24547 }
24548
8b095871 24549 return offset + byteLength
ab78acc6 24550}
3af2954a 24551
8b095871
IC
24552Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
24553 value = +value
24554 offset = offset >>> 0
24555 if (!noAssert) {
24556 var limit = Math.pow(2, (8 * byteLength) - 1)
ab78acc6 24557
8b095871
IC
24558 checkInt(this, value, offset, byteLength, limit - 1, -limit)
24559 }
ab78acc6 24560
8b095871
IC
24561 var i = byteLength - 1
24562 var mul = 1
24563 var sub = 0
24564 this[offset + i] = value & 0xFF
24565 while (--i >= 0 && (mul *= 0x100)) {
24566 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
24567 sub = 1
3af2954a 24568 }
8b095871 24569 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a 24570 }
3af2954a 24571
8b095871
IC
24572 return offset + byteLength
24573}
3af2954a 24574
8b095871
IC
24575Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
24576 value = +value
24577 offset = offset >>> 0
24578 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
24579 if (value < 0) value = 0xff + value + 1
24580 this[offset] = (value & 0xff)
24581 return offset + 1
24582}
3af2954a 24583
8b095871
IC
24584Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
24585 value = +value
24586 offset = offset >>> 0
24587 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
24588 this[offset] = (value & 0xff)
24589 this[offset + 1] = (value >>> 8)
24590 return offset + 2
24591}
3af2954a 24592
8b095871
IC
24593Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
24594 value = +value
24595 offset = offset >>> 0
24596 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
24597 this[offset] = (value >>> 8)
24598 this[offset + 1] = (value & 0xff)
24599 return offset + 2
24600}
3af2954a 24601
8b095871
IC
24602Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
24603 value = +value
24604 offset = offset >>> 0
24605 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
24606 this[offset] = (value & 0xff)
24607 this[offset + 1] = (value >>> 8)
24608 this[offset + 2] = (value >>> 16)
24609 this[offset + 3] = (value >>> 24)
24610 return offset + 4
24611}
3af2954a 24612
8b095871
IC
24613Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
24614 value = +value
24615 offset = offset >>> 0
24616 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
24617 if (value < 0) value = 0xffffffff + value + 1
24618 this[offset] = (value >>> 24)
24619 this[offset + 1] = (value >>> 16)
24620 this[offset + 2] = (value >>> 8)
24621 this[offset + 3] = (value & 0xff)
24622 return offset + 4
24623}
3af2954a 24624
8b095871
IC
24625function checkIEEE754 (buf, value, offset, ext, max, min) {
24626 if (offset + ext > buf.length) throw new RangeError('Index out of range')
24627 if (offset < 0) throw new RangeError('Index out of range')
24628}
3af2954a 24629
8b095871
IC
24630function writeFloat (buf, value, offset, littleEndian, noAssert) {
24631 value = +value
24632 offset = offset >>> 0
24633 if (!noAssert) {
24634 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3af2954a 24635 }
8b095871
IC
24636 ieee754.write(buf, value, offset, littleEndian, 23, 4)
24637 return offset + 4
ab78acc6 24638}
3af2954a 24639
8b095871
IC
24640Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
24641 return writeFloat(this, value, offset, true, noAssert)
ab78acc6 24642}
3af2954a 24643
8b095871
IC
24644Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
24645 return writeFloat(this, value, offset, false, noAssert)
ab78acc6 24646}
3af2954a 24647
8b095871
IC
24648function writeDouble (buf, value, offset, littleEndian, noAssert) {
24649 value = +value
24650 offset = offset >>> 0
24651 if (!noAssert) {
24652 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3af2954a 24653 }
8b095871
IC
24654 ieee754.write(buf, value, offset, littleEndian, 52, 8)
24655 return offset + 8
ab78acc6 24656}
3af2954a 24657
8b095871
IC
24658Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
24659 return writeDouble(this, value, offset, true, noAssert)
ab78acc6 24660}
3af2954a 24661
8b095871
IC
24662Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
24663 return writeDouble(this, value, offset, false, noAssert)
24664}
3af2954a 24665
8b095871
IC
24666// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
24667Buffer.prototype.copy = function copy (target, targetStart, start, end) {
24668 if (!start) start = 0
24669 if (!end && end !== 0) end = this.length
24670 if (targetStart >= target.length) targetStart = target.length
24671 if (!targetStart) targetStart = 0
24672 if (end > 0 && end < start) end = start
3af2954a 24673
8b095871
IC
24674 // Copy 0 bytes; we're done
24675 if (end === start) return 0
24676 if (target.length === 0 || this.length === 0) return 0
3af2954a 24677
8b095871
IC
24678 // Fatal error conditions
24679 if (targetStart < 0) {
24680 throw new RangeError('targetStart out of bounds')
3af2954a 24681 }
8b095871
IC
24682 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
24683 if (end < 0) throw new RangeError('sourceEnd out of bounds')
24684
24685 // Are we oob?
24686 if (end > this.length) end = this.length
24687 if (target.length - targetStart < end - start) {
24688 end = target.length - targetStart + start
3af2954a 24689 }
8b095871
IC
24690
24691 var len = end - start
24692 var i
24693
24694 if (this === target && start < targetStart && targetStart < end) {
24695 // descending copy from end
24696 for (i = len - 1; i >= 0; --i) {
24697 target[i + targetStart] = this[i + start]
3af2954a 24698 }
8b095871
IC
24699 } else if (len < 1000) {
24700 // ascending copy from start
24701 for (i = 0; i < len; ++i) {
24702 target[i + targetStart] = this[i + start]
24703 }
24704 } else {
24705 Uint8Array.prototype.set.call(
24706 target,
24707 this.subarray(start, start + len),
24708 targetStart
24709 )
3af2954a
IC
24710 }
24711
8b095871
IC
24712 return len
24713}
24714
24715// Usage:
24716// buffer.fill(number[, offset[, end]])
24717// buffer.fill(buffer[, offset[, end]])
24718// buffer.fill(string[, offset[, end]][, encoding])
24719Buffer.prototype.fill = function fill (val, start, end, encoding) {
24720 // Handle string cases:
24721 if (typeof val === 'string') {
24722 if (typeof start === 'string') {
24723 encoding = start
24724 start = 0
24725 end = this.length
24726 } else if (typeof end === 'string') {
24727 encoding = end
24728 end = this.length
24729 }
24730 if (val.length === 1) {
24731 var code = val.charCodeAt(0)
24732 if (code < 256) {
24733 val = code
3af2954a 24734 }
3af2954a 24735 }
8b095871
IC
24736 if (encoding !== undefined && typeof encoding !== 'string') {
24737 throw new TypeError('encoding must be a string')
24738 }
24739 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
24740 throw new TypeError('Unknown encoding: ' + encoding)
24741 }
24742 } else if (typeof val === 'number') {
24743 val = val & 255
ab78acc6 24744 }
3af2954a 24745
8b095871
IC
24746 // Invalid ranges are not set to a default, so can range check early.
24747 if (start < 0 || this.length < start || this.length < end) {
24748 throw new RangeError('Out of range index')
24749 }
3af2954a 24750
8b095871
IC
24751 if (end <= start) {
24752 return this
24753 }
3af2954a 24754
8b095871
IC
24755 start = start >>> 0
24756 end = end === undefined ? this.length : end >>> 0
3af2954a 24757
8b095871
IC
24758 if (!val) val = 0
24759
24760 var i
24761 if (typeof val === 'number') {
24762 for (i = start; i < end; ++i) {
24763 this[i] = val
24764 }
ab78acc6 24765 } else {
8b095871
IC
24766 var bytes = Buffer.isBuffer(val)
24767 ? val
24768 : new Buffer(val, encoding)
24769 var len = bytes.length
24770 for (i = 0; i < end - start; ++i) {
24771 this[i + start] = bytes[i % len]
ab78acc6
IC
24772 }
24773 }
3af2954a 24774
8b095871
IC
24775 return this
24776}
3af2954a 24777
8b095871
IC
24778// HELPER FUNCTIONS
24779// ================
24780
24781var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
24782
24783function base64clean (str) {
24784 // Node strips out invalid characters like \n and \t from the string, base64-js does not
24785 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
24786 // Node converts strings with length < 2 to ''
24787 if (str.length < 2) return ''
24788 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
24789 while (str.length % 4 !== 0) {
24790 str = str + '='
3af2954a 24791 }
8b095871 24792 return str
ab78acc6
IC
24793}
24794
8b095871
IC
24795function stringtrim (str) {
24796 if (str.trim) return str.trim()
24797 return str.replace(/^\s+|\s+$/g, '')
ab78acc6 24798}
3af2954a 24799
8b095871
IC
24800function toHex (n) {
24801 if (n < 16) return '0' + n.toString(16)
24802 return n.toString(16)
ab78acc6 24803}
3af2954a 24804
8b095871
IC
24805function utf8ToBytes (string, units) {
24806 units = units || Infinity
24807 var codePoint
24808 var length = string.length
24809 var leadSurrogate = null
24810 var bytes = []
3af2954a 24811
8b095871
IC
24812 for (var i = 0; i < length; ++i) {
24813 codePoint = string.charCodeAt(i)
3af2954a 24814
8b095871
IC
24815 // is surrogate component
24816 if (codePoint > 0xD7FF && codePoint < 0xE000) {
24817 // last char was a lead
24818 if (!leadSurrogate) {
24819 // no lead yet
24820 if (codePoint > 0xDBFF) {
24821 // unexpected trail
24822 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24823 continue
24824 } else if (i + 1 === length) {
24825 // unpaired lead
24826 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24827 continue
24828 }
3af2954a 24829
8b095871
IC
24830 // valid lead
24831 leadSurrogate = codePoint
24832
24833 continue
24834 }
24835
24836 // 2 leads in a row
24837 if (codePoint < 0xDC00) {
24838 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24839 leadSurrogate = codePoint
24840 continue
24841 }
24842
24843 // valid surrogate pair
24844 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
24845 } else if (leadSurrogate) {
24846 // valid bmp char, but last char was a lead
24847 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24848 }
24849
24850 leadSurrogate = null
24851
24852 // encode utf8
24853 if (codePoint < 0x80) {
24854 if ((units -= 1) < 0) break
24855 bytes.push(codePoint)
24856 } else if (codePoint < 0x800) {
24857 if ((units -= 2) < 0) break
24858 bytes.push(
24859 codePoint >> 0x6 | 0xC0,
24860 codePoint & 0x3F | 0x80
24861 )
24862 } else if (codePoint < 0x10000) {
24863 if ((units -= 3) < 0) break
24864 bytes.push(
24865 codePoint >> 0xC | 0xE0,
24866 codePoint >> 0x6 & 0x3F | 0x80,
24867 codePoint & 0x3F | 0x80
24868 )
24869 } else if (codePoint < 0x110000) {
24870 if ((units -= 4) < 0) break
24871 bytes.push(
24872 codePoint >> 0x12 | 0xF0,
24873 codePoint >> 0xC & 0x3F | 0x80,
24874 codePoint >> 0x6 & 0x3F | 0x80,
24875 codePoint & 0x3F | 0x80
24876 )
ab78acc6 24877 } else {
8b095871 24878 throw new Error('Invalid code point')
ab78acc6 24879 }
3af2954a
IC
24880 }
24881
8b095871
IC
24882 return bytes
24883}
3af2954a 24884
8b095871
IC
24885function asciiToBytes (str) {
24886 var byteArray = []
24887 for (var i = 0; i < str.length; ++i) {
24888 // Node's code seems to be doing this and not & 0x7F..
24889 byteArray.push(str.charCodeAt(i) & 0xFF)
ab78acc6 24890 }
8b095871
IC
24891 return byteArray
24892}
3af2954a 24893
8b095871
IC
24894function utf16leToBytes (str, units) {
24895 var c, hi, lo
24896 var byteArray = []
24897 for (var i = 0; i < str.length; ++i) {
24898 if ((units -= 2) < 0) break
3af2954a 24899
8b095871
IC
24900 c = str.charCodeAt(i)
24901 hi = c >> 8
24902 lo = c % 256
24903 byteArray.push(lo)
24904 byteArray.push(hi)
24905 }
ebd8d4e8 24906
8b095871
IC
24907 return byteArray
24908}
24909
24910function base64ToBytes (str) {
24911 return base64.toByteArray(base64clean(str))
24912}
24913
24914function blitBuffer (src, dst, offset, length) {
24915 for (var i = 0; i < length; ++i) {
24916 if ((i + offset >= dst.length) || (i >= src.length)) break
24917 dst[i + offset] = src[i]
24918 }
24919 return i
24920}
24921
24922function isnan (val) {
24923 return val !== val // eslint-disable-line no-self-compare
24924}
24925
24926},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
24927(function (Buffer){
24928// Copyright Joyent, Inc. and other Node contributors.
24929//
24930// Permission is hereby granted, free of charge, to any person obtaining a
24931// copy of this software and associated documentation files (the
24932// "Software"), to deal in the Software without restriction, including
24933// without limitation the rights to use, copy, modify, merge, publish,
24934// distribute, sublicense, and/or sell copies of the Software, and to permit
24935// persons to whom the Software is furnished to do so, subject to the
24936// following conditions:
24937//
24938// The above copyright notice and this permission notice shall be included
24939// in all copies or substantial portions of the Software.
24940//
24941// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24942// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24943// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
24944// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
24945// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24946// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24947// USE OR OTHER DEALINGS IN THE SOFTWARE.
24948
24949// NOTE: These type checking functions intentionally don't use `instanceof`
24950// because it is fragile and can be easily faked with `Object.create()`.
ebd8d4e8 24951
8b095871
IC
24952function isArray(arg) {
24953 if (Array.isArray) {
24954 return Array.isArray(arg);
24955 }
24956 return objectToString(arg) === '[object Array]';
24957}
24958exports.isArray = isArray;
ebd8d4e8 24959
8b095871
IC
24960function isBoolean(arg) {
24961 return typeof arg === 'boolean';
24962}
24963exports.isBoolean = isBoolean;
ebd8d4e8 24964
8b095871
IC
24965function isNull(arg) {
24966 return arg === null;
24967}
24968exports.isNull = isNull;
ebd8d4e8 24969
8b095871
IC
24970function isNullOrUndefined(arg) {
24971 return arg == null;
24972}
24973exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 24974
8b095871
IC
24975function isNumber(arg) {
24976 return typeof arg === 'number';
ab78acc6 24977}
8b095871 24978exports.isNumber = isNumber;
212b1b46 24979
8b095871
IC
24980function isString(arg) {
24981 return typeof arg === 'string';
ab78acc6 24982}
8b095871 24983exports.isString = isString;
212b1b46 24984
8b095871
IC
24985function isSymbol(arg) {
24986 return typeof arg === 'symbol';
ab78acc6 24987}
8b095871 24988exports.isSymbol = isSymbol;
ab78acc6 24989
8b095871
IC
24990function isUndefined(arg) {
24991 return arg === void 0;
24992}
24993exports.isUndefined = isUndefined;
ab78acc6 24994
8b095871
IC
24995function isRegExp(re) {
24996 return objectToString(re) === '[object RegExp]';
24997}
24998exports.isRegExp = isRegExp;
ab78acc6 24999
8b095871
IC
25000function isObject(arg) {
25001 return typeof arg === 'object' && arg !== null;
25002}
25003exports.isObject = isObject;
212b1b46 25004
8b095871
IC
25005function isDate(d) {
25006 return objectToString(d) === '[object Date]';
25007}
25008exports.isDate = isDate;
212b1b46 25009
8b095871
IC
25010function isError(e) {
25011 return (objectToString(e) === '[object Error]' || e instanceof Error);
25012}
25013exports.isError = isError;
212b1b46 25014
8b095871
IC
25015function isFunction(arg) {
25016 return typeof arg === 'function';
25017}
25018exports.isFunction = isFunction;
212b1b46 25019
8b095871
IC
25020function isPrimitive(arg) {
25021 return arg === null ||
25022 typeof arg === 'boolean' ||
25023 typeof arg === 'number' ||
25024 typeof arg === 'string' ||
25025 typeof arg === 'symbol' || // ES6 symbol
25026 typeof arg === 'undefined';
ab78acc6 25027}
8b095871 25028exports.isPrimitive = isPrimitive;
212b1b46 25029
8b095871 25030exports.isBuffer = Buffer.isBuffer;
ab78acc6 25031
8b095871
IC
25032function objectToString(o) {
25033 return Object.prototype.toString.call(o);
ab78acc6 25034}
212b1b46 25035
8b095871
IC
25036}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
25037},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
25038// Copyright Joyent, Inc. and other Node contributors.
25039//
25040// Permission is hereby granted, free of charge, to any person obtaining a
25041// copy of this software and associated documentation files (the
25042// "Software"), to deal in the Software without restriction, including
25043// without limitation the rights to use, copy, modify, merge, publish,
25044// distribute, sublicense, and/or sell copies of the Software, and to permit
25045// persons to whom the Software is furnished to do so, subject to the
25046// following conditions:
25047//
25048// The above copyright notice and this permission notice shall be included
25049// in all copies or substantial portions of the Software.
25050//
25051// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25052// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25053// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
25054// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25055// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
25056// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
25057// USE OR OTHER DEALINGS IN THE SOFTWARE.
212b1b46 25058
8b095871
IC
25059function EventEmitter() {
25060 this._events = this._events || {};
25061 this._maxListeners = this._maxListeners || undefined;
ab78acc6 25062}
8b095871 25063module.exports = EventEmitter;
212b1b46 25064
8b095871
IC
25065// Backwards-compat with node 0.10.x
25066EventEmitter.EventEmitter = EventEmitter;
212b1b46 25067
8b095871
IC
25068EventEmitter.prototype._events = undefined;
25069EventEmitter.prototype._maxListeners = undefined;
212b1b46 25070
8b095871
IC
25071// By default EventEmitters will print a warning if more than 10 listeners are
25072// added to it. This is a useful default which helps finding memory leaks.
25073EventEmitter.defaultMaxListeners = 10;
212b1b46 25074
8b095871
IC
25075// Obviously not all Emitters should be limited to 10. This function allows
25076// that to be increased. Set to zero for unlimited.
25077EventEmitter.prototype.setMaxListeners = function(n) {
25078 if (!isNumber(n) || n < 0 || isNaN(n))
25079 throw TypeError('n must be a positive number');
25080 this._maxListeners = n;
25081 return this;
25082};
212b1b46 25083
8b095871
IC
25084EventEmitter.prototype.emit = function(type) {
25085 var er, handler, len, args, i, listeners;
212b1b46 25086
8b095871
IC
25087 if (!this._events)
25088 this._events = {};
212b1b46 25089
8b095871
IC
25090 // If there is no 'error' event listener then throw.
25091 if (type === 'error') {
25092 if (!this._events.error ||
25093 (isObject(this._events.error) && !this._events.error.length)) {
25094 er = arguments[1];
25095 if (er instanceof Error) {
25096 throw er; // Unhandled 'error' event
25097 } else {
25098 // At least give some kind of context to the user
25099 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
25100 err.context = er;
25101 throw err;
25102 }
25103 }
ab78acc6 25104 }
212b1b46 25105
8b095871 25106 handler = this._events[type];
212b1b46 25107
8b095871
IC
25108 if (isUndefined(handler))
25109 return false;
25110
25111 if (isFunction(handler)) {
25112 switch (arguments.length) {
25113 // fast cases
25114 case 1:
25115 handler.call(this);
25116 break;
25117 case 2:
25118 handler.call(this, arguments[1]);
25119 break;
25120 case 3:
25121 handler.call(this, arguments[1], arguments[2]);
25122 break;
25123 // slower
25124 default:
25125 args = Array.prototype.slice.call(arguments, 1);
25126 handler.apply(this, args);
3af2954a 25127 }
8b095871
IC
25128 } else if (isObject(handler)) {
25129 args = Array.prototype.slice.call(arguments, 1);
25130 listeners = handler.slice();
25131 len = listeners.length;
25132 for (i = 0; i < len; i++)
25133 listeners[i].apply(this, args);
3af2954a 25134 }
212b1b46 25135
8b095871
IC
25136 return true;
25137};
ebd8d4e8 25138
8b095871
IC
25139EventEmitter.prototype.addListener = function(type, listener) {
25140 var m;
ebd8d4e8 25141
8b095871
IC
25142 if (!isFunction(listener))
25143 throw TypeError('listener must be a function');
ebd8d4e8 25144
8b095871
IC
25145 if (!this._events)
25146 this._events = {};
3af2954a 25147
8b095871
IC
25148 // To avoid recursion in the case that type === "newListener"! Before
25149 // adding it to the listeners, first emit "newListener".
25150 if (this._events.newListener)
25151 this.emit('newListener', type,
25152 isFunction(listener.listener) ?
25153 listener.listener : listener);
3af2954a 25154
8b095871
IC
25155 if (!this._events[type])
25156 // Optimize the case of one listener. Don't need the extra array object.
25157 this._events[type] = listener;
25158 else if (isObject(this._events[type]))
25159 // If we've already got an array, just append.
25160 this._events[type].push(listener);
25161 else
25162 // Adding the second element, need to change to array.
25163 this._events[type] = [this._events[type], listener];
3af2954a 25164
8b095871
IC
25165 // Check for listener leak
25166 if (isObject(this._events[type]) && !this._events[type].warned) {
25167 if (!isUndefined(this._maxListeners)) {
25168 m = this._maxListeners;
25169 } else {
25170 m = EventEmitter.defaultMaxListeners;
25171 }
3af2954a 25172
8b095871
IC
25173 if (m && m > 0 && this._events[type].length > m) {
25174 this._events[type].warned = true;
25175 console.error('(node) warning: possible EventEmitter memory ' +
25176 'leak detected. %d listeners added. ' +
25177 'Use emitter.setMaxListeners() to increase limit.',
25178 this._events[type].length);
25179 if (typeof console.trace === 'function') {
25180 // not supported in IE 10
25181 console.trace();
25182 }
25183 }
3af2954a
IC
25184 }
25185
8b095871
IC
25186 return this;
25187};
3af2954a 25188
8b095871 25189EventEmitter.prototype.on = EventEmitter.prototype.addListener;
3af2954a 25190
8b095871
IC
25191EventEmitter.prototype.once = function(type, listener) {
25192 if (!isFunction(listener))
25193 throw TypeError('listener must be a function');
3af2954a 25194
8b095871 25195 var fired = false;
ebd8d4e8 25196
8b095871
IC
25197 function g() {
25198 this.removeListener(type, g);
3af2954a 25199
8b095871
IC
25200 if (!fired) {
25201 fired = true;
25202 listener.apply(this, arguments);
25203 }
25204 }
3af2954a 25205
8b095871
IC
25206 g.listener = listener;
25207 this.on(type, g);
ebd8d4e8 25208
8b095871
IC
25209 return this;
25210};
ebd8d4e8 25211
8b095871
IC
25212// emits a 'removeListener' event iff the listener was removed
25213EventEmitter.prototype.removeListener = function(type, listener) {
25214 var list, position, length, i;
ebd8d4e8 25215
8b095871
IC
25216 if (!isFunction(listener))
25217 throw TypeError('listener must be a function');
ebd8d4e8 25218
8b095871
IC
25219 if (!this._events || !this._events[type])
25220 return this;
ab78acc6 25221
8b095871
IC
25222 list = this._events[type];
25223 length = list.length;
25224 position = -1;
ebd8d4e8 25225
8b095871
IC
25226 if (list === listener ||
25227 (isFunction(list.listener) && list.listener === listener)) {
25228 delete this._events[type];
25229 if (this._events.removeListener)
25230 this.emit('removeListener', type, listener);
ebd8d4e8 25231
8b095871
IC
25232 } else if (isObject(list)) {
25233 for (i = length; i-- > 0;) {
25234 if (list[i] === listener ||
25235 (list[i].listener && list[i].listener === listener)) {
25236 position = i;
25237 break;
25238 }
25239 }
25240
25241 if (position < 0)
25242 return this;
25243
25244 if (list.length === 1) {
25245 list.length = 0;
25246 delete this._events[type];
25247 } else {
25248 list.splice(position, 1);
25249 }
25250
25251 if (this._events.removeListener)
25252 this.emit('removeListener', type, listener);
ab78acc6 25253 }
ebd8d4e8 25254
8b095871
IC
25255 return this;
25256};
ebd8d4e8 25257
8b095871
IC
25258EventEmitter.prototype.removeAllListeners = function(type) {
25259 var key, listeners;
ebd8d4e8 25260
8b095871
IC
25261 if (!this._events)
25262 return this;
ab78acc6 25263
8b095871
IC
25264 // not listening for removeListener, no need to emit
25265 if (!this._events.removeListener) {
25266 if (arguments.length === 0)
25267 this._events = {};
25268 else if (this._events[type])
25269 delete this._events[type];
25270 return this;
25271 }
ab78acc6 25272
8b095871
IC
25273 // emit removeListener for all listeners on all events
25274 if (arguments.length === 0) {
25275 for (key in this._events) {
25276 if (key === 'removeListener') continue;
25277 this.removeAllListeners(key);
25278 }
25279 this.removeAllListeners('removeListener');
25280 this._events = {};
25281 return this;
25282 }
ebd8d4e8 25283
8b095871 25284 listeners = this._events[type];
ebd8d4e8 25285
8b095871
IC
25286 if (isFunction(listeners)) {
25287 this.removeListener(type, listeners);
25288 } else if (listeners) {
25289 // LIFO order
25290 while (listeners.length)
25291 this.removeListener(type, listeners[listeners.length - 1]);
25292 }
25293 delete this._events[type];
ebd8d4e8 25294
8b095871
IC
25295 return this;
25296};
ebd8d4e8 25297
8b095871
IC
25298EventEmitter.prototype.listeners = function(type) {
25299 var ret;
25300 if (!this._events || !this._events[type])
25301 ret = [];
25302 else if (isFunction(this._events[type]))
25303 ret = [this._events[type]];
25304 else
25305 ret = this._events[type].slice();
25306 return ret;
25307};
ebd8d4e8 25308
8b095871
IC
25309EventEmitter.prototype.listenerCount = function(type) {
25310 if (this._events) {
25311 var evlistener = this._events[type];
ebd8d4e8 25312
8b095871
IC
25313 if (isFunction(evlistener))
25314 return 1;
25315 else if (evlistener)
25316 return evlistener.length;
25317 }
25318 return 0;
25319};
25320
25321EventEmitter.listenerCount = function(emitter, type) {
25322 return emitter.listenerCount(type);
25323};
25324
25325function isFunction(arg) {
25326 return typeof arg === 'function';
ebd8d4e8
IC
25327}
25328
8b095871
IC
25329function isNumber(arg) {
25330 return typeof arg === 'number';
ebd8d4e8
IC
25331}
25332
8b095871
IC
25333function isObject(arg) {
25334 return typeof arg === 'object' && arg !== null;
ebd8d4e8
IC
25335}
25336
8b095871
IC
25337function isUndefined(arg) {
25338 return arg === void 0;
ebd8d4e8
IC
25339}
25340
8b095871
IC
25341},{}],8:[function(require,module,exports){
25342exports.read = function (buffer, offset, isLE, mLen, nBytes) {
25343 var e, m
25344 var eLen = nBytes * 8 - mLen - 1
25345 var eMax = (1 << eLen) - 1
25346 var eBias = eMax >> 1
25347 var nBits = -7
25348 var i = isLE ? (nBytes - 1) : 0
25349 var d = isLE ? -1 : 1
25350 var s = buffer[offset + i]
ebd8d4e8 25351
8b095871 25352 i += d
ebd8d4e8 25353
8b095871
IC
25354 e = s & ((1 << (-nBits)) - 1)
25355 s >>= (-nBits)
25356 nBits += eLen
25357 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 25358
8b095871
IC
25359 m = e & ((1 << (-nBits)) - 1)
25360 e >>= (-nBits)
25361 nBits += mLen
25362 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 25363
8b095871
IC
25364 if (e === 0) {
25365 e = 1 - eBias
25366 } else if (e === eMax) {
25367 return m ? NaN : ((s ? -1 : 1) * Infinity)
25368 } else {
25369 m = m + Math.pow(2, mLen)
25370 e = e - eBias
ab78acc6 25371 }
8b095871 25372 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
25373}
25374
8b095871
IC
25375exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
25376 var e, m, c
25377 var eLen = nBytes * 8 - mLen - 1
25378 var eMax = (1 << eLen) - 1
25379 var eBias = eMax >> 1
25380 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
25381 var i = isLE ? 0 : (nBytes - 1)
25382 var d = isLE ? 1 : -1
25383 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 25384
8b095871 25385 value = Math.abs(value)
ebd8d4e8 25386
8b095871
IC
25387 if (isNaN(value) || value === Infinity) {
25388 m = isNaN(value) ? 1 : 0
25389 e = eMax
ab78acc6 25390 } else {
8b095871
IC
25391 e = Math.floor(Math.log(value) / Math.LN2)
25392 if (value * (c = Math.pow(2, -e)) < 1) {
25393 e--
25394 c *= 2
25395 }
25396 if (e + eBias >= 1) {
25397 value += rt / c
25398 } else {
25399 value += rt * Math.pow(2, 1 - eBias)
25400 }
25401 if (value * c >= 2) {
25402 e++
25403 c /= 2
25404 }
ebd8d4e8 25405
8b095871
IC
25406 if (e + eBias >= eMax) {
25407 m = 0
25408 e = eMax
25409 } else if (e + eBias >= 1) {
25410 m = (value * c - 1) * Math.pow(2, mLen)
25411 e = e + eBias
25412 } else {
25413 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
25414 e = 0
25415 }
ebd8d4e8 25416 }
ebd8d4e8 25417
8b095871 25418 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 25419
8b095871
IC
25420 e = (e << mLen) | m
25421 eLen += mLen
25422 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 25423
8b095871 25424 buffer[offset + i - d] |= s * 128
ab78acc6
IC
25425}
25426
8b095871
IC
25427},{}],9:[function(require,module,exports){
25428if (typeof Object.create === 'function') {
25429 // implementation from standard node.js 'util' module
25430 module.exports = function inherits(ctor, superCtor) {
25431 ctor.super_ = superCtor
25432 ctor.prototype = Object.create(superCtor.prototype, {
25433 constructor: {
25434 value: ctor,
25435 enumerable: false,
25436 writable: true,
25437 configurable: true
25438 }
25439 });
25440 };
25441} else {
25442 // old school shim for old browsers
25443 module.exports = function inherits(ctor, superCtor) {
25444 ctor.super_ = superCtor
25445 var TempCtor = function () {}
25446 TempCtor.prototype = superCtor.prototype
25447 ctor.prototype = new TempCtor()
25448 ctor.prototype.constructor = ctor
ebd8d4e8 25449 }
8b095871 25450}
ab78acc6 25451
8b095871
IC
25452},{}],10:[function(require,module,exports){
25453/*!
25454 * Determine if an object is a Buffer
25455 *
25456 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
25457 * @license MIT
25458 */
ebd8d4e8 25459
8b095871
IC
25460// The _isBuffer check is for Safari 5-7 support, because it's missing
25461// Object.prototype.constructor. Remove this eventually
25462module.exports = function (obj) {
25463 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
ebd8d4e8
IC
25464}
25465
8b095871
IC
25466function isBuffer (obj) {
25467 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
25468}
ebd8d4e8 25469
8b095871
IC
25470// For Node v0.10 support. Remove this eventually.
25471function isSlowBuffer (obj) {
25472 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
25473}
ebd8d4e8 25474
8b095871
IC
25475},{}],11:[function(require,module,exports){
25476var toString = {}.toString;
ab78acc6 25477
8b095871
IC
25478module.exports = Array.isArray || function (arr) {
25479 return toString.call(arr) == '[object Array]';
25480};
ebd8d4e8 25481
8b095871
IC
25482},{}],12:[function(require,module,exports){
25483(function (process){
25484'use strict';
ebd8d4e8 25485
8b095871
IC
25486if (!process.version ||
25487 process.version.indexOf('v0.') === 0 ||
25488 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
25489 module.exports = nextTick;
25490} else {
25491 module.exports = process.nextTick;
25492}
25493
25494function nextTick(fn, arg1, arg2, arg3) {
25495 if (typeof fn !== 'function') {
25496 throw new TypeError('"callback" argument must be a function');
25497 }
25498 var len = arguments.length;
25499 var args, i;
25500 switch (len) {
25501 case 0:
25502 case 1:
25503 return process.nextTick(fn);
25504 case 2:
25505 return process.nextTick(function afterTickOne() {
25506 fn.call(null, arg1);
25507 });
25508 case 3:
25509 return process.nextTick(function afterTickTwo() {
25510 fn.call(null, arg1, arg2);
25511 });
25512 case 4:
25513 return process.nextTick(function afterTickThree() {
25514 fn.call(null, arg1, arg2, arg3);
25515 });
25516 default:
25517 args = new Array(len - 1);
25518 i = 0;
25519 while (i < args.length) {
25520 args[i++] = arguments[i];
25521 }
25522 return process.nextTick(function afterTick() {
25523 fn.apply(null, args);
25524 });
ab78acc6 25525 }
ebd8d4e8
IC
25526}
25527
8b095871
IC
25528}).call(this,require('_process'))
25529},{"_process":13}],13:[function(require,module,exports){
25530// shim for using process in browser
25531var process = module.exports = {};
ebd8d4e8 25532
8b095871
IC
25533// cached from whatever global is present so that test runners that stub it
25534// don't break things. But we need to wrap it in a try catch in case it is
25535// wrapped in strict mode code which doesn't define any globals. It's inside a
25536// function because try/catches deoptimize in certain engines.
ab78acc6 25537
8b095871
IC
25538var cachedSetTimeout;
25539var cachedClearTimeout;
ebd8d4e8 25540
8b095871
IC
25541function defaultSetTimout() {
25542 throw new Error('setTimeout has not been defined');
ab78acc6 25543}
8b095871
IC
25544function defaultClearTimeout () {
25545 throw new Error('clearTimeout has not been defined');
ab78acc6 25546}
8b095871
IC
25547(function () {
25548 try {
25549 if (typeof setTimeout === 'function') {
25550 cachedSetTimeout = setTimeout;
25551 } else {
25552 cachedSetTimeout = defaultSetTimout;
25553 }
25554 } catch (e) {
25555 cachedSetTimeout = defaultSetTimout;
25556 }
25557 try {
25558 if (typeof clearTimeout === 'function') {
25559 cachedClearTimeout = clearTimeout;
25560 } else {
25561 cachedClearTimeout = defaultClearTimeout;
25562 }
25563 } catch (e) {
25564 cachedClearTimeout = defaultClearTimeout;
25565 }
25566} ())
25567function runTimeout(fun) {
25568 if (cachedSetTimeout === setTimeout) {
25569 //normal enviroments in sane situations
25570 return setTimeout(fun, 0);
25571 }
25572 // if setTimeout wasn't available but was latter defined
25573 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
25574 cachedSetTimeout = setTimeout;
25575 return setTimeout(fun, 0);
25576 }
25577 try {
25578 // when when somebody has screwed with setTimeout but no I.E. maddness
25579 return cachedSetTimeout(fun, 0);
25580 } catch(e){
25581 try {
25582 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
25583 return cachedSetTimeout.call(null, fun, 0);
25584 } catch(e){
25585 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
25586 return cachedSetTimeout.call(this, fun, 0);
25587 }
25588 }
25589
ebd8d4e8 25590
ab78acc6 25591}
8b095871
IC
25592function runClearTimeout(marker) {
25593 if (cachedClearTimeout === clearTimeout) {
25594 //normal enviroments in sane situations
25595 return clearTimeout(marker);
25596 }
25597 // if clearTimeout wasn't available but was latter defined
25598 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
25599 cachedClearTimeout = clearTimeout;
25600 return clearTimeout(marker);
25601 }
25602 try {
25603 // when when somebody has screwed with setTimeout but no I.E. maddness
25604 return cachedClearTimeout(marker);
25605 } catch (e){
25606 try {
25607 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
25608 return cachedClearTimeout.call(null, marker);
25609 } catch (e){
25610 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
25611 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
25612 return cachedClearTimeout.call(this, marker);
25613 }
25614 }
25615
25616
ebd8d4e8 25617
ab78acc6 25618}
8b095871
IC
25619var queue = [];
25620var draining = false;
25621var currentQueue;
25622var queueIndex = -1;
ebd8d4e8 25623
8b095871
IC
25624function cleanUpNextTick() {
25625 if (!draining || !currentQueue) {
25626 return;
25627 }
25628 draining = false;
25629 if (currentQueue.length) {
25630 queue = currentQueue.concat(queue);
25631 } else {
25632 queueIndex = -1;
25633 }
25634 if (queue.length) {
25635 drainQueue();
25636 }
ebd8d4e8
IC
25637}
25638
8b095871
IC
25639function drainQueue() {
25640 if (draining) {
25641 return;
25642 }
25643 var timeout = runTimeout(cleanUpNextTick);
25644 draining = true;
25645
25646 var len = queue.length;
25647 while(len) {
25648 currentQueue = queue;
25649 queue = [];
25650 while (++queueIndex < len) {
25651 if (currentQueue) {
25652 currentQueue[queueIndex].run();
25653 }
25654 }
25655 queueIndex = -1;
25656 len = queue.length;
25657 }
25658 currentQueue = null;
25659 draining = false;
25660 runClearTimeout(timeout);
ebd8d4e8
IC
25661}
25662
8b095871
IC
25663process.nextTick = function (fun) {
25664 var args = new Array(arguments.length - 1);
25665 if (arguments.length > 1) {
25666 for (var i = 1; i < arguments.length; i++) {
25667 args[i - 1] = arguments[i];
25668 }
25669 }
25670 queue.push(new Item(fun, args));
25671 if (queue.length === 1 && !draining) {
25672 runTimeout(drainQueue);
25673 }
25674};
25675
25676// v8 likes predictible objects
25677function Item(fun, array) {
25678 this.fun = fun;
25679 this.array = array;
ab78acc6 25680}
8b095871
IC
25681Item.prototype.run = function () {
25682 this.fun.apply(null, this.array);
25683};
25684process.title = 'browser';
25685process.browser = true;
25686process.env = {};
25687process.argv = [];
25688process.version = ''; // empty string to avoid regexp issues
25689process.versions = {};
ebd8d4e8 25690
8b095871
IC
25691function noop() {}
25692
25693process.on = noop;
25694process.addListener = noop;
25695process.once = noop;
25696process.off = noop;
25697process.removeListener = noop;
25698process.removeAllListeners = noop;
25699process.emit = noop;
25700
25701process.binding = function (name) {
25702 throw new Error('process.binding is not supported');
25703};
25704
25705process.cwd = function () { return '/' };
25706process.chdir = function (dir) {
25707 throw new Error('process.chdir is not supported');
25708};
25709process.umask = function() { return 0; };
25710
25711},{}],14:[function(require,module,exports){
25712module.exports = require("./lib/_stream_duplex.js")
25713
25714},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
25715// a duplex stream is just a stream that is both readable and writable.
25716// Since JS doesn't have multiple prototypal inheritance, this class
25717// prototypally inherits from Readable, and then parasitically from
25718// Writable.
25719
25720'use strict';
25721
25722/*<replacement>*/
ab78acc6 25723
8b095871
IC
25724var objectKeys = Object.keys || function (obj) {
25725 var keys = [];
25726 for (var key in obj) {
25727 keys.push(key);
25728 }return keys;
25729};
25730/*</replacement>*/
ebd8d4e8 25731
8b095871 25732module.exports = Duplex;
ebd8d4e8 25733
8b095871
IC
25734/*<replacement>*/
25735var processNextTick = require('process-nextick-args');
25736/*</replacement>*/
ebd8d4e8 25737
8b095871
IC
25738/*<replacement>*/
25739var util = require('core-util-is');
25740util.inherits = require('inherits');
25741/*</replacement>*/
ebd8d4e8 25742
8b095871
IC
25743var Readable = require('./_stream_readable');
25744var Writable = require('./_stream_writable');
ebd8d4e8 25745
8b095871
IC
25746util.inherits(Duplex, Readable);
25747
25748var keys = objectKeys(Writable.prototype);
25749for (var v = 0; v < keys.length; v++) {
25750 var method = keys[v];
25751 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
ab78acc6 25752}
ebd8d4e8 25753
8b095871
IC
25754function Duplex(options) {
25755 if (!(this instanceof Duplex)) return new Duplex(options);
ebd8d4e8 25756
8b095871
IC
25757 Readable.call(this, options);
25758 Writable.call(this, options);
ebd8d4e8 25759
8b095871 25760 if (options && options.readable === false) this.readable = false;
ebd8d4e8 25761
8b095871 25762 if (options && options.writable === false) this.writable = false;
ebd8d4e8 25763
8b095871
IC
25764 this.allowHalfOpen = true;
25765 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
ebd8d4e8 25766
8b095871 25767 this.once('end', onend);
ebd8d4e8
IC
25768}
25769
8b095871
IC
25770// the no-half-open enforcer
25771function onend() {
25772 // if we allow half-open state, or if the writable side ended,
25773 // then we're ok.
25774 if (this.allowHalfOpen || this._writableState.ended) return;
25775
25776 // no more data can be written.
25777 // But allow more writes to happen in this tick.
25778 processNextTick(onEndNT, this);
ebd8d4e8
IC
25779}
25780
8b095871
IC
25781function onEndNT(self) {
25782 self.end();
25783}
ebd8d4e8 25784
8b095871
IC
25785function forEach(xs, f) {
25786 for (var i = 0, l = xs.length; i < l; i++) {
25787 f(xs[i], i);
25788 }
25789}
25790},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
25791// a passthrough stream.
25792// basically just the most minimal sort of Transform stream.
25793// Every written chunk gets output as-is.
ebd8d4e8 25794
8b095871 25795'use strict';
ebd8d4e8 25796
8b095871 25797module.exports = PassThrough;
ebd8d4e8 25798
8b095871 25799var Transform = require('./_stream_transform');
ebd8d4e8 25800
8b095871
IC
25801/*<replacement>*/
25802var util = require('core-util-is');
25803util.inherits = require('inherits');
25804/*</replacement>*/
ebd8d4e8 25805
8b095871 25806util.inherits(PassThrough, Transform);
ebd8d4e8 25807
8b095871
IC
25808function PassThrough(options) {
25809 if (!(this instanceof PassThrough)) return new PassThrough(options);
ebd8d4e8 25810
8b095871 25811 Transform.call(this, options);
ebd8d4e8
IC
25812}
25813
8b095871
IC
25814PassThrough.prototype._transform = function (chunk, encoding, cb) {
25815 cb(null, chunk);
25816};
25817},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
25818(function (process){
25819'use strict';
ebd8d4e8 25820
8b095871 25821module.exports = Readable;
ebd8d4e8 25822
8b095871
IC
25823/*<replacement>*/
25824var processNextTick = require('process-nextick-args');
25825/*</replacement>*/
ebd8d4e8 25826
8b095871
IC
25827/*<replacement>*/
25828var isArray = require('isarray');
25829/*</replacement>*/
ebd8d4e8 25830
8b095871
IC
25831/*<replacement>*/
25832var Duplex;
25833/*</replacement>*/
ebd8d4e8 25834
8b095871 25835Readable.ReadableState = ReadableState;
ebd8d4e8 25836
8b095871
IC
25837/*<replacement>*/
25838var EE = require('events').EventEmitter;
ebd8d4e8 25839
8b095871
IC
25840var EElistenerCount = function (emitter, type) {
25841 return emitter.listeners(type).length;
25842};
25843/*</replacement>*/
ebd8d4e8 25844
8b095871
IC
25845/*<replacement>*/
25846var Stream;
25847(function () {
25848 try {
25849 Stream = require('st' + 'ream');
25850 } catch (_) {} finally {
25851 if (!Stream) Stream = require('events').EventEmitter;
25852 }
25853})();
25854/*</replacement>*/
ebd8d4e8 25855
8b095871
IC
25856var Buffer = require('buffer').Buffer;
25857/*<replacement>*/
25858var bufferShim = require('buffer-shims');
25859/*</replacement>*/
ab78acc6 25860
8b095871
IC
25861/*<replacement>*/
25862var util = require('core-util-is');
25863util.inherits = require('inherits');
25864/*</replacement>*/
ab78acc6 25865
8b095871
IC
25866/*<replacement>*/
25867var debugUtil = require('util');
25868var debug = void 0;
25869if (debugUtil && debugUtil.debuglog) {
25870 debug = debugUtil.debuglog('stream');
25871} else {
25872 debug = function () {};
25873}
25874/*</replacement>*/
ab78acc6 25875
8b095871
IC
25876var BufferList = require('./internal/streams/BufferList');
25877var StringDecoder;
ab78acc6 25878
8b095871 25879util.inherits(Readable, Stream);
ab78acc6 25880
8b095871
IC
25881function prependListener(emitter, event, fn) {
25882 // Sadly this is not cacheable as some libraries bundle their own
25883 // event emitter implementation with them.
25884 if (typeof emitter.prependListener === 'function') {
25885 return emitter.prependListener(event, fn);
25886 } else {
25887 // This is a hack to make sure that our error handler is attached before any
25888 // userland ones. NEVER DO THIS. This is here only because this code needs
25889 // to continue to work with older versions of Node.js that do not include
25890 // the prependListener() method. The goal is to eventually remove this hack.
25891 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
ebd8d4e8 25892 }
ebd8d4e8
IC
25893}
25894
8b095871
IC
25895function ReadableState(options, stream) {
25896 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 25897
8b095871 25898 options = options || {};
ebd8d4e8 25899
8b095871
IC
25900 // object stream flag. Used to make read(n) ignore n and to
25901 // make all the buffer merging and length checks go away
25902 this.objectMode = !!options.objectMode;
ebd8d4e8 25903
8b095871 25904 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
ebd8d4e8 25905
8b095871
IC
25906 // the point at which it stops calling _read() to fill the buffer
25907 // Note: 0 is a valid value, means "don't call _read preemptively ever"
25908 var hwm = options.highWaterMark;
25909 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
25910 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6 25911
8b095871
IC
25912 // cast to ints.
25913 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 25914
8b095871
IC
25915 // A linked list is used to store data chunks instead of an array because the
25916 // linked list can remove elements from the beginning faster than
25917 // array.shift()
25918 this.buffer = new BufferList();
25919 this.length = 0;
25920 this.pipes = null;
25921 this.pipesCount = 0;
25922 this.flowing = null;
25923 this.ended = false;
25924 this.endEmitted = false;
25925 this.reading = false;
ab78acc6 25926
8b095871
IC
25927 // a flag to be able to tell if the onwrite cb is called immediately,
25928 // or on a later tick. We set this to true at first, because any
25929 // actions that shouldn't happen until "later" should generally also
25930 // not happen before the first write call.
25931 this.sync = true;
ebd8d4e8 25932
8b095871
IC
25933 // whenever we return null, then we set a flag to say
25934 // that we're awaiting a 'readable' event emission.
25935 this.needReadable = false;
25936 this.emittedReadable = false;
25937 this.readableListening = false;
25938 this.resumeScheduled = false;
ebd8d4e8 25939
8b095871
IC
25940 // Crypto is kind of old and crusty. Historically, its default string
25941 // encoding is 'binary' so we have to make this configurable.
25942 // Everything else in the universe uses 'utf8', though.
25943 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 25944
8b095871
IC
25945 // when piping, we only care about 'readable' events that happen
25946 // after read()ing all the bytes and not getting any pushback.
25947 this.ranOut = false;
ebd8d4e8 25948
8b095871
IC
25949 // the number of writers that are awaiting a drain event in .pipe()s
25950 this.awaitDrain = 0;
ebd8d4e8 25951
8b095871
IC
25952 // if true, a maybeReadMore has been scheduled
25953 this.readingMore = false;
ebd8d4e8 25954
8b095871
IC
25955 this.decoder = null;
25956 this.encoding = null;
25957 if (options.encoding) {
25958 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
25959 this.decoder = new StringDecoder(options.encoding);
25960 this.encoding = options.encoding;
25961 }
25962}
ebd8d4e8 25963
8b095871
IC
25964function Readable(options) {
25965 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 25966
8b095871 25967 if (!(this instanceof Readable)) return new Readable(options);
ebd8d4e8 25968
8b095871 25969 this._readableState = new ReadableState(options, this);
ebd8d4e8 25970
8b095871
IC
25971 // legacy
25972 this.readable = true;
ebd8d4e8 25973
8b095871 25974 if (options && typeof options.read === 'function') this._read = options.read;
ebd8d4e8 25975
8b095871
IC
25976 Stream.call(this);
25977}
ebd8d4e8 25978
8b095871
IC
25979// Manually shove something into the read() buffer.
25980// This returns true if the highWaterMark has not been hit yet,
25981// similar to how Writable.write() returns true if you should
25982// write() some more.
25983Readable.prototype.push = function (chunk, encoding) {
25984 var state = this._readableState;
ebd8d4e8 25985
8b095871
IC
25986 if (!state.objectMode && typeof chunk === 'string') {
25987 encoding = encoding || state.defaultEncoding;
25988 if (encoding !== state.encoding) {
25989 chunk = bufferShim.from(chunk, encoding);
25990 encoding = '';
25991 }
25992 }
ebd8d4e8 25993
8b095871
IC
25994 return readableAddChunk(this, state, chunk, encoding, false);
25995};
ebd8d4e8 25996
8b095871
IC
25997// Unshift should *always* be something directly out of read()
25998Readable.prototype.unshift = function (chunk) {
25999 var state = this._readableState;
26000 return readableAddChunk(this, state, chunk, '', true);
26001};
ebd8d4e8 26002
8b095871
IC
26003Readable.prototype.isPaused = function () {
26004 return this._readableState.flowing === false;
26005};
26006
26007function readableAddChunk(stream, state, chunk, encoding, addToFront) {
26008 var er = chunkInvalid(state, chunk);
26009 if (er) {
26010 stream.emit('error', er);
26011 } else if (chunk === null) {
26012 state.reading = false;
26013 onEofChunk(stream, state);
26014 } else if (state.objectMode || chunk && chunk.length > 0) {
26015 if (state.ended && !addToFront) {
26016 var e = new Error('stream.push() after EOF');
26017 stream.emit('error', e);
26018 } else if (state.endEmitted && addToFront) {
26019 var _e = new Error('stream.unshift() after end event');
26020 stream.emit('error', _e);
26021 } else {
26022 var skipAdd;
26023 if (state.decoder && !addToFront && !encoding) {
26024 chunk = state.decoder.write(chunk);
26025 skipAdd = !state.objectMode && chunk.length === 0;
26026 }
ebd8d4e8 26027
8b095871 26028 if (!addToFront) state.reading = false;
ebd8d4e8 26029
8b095871
IC
26030 // Don't add to the buffer if we've decoded to an empty string chunk and
26031 // we're not in object mode
26032 if (!skipAdd) {
26033 // if we want the data now, just emit it.
26034 if (state.flowing && state.length === 0 && !state.sync) {
26035 stream.emit('data', chunk);
26036 stream.read(0);
26037 } else {
26038 // update the buffer info.
26039 state.length += state.objectMode ? 1 : chunk.length;
26040 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
ebd8d4e8 26041
8b095871
IC
26042 if (state.needReadable) emitReadable(stream);
26043 }
26044 }
ab78acc6 26045
8b095871
IC
26046 maybeReadMore(stream, state);
26047 }
26048 } else if (!addToFront) {
26049 state.reading = false;
26050 }
ab78acc6 26051
8b095871
IC
26052 return needMoreData(state);
26053}
ab78acc6 26054
8b095871
IC
26055// if it's past the high water mark, we can push in some more.
26056// Also, if we have no data yet, we can stand some
26057// more bytes. This is to work around cases where hwm=0,
26058// such as the repl. Also, if the push() triggered a
26059// readable event, and the user called read(largeNumber) such that
26060// needReadable was set, then we ought to push more, so that another
26061// 'readable' event will be triggered.
26062function needMoreData(state) {
26063 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
26064}
ebd8d4e8 26065
8b095871
IC
26066// backwards compatibility.
26067Readable.prototype.setEncoding = function (enc) {
26068 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
26069 this._readableState.decoder = new StringDecoder(enc);
26070 this._readableState.encoding = enc;
26071 return this;
26072};
26073
26074// Don't raise the hwm > 8MB
26075var MAX_HWM = 0x800000;
26076function computeNewHighWaterMark(n) {
26077 if (n >= MAX_HWM) {
26078 n = MAX_HWM;
ab78acc6 26079 } else {
8b095871
IC
26080 // Get the next highest power of 2 to prevent increasing hwm excessively in
26081 // tiny amounts
26082 n--;
26083 n |= n >>> 1;
26084 n |= n >>> 2;
26085 n |= n >>> 4;
26086 n |= n >>> 8;
26087 n |= n >>> 16;
26088 n++;
ebd8d4e8 26089 }
8b095871 26090 return n;
ebd8d4e8
IC
26091}
26092
8b095871
IC
26093// This function is designed to be inlinable, so please take care when making
26094// changes to the function body.
26095function howMuchToRead(n, state) {
26096 if (n <= 0 || state.length === 0 && state.ended) return 0;
26097 if (state.objectMode) return 1;
26098 if (n !== n) {
26099 // Only flow one buffer at a time
26100 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
26101 }
26102 // If we're asking for more than the current hwm, then raise the hwm.
26103 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
26104 if (n <= state.length) return n;
26105 // Don't have enough
26106 if (!state.ended) {
26107 state.needReadable = true;
26108 return 0;
26109 }
26110 return state.length;
26111}
ebd8d4e8 26112
8b095871
IC
26113// you can override either this method, or the async _read(n) below.
26114Readable.prototype.read = function (n) {
26115 debug('read', n);
26116 n = parseInt(n, 10);
26117 var state = this._readableState;
26118 var nOrig = n;
ebd8d4e8 26119
8b095871 26120 if (n !== 0) state.emittedReadable = false;
ab78acc6 26121
8b095871
IC
26122 // if we're doing read(0) to trigger a readable event, but we
26123 // already have a bunch of data in the buffer, then just trigger
26124 // the 'readable' event and move on.
26125 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
26126 debug('read: emitReadable', state.length, state.ended);
26127 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
26128 return null;
ebd8d4e8 26129 }
ebd8d4e8 26130
8b095871 26131 n = howMuchToRead(n, state);
ebd8d4e8 26132
8b095871
IC
26133 // if we've ended, and we're now clear, then finish it up.
26134 if (n === 0 && state.ended) {
26135 if (state.length === 0) endReadable(this);
26136 return null;
26137 }
ebd8d4e8 26138
8b095871
IC
26139 // All the actual chunk generation logic needs to be
26140 // *below* the call to _read. The reason is that in certain
26141 // synthetic stream cases, such as passthrough streams, _read
26142 // may be a completely synchronous operation which may change
26143 // the state of the read buffer, providing enough data when
26144 // before there was *not* enough.
26145 //
26146 // So, the steps are:
26147 // 1. Figure out what the state of things will be after we do
26148 // a read from the buffer.
26149 //
26150 // 2. If that resulting state will trigger a _read, then call _read.
26151 // Note that this may be asynchronous, or synchronous. Yes, it is
26152 // deeply ugly to write APIs this way, but that still doesn't mean
26153 // that the Readable class should behave improperly, as streams are
26154 // designed to be sync/async agnostic.
26155 // Take note if the _read call is sync or async (ie, if the read call
26156 // has returned yet), so that we know whether or not it's safe to emit
26157 // 'readable' etc.
26158 //
26159 // 3. Actually pull the requested chunks out of the buffer and return.
ebd8d4e8 26160
8b095871
IC
26161 // if we need a readable event, then we need to do some reading.
26162 var doRead = state.needReadable;
26163 debug('need readable', doRead);
ebd8d4e8 26164
8b095871
IC
26165 // if we currently have less than the highWaterMark, then also read some
26166 if (state.length === 0 || state.length - n < state.highWaterMark) {
26167 doRead = true;
26168 debug('length less than watermark', doRead);
26169 }
ebd8d4e8 26170
8b095871
IC
26171 // however, if we've ended, then there's no point, and if we're already
26172 // reading, then it's unnecessary.
26173 if (state.ended || state.reading) {
26174 doRead = false;
26175 debug('reading or ended', doRead);
26176 } else if (doRead) {
26177 debug('do read');
26178 state.reading = true;
26179 state.sync = true;
26180 // if the length is currently zero, then we *need* a readable event.
26181 if (state.length === 0) state.needReadable = true;
26182 // call internal read method
26183 this._read(state.highWaterMark);
26184 state.sync = false;
26185 // If _read pushed data synchronously, then `reading` will be false,
26186 // and we need to re-evaluate how much data we can return to the user.
26187 if (!state.reading) n = howMuchToRead(nOrig, state);
26188 }
ebd8d4e8 26189
8b095871
IC
26190 var ret;
26191 if (n > 0) ret = fromList(n, state);else ret = null;
ebd8d4e8 26192
8b095871
IC
26193 if (ret === null) {
26194 state.needReadable = true;
26195 n = 0;
26196 } else {
26197 state.length -= n;
26198 }
ebd8d4e8 26199
8b095871
IC
26200 if (state.length === 0) {
26201 // If we have nothing in the buffer, then we want to know
26202 // as soon as we *do* get something into the buffer.
26203 if (!state.ended) state.needReadable = true;
ebd8d4e8 26204
8b095871
IC
26205 // If we tried to read() past the EOF, then emit end on the next tick.
26206 if (nOrig !== n && state.ended) endReadable(this);
26207 }
26208
26209 if (ret !== null) this.emit('data', ret);
26210
26211 return ret;
ab78acc6
IC
26212};
26213
8b095871
IC
26214function chunkInvalid(state, chunk) {
26215 var er = null;
26216 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
26217 er = new TypeError('Invalid non-string/buffer chunk');
26218 }
26219 return er;
26220}
ab78acc6 26221
8b095871
IC
26222function onEofChunk(stream, state) {
26223 if (state.ended) return;
26224 if (state.decoder) {
26225 var chunk = state.decoder.end();
26226 if (chunk && chunk.length) {
26227 state.buffer.push(chunk);
26228 state.length += state.objectMode ? 1 : chunk.length;
26229 }
26230 }
26231 state.ended = true;
26232
26233 // emit 'readable' now to make sure it gets picked up.
26234 emitReadable(stream);
26235}
26236
26237// Don't emit readable right away in sync mode, because this can trigger
26238// another read() call => stack overflow. This way, it might trigger
26239// a nextTick recursion warning, but that's not so bad.
26240function emitReadable(stream) {
26241 var state = stream._readableState;
26242 state.needReadable = false;
26243 if (!state.emittedReadable) {
26244 debug('emitReadable', state.flowing);
26245 state.emittedReadable = true;
26246 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
26247 }
ebd8d4e8
IC
26248}
26249
8b095871
IC
26250function emitReadable_(stream) {
26251 debug('emit readable');
26252 stream.emit('readable');
26253 flow(stream);
26254}
ebd8d4e8 26255
8b095871
IC
26256// at this point, the user has presumably seen the 'readable' event,
26257// and called read() to consume some data. that may have triggered
26258// in turn another _read(n) call, in which case reading = true if
26259// it's in progress.
26260// However, if we're not ended, or reading, and the length < hwm,
26261// then go ahead and try to read some more preemptively.
26262function maybeReadMore(stream, state) {
26263 if (!state.readingMore) {
26264 state.readingMore = true;
26265 processNextTick(maybeReadMore_, stream, state);
26266 }
26267}
ab78acc6 26268
8b095871
IC
26269function maybeReadMore_(stream, state) {
26270 var len = state.length;
26271 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
26272 debug('maybeReadMore read 0');
26273 stream.read(0);
26274 if (len === state.length)
26275 // didn't get any data, stop spinning.
26276 break;else len = state.length;
26277 }
26278 state.readingMore = false;
26279}
ab78acc6 26280
8b095871
IC
26281// abstract method. to be overridden in specific implementation classes.
26282// call cb(er, data) where data is <= n in length.
26283// for virtual (non-string, non-buffer) streams, "length" is somewhat
26284// arbitrary, and perhaps not very meaningful.
26285Readable.prototype._read = function (n) {
26286 this.emit('error', new Error('_read() is not implemented'));
ab78acc6
IC
26287};
26288
8b095871
IC
26289Readable.prototype.pipe = function (dest, pipeOpts) {
26290 var src = this;
26291 var state = this._readableState;
ab78acc6 26292
8b095871
IC
26293 switch (state.pipesCount) {
26294 case 0:
26295 state.pipes = dest;
26296 break;
26297 case 1:
26298 state.pipes = [state.pipes, dest];
26299 break;
26300 default:
26301 state.pipes.push(dest);
26302 break;
ab78acc6 26303 }
8b095871
IC
26304 state.pipesCount += 1;
26305 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ab78acc6 26306
8b095871 26307 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
ab78acc6 26308
8b095871
IC
26309 var endFn = doEnd ? onend : cleanup;
26310 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
ab78acc6 26311
8b095871
IC
26312 dest.on('unpipe', onunpipe);
26313 function onunpipe(readable) {
26314 debug('onunpipe');
26315 if (readable === src) {
26316 cleanup();
ab78acc6 26317 }
8b095871 26318 }
ebd8d4e8 26319
8b095871
IC
26320 function onend() {
26321 debug('onend');
26322 dest.end();
ebd8d4e8
IC
26323 }
26324
8b095871
IC
26325 // when the dest drains, it reduces the awaitDrain counter
26326 // on the source. This would be more elegant with a .once()
26327 // handler in flow(), but adding and removing repeatedly is
26328 // too slow.
26329 var ondrain = pipeOnDrain(src);
26330 dest.on('drain', ondrain);
ebd8d4e8 26331
8b095871
IC
26332 var cleanedUp = false;
26333 function cleanup() {
26334 debug('cleanup');
26335 // cleanup event handlers once the pipe is broken
26336 dest.removeListener('close', onclose);
26337 dest.removeListener('finish', onfinish);
26338 dest.removeListener('drain', ondrain);
26339 dest.removeListener('error', onerror);
26340 dest.removeListener('unpipe', onunpipe);
26341 src.removeListener('end', onend);
26342 src.removeListener('end', cleanup);
26343 src.removeListener('data', ondata);
ebd8d4e8 26344
8b095871 26345 cleanedUp = true;
ebd8d4e8 26346
8b095871
IC
26347 // if the reader is waiting for a drain event from this
26348 // specific writer, then it would cause it to never start
26349 // flowing again.
26350 // So, if this is awaiting a drain, then we just call it now.
26351 // If we don't know, then assume that we are waiting for one.
26352 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
26353 }
ebd8d4e8 26354
8b095871
IC
26355 // If the user pushes more data while we're writing to dest then we'll end up
26356 // in ondata again. However, we only want to increase awaitDrain once because
26357 // dest will only emit one 'drain' event for the multiple writes.
26358 // => Introduce a guard on increasing awaitDrain.
26359 var increasedAwaitDrain = false;
26360 src.on('data', ondata);
26361 function ondata(chunk) {
26362 debug('ondata');
26363 increasedAwaitDrain = false;
26364 var ret = dest.write(chunk);
26365 if (false === ret && !increasedAwaitDrain) {
26366 // If the user unpiped during `dest.write()`, it is possible
26367 // to get stuck in a permanently paused state if that write
26368 // also returned false.
26369 // => Check whether `dest` is still a piping destination.
26370 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
26371 debug('false write response, pause', src._readableState.awaitDrain);
26372 src._readableState.awaitDrain++;
26373 increasedAwaitDrain = true;
26374 }
26375 src.pause();
26376 }
26377 }
ebd8d4e8 26378
8b095871
IC
26379 // if the dest has an error, then stop piping into it.
26380 // however, don't suppress the throwing behavior for this.
26381 function onerror(er) {
26382 debug('onerror', er);
26383 unpipe();
26384 dest.removeListener('error', onerror);
26385 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
26386 }
ab78acc6 26387
8b095871
IC
26388 // Make sure our error handler is attached before userland ones.
26389 prependListener(dest, 'error', onerror);
ab78acc6 26390
8b095871
IC
26391 // Both close and finish should trigger unpipe, but only once.
26392 function onclose() {
26393 dest.removeListener('finish', onfinish);
26394 unpipe();
26395 }
26396 dest.once('close', onclose);
26397 function onfinish() {
26398 debug('onfinish');
26399 dest.removeListener('close', onclose);
26400 unpipe();
ab78acc6 26401 }
8b095871 26402 dest.once('finish', onfinish);
ebd8d4e8 26403
8b095871
IC
26404 function unpipe() {
26405 debug('unpipe');
26406 src.unpipe(dest);
26407 }
26408
26409 // tell the dest that it's being piped to
26410 dest.emit('pipe', src);
26411
26412 // start the flow if it hasn't been started already.
26413 if (!state.flowing) {
26414 debug('pipe resume');
26415 src.resume();
26416 }
26417
26418 return dest;
ab78acc6 26419};
ebd8d4e8 26420
8b095871
IC
26421function pipeOnDrain(src) {
26422 return function () {
26423 var state = src._readableState;
26424 debug('pipeOnDrain', state.awaitDrain);
26425 if (state.awaitDrain) state.awaitDrain--;
26426 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
26427 state.flowing = true;
26428 flow(src);
26429 }
26430 };
26431}
ebd8d4e8 26432
8b095871
IC
26433Readable.prototype.unpipe = function (dest) {
26434 var state = this._readableState;
ebd8d4e8 26435
8b095871
IC
26436 // if we're not piping anywhere, then do nothing.
26437 if (state.pipesCount === 0) return this;
ebd8d4e8 26438
8b095871
IC
26439 // just one destination. most common case.
26440 if (state.pipesCount === 1) {
26441 // passed in one, but it's not the right one.
26442 if (dest && dest !== state.pipes) return this;
ebd8d4e8 26443
8b095871
IC
26444 if (!dest) dest = state.pipes;
26445
26446 // got a match.
26447 state.pipes = null;
26448 state.pipesCount = 0;
26449 state.flowing = false;
26450 if (dest) dest.emit('unpipe', this);
26451 return this;
ab78acc6 26452 }
ebd8d4e8 26453
8b095871 26454 // slow case. multiple pipe destinations.
ebd8d4e8 26455
8b095871
IC
26456 if (!dest) {
26457 // remove all.
26458 var dests = state.pipes;
26459 var len = state.pipesCount;
26460 state.pipes = null;
26461 state.pipesCount = 0;
26462 state.flowing = false;
ebd8d4e8 26463
8b095871
IC
26464 for (var i = 0; i < len; i++) {
26465 dests[i].emit('unpipe', this);
26466 }return this;
26467 }
ebd8d4e8 26468
8b095871
IC
26469 // try to find the right one.
26470 var index = indexOf(state.pipes, dest);
26471 if (index === -1) return this;
ebd8d4e8 26472
8b095871
IC
26473 state.pipes.splice(index, 1);
26474 state.pipesCount -= 1;
26475 if (state.pipesCount === 1) state.pipes = state.pipes[0];
ebd8d4e8 26476
8b095871 26477 dest.emit('unpipe', this);
ab78acc6 26478
8b095871
IC
26479 return this;
26480};
ab78acc6 26481
8b095871
IC
26482// set up data events if they are asked for
26483// Ensure readable listeners eventually get something
26484Readable.prototype.on = function (ev, fn) {
26485 var res = Stream.prototype.on.call(this, ev, fn);
26486
26487 if (ev === 'data') {
26488 // Start flowing on next tick if stream isn't explicitly paused
26489 if (this._readableState.flowing !== false) this.resume();
26490 } else if (ev === 'readable') {
26491 var state = this._readableState;
26492 if (!state.endEmitted && !state.readableListening) {
26493 state.readableListening = state.needReadable = true;
26494 state.emittedReadable = false;
26495 if (!state.reading) {
26496 processNextTick(nReadingNextTick, this);
26497 } else if (state.length) {
26498 emitReadable(this, state);
ebd8d4e8 26499 }
ab78acc6 26500 }
8b095871 26501 }
ebd8d4e8 26502
8b095871
IC
26503 return res;
26504};
26505Readable.prototype.addListener = Readable.prototype.on;
ab78acc6 26506
8b095871
IC
26507function nReadingNextTick(self) {
26508 debug('readable nexttick read 0');
26509 self.read(0);
26510}
ab78acc6 26511
8b095871
IC
26512// pause() and resume() are remnants of the legacy readable stream API
26513// If the user uses them, then switch into old mode.
26514Readable.prototype.resume = function () {
26515 var state = this._readableState;
26516 if (!state.flowing) {
26517 debug('resume');
26518 state.flowing = true;
26519 resume(this, state);
ebd8d4e8 26520 }
ab78acc6 26521 return this;
ebd8d4e8
IC
26522};
26523
8b095871
IC
26524function resume(stream, state) {
26525 if (!state.resumeScheduled) {
26526 state.resumeScheduled = true;
26527 processNextTick(resume_, stream, state);
ebd8d4e8 26528 }
8b095871 26529}
ab78acc6 26530
8b095871
IC
26531function resume_(stream, state) {
26532 if (!state.reading) {
26533 debug('resume read 0');
26534 stream.read(0);
ebd8d4e8 26535 }
ebd8d4e8 26536
8b095871
IC
26537 state.resumeScheduled = false;
26538 state.awaitDrain = 0;
26539 stream.emit('resume');
26540 flow(stream);
26541 if (state.flowing && !state.reading) stream.read(0);
26542}
ab78acc6 26543
8b095871
IC
26544Readable.prototype.pause = function () {
26545 debug('call pause flowing=%j', this._readableState.flowing);
26546 if (false !== this._readableState.flowing) {
26547 debug('pause');
26548 this._readableState.flowing = false;
26549 this.emit('pause');
ebd8d4e8 26550 }
ab78acc6
IC
26551 return this;
26552};
ebd8d4e8 26553
8b095871
IC
26554function flow(stream) {
26555 var state = stream._readableState;
26556 debug('flow', state.flowing);
26557 while (state.flowing && stream.read() !== null) {}
26558}
ebd8d4e8 26559
8b095871
IC
26560// wrap an old-style stream as the async data source.
26561// This is *not* part of the readable stream interface.
26562// It is an ugly unfortunate mess of history.
26563Readable.prototype.wrap = function (stream) {
26564 var state = this._readableState;
26565 var paused = false;
ebd8d4e8 26566
8b095871
IC
26567 var self = this;
26568 stream.on('end', function () {
26569 debug('wrapped end');
26570 if (state.decoder && !state.ended) {
26571 var chunk = state.decoder.end();
26572 if (chunk && chunk.length) self.push(chunk);
26573 }
ebd8d4e8 26574
8b095871
IC
26575 self.push(null);
26576 });
ebd8d4e8 26577
8b095871
IC
26578 stream.on('data', function (chunk) {
26579 debug('wrapped data');
26580 if (state.decoder) chunk = state.decoder.write(chunk);
ebd8d4e8 26581
8b095871
IC
26582 // don't skip over falsy values in objectMode
26583 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
ebd8d4e8 26584
8b095871
IC
26585 var ret = self.push(chunk);
26586 if (!ret) {
26587 paused = true;
26588 stream.pause();
26589 }
26590 });
26591
26592 // proxy all the other methods.
26593 // important when wrapping filters and duplexes.
26594 for (var i in stream) {
26595 if (this[i] === undefined && typeof stream[i] === 'function') {
26596 this[i] = function (method) {
26597 return function () {
26598 return stream[method].apply(stream, arguments);
26599 };
26600 }(i);
26601 }
ab78acc6 26602 }
ebd8d4e8 26603
8b095871
IC
26604 // proxy certain important events.
26605 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
26606 forEach(events, function (ev) {
26607 stream.on(ev, self.emit.bind(self, ev));
26608 });
26609
26610 // when we try to consume some more bytes, simply unpause the
26611 // underlying stream.
26612 self._read = function (n) {
26613 debug('wrapped _read', n);
26614 if (paused) {
26615 paused = false;
26616 stream.resume();
26617 }
26618 };
26619
26620 return self;
ebd8d4e8
IC
26621};
26622
8b095871
IC
26623// exposed for testing purposes only.
26624Readable._fromList = fromList;
ebd8d4e8 26625
8b095871
IC
26626// Pluck off n bytes from an array of buffers.
26627// Length is the combined lengths of all the buffers in the list.
26628// This function is designed to be inlinable, so please take care when making
26629// changes to the function body.
26630function fromList(n, state) {
26631 // nothing buffered
26632 if (state.length === 0) return null;
ab78acc6 26633
8b095871
IC
26634 var ret;
26635 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
26636 // read it all, truncate the list
26637 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
26638 state.buffer.clear();
26639 } else {
26640 // read part of list
26641 ret = fromListPartial(n, state.buffer, state.decoder);
26642 }
26643
26644 return ret;
26645}
26646
26647// Extracts only enough buffered data to satisfy the amount requested.
26648// This function is designed to be inlinable, so please take care when making
26649// changes to the function body.
26650function fromListPartial(n, list, hasStrings) {
26651 var ret;
26652 if (n < list.head.data.length) {
26653 // slice is the same for buffers and strings
26654 ret = list.head.data.slice(0, n);
26655 list.head.data = list.head.data.slice(n);
26656 } else if (n === list.head.data.length) {
26657 // first chunk is a perfect match
26658 ret = list.shift();
26659 } else {
26660 // result spans more than one buffer
26661 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
26662 }
26663 return ret;
ab78acc6 26664}
ebd8d4e8 26665
8b095871
IC
26666// Copies a specified amount of characters from the list of buffered data
26667// chunks.
26668// This function is designed to be inlinable, so please take care when making
26669// changes to the function body.
26670function copyFromBufferString(n, list) {
26671 var p = list.head;
26672 var c = 1;
26673 var ret = p.data;
26674 n -= ret.length;
26675 while (p = p.next) {
26676 var str = p.data;
26677 var nb = n > str.length ? str.length : n;
26678 if (nb === str.length) ret += str;else ret += str.slice(0, n);
26679 n -= nb;
26680 if (n === 0) {
26681 if (nb === str.length) {
26682 ++c;
26683 if (p.next) list.head = p.next;else list.head = list.tail = null;
26684 } else {
26685 list.head = p;
26686 p.data = str.slice(nb);
26687 }
26688 break;
ab78acc6 26689 }
8b095871
IC
26690 ++c;
26691 }
26692 list.length -= c;
26693 return ret;
ab78acc6
IC
26694}
26695
8b095871
IC
26696// Copies a specified amount of bytes from the list of buffered data chunks.
26697// This function is designed to be inlinable, so please take care when making
26698// changes to the function body.
26699function copyFromBuffer(n, list) {
26700 var ret = bufferShim.allocUnsafe(n);
26701 var p = list.head;
26702 var c = 1;
26703 p.data.copy(ret);
26704 n -= p.data.length;
26705 while (p = p.next) {
26706 var buf = p.data;
26707 var nb = n > buf.length ? buf.length : n;
26708 buf.copy(ret, ret.length - n, 0, nb);
26709 n -= nb;
26710 if (n === 0) {
26711 if (nb === buf.length) {
26712 ++c;
26713 if (p.next) list.head = p.next;else list.head = list.tail = null;
26714 } else {
26715 list.head = p;
26716 p.data = buf.slice(nb);
26717 }
26718 break;
ab78acc6 26719 }
8b095871
IC
26720 ++c;
26721 }
26722 list.length -= c;
26723 return ret;
ab78acc6 26724}
ebd8d4e8 26725
8b095871
IC
26726function endReadable(stream) {
26727 var state = stream._readableState;
ab78acc6 26728
8b095871
IC
26729 // If we get here before consuming all the bytes, then that is a
26730 // bug in node. Should never happen.
26731 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
ab78acc6 26732
8b095871
IC
26733 if (!state.endEmitted) {
26734 state.ended = true;
26735 processNextTick(endReadableNT, state, stream);
26736 }
26737}
ebd8d4e8 26738
8b095871
IC
26739function endReadableNT(state, stream) {
26740 // Check that we didn't get one last unshift.
26741 if (!state.endEmitted && state.length === 0) {
26742 state.endEmitted = true;
26743 stream.readable = false;
26744 stream.emit('end');
26745 }
26746}
ebd8d4e8 26747
8b095871
IC
26748function forEach(xs, f) {
26749 for (var i = 0, l = xs.length; i < l; i++) {
26750 f(xs[i], i);
26751 }
26752}
ebd8d4e8 26753
8b095871
IC
26754function indexOf(xs, x) {
26755 for (var i = 0, l = xs.length; i < l; i++) {
26756 if (xs[i] === x) return i;
26757 }
26758 return -1;
26759}
26760}).call(this,require('_process'))
26761},{"./_stream_duplex":15,"./internal/streams/BufferList":20,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"isarray":11,"process-nextick-args":12,"string_decoder/":26,"util":3}],18:[function(require,module,exports){
26762// a transform stream is a readable/writable stream where you do
26763// something with the data. Sometimes it's called a "filter",
26764// but that's not a great name for it, since that implies a thing where
26765// some bits pass through, and others are simply ignored. (That would
26766// be a valid example of a transform, of course.)
ab78acc6 26767//
8b095871
IC
26768// While the output is causally related to the input, it's not a
26769// necessarily symmetric or synchronous transformation. For example,
26770// a zlib stream might take multiple plain-text writes(), and then
26771// emit a single compressed chunk some time in the future.
ab78acc6 26772//
8b095871 26773// Here's how this works:
ab78acc6 26774//
8b095871
IC
26775// The Transform stream has all the aspects of the readable and writable
26776// stream classes. When you write(chunk), that calls _write(chunk,cb)
26777// internally, and returns false if there's a lot of pending writes
26778// buffered up. When you call read(), that calls _read(n) until
26779// there's enough pending readable data buffered up.
26780//
26781// In a transform stream, the written data is placed in a buffer. When
26782// _read(n) is called, it transforms the queued up data, calling the
26783// buffered _write cb's as it consumes chunks. If consuming a single
26784// written chunk would result in multiple output chunks, then the first
26785// outputted bit calls the readcb, and subsequent chunks just go into
26786// the read buffer, and will cause it to emit 'readable' if necessary.
26787//
26788// This way, back-pressure is actually determined by the reading side,
26789// since _read has to be called to start processing a new chunk. However,
26790// a pathological inflate type of transform can cause excessive buffering
26791// here. For example, imagine a stream where every byte of input is
26792// interpreted as an integer from 0-255, and then results in that many
26793// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
26794// 1kb of data being output. In this case, you could write a very small
26795// amount of input, and end up with a very large amount of output. In
26796// such a pathological inflating mechanism, there'd be no way to tell
26797// the system to stop doing the transform. A single 4MB write could
26798// cause the system to run out of memory.
26799//
26800// However, even in such a pathological case, only a single written chunk
26801// would be consumed, and then the rest would wait (un-transformed) until
26802// the results of the previous transformed chunk were consumed.
ebd8d4e8 26803
8b095871 26804'use strict';
ebd8d4e8 26805
8b095871 26806module.exports = Transform;
ebd8d4e8 26807
8b095871 26808var Duplex = require('./_stream_duplex');
ebd8d4e8 26809
ab78acc6
IC
26810/*<replacement>*/
26811var util = require('core-util-is');
26812util.inherits = require('inherits');
26813/*</replacement>*/
ebd8d4e8 26814
8b095871 26815util.inherits(Transform, Duplex);
ebd8d4e8 26816
8b095871
IC
26817function TransformState(stream) {
26818 this.afterTransform = function (er, data) {
26819 return afterTransform(stream, er, data);
26820 };
ebd8d4e8 26821
8b095871
IC
26822 this.needTransform = false;
26823 this.transforming = false;
26824 this.writecb = null;
26825 this.writechunk = null;
26826 this.writeencoding = null;
26827}
ebd8d4e8 26828
8b095871
IC
26829function afterTransform(stream, er, data) {
26830 var ts = stream._transformState;
26831 ts.transforming = false;
ebd8d4e8 26832
8b095871 26833 var cb = ts.writecb;
ebd8d4e8 26834
8b095871 26835 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
ebd8d4e8 26836
8b095871
IC
26837 ts.writechunk = null;
26838 ts.writecb = null;
ebd8d4e8 26839
8b095871 26840 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 26841
8b095871
IC
26842 cb(er);
26843
26844 var rs = stream._readableState;
26845 rs.reading = false;
26846 if (rs.needReadable || rs.length < rs.highWaterMark) {
26847 stream._read(rs.highWaterMark);
26848 }
ebd8d4e8
IC
26849}
26850
8b095871
IC
26851function Transform(options) {
26852 if (!(this instanceof Transform)) return new Transform(options);
ebd8d4e8 26853
8b095871 26854 Duplex.call(this, options);
ebd8d4e8 26855
8b095871
IC
26856 this._transformState = new TransformState(this);
26857
26858 var stream = this;
26859
26860 // start out asking for a readable event once data is transformed.
26861 this._readableState.needReadable = true;
26862
26863 // we have implemented the _read method, and done the other things
26864 // that Readable wants before the first _read call, so unset the
26865 // sync guard flag.
26866 this._readableState.sync = false;
26867
26868 if (options) {
26869 if (typeof options.transform === 'function') this._transform = options.transform;
26870
26871 if (typeof options.flush === 'function') this._flush = options.flush;
ebd8d4e8 26872 }
8b095871
IC
26873
26874 // When the writable side finishes, then flush out anything remaining.
26875 this.once('prefinish', function () {
26876 if (typeof this._flush === 'function') this._flush(function (er, data) {
26877 done(stream, er, data);
26878 });else done(stream);
26879 });
ab78acc6 26880}
ebd8d4e8 26881
8b095871
IC
26882Transform.prototype.push = function (chunk, encoding) {
26883 this._transformState.needTransform = false;
26884 return Duplex.prototype.push.call(this, chunk, encoding);
26885};
26886
26887// This is the part where you do stuff!
26888// override this function in implementation classes.
26889// 'chunk' is an input chunk.
ab78acc6 26890//
8b095871
IC
26891// Call `push(newChunk)` to pass along transformed output
26892// to the readable side. You may call 'push' zero or more times.
ab78acc6 26893//
8b095871
IC
26894// Call `cb(err)` when you are done with this chunk. If you pass
26895// an error, then that'll put the hurt on the whole operation. If you
26896// never call cb(), then you'll never get another chunk.
26897Transform.prototype._transform = function (chunk, encoding, cb) {
26898 throw new Error('_transform() is not implemented');
26899};
ebd8d4e8 26900
8b095871
IC
26901Transform.prototype._write = function (chunk, encoding, cb) {
26902 var ts = this._transformState;
26903 ts.writecb = cb;
26904 ts.writechunk = chunk;
26905 ts.writeencoding = encoding;
26906 if (!ts.transforming) {
26907 var rs = this._readableState;
26908 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
26909 }
26910};
ebd8d4e8 26911
8b095871
IC
26912// Doesn't matter what the args are here.
26913// _transform does all the work.
26914// That we got here means that the readable side wants more data.
26915Transform.prototype._read = function (n) {
26916 var ts = this._transformState;
ebd8d4e8 26917
8b095871
IC
26918 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
26919 ts.transforming = true;
26920 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
26921 } else {
26922 // mark that we need a transform, so that any data that comes in
26923 // will get processed, now that we've asked for it.
26924 ts.needTransform = true;
26925 }
26926};
ebd8d4e8 26927
8b095871
IC
26928function done(stream, er, data) {
26929 if (er) return stream.emit('error', er);
ebd8d4e8 26930
8b095871 26931 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 26932
8b095871
IC
26933 // if there's nothing in the write buffer, then that means
26934 // that nothing more will ever be provided
26935 var ws = stream._writableState;
26936 var ts = stream._transformState;
ebd8d4e8 26937
8b095871 26938 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
ebd8d4e8 26939
8b095871 26940 if (ts.transforming) throw new Error('Calling transform done when still transforming');
ebd8d4e8 26941
8b095871
IC
26942 return stream.push(null);
26943}
26944},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
ab78acc6 26945(function (process){
8b095871
IC
26946// A bit simpler than readable streams.
26947// Implement an async ._write(chunk, encoding, cb), and it'll handle all
26948// the drain event emission and buffering.
ebd8d4e8 26949
8b095871
IC
26950'use strict';
26951
26952module.exports = Writable;
ebd8d4e8 26953
ab78acc6 26954/*<replacement>*/
8b095871 26955var processNextTick = require('process-nextick-args');
ab78acc6
IC
26956/*</replacement>*/
26957
ab78acc6 26958/*<replacement>*/
8b095871 26959var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
ab78acc6
IC
26960/*</replacement>*/
26961
ab78acc6 26962/*<replacement>*/
8b095871 26963var Duplex;
ab78acc6
IC
26964/*</replacement>*/
26965
8b095871 26966Writable.WritableState = WritableState;
ab78acc6
IC
26967
26968/*<replacement>*/
26969var util = require('core-util-is');
26970util.inherits = require('inherits');
26971/*</replacement>*/
26972
8b095871
IC
26973/*<replacement>*/
26974var internalUtil = {
26975 deprecate: require('util-deprecate')
26976};
26977/*</replacement>*/
ab78acc6 26978
8b095871
IC
26979/*<replacement>*/
26980var Stream;
26981(function () {
26982 try {
26983 Stream = require('st' + 'ream');
26984 } catch (_) {} finally {
26985 if (!Stream) Stream = require('events').EventEmitter;
26986 }
26987})();
26988/*</replacement>*/
ab78acc6 26989
8b095871 26990var Buffer = require('buffer').Buffer;
ab78acc6 26991/*<replacement>*/
8b095871 26992var bufferShim = require('buffer-shims');
ab78acc6
IC
26993/*</replacement>*/
26994
8b095871
IC
26995util.inherits(Writable, Stream);
26996
26997function nop() {}
ab78acc6 26998
8b095871
IC
26999function WriteReq(chunk, encoding, cb) {
27000 this.chunk = chunk;
27001 this.encoding = encoding;
27002 this.callback = cb;
27003 this.next = null;
27004}
ab78acc6 27005
8b095871
IC
27006function WritableState(options, stream) {
27007 Duplex = Duplex || require('./_stream_duplex');
ab78acc6
IC
27008
27009 options = options || {};
27010
8b095871
IC
27011 // object stream flag to indicate whether or not this stream
27012 // contains buffers or objects.
27013 this.objectMode = !!options.objectMode;
27014
27015 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
27016
27017 // the point at which write() starts returning false
27018 // Note: 0 is a valid value, means that we always return false if
27019 // the entire buffer is not flushed immediately on write()
ab78acc6 27020 var hwm = options.highWaterMark;
8b095871
IC
27021 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
27022 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6
IC
27023
27024 // cast to ints.
8b095871 27025 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 27026
8b095871
IC
27027 // drain event flag.
27028 this.needDrain = false;
27029 // at the start of calling end()
27030 this.ending = false;
27031 // when end() has been called, and returned
ab78acc6 27032 this.ended = false;
8b095871
IC
27033 // when 'finish' is emitted
27034 this.finished = false;
27035
27036 // should we decode strings into buffers before passing to _write?
27037 // this is here so that some node-core streams can optimize string
27038 // handling at a lower level.
27039 var noDecode = options.decodeStrings === false;
27040 this.decodeStrings = !noDecode;
27041
27042 // Crypto is kind of old and crusty. Historically, its default string
27043 // encoding is 'binary' so we have to make this configurable.
27044 // Everything else in the universe uses 'utf8', though.
27045 this.defaultEncoding = options.defaultEncoding || 'utf8';
27046
27047 // not an actual buffer we keep track of, but a measurement
27048 // of how much we're waiting to get pushed to some underlying
27049 // socket or file.
27050 this.length = 0;
27051
27052 // a flag to see when we're in the middle of a write.
27053 this.writing = false;
27054
27055 // when true all writes will be buffered until .uncork() call
27056 this.corked = 0;
ebd8d4e8 27057
ab78acc6
IC
27058 // a flag to be able to tell if the onwrite cb is called immediately,
27059 // or on a later tick. We set this to true at first, because any
27060 // actions that shouldn't happen until "later" should generally also
27061 // not happen before the first write call.
27062 this.sync = true;
ebd8d4e8 27063
8b095871
IC
27064 // a flag to know if we're processing previously buffered items, which
27065 // may call the _write() callback in the same tick, so that we don't
27066 // end up in an overlapped onwrite situation.
27067 this.bufferProcessing = false;
27068
27069 // the callback that's passed to _write(chunk,cb)
27070 this.onwrite = function (er) {
27071 onwrite(stream, er);
27072 };
27073
27074 // the callback that the user supplies to write(chunk,encoding,cb)
27075 this.writecb = null;
27076
27077 // the amount that is being written when _write is called.
27078 this.writelen = 0;
27079
27080 this.bufferedRequest = null;
27081 this.lastBufferedRequest = null;
27082
27083 // number of pending user-supplied write callbacks
27084 // this must be 0 before 'finish' can be emitted
27085 this.pendingcb = 0;
27086
27087 // emit prefinish if the only thing we're waiting for is _write cbs
27088 // This is relevant for synchronous Transform streams
27089 this.prefinished = false;
27090
27091 // True if the error was already emitted and should not be thrown again
27092 this.errorEmitted = false;
27093
27094 // count buffered requests
27095 this.bufferedRequestCount = 0;
27096
27097 // allocate the first CorkedRequest, there is always
27098 // one allocated and free to use, and we maintain at most two
27099 this.corkedRequestsFree = new CorkedRequest(this);
27100}
27101
27102WritableState.prototype.getBuffer = function getBuffer() {
27103 var current = this.bufferedRequest;
27104 var out = [];
27105 while (current) {
27106 out.push(current);
27107 current = current.next;
27108 }
27109 return out;
27110};
27111
27112(function () {
27113 try {
27114 Object.defineProperty(WritableState.prototype, 'buffer', {
27115 get: internalUtil.deprecate(function () {
27116 return this.getBuffer();
27117 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
27118 });
27119 } catch (_) {}
27120})();
27121
27122// Test _writableState for inheritance to account for Duplex streams,
27123// whose prototype chain only points to Readable.
27124var realHasInstance;
27125if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
27126 realHasInstance = Function.prototype[Symbol.hasInstance];
27127 Object.defineProperty(Writable, Symbol.hasInstance, {
27128 value: function (object) {
27129 if (realHasInstance.call(this, object)) return true;
27130
27131 return object && object._writableState instanceof WritableState;
27132 }
27133 });
27134} else {
27135 realHasInstance = function (object) {
27136 return object instanceof this;
27137 };
27138}
27139
27140function Writable(options) {
27141 Duplex = Duplex || require('./_stream_duplex');
27142
27143 // Writable ctor is applied to Duplexes, too.
27144 // `realHasInstance` is necessary because using plain `instanceof`
27145 // would return false, as no `_writableState` property is attached.
27146
27147 // Trying to use the custom `instanceof` for Writable here will also break the
27148 // Node.js LazyTransform implementation, which has a non-trivial getter for
27149 // `_writableState` that would lead to infinite recursion.
27150 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
27151 return new Writable(options);
27152 }
27153
27154 this._writableState = new WritableState(options, this);
27155
27156 // legacy.
27157 this.writable = true;
27158
27159 if (options) {
27160 if (typeof options.write === 'function') this._write = options.write;
27161
27162 if (typeof options.writev === 'function') this._writev = options.writev;
27163 }
27164
27165 Stream.call(this);
27166}
27167
27168// Otherwise people can pipe Writable streams, which is just wrong.
27169Writable.prototype.pipe = function () {
27170 this.emit('error', new Error('Cannot pipe, not readable'));
27171};
27172
27173function writeAfterEnd(stream, cb) {
27174 var er = new Error('write after end');
27175 // TODO: defer error events consistently everywhere, not just the cb
27176 stream.emit('error', er);
27177 processNextTick(cb, er);
27178}
27179
27180// If we get something that is not a buffer, string, null, or undefined,
27181// and we're not in objectMode, then that's an error.
27182// Otherwise stream chunks are all considered to be of length=1, and the
27183// watermarks determine how many objects to keep in the buffer, rather than
27184// how many bytes or characters.
27185function validChunk(stream, state, chunk, cb) {
27186 var valid = true;
27187 var er = false;
27188 // Always throw error if a null is written
27189 // if we are not in object mode then throw
27190 // if it is not a buffer, string, or undefined.
27191 if (chunk === null) {
27192 er = new TypeError('May not write null values to stream');
27193 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
27194 er = new TypeError('Invalid non-string/buffer chunk');
27195 }
27196 if (er) {
27197 stream.emit('error', er);
27198 processNextTick(cb, er);
27199 valid = false;
27200 }
27201 return valid;
27202}
ebd8d4e8 27203
8b095871
IC
27204Writable.prototype.write = function (chunk, encoding, cb) {
27205 var state = this._writableState;
27206 var ret = false;
ab78acc6 27207
8b095871
IC
27208 if (typeof encoding === 'function') {
27209 cb = encoding;
27210 encoding = null;
27211 }
ab78acc6 27212
8b095871 27213 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
ab78acc6 27214
8b095871 27215 if (typeof cb !== 'function') cb = nop;
ab78acc6 27216
8b095871
IC
27217 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
27218 state.pendingcb++;
27219 ret = writeOrBuffer(this, state, chunk, encoding, cb);
27220 }
ab78acc6 27221
8b095871
IC
27222 return ret;
27223};
ab78acc6 27224
8b095871
IC
27225Writable.prototype.cork = function () {
27226 var state = this._writableState;
ab78acc6 27227
8b095871
IC
27228 state.corked++;
27229};
ebd8d4e8 27230
8b095871
IC
27231Writable.prototype.uncork = function () {
27232 var state = this._writableState;
ab78acc6 27233
8b095871
IC
27234 if (state.corked) {
27235 state.corked--;
ab78acc6 27236
8b095871
IC
27237 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
27238 }
27239};
ab78acc6 27240
8b095871
IC
27241Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
27242 // node::ParseEncoding() requires lower case.
27243 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
27244 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
27245 this._writableState.defaultEncoding = encoding;
27246 return this;
27247};
ab78acc6 27248
8b095871
IC
27249function decodeChunk(state, chunk, encoding) {
27250 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
27251 chunk = bufferShim.from(chunk, encoding);
27252 }
27253 return chunk;
ab78acc6
IC
27254}
27255
8b095871
IC
27256// if we're already writing something, then just put this
27257// in the queue, and wait our turn. Otherwise, call _write
27258// If we return false, then we need a drain event, so set that flag.
27259function writeOrBuffer(stream, state, chunk, encoding, cb) {
27260 chunk = decodeChunk(state, chunk, encoding);
ab78acc6 27261
8b095871
IC
27262 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
27263 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 27264
8b095871 27265 state.length += len;
ebd8d4e8 27266
8b095871
IC
27267 var ret = state.length < state.highWaterMark;
27268 // we must ensure that previous needDrain will not be reset to false.
27269 if (!ret) state.needDrain = true;
ebd8d4e8 27270
8b095871
IC
27271 if (state.writing || state.corked) {
27272 var last = state.lastBufferedRequest;
27273 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
27274 if (last) {
27275 last.next = state.lastBufferedRequest;
ebd8d4e8 27276 } else {
8b095871
IC
27277 state.bufferedRequest = state.lastBufferedRequest;
27278 }
27279 state.bufferedRequestCount += 1;
27280 } else {
27281 doWrite(stream, state, false, len, chunk, encoding, cb);
27282 }
ab78acc6 27283
8b095871
IC
27284 return ret;
27285}
ab78acc6 27286
8b095871
IC
27287function doWrite(stream, state, writev, len, chunk, encoding, cb) {
27288 state.writelen = len;
27289 state.writecb = cb;
27290 state.writing = true;
27291 state.sync = true;
27292 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
27293 state.sync = false;
27294}
ab78acc6 27295
8b095871
IC
27296function onwriteError(stream, state, sync, er, cb) {
27297 --state.pendingcb;
27298 if (sync) processNextTick(cb, er);else cb(er);
ab78acc6 27299
8b095871
IC
27300 stream._writableState.errorEmitted = true;
27301 stream.emit('error', er);
27302}
ebd8d4e8 27303
8b095871
IC
27304function onwriteStateUpdate(state) {
27305 state.writing = false;
27306 state.writecb = null;
27307 state.length -= state.writelen;
27308 state.writelen = 0;
ab78acc6 27309}
ebd8d4e8 27310
8b095871
IC
27311function onwrite(stream, er) {
27312 var state = stream._writableState;
27313 var sync = state.sync;
27314 var cb = state.writecb;
ab78acc6 27315
8b095871 27316 onwriteStateUpdate(state);
ab78acc6 27317
8b095871
IC
27318 if (er) onwriteError(stream, state, sync, er, cb);else {
27319 // Check if we're actually ready to finish, but don't emit yet
27320 var finished = needFinish(state);
27321
27322 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
27323 clearBuffer(stream, state);
27324 }
27325
27326 if (sync) {
27327 /*<replacement>*/
27328 asyncWrite(afterWrite, stream, state, finished, cb);
27329 /*</replacement>*/
27330 } else {
27331 afterWrite(stream, state, finished, cb);
27332 }
27333 }
ab78acc6
IC
27334}
27335
8b095871
IC
27336function afterWrite(stream, state, finished, cb) {
27337 if (!finished) onwriteDrain(stream, state);
27338 state.pendingcb--;
27339 cb();
27340 finishMaybe(stream, state);
27341}
ab78acc6 27342
8b095871
IC
27343// Must force callback to be called on nextTick, so that we don't
27344// emit 'drain' before the write() consumer gets the 'false' return
27345// value, and has a chance to attach a 'drain' listener.
27346function onwriteDrain(stream, state) {
27347 if (state.length === 0 && state.needDrain) {
27348 state.needDrain = false;
27349 stream.emit('drain');
ebd8d4e8 27350 }
ebd8d4e8 27351}
ebd8d4e8 27352
8b095871
IC
27353// if there's something in the buffer waiting, then process it
27354function clearBuffer(stream, state) {
27355 state.bufferProcessing = true;
27356 var entry = state.bufferedRequest;
ebd8d4e8 27357
8b095871
IC
27358 if (stream._writev && entry && entry.next) {
27359 // Fast case, write everything using _writev()
27360 var l = state.bufferedRequestCount;
27361 var buffer = new Array(l);
27362 var holder = state.corkedRequestsFree;
27363 holder.entry = entry;
ebd8d4e8 27364
8b095871
IC
27365 var count = 0;
27366 while (entry) {
27367 buffer[count] = entry;
27368 entry = entry.next;
27369 count += 1;
27370 }
ebd8d4e8 27371
8b095871 27372 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
ebd8d4e8 27373
8b095871
IC
27374 // doWrite is almost always async, defer these to save a bit of time
27375 // as the hot path ends with doWrite
27376 state.pendingcb++;
27377 state.lastBufferedRequest = null;
27378 if (holder.next) {
27379 state.corkedRequestsFree = holder.next;
27380 holder.next = null;
27381 } else {
27382 state.corkedRequestsFree = new CorkedRequest(state);
27383 }
27384 } else {
27385 // Slow case, write chunks one-by-one
27386 while (entry) {
27387 var chunk = entry.chunk;
27388 var encoding = entry.encoding;
27389 var cb = entry.callback;
27390 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 27391
8b095871
IC
27392 doWrite(stream, state, false, len, chunk, encoding, cb);
27393 entry = entry.next;
27394 // if we didn't call the onwrite immediately, then
27395 // it means that we need to wait until it does.
27396 // also, that means that the chunk and cb are currently
27397 // being processed, so move the buffer counter past them.
27398 if (state.writing) {
27399 break;
27400 }
27401 }
27402
27403 if (entry === null) state.lastBufferedRequest = null;
ebd8d4e8 27404 }
ab78acc6 27405
8b095871
IC
27406 state.bufferedRequestCount = 0;
27407 state.bufferedRequest = entry;
27408 state.bufferProcessing = false;
ebd8d4e8
IC
27409}
27410
8b095871
IC
27411Writable.prototype._write = function (chunk, encoding, cb) {
27412 cb(new Error('_write() is not implemented'));
27413};
ebd8d4e8 27414
8b095871 27415Writable.prototype._writev = null;
ab78acc6 27416
8b095871
IC
27417Writable.prototype.end = function (chunk, encoding, cb) {
27418 var state = this._writableState;
27419
27420 if (typeof chunk === 'function') {
27421 cb = chunk;
27422 chunk = null;
27423 encoding = null;
27424 } else if (typeof encoding === 'function') {
27425 cb = encoding;
27426 encoding = null;
ab78acc6
IC
27427 }
27428
8b095871 27429 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
ab78acc6 27430
8b095871
IC
27431 // .end() fully uncorks
27432 if (state.corked) {
27433 state.corked = 1;
27434 this.uncork();
ab78acc6
IC
27435 }
27436
8b095871
IC
27437 // ignore unnecessary end() calls.
27438 if (!state.ending && !state.finished) endWritable(this, state, cb);
27439};
ab78acc6 27440
8b095871
IC
27441function needFinish(state) {
27442 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
27443}
ab78acc6 27444
8b095871
IC
27445function prefinish(stream, state) {
27446 if (!state.prefinished) {
27447 state.prefinished = true;
27448 stream.emit('prefinish');
ab78acc6 27449 }
8b095871 27450}
ab78acc6 27451
8b095871
IC
27452function finishMaybe(stream, state) {
27453 var need = needFinish(state);
27454 if (need) {
27455 if (state.pendingcb === 0) {
27456 prefinish(stream, state);
27457 state.finished = true;
27458 stream.emit('finish');
27459 } else {
27460 prefinish(stream, state);
27461 }
ab78acc6 27462 }
8b095871
IC
27463 return need;
27464}
ab78acc6 27465
8b095871
IC
27466function endWritable(stream, state, cb) {
27467 state.ending = true;
27468 finishMaybe(stream, state);
27469 if (cb) {
27470 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
ab78acc6 27471 }
8b095871
IC
27472 state.ended = true;
27473 stream.writable = false;
27474}
ab78acc6 27475
8b095871
IC
27476// It seems a linked list but it is not
27477// there will be only 2 of these for each stream
27478function CorkedRequest(state) {
27479 var _this = this;
ab78acc6 27480
8b095871
IC
27481 this.next = null;
27482 this.entry = null;
ebd8d4e8 27483
8b095871
IC
27484 this.finish = function (err) {
27485 var entry = _this.entry;
27486 _this.entry = null;
27487 while (entry) {
27488 var cb = entry.callback;
27489 state.pendingcb--;
27490 cb(err);
27491 entry = entry.next;
27492 }
27493 if (state.corkedRequestsFree) {
27494 state.corkedRequestsFree.next = _this;
27495 } else {
27496 state.corkedRequestsFree = _this;
27497 }
27498 };
27499}
27500}).call(this,require('_process'))
27501},{"./_stream_duplex":15,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"process-nextick-args":12,"util-deprecate":27}],20:[function(require,module,exports){
27502'use strict';
ebd8d4e8 27503
8b095871
IC
27504var Buffer = require('buffer').Buffer;
27505/*<replacement>*/
27506var bufferShim = require('buffer-shims');
27507/*</replacement>*/
ebd8d4e8 27508
8b095871 27509module.exports = BufferList;
ebd8d4e8 27510
8b095871
IC
27511function BufferList() {
27512 this.head = null;
27513 this.tail = null;
27514 this.length = 0;
27515}
ab78acc6 27516
8b095871
IC
27517BufferList.prototype.push = function (v) {
27518 var entry = { data: v, next: null };
27519 if (this.length > 0) this.tail.next = entry;else this.head = entry;
27520 this.tail = entry;
27521 ++this.length;
27522};
27523
27524BufferList.prototype.unshift = function (v) {
27525 var entry = { data: v, next: this.head };
27526 if (this.length === 0) this.tail = entry;
27527 this.head = entry;
27528 ++this.length;
27529};
ab78acc6 27530
8b095871
IC
27531BufferList.prototype.shift = function () {
27532 if (this.length === 0) return;
27533 var ret = this.head.data;
27534 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
27535 --this.length;
ab78acc6
IC
27536 return ret;
27537};
27538
8b095871
IC
27539BufferList.prototype.clear = function () {
27540 this.head = this.tail = null;
27541 this.length = 0;
27542};
ebd8d4e8 27543
8b095871
IC
27544BufferList.prototype.join = function (s) {
27545 if (this.length === 0) return '';
27546 var p = this.head;
27547 var ret = '' + p.data;
27548 while (p = p.next) {
27549 ret += s + p.data;
27550 }return ret;
27551};
ebd8d4e8 27552
8b095871
IC
27553BufferList.prototype.concat = function (n) {
27554 if (this.length === 0) return bufferShim.alloc(0);
27555 if (this.length === 1) return this.head.data;
27556 var ret = bufferShim.allocUnsafe(n >>> 0);
27557 var p = this.head;
27558 var i = 0;
27559 while (p) {
27560 p.data.copy(ret, i);
27561 i += p.data.length;
27562 p = p.next;
ebd8d4e8 27563 }
8b095871
IC
27564 return ret;
27565};
27566},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
27567module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 27568
8b095871
IC
27569},{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
27570(function (process){
27571var Stream = (function (){
27572 try {
27573 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
27574 } catch(_){}
27575}());
27576exports = module.exports = require('./lib/_stream_readable.js');
27577exports.Stream = Stream || exports;
27578exports.Readable = exports;
27579exports.Writable = require('./lib/_stream_writable.js');
27580exports.Duplex = require('./lib/_stream_duplex.js');
27581exports.Transform = require('./lib/_stream_transform.js');
27582exports.PassThrough = require('./lib/_stream_passthrough.js');
ab78acc6 27583
8b095871
IC
27584if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
27585 module.exports = Stream;
ab78acc6 27586}
ebd8d4e8 27587
8b095871
IC
27588}).call(this,require('_process'))
27589},{"./lib/_stream_duplex.js":15,"./lib/_stream_passthrough.js":16,"./lib/_stream_readable.js":17,"./lib/_stream_transform.js":18,"./lib/_stream_writable.js":19,"_process":13}],23:[function(require,module,exports){
27590module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 27591
8b095871
IC
27592},{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
27593module.exports = require("./lib/_stream_writable.js")
ab78acc6 27594
8b095871
IC
27595},{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
27596// Copyright Joyent, Inc. and other Node contributors.
27597//
27598// Permission is hereby granted, free of charge, to any person obtaining a
27599// copy of this software and associated documentation files (the
27600// "Software"), to deal in the Software without restriction, including
27601// without limitation the rights to use, copy, modify, merge, publish,
27602// distribute, sublicense, and/or sell copies of the Software, and to permit
27603// persons to whom the Software is furnished to do so, subject to the
27604// following conditions:
27605//
27606// The above copyright notice and this permission notice shall be included
27607// in all copies or substantial portions of the Software.
27608//
27609// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
27610// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27611// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
27612// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
27613// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
27614// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
27615// USE OR OTHER DEALINGS IN THE SOFTWARE.
27616
27617module.exports = Stream;
27618
27619var EE = require('events').EventEmitter;
27620var inherits = require('inherits');
27621
27622inherits(Stream, EE);
27623Stream.Readable = require('readable-stream/readable.js');
27624Stream.Writable = require('readable-stream/writable.js');
27625Stream.Duplex = require('readable-stream/duplex.js');
27626Stream.Transform = require('readable-stream/transform.js');
27627Stream.PassThrough = require('readable-stream/passthrough.js');
ebd8d4e8 27628
8b095871
IC
27629// Backwards-compat with node 0.4.x
27630Stream.Stream = Stream;
ebd8d4e8 27631
ab78acc6 27632
ab78acc6 27633
8b095871
IC
27634// old-style streams. Note that the pipe method (the only relevant
27635// part of this class) is overridden in the Readable class.
ebd8d4e8 27636
8b095871
IC
27637function Stream() {
27638 EE.call(this);
27639}
ebd8d4e8 27640
8b095871
IC
27641Stream.prototype.pipe = function(dest, options) {
27642 var source = this;
ab78acc6 27643
8b095871
IC
27644 function ondata(chunk) {
27645 if (dest.writable) {
27646 if (false === dest.write(chunk) && source.pause) {
27647 source.pause();
27648 }
ab78acc6
IC
27649 }
27650 }
27651
8b095871
IC
27652 source.on('data', ondata);
27653
27654 function ondrain() {
27655 if (source.readable && source.resume) {
27656 source.resume();
27657 }
ab78acc6
IC
27658 }
27659
ab78acc6
IC
27660 dest.on('drain', ondrain);
27661
8b095871
IC
27662 // If the 'end' option is not supplied, dest.end() will be called when
27663 // source gets the 'end' or 'close' events. Only dest.end() once.
27664 if (!dest._isStdio && (!options || options.end !== false)) {
27665 source.on('end', onend);
27666 source.on('close', onclose);
ab78acc6
IC
27667 }
27668
8b095871
IC
27669 var didOnEnd = false;
27670 function onend() {
27671 if (didOnEnd) return;
27672 didOnEnd = true;
ab78acc6 27673
8b095871 27674 dest.end();
ab78acc6 27675 }
ab78acc6
IC
27676
27677
ab78acc6 27678 function onclose() {
8b095871
IC
27679 if (didOnEnd) return;
27680 didOnEnd = true;
ebd8d4e8 27681
8b095871 27682 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
27683 }
27684
8b095871
IC
27685 // don't leave dangling pipes when there are errors.
27686 function onerror(er) {
27687 cleanup();
27688 if (EE.listenerCount(this, 'error') === 0) {
27689 throw er; // Unhandled stream error in pipe.
27690 }
ebd8d4e8
IC
27691 }
27692
8b095871
IC
27693 source.on('error', onerror);
27694 dest.on('error', onerror);
ab78acc6 27695
8b095871
IC
27696 // remove all the event listeners that were added.
27697 function cleanup() {
27698 source.removeListener('data', ondata);
27699 dest.removeListener('drain', ondrain);
ab78acc6 27700
8b095871
IC
27701 source.removeListener('end', onend);
27702 source.removeListener('close', onclose);
ab78acc6 27703
8b095871
IC
27704 source.removeListener('error', onerror);
27705 dest.removeListener('error', onerror);
ab78acc6 27706
8b095871
IC
27707 source.removeListener('end', cleanup);
27708 source.removeListener('close', cleanup);
ab78acc6 27709
8b095871
IC
27710 dest.removeListener('close', cleanup);
27711 }
ab78acc6 27712
8b095871
IC
27713 source.on('end', cleanup);
27714 source.on('close', cleanup);
ab78acc6 27715
8b095871 27716 dest.on('close', cleanup);
ebd8d4e8 27717
8b095871 27718 dest.emit('pipe', source);
ab78acc6 27719
8b095871
IC
27720 // Allow for unix-like usage: A.pipe(B).pipe(C)
27721 return dest;
27722};
ab78acc6 27723
8b095871
IC
27724},{"events":7,"inherits":9,"readable-stream/duplex.js":14,"readable-stream/passthrough.js":21,"readable-stream/readable.js":22,"readable-stream/transform.js":23,"readable-stream/writable.js":24}],26:[function(require,module,exports){
27725// Copyright Joyent, Inc. and other Node contributors.
27726//
27727// Permission is hereby granted, free of charge, to any person obtaining a
27728// copy of this software and associated documentation files (the
27729// "Software"), to deal in the Software without restriction, including
27730// without limitation the rights to use, copy, modify, merge, publish,
27731// distribute, sublicense, and/or sell copies of the Software, and to permit
27732// persons to whom the Software is furnished to do so, subject to the
27733// following conditions:
27734//
27735// The above copyright notice and this permission notice shall be included
27736// in all copies or substantial portions of the Software.
27737//
27738// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
27739// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27740// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
27741// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
27742// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
27743// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
27744// USE OR OTHER DEALINGS IN THE SOFTWARE.
27745
27746var Buffer = require('buffer').Buffer;
ebd8d4e8 27747
8b095871
IC
27748var isBufferEncoding = Buffer.isEncoding
27749 || function(encoding) {
27750 switch (encoding && encoding.toLowerCase()) {
27751 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;
27752 default: return false;
27753 }
27754 }
ab78acc6 27755
ab78acc6 27756
8b095871
IC
27757function assertEncoding(encoding) {
27758 if (encoding && !isBufferEncoding(encoding)) {
27759 throw new Error('Unknown encoding: ' + encoding);
27760 }
27761}
ebd8d4e8 27762
8b095871
IC
27763// StringDecoder provides an interface for efficiently splitting a series of
27764// buffers into a series of JS strings without breaking apart multi-byte
27765// characters. CESU-8 is handled as part of the UTF-8 encoding.
27766//
27767// @TODO Handling all encodings inside a single object makes it very difficult
27768// to reason about this code, so it should be split up in the future.
27769// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
27770// points as used by CESU-8.
27771var StringDecoder = exports.StringDecoder = function(encoding) {
27772 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
27773 assertEncoding(encoding);
27774 switch (this.encoding) {
27775 case 'utf8':
27776 // CESU-8 represents each of Surrogate Pair by 3-bytes
27777 this.surrogateSize = 3;
27778 break;
27779 case 'ucs2':
27780 case 'utf16le':
27781 // UTF-16 represents each of Surrogate Pair by 2-bytes
27782 this.surrogateSize = 2;
27783 this.detectIncompleteChar = utf16DetectIncompleteChar;
27784 break;
27785 case 'base64':
27786 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
27787 this.surrogateSize = 3;
27788 this.detectIncompleteChar = base64DetectIncompleteChar;
27789 break;
27790 default:
27791 this.write = passThroughWrite;
27792 return;
27793 }
27794
27795 // Enough space to store all bytes of a single character. UTF-8 needs 4
27796 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
27797 this.charBuffer = new Buffer(6);
27798 // Number of bytes received for the current incomplete multi-byte character.
27799 this.charReceived = 0;
27800 // Number of bytes expected for the current incomplete multi-byte character.
27801 this.charLength = 0;
ab78acc6
IC
27802};
27803
ab78acc6 27804
8b095871
IC
27805// write decodes the given buffer and returns it as JS string that is
27806// guaranteed to not contain any partial multi-byte characters. Any partial
27807// character found at the end of the buffer is buffered up, and will be
27808// returned when calling write again with the remaining bytes.
27809//
27810// Note: Converting a Buffer containing an orphan surrogate to a String
27811// currently works, but converting a String to a Buffer (via `new Buffer`, or
27812// Buffer#write) will replace incomplete surrogates with the unicode
27813// replacement character. See https://codereview.chromium.org/121173009/ .
27814StringDecoder.prototype.write = function(buffer) {
27815 var charStr = '';
27816 // if our last write ended with an incomplete multibyte character
27817 while (this.charLength) {
27818 // determine how many remaining bytes this buffer has to offer for this char
27819 var available = (buffer.length >= this.charLength - this.charReceived) ?
27820 this.charLength - this.charReceived :
27821 buffer.length;
ab78acc6 27822
8b095871
IC
27823 // add the new bytes to the char buffer
27824 buffer.copy(this.charBuffer, this.charReceived, 0, available);
27825 this.charReceived += available;
27826
27827 if (this.charReceived < this.charLength) {
27828 // still not enough chars in this buffer? wait for more ...
27829 return '';
ebd8d4e8 27830 }
ebd8d4e8 27831
8b095871
IC
27832 // remove bytes belonging to the current character from the buffer
27833 buffer = buffer.slice(available, buffer.length);
ab78acc6 27834
8b095871
IC
27835 // get the character that was split
27836 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
27837
27838 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
27839 var charCode = charStr.charCodeAt(charStr.length - 1);
27840 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
27841 this.charLength += this.surrogateSize;
27842 charStr = '';
27843 continue;
ab78acc6 27844 }
8b095871 27845 this.charReceived = this.charLength = 0;
ebd8d4e8 27846
8b095871
IC
27847 // if there are no more bytes in this buffer, just emit our char
27848 if (buffer.length === 0) {
27849 return charStr;
27850 }
27851 break;
ebd8d4e8 27852 }
ebd8d4e8 27853
8b095871
IC
27854 // determine and set charLength / charReceived
27855 this.detectIncompleteChar(buffer);
ebd8d4e8 27856
8b095871
IC
27857 var end = buffer.length;
27858 if (this.charLength) {
27859 // buffer the incomplete character bytes we got
27860 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
27861 end -= this.charReceived;
ab78acc6 27862 }
ebd8d4e8 27863
8b095871
IC
27864 charStr += buffer.toString(this.encoding, 0, end);
27865
27866 var end = charStr.length - 1;
27867 var charCode = charStr.charCodeAt(end);
27868 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
27869 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
27870 var size = this.surrogateSize;
27871 this.charLength += size;
27872 this.charReceived += size;
27873 this.charBuffer.copy(this.charBuffer, size, 0, size);
27874 buffer.copy(this.charBuffer, 0, 0, size);
27875 return charStr.substring(0, end);
ab78acc6 27876 }
ebd8d4e8 27877
8b095871
IC
27878 // or just emit the charStr
27879 return charStr;
27880};
ebd8d4e8 27881
8b095871
IC
27882// detectIncompleteChar determines if there is an incomplete UTF-8 character at
27883// the end of the given buffer. If so, it sets this.charLength to the byte
27884// length that character, and sets this.charReceived to the number of bytes
27885// that are available for this character.
27886StringDecoder.prototype.detectIncompleteChar = function(buffer) {
27887 // determine how many bytes we have to check at the end of this buffer
27888 var i = (buffer.length >= 3) ? 3 : buffer.length;
ab78acc6 27889
8b095871
IC
27890 // Figure out if one of the last i bytes of our buffer announces an
27891 // incomplete char.
27892 for (; i > 0; i--) {
27893 var c = buffer[buffer.length - i];
ebd8d4e8 27894
8b095871 27895 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 27896
8b095871
IC
27897 // 110XXXXX
27898 if (i == 1 && c >> 5 == 0x06) {
27899 this.charLength = 2;
27900 break;
ebd8d4e8 27901 }
ab78acc6 27902
8b095871
IC
27903 // 1110XXXX
27904 if (i <= 2 && c >> 4 == 0x0E) {
27905 this.charLength = 3;
27906 break;
27907 }
27908
27909 // 11110XXX
27910 if (i <= 3 && c >> 3 == 0x1E) {
27911 this.charLength = 4;
27912 break;
ebd8d4e8
IC
27913 }
27914 }
8b095871
IC
27915 this.charReceived = i;
27916};
ab78acc6 27917
8b095871
IC
27918StringDecoder.prototype.end = function(buffer) {
27919 var res = '';
27920 if (buffer && buffer.length)
27921 res = this.write(buffer);
ab78acc6 27922
8b095871
IC
27923 if (this.charReceived) {
27924 var cr = this.charReceived;
27925 var buf = this.charBuffer;
27926 var enc = this.encoding;
27927 res += buf.slice(0, cr).toString(enc);
27928 }
ab78acc6 27929
8b095871 27930 return res;
ab78acc6
IC
27931};
27932
8b095871
IC
27933function passThroughWrite(buffer) {
27934 return buffer.toString(this.encoding);
27935}
ab78acc6 27936
8b095871
IC
27937function utf16DetectIncompleteChar(buffer) {
27938 this.charReceived = buffer.length % 2;
27939 this.charLength = this.charReceived ? 2 : 0;
27940}
ab78acc6 27941
8b095871
IC
27942function base64DetectIncompleteChar(buffer) {
27943 this.charReceived = buffer.length % 3;
27944 this.charLength = this.charReceived ? 3 : 0;
27945}
ab78acc6 27946
8b095871
IC
27947},{"buffer":5}],27:[function(require,module,exports){
27948(function (global){
ab78acc6 27949
8b095871
IC
27950/**
27951 * Module exports.
27952 */
ebd8d4e8 27953
8b095871 27954module.exports = deprecate;
ebd8d4e8 27955
8b095871
IC
27956/**
27957 * Mark that a method should not be used.
27958 * Returns a modified function which warns once by default.
27959 *
27960 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
27961 *
27962 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
27963 * will throw an Error when invoked.
27964 *
27965 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
27966 * will invoke `console.trace()` instead of `console.error()`.
27967 *
27968 * @param {Function} fn - the function to deprecate
27969 * @param {String} msg - the string to print to the console when `fn` is invoked
27970 * @returns {Function} a new "deprecated" version of `fn`
27971 * @api public
27972 */
ebd8d4e8 27973
8b095871
IC
27974function deprecate (fn, msg) {
27975 if (config('noDeprecation')) {
27976 return fn;
27977 }
ebd8d4e8 27978
8b095871
IC
27979 var warned = false;
27980 function deprecated() {
27981 if (!warned) {
27982 if (config('throwDeprecation')) {
27983 throw new Error(msg);
27984 } else if (config('traceDeprecation')) {
27985 console.trace(msg);
27986 } else {
27987 console.warn(msg);
ab78acc6 27988 }
8b095871 27989 warned = true;
ab78acc6 27990 }
8b095871 27991 return fn.apply(this, arguments);
ebd8d4e8
IC
27992 }
27993
8b095871 27994 return deprecated;
ebd8d4e8
IC
27995}
27996
8b095871
IC
27997/**
27998 * Checks `localStorage` for boolean values for the given `name`.
27999 *
28000 * @param {String} name
28001 * @returns {Boolean}
28002 * @api private
28003 */
ebd8d4e8 28004
8b095871
IC
28005function config (name) {
28006 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
28007 try {
28008 if (!global.localStorage) return false;
28009 } catch (_) {
28010 return false;
ab78acc6 28011 }
8b095871
IC
28012 var val = global.localStorage[name];
28013 if (null == val) return false;
28014 return String(val).toLowerCase() === 'true';
ebd8d4e8 28015}
ebd8d4e8 28016
8b095871
IC
28017}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
28018},{}],28:[function(require,module,exports){
28019arguments[4][9][0].apply(exports,arguments)
28020},{"dup":9}],29:[function(require,module,exports){
28021module.exports = function isBuffer(arg) {
28022 return arg && typeof arg === 'object'
28023 && typeof arg.copy === 'function'
28024 && typeof arg.fill === 'function'
28025 && typeof arg.readUInt8 === 'function';
ebd8d4e8 28026}
8b095871
IC
28027},{}],30:[function(require,module,exports){
28028(function (process,global){
ab78acc6
IC
28029// Copyright Joyent, Inc. and other Node contributors.
28030//
28031// Permission is hereby granted, free of charge, to any person obtaining a
28032// copy of this software and associated documentation files (the
28033// "Software"), to deal in the Software without restriction, including
28034// without limitation the rights to use, copy, modify, merge, publish,
28035// distribute, sublicense, and/or sell copies of the Software, and to permit
28036// persons to whom the Software is furnished to do so, subject to the
28037// following conditions:
28038//
28039// The above copyright notice and this permission notice shall be included
28040// in all copies or substantial portions of the Software.
28041//
28042// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
28043// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28044// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
28045// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
28046// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
28047// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
28048// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 28049
8b095871
IC
28050var formatRegExp = /%[sdj%]/g;
28051exports.format = function(f) {
28052 if (!isString(f)) {
28053 var objects = [];
28054 for (var i = 0; i < arguments.length; i++) {
28055 objects.push(inspect(arguments[i]));
28056 }
28057 return objects.join(' ');
28058 }
ebd8d4e8 28059
8b095871
IC
28060 var i = 1;
28061 var args = arguments;
28062 var len = args.length;
28063 var str = String(f).replace(formatRegExp, function(x) {
28064 if (x === '%%') return '%';
28065 if (i >= len) return x;
28066 switch (x) {
28067 case '%s': return String(args[i++]);
28068 case '%d': return Number(args[i++]);
28069 case '%j':
28070 try {
28071 return JSON.stringify(args[i++]);
28072 } catch (_) {
28073 return '[Circular]';
28074 }
28075 default:
28076 return x;
28077 }
28078 });
28079 for (var x = args[i]; i < len; x = args[++i]) {
28080 if (isNull(x) || !isObject(x)) {
28081 str += ' ' + x;
28082 } else {
28083 str += ' ' + inspect(x);
28084 }
28085 }
28086 return str;
28087};
ebd8d4e8 28088
ebd8d4e8 28089
8b095871
IC
28090// Mark that a method should not be used.
28091// Returns a modified function which warns once by default.
28092// If --no-deprecation is set, then it is a no-op.
28093exports.deprecate = function(fn, msg) {
28094 // Allow for deprecating things in the process of starting up.
28095 if (isUndefined(global.process)) {
28096 return function() {
28097 return exports.deprecate(fn, msg).apply(this, arguments);
28098 };
28099 }
28100
28101 if (process.noDeprecation === true) {
28102 return fn;
28103 }
28104
28105 var warned = false;
28106 function deprecated() {
28107 if (!warned) {
28108 if (process.throwDeprecation) {
28109 throw new Error(msg);
28110 } else if (process.traceDeprecation) {
28111 console.trace(msg);
28112 } else {
28113 console.error(msg);
28114 }
28115 warned = true;
28116 }
28117 return fn.apply(this, arguments);
28118 }
28119
28120 return deprecated;
28121};
ebd8d4e8 28122
ab78acc6 28123
8b095871
IC
28124var debugs = {};
28125var debugEnviron;
28126exports.debuglog = function(set) {
28127 if (isUndefined(debugEnviron))
28128 debugEnviron = process.env.NODE_DEBUG || '';
28129 set = set.toUpperCase();
28130 if (!debugs[set]) {
28131 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
28132 var pid = process.pid;
28133 debugs[set] = function() {
28134 var msg = exports.format.apply(exports, arguments);
28135 console.error('%s %d: %s', set, pid, msg);
28136 };
28137 } else {
28138 debugs[set] = function() {};
28139 }
28140 }
28141 return debugs[set];
28142};
ab78acc6
IC
28143
28144
8b095871
IC
28145/**
28146 * Echos the value of a value. Trys to print the value out
28147 * in the best way possible given the different types.
28148 *
28149 * @param {Object} obj The object to print out.
28150 * @param {Object} opts Optional options object that alters the output.
28151 */
28152/* legacy: obj, showHidden, depth, colors*/
28153function inspect(obj, opts) {
28154 // default options
28155 var ctx = {
28156 seen: [],
28157 stylize: stylizeNoColor
ab78acc6 28158 };
8b095871
IC
28159 // legacy...
28160 if (arguments.length >= 3) ctx.depth = arguments[2];
28161 if (arguments.length >= 4) ctx.colors = arguments[3];
28162 if (isBoolean(opts)) {
28163 // legacy...
28164 ctx.showHidden = opts;
28165 } else if (opts) {
28166 // got an "options" object
28167 exports._extend(ctx, opts);
28168 }
28169 // set default options
28170 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
28171 if (isUndefined(ctx.depth)) ctx.depth = 2;
28172 if (isUndefined(ctx.colors)) ctx.colors = false;
28173 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
28174 if (ctx.colors) ctx.stylize = stylizeWithColor;
28175 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 28176}
8b095871 28177exports.inspect = inspect;
ebd8d4e8 28178
ab78acc6 28179
8b095871
IC
28180// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
28181inspect.colors = {
28182 'bold' : [1, 22],
28183 'italic' : [3, 23],
28184 'underline' : [4, 24],
28185 'inverse' : [7, 27],
28186 'white' : [37, 39],
28187 'grey' : [90, 39],
28188 'black' : [30, 39],
28189 'blue' : [34, 39],
28190 'cyan' : [36, 39],
28191 'green' : [32, 39],
28192 'magenta' : [35, 39],
28193 'red' : [31, 39],
28194 'yellow' : [33, 39]
28195};
ab78acc6 28196
8b095871
IC
28197// Don't use 'blue' not visible on cmd.exe
28198inspect.styles = {
28199 'special': 'cyan',
28200 'number': 'yellow',
28201 'boolean': 'yellow',
28202 'undefined': 'grey',
28203 'null': 'bold',
28204 'string': 'green',
28205 'date': 'magenta',
28206 // "name": intentionally not styling
28207 'regexp': 'red'
28208};
ab78acc6 28209
ab78acc6 28210
8b095871
IC
28211function stylizeWithColor(str, styleType) {
28212 var style = inspect.styles[styleType];
ab78acc6 28213
8b095871
IC
28214 if (style) {
28215 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
28216 '\u001b[' + inspect.colors[style][1] + 'm';
28217 } else {
28218 return str;
ab78acc6 28219 }
ebd8d4e8 28220}
ebd8d4e8 28221
ab78acc6 28222
8b095871
IC
28223function stylizeNoColor(str, styleType) {
28224 return str;
28225}
ab78acc6 28226
ab78acc6 28227
8b095871
IC
28228function arrayToHash(array) {
28229 var hash = {};
ab78acc6 28230
8b095871
IC
28231 array.forEach(function(val, idx) {
28232 hash[val] = true;
ab78acc6 28233 });
ebd8d4e8 28234
8b095871
IC
28235 return hash;
28236}
ab78acc6 28237
ab78acc6 28238
8b095871
IC
28239function formatValue(ctx, value, recurseTimes) {
28240 // Provide a hook for user-specified inspect functions.
28241 // Check that value is an object with an inspect function on it
28242 if (ctx.customInspect &&
28243 value &&
28244 isFunction(value.inspect) &&
28245 // Filter out the util module, it's inspect function is special
28246 value.inspect !== exports.inspect &&
28247 // Also filter out any prototype objects using the circular check.
28248 !(value.constructor && value.constructor.prototype === value)) {
28249 var ret = value.inspect(recurseTimes, ctx);
28250 if (!isString(ret)) {
28251 ret = formatValue(ctx, ret, recurseTimes);
28252 }
28253 return ret;
ab78acc6 28254 }
ebd8d4e8 28255
8b095871
IC
28256 // Primitive types cannot have properties
28257 var primitive = formatPrimitive(ctx, value);
28258 if (primitive) {
28259 return primitive;
ab78acc6 28260 }
ebd8d4e8 28261
8b095871
IC
28262 // Look up the keys of the object.
28263 var keys = Object.keys(value);
28264 var visibleKeys = arrayToHash(keys);
ebd8d4e8 28265
8b095871
IC
28266 if (ctx.showHidden) {
28267 keys = Object.getOwnPropertyNames(value);
28268 }
ebd8d4e8 28269
8b095871
IC
28270 // IE doesn't make error fields non-enumerable
28271 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
28272 if (isError(value)
28273 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
28274 return formatError(value);
28275 }
ebd8d4e8 28276
8b095871
IC
28277 // Some type of object without properties can be shortcutted.
28278 if (keys.length === 0) {
28279 if (isFunction(value)) {
28280 var name = value.name ? ': ' + value.name : '';
28281 return ctx.stylize('[Function' + name + ']', 'special');
28282 }
28283 if (isRegExp(value)) {
28284 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
28285 }
28286 if (isDate(value)) {
28287 return ctx.stylize(Date.prototype.toString.call(value), 'date');
28288 }
28289 if (isError(value)) {
28290 return formatError(value);
28291 }
28292 }
ab78acc6 28293
8b095871 28294 var base = '', array = false, braces = ['{', '}'];
ab78acc6 28295
8b095871
IC
28296 // Make Array say that they are Array
28297 if (isArray(value)) {
28298 array = true;
28299 braces = ['[', ']'];
28300 }
ebd8d4e8 28301
8b095871
IC
28302 // Make functions say that they are functions
28303 if (isFunction(value)) {
28304 var n = value.name ? ': ' + value.name : '';
28305 base = ' [Function' + n + ']';
28306 }
ebd8d4e8 28307
8b095871
IC
28308 // Make RegExps say that they are RegExps
28309 if (isRegExp(value)) {
28310 base = ' ' + RegExp.prototype.toString.call(value);
28311 }
ebd8d4e8 28312
8b095871
IC
28313 // Make dates with properties first say the date
28314 if (isDate(value)) {
28315 base = ' ' + Date.prototype.toUTCString.call(value);
28316 }
ebd8d4e8 28317
8b095871
IC
28318 // Make error with message first say the error
28319 if (isError(value)) {
28320 base = ' ' + formatError(value);
28321 }
ebd8d4e8 28322
8b095871
IC
28323 if (keys.length === 0 && (!array || value.length == 0)) {
28324 return braces[0] + base + braces[1];
28325 }
ebd8d4e8 28326
8b095871
IC
28327 if (recurseTimes < 0) {
28328 if (isRegExp(value)) {
28329 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
28330 } else {
28331 return ctx.stylize('[Object]', 'special');
28332 }
28333 }
ebd8d4e8 28334
8b095871 28335 ctx.seen.push(value);
ebd8d4e8 28336
8b095871
IC
28337 var output;
28338 if (array) {
28339 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
28340 } else {
28341 output = keys.map(function(key) {
28342 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
28343 });
28344 }
ebd8d4e8 28345
8b095871 28346 ctx.seen.pop();
ebd8d4e8 28347
8b095871 28348 return reduceToSingleString(output, base, braces);
ebd8d4e8
IC
28349}
28350
ebd8d4e8 28351
8b095871
IC
28352function formatPrimitive(ctx, value) {
28353 if (isUndefined(value))
28354 return ctx.stylize('undefined', 'undefined');
28355 if (isString(value)) {
28356 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
28357 .replace(/'/g, "\\'")
28358 .replace(/\\"/g, '"') + '\'';
28359 return ctx.stylize(simple, 'string');
28360 }
28361 if (isNumber(value))
28362 return ctx.stylize('' + value, 'number');
28363 if (isBoolean(value))
28364 return ctx.stylize('' + value, 'boolean');
28365 // For some reason typeof null is "object", so special case here.
28366 if (isNull(value))
28367 return ctx.stylize('null', 'null');
28368}
ebd8d4e8 28369
ebd8d4e8 28370
8b095871
IC
28371function formatError(value) {
28372 return '[' + Error.prototype.toString.call(value) + ']';
28373}
ebd8d4e8 28374
ebd8d4e8 28375
8b095871
IC
28376function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
28377 var output = [];
28378 for (var i = 0, l = value.length; i < l; ++i) {
28379 if (hasOwnProperty(value, String(i))) {
28380 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
28381 String(i), true));
28382 } else {
28383 output.push('');
28384 }
28385 }
28386 keys.forEach(function(key) {
28387 if (!key.match(/^\d+$/)) {
28388 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
28389 key, true));
28390 }
28391 });
28392 return output;
28393}
ebd8d4e8 28394
ebd8d4e8 28395
8b095871
IC
28396function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
28397 var name, str, desc;
28398 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
28399 if (desc.get) {
28400 if (desc.set) {
28401 str = ctx.stylize('[Getter/Setter]', 'special');
28402 } else {
28403 str = ctx.stylize('[Getter]', 'special');
28404 }
28405 } else {
28406 if (desc.set) {
28407 str = ctx.stylize('[Setter]', 'special');
28408 }
28409 }
28410 if (!hasOwnProperty(visibleKeys, key)) {
28411 name = '[' + key + ']';
28412 }
28413 if (!str) {
28414 if (ctx.seen.indexOf(desc.value) < 0) {
28415 if (isNull(recurseTimes)) {
28416 str = formatValue(ctx, desc.value, null);
28417 } else {
28418 str = formatValue(ctx, desc.value, recurseTimes - 1);
28419 }
28420 if (str.indexOf('\n') > -1) {
28421 if (array) {
28422 str = str.split('\n').map(function(line) {
28423 return ' ' + line;
28424 }).join('\n').substr(2);
28425 } else {
28426 str = '\n' + str.split('\n').map(function(line) {
28427 return ' ' + line;
28428 }).join('\n');
28429 }
28430 }
28431 } else {
28432 str = ctx.stylize('[Circular]', 'special');
28433 }
28434 }
28435 if (isUndefined(name)) {
28436 if (array && key.match(/^\d+$/)) {
28437 return str;
28438 }
28439 name = JSON.stringify('' + key);
28440 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
28441 name = name.substr(1, name.length - 2);
28442 name = ctx.stylize(name, 'name');
28443 } else {
28444 name = name.replace(/'/g, "\\'")
28445 .replace(/\\"/g, '"')
28446 .replace(/(^"|"$)/g, "'");
28447 name = ctx.stylize(name, 'string');
28448 }
28449 }
ebd8d4e8 28450
8b095871
IC
28451 return name + ': ' + str;
28452}
ebd8d4e8 28453
ebd8d4e8 28454
8b095871
IC
28455function reduceToSingleString(output, base, braces) {
28456 var numLinesEst = 0;
28457 var length = output.reduce(function(prev, cur) {
28458 numLinesEst++;
28459 if (cur.indexOf('\n') >= 0) numLinesEst++;
28460 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
28461 }, 0);
ebd8d4e8 28462
8b095871
IC
28463 if (length > 60) {
28464 return braces[0] +
28465 (base === '' ? '' : base + '\n ') +
28466 ' ' +
28467 output.join(',\n ') +
28468 ' ' +
28469 braces[1];
28470 }
ebd8d4e8 28471
8b095871
IC
28472 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
28473}
ebd8d4e8 28474
ebd8d4e8 28475
8b095871
IC
28476// NOTE: These type checking functions intentionally don't use `instanceof`
28477// because it is fragile and can be easily faked with `Object.create()`.
28478function isArray(ar) {
28479 return Array.isArray(ar);
28480}
28481exports.isArray = isArray;
ebd8d4e8 28482
8b095871
IC
28483function isBoolean(arg) {
28484 return typeof arg === 'boolean';
28485}
28486exports.isBoolean = isBoolean;
ebd8d4e8 28487
8b095871
IC
28488function isNull(arg) {
28489 return arg === null;
28490}
28491exports.isNull = isNull;
ebd8d4e8 28492
8b095871
IC
28493function isNullOrUndefined(arg) {
28494 return arg == null;
ebd8d4e8 28495}
8b095871 28496exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 28497
8b095871
IC
28498function isNumber(arg) {
28499 return typeof arg === 'number';
28500}
28501exports.isNumber = isNumber;
ebd8d4e8 28502
8b095871
IC
28503function isString(arg) {
28504 return typeof arg === 'string';
28505}
28506exports.isString = isString;
ebd8d4e8 28507
8b095871
IC
28508function isSymbol(arg) {
28509 return typeof arg === 'symbol';
28510}
28511exports.isSymbol = isSymbol;
ebd8d4e8 28512
8b095871
IC
28513function isUndefined(arg) {
28514 return arg === void 0;
28515}
28516exports.isUndefined = isUndefined;
ebd8d4e8 28517
8b095871
IC
28518function isRegExp(re) {
28519 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 28520}
8b095871 28521exports.isRegExp = isRegExp;
ebd8d4e8 28522
8b095871
IC
28523function isObject(arg) {
28524 return typeof arg === 'object' && arg !== null;
28525}
28526exports.isObject = isObject;
ebd8d4e8 28527
8b095871
IC
28528function isDate(d) {
28529 return isObject(d) && objectToString(d) === '[object Date]';
28530}
28531exports.isDate = isDate;
ebd8d4e8 28532
8b095871
IC
28533function isError(e) {
28534 return isObject(e) &&
28535 (objectToString(e) === '[object Error]' || e instanceof Error);
ebd8d4e8 28536}
8b095871 28537exports.isError = isError;
ebd8d4e8 28538
8b095871
IC
28539function isFunction(arg) {
28540 return typeof arg === 'function';
ebd8d4e8 28541}
8b095871 28542exports.isFunction = isFunction;
ebd8d4e8 28543
8b095871
IC
28544function isPrimitive(arg) {
28545 return arg === null ||
28546 typeof arg === 'boolean' ||
28547 typeof arg === 'number' ||
28548 typeof arg === 'string' ||
28549 typeof arg === 'symbol' || // ES6 symbol
28550 typeof arg === 'undefined';
28551}
28552exports.isPrimitive = isPrimitive;
ebd8d4e8 28553
8b095871 28554exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 28555
8b095871
IC
28556function objectToString(o) {
28557 return Object.prototype.toString.call(o);
28558}
ab78acc6 28559
ab78acc6 28560
8b095871
IC
28561function pad(n) {
28562 return n < 10 ? '0' + n.toString(10) : n.toString(10);
28563}
ebd8d4e8 28564
ab78acc6 28565
8b095871
IC
28566var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
28567 'Oct', 'Nov', 'Dec'];
ab78acc6 28568
8b095871
IC
28569// 26 Feb 16:19:34
28570function timestamp() {
28571 var d = new Date();
28572 var time = [pad(d.getHours()),
28573 pad(d.getMinutes()),
28574 pad(d.getSeconds())].join(':');
28575 return [d.getDate(), months[d.getMonth()], time].join(' ');
28576}
28577
28578
28579// log is just a thin wrapper to console.log that prepends a timestamp
28580exports.log = function() {
28581 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ab78acc6 28582};
ebd8d4e8 28583
ebd8d4e8 28584
8b095871
IC
28585/**
28586 * Inherit the prototype methods from one constructor into another.
28587 *
28588 * The Function.prototype.inherits from lang.js rewritten as a standalone
28589 * function (not on Function.prototype). NOTE: If this file is to be loaded
28590 * during bootstrapping this function needs to be rewritten using some native
28591 * functions as prototype setup using normal JavaScript does not work as
28592 * expected during bootstrapping (see mirror.js in r114903).
28593 *
28594 * @param {function} ctor Constructor function which needs to inherit the
28595 * prototype.
28596 * @param {function} superCtor Constructor function to inherit prototype from.
28597 */
28598exports.inherits = require('inherits');
ebd8d4e8 28599
8b095871
IC
28600exports._extend = function(origin, add) {
28601 // Don't do anything if add isn't an object
28602 if (!add || !isObject(add)) return origin;
28603
28604 var keys = Object.keys(add);
28605 var i = keys.length;
28606 while (i--) {
28607 origin[keys[i]] = add[keys[i]];
ebd8d4e8 28608 }
8b095871 28609 return origin;
ab78acc6 28610};
ebd8d4e8 28611
8b095871
IC
28612function hasOwnProperty(obj, prop) {
28613 return Object.prototype.hasOwnProperty.call(obj, prop);
ebd8d4e8
IC
28614}
28615
8b095871
IC
28616}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
28617},{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
28618(function (Buffer){
28619const createKeccakHash = require('keccak')
28620const secp256k1 = require('secp256k1')
28621const assert = require('assert')
28622const rlp = require('rlp')
28623const BN = require('bn.js')
28624const createHash = require('create-hash')
28625Object.assign(exports, require('ethjs-util'))
ab78acc6 28626
8b095871
IC
28627/**
28628 * the max integer that this VM can handle (a ```BN```)
28629 * @var {BN} MAX_INTEGER
28630 */
28631exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
ab78acc6 28632
8b095871
IC
28633/**
28634 * 2^256 (a ```BN```)
28635 * @var {BN} TWO_POW256
28636 */
28637exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
ab78acc6 28638
8b095871
IC
28639/**
28640 * SHA3-256 hash of null (a ```String```)
28641 * @var {String} SHA3_NULL_S
28642 */
28643exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
ebd8d4e8 28644
8b095871
IC
28645/**
28646 * SHA3-256 hash of null (a ```Buffer```)
28647 * @var {Buffer} SHA3_NULL
28648 */
28649exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
ebd8d4e8 28650
8b095871
IC
28651/**
28652 * SHA3-256 of an RLP of an empty array (a ```String```)
28653 * @var {String} SHA3_RLP_ARRAY_S
28654 */
28655exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
ebd8d4e8 28656
8b095871
IC
28657/**
28658 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
28659 * @var {Buffer} SHA3_RLP_ARRAY
28660 */
28661exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
ebd8d4e8 28662
8b095871
IC
28663/**
28664 * SHA3-256 hash of the RLP of null (a ```String```)
28665 * @var {String} SHA3_RLP_S
28666 */
28667exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
ebd8d4e8 28668
8b095871
IC
28669/**
28670 * SHA3-256 hash of the RLP of null (a ```Buffer```)
28671 * @var {Buffer} SHA3_RLP
28672 */
28673exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
ebd8d4e8 28674
8b095871
IC
28675/**
28676 * [`BN`](https://github.com/indutny/bn.js)
28677 * @var {Function}
28678 */
28679exports.BN = BN
ebd8d4e8 28680
8b095871
IC
28681/**
28682 * [`rlp`](https://github.com/ethereumjs/rlp)
28683 * @var {Function}
28684 */
28685exports.rlp = rlp
ebd8d4e8 28686
8b095871
IC
28687/**
28688 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
28689 * @var {Object}
28690 */
28691exports.secp256k1 = secp256k1
ab78acc6 28692
8b095871
IC
28693/**
28694 * Returns a buffer filled with 0s
28695 * @method zeros
28696 * @param {Number} bytes the number of bytes the buffer should be
28697 * @return {Buffer}
28698 */
28699exports.zeros = function (bytes) {
28700 return Buffer.allocUnsafe(bytes).fill(0)
28701}
28702
28703/**
28704 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
28705 * Or it truncates the beginning if it exceeds.
28706 * @method lsetLength
28707 * @param {Buffer|Array} msg the value to pad
28708 * @param {Number} length the number of bytes the output should be
28709 * @param {Boolean} [right=false] whether to start padding form the left or right
28710 * @return {Buffer|Array}
28711 */
28712exports.setLengthLeft = exports.setLength = function (msg, length, right) {
28713 var buf = exports.zeros(length)
28714 msg = exports.toBuffer(msg)
28715 if (right) {
28716 if (msg.length < length) {
28717 msg.copy(buf)
28718 return buf
28719 }
28720 return msg.slice(0, length)
28721 } else {
28722 if (msg.length < length) {
28723 msg.copy(buf, length - msg.length)
28724 return buf
ebd8d4e8 28725 }
8b095871 28726 return msg.slice(-length)
ebd8d4e8
IC
28727 }
28728}
28729
8b095871
IC
28730/**
28731 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
28732 * Or it truncates the beginning if it exceeds.
28733 * @param {Buffer|Array} msg the value to pad
28734 * @param {Number} length the number of bytes the output should be
28735 * @return {Buffer|Array}
28736 */
28737exports.setLengthRight = function (msg, length) {
28738 return exports.setLength(msg, length, true)
ab78acc6
IC
28739}
28740
8b095871
IC
28741/**
28742 * Trims leading zeros from a `Buffer` or an `Array`
28743 * @param {Buffer|Array|String} a
28744 * @return {Buffer|Array|String}
28745 */
28746exports.unpad = exports.stripZeros = function (a) {
28747 a = exports.stripHexPrefix(a)
28748 var first = a[0]
28749 while (a.length > 0 && first.toString() === '0') {
28750 a = a.slice(1)
28751 first = a[0]
28752 }
28753 return a
28754}
28755/**
28756 * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method.
28757 * @param {*} v the value
28758 */
28759exports.toBuffer = function (v) {
28760 if (!Buffer.isBuffer(v)) {
28761 if (Array.isArray(v)) {
28762 v = Buffer.from(v)
28763 } else if (typeof v === 'string') {
28764 if (exports.isHexPrefixed(v)) {
28765 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
28766 } else {
28767 v = Buffer.from(v)
28768 }
28769 } else if (typeof v === 'number') {
28770 v = exports.intToBuffer(v)
28771 } else if (v === null || v === undefined) {
28772 v = Buffer.allocUnsafe(0)
28773 } else if (v.toArray) {
28774 // converts a BN to a Buffer
28775 v = Buffer.from(v.toArray())
28776 } else {
28777 throw new Error('invalid type')
28778 }
ebd8d4e8 28779 }
8b095871 28780 return v
ebd8d4e8
IC
28781}
28782
8b095871
IC
28783/**
28784 * Converts a `Buffer` to a `Number`
28785 * @param {Buffer} buf
28786 * @return {Number}
28787 * @throws If the input number exceeds 53 bits.
28788 */
28789exports.bufferToInt = function (buf) {
28790 return new BN(exports.toBuffer(buf)).toNumber()
28791}
ebd8d4e8 28792
8b095871
IC
28793/**
28794 * Converts a `Buffer` into a hex `String`
28795 * @param {Buffer} buf
28796 * @return {String}
28797 */
28798exports.bufferToHex = function (buf) {
28799 buf = exports.toBuffer(buf)
28800 return '0x' + buf.toString('hex')
28801}
ab78acc6 28802
8b095871
IC
28803/**
28804 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
28805 * @param {Buffer} num
28806 * @return {BN}
28807 */
28808exports.fromSigned = function (num) {
28809 return new BN(num).fromTwos(256)
28810}
ab78acc6 28811
8b095871
IC
28812/**
28813 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
28814 * @param {BN} num
28815 * @return {Buffer}
28816 */
28817exports.toUnsigned = function (num) {
28818 return Buffer.from(num.toTwos(256).toArray())
28819}
ab78acc6 28820
8b095871
IC
28821/**
28822 * Creates SHA-3 hash of the input
28823 * @param {Buffer|Array|String|Number} a the input data
28824 * @param {Number} [bits=256] the SHA width
28825 * @return {Buffer}
28826 */
28827exports.sha3 = function (a, bits) {
28828 a = exports.toBuffer(a)
28829 if (!bits) bits = 256
ab78acc6 28830
8b095871
IC
28831 return createKeccakHash('keccak' + bits).update(a).digest()
28832}
ab78acc6 28833
8b095871
IC
28834/**
28835 * Creates SHA256 hash of the input
28836 * @param {Buffer|Array|String|Number} a the input data
28837 * @return {Buffer}
28838 */
28839exports.sha256 = function (a) {
28840 a = exports.toBuffer(a)
28841 return createHash('sha256').update(a).digest()
28842}
ab78acc6 28843
8b095871
IC
28844/**
28845 * Creates RIPEMD160 hash of the input
28846 * @param {Buffer|Array|String|Number} a the input data
28847 * @param {Boolean} padded whether it should be padded to 256 bits or not
28848 * @return {Buffer}
28849 */
28850exports.ripemd160 = function (a, padded) {
28851 a = exports.toBuffer(a)
28852 var hash = createHash('rmd160').update(a).digest()
28853 if (padded === true) {
28854 return exports.setLength(hash, 32)
28855 } else {
28856 return hash
ebd8d4e8 28857 }
8b095871 28858}
ebd8d4e8 28859
8b095871
IC
28860/**
28861 * Creates SHA-3 hash of the RLP encoded version of the input
28862 * @param {Buffer|Array|String|Number} a the input data
28863 * @return {Buffer}
28864 */
28865exports.rlphash = function (a) {
28866 return exports.sha3(rlp.encode(a))
ebd8d4e8
IC
28867}
28868
8b095871
IC
28869/**
28870 * Checks if the private key satisfies the rules of the curve secp256k1.
28871 * @param {Buffer} privateKey
28872 * @return {Boolean}
28873 */
28874exports.isValidPrivate = function (privateKey) {
28875 return secp256k1.privateKeyVerify(privateKey)
28876}
ebd8d4e8 28877
8b095871
IC
28878/**
28879 * Checks if the public key satisfies the rules of the curve secp256k1
28880 * and the requirements of Ethereum.
28881 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
28882 * @param {Boolean} [sanitize=false] Accept public keys in other formats
28883 * @return {Boolean}
28884 */
28885exports.isValidPublic = function (publicKey, sanitize) {
28886 if (publicKey.length === 64) {
28887 // Convert to SEC1 for secp256k1
28888 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
28889 }
ebd8d4e8 28890
8b095871
IC
28891 if (!sanitize) {
28892 return false
28893 }
ebd8d4e8 28894
8b095871
IC
28895 return secp256k1.publicKeyVerify(publicKey)
28896}
ebd8d4e8 28897
8b095871
IC
28898/**
28899 * Returns the ethereum address of a given public key.
28900 * Accepts "Ethereum public keys" and SEC1 encoded keys.
28901 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
28902 * @param {Boolean} [sanitize=false] Accept public keys in other formats
28903 * @return {Buffer}
28904 */
28905exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
28906 pubKey = exports.toBuffer(pubKey)
28907 if (sanitize && (pubKey.length !== 64)) {
28908 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
ab78acc6 28909 }
8b095871
IC
28910 assert(pubKey.length === 64)
28911 // Only take the lower 160bits of the hash
28912 return exports.sha3(pubKey).slice(-20)
28913}
ebd8d4e8 28914
8b095871
IC
28915/**
28916 * Returns the ethereum public key of a given private key
28917 * @param {Buffer} privateKey A private key must be 256 bits wide
28918 * @return {Buffer}
28919 */
28920var privateToPublic = exports.privateToPublic = function (privateKey) {
28921 privateKey = exports.toBuffer(privateKey)
28922 // skip the type flag and use the X, Y points
28923 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
28924}
ab78acc6 28925
8b095871
IC
28926/**
28927 * Converts a public key to the Ethereum format.
28928 * @param {Buffer} publicKey
28929 * @return {Buffer}
28930 */
28931exports.importPublic = function (publicKey) {
28932 publicKey = exports.toBuffer(publicKey)
28933 if (publicKey.length !== 64) {
28934 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
ebd8d4e8 28935 }
8b095871
IC
28936 return publicKey
28937}
ab78acc6 28938
8b095871
IC
28939/**
28940 * ECDSA sign
28941 * @param {Buffer} msgHash
28942 * @param {Buffer} privateKey
28943 * @return {Object}
28944 */
28945exports.ecsign = function (msgHash, privateKey) {
28946 var sig = secp256k1.sign(msgHash, privateKey)
ab78acc6 28947
8b095871
IC
28948 var ret = {}
28949 ret.r = sig.signature.slice(0, 32)
28950 ret.s = sig.signature.slice(32, 64)
28951 ret.v = sig.recovery + 27
28952 return ret
ebd8d4e8
IC
28953}
28954
8b095871
IC
28955/**
28956 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
28957 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
28958 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
28959 * used to produce the signature.
28960 * @param message
28961 * @returns {Buffer} hash
28962 */
28963exports.hashPersonalMessage = function (message) {
28964 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
28965 return exports.sha3(Buffer.concat([prefix, message]))
ebd8d4e8
IC
28966}
28967
8b095871
IC
28968/**
28969 * ECDSA public key recovery from signature
28970 * @param {Buffer} msgHash
28971 * @param {Number} v
28972 * @param {Buffer} r
28973 * @param {Buffer} s
28974 * @return {Buffer} publicKey
28975 */
28976exports.ecrecover = function (msgHash, v, r, s) {
28977 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
28978 var recovery = v - 27
28979 if (recovery !== 0 && recovery !== 1) {
28980 throw new Error('Invalid signature v value')
ab78acc6 28981 }
8b095871
IC
28982 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
28983 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
ab78acc6 28984}
ebd8d4e8 28985
8b095871
IC
28986/**
28987 * Convert signature parameters into the format of `eth_sign` RPC method
28988 * @param {Number} v
28989 * @param {Buffer} r
28990 * @param {Buffer} s
28991 * @return {String} sig
28992 */
28993exports.toRpcSig = function (v, r, s) {
28994 // NOTE: with potential introduction of chainId this might need to be updated
28995 if (v !== 27 && v !== 28) {
28996 throw new Error('Invalid recovery id')
28997 }
28998
28999 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
29000 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
29001 return exports.bufferToHex(Buffer.concat([
29002 exports.setLengthLeft(r, 32),
29003 exports.setLengthLeft(s, 32),
29004 exports.toBuffer(v - 27)
29005 ]))
ebd8d4e8
IC
29006}
29007
8b095871
IC
29008/**
29009 * Convert signature format of the `eth_sign` RPC method to signature parameters
29010 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
29011 * @param {String} sig
29012 * @return {Object}
29013 */
29014exports.fromRpcSig = function (sig) {
29015 sig = exports.toBuffer(sig)
ebd8d4e8 29016
8b095871
IC
29017 // NOTE: with potential introduction of chainId this might need to be updated
29018 if (sig.length !== 65) {
29019 throw new Error('Invalid signature length')
29020 }
29021
29022 var v = sig[64]
29023 // support both versions of `eth_sign` responses
29024 if (v < 27) {
29025 v += 27
29026 }
29027
29028 return {
29029 v: v,
29030 r: sig.slice(0, 32),
29031 s: sig.slice(32, 64)
29032 }
ebd8d4e8
IC
29033}
29034
8b095871
IC
29035/**
29036 * Returns the ethereum address of a given private key
29037 * @param {Buffer} privateKey A private key must be 256 bits wide
29038 * @return {Buffer}
29039 */
29040exports.privateToAddress = function (privateKey) {
29041 return exports.publicToAddress(privateToPublic(privateKey))
ab78acc6 29042}
ebd8d4e8 29043
8b095871
IC
29044/**
29045 * Checks if the address is a valid. Accepts checksummed addresses too
29046 * @param {String} address
29047 * @return {Boolean}
29048 */
29049exports.isValidAddress = function (address) {
29050 return /^0x[0-9a-fA-F]{40}$/i.test(address)
ab78acc6 29051}
ebd8d4e8 29052
8b095871
IC
29053/**
29054 * Returns a checksummed address
29055 * @param {String} address
29056 * @return {String}
29057 */
29058exports.toChecksumAddress = function (address) {
29059 address = exports.stripHexPrefix(address).toLowerCase()
29060 var hash = exports.sha3(address).toString('hex')
29061 var ret = '0x'
29062
29063 for (var i = 0; i < address.length; i++) {
29064 if (parseInt(hash[i], 16) >= 8) {
29065 ret += address[i].toUpperCase()
29066 } else {
29067 ret += address[i]
29068 }
29069 }
29070
29071 return ret
ebd8d4e8
IC
29072}
29073
8b095871
IC
29074/**
29075 * Checks if the address is a valid checksummed address
29076 * @param {Buffer} address
29077 * @return {Boolean}
29078 */
29079exports.isValidChecksumAddress = function (address) {
29080 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
ab78acc6 29081}
ebd8d4e8 29082
8b095871
IC
29083/**
29084 * Generates an address of a newly created contract
29085 * @param {Buffer} from the address which is creating this new address
29086 * @param {Buffer} nonce the nonce of the from account
29087 * @return {Buffer}
29088 */
29089exports.generateAddress = function (from, nonce) {
29090 from = exports.toBuffer(from)
29091 nonce = new BN(nonce)
29092
29093 if (nonce.isZero()) {
29094 // in RLP we want to encode null in the case of zero nonce
29095 // read the RLP documentation for an answer if you dare
29096 nonce = null
29097 } else {
29098 nonce = Buffer.from(nonce.toArray())
29099 }
29100
29101 // Only take the lower 160bits of the hash
29102 return exports.rlphash([from, nonce]).slice(-20)
ab78acc6 29103}
ebd8d4e8 29104
8b095871
IC
29105/**
29106 * Returns true if the supplied address belongs to a precompiled account
29107 * @param {Buffer|String} address
29108 * @return {Boolean}
29109 */
29110exports.isPrecompiled = function (address) {
29111 var a = exports.unpad(address)
29112 return a.length === 1 && a[0] > 0 && a[0] < 5
ebd8d4e8
IC
29113}
29114
8b095871
IC
29115/**
29116 * Adds "0x" to a given `String` if it does not already start with "0x"
29117 * @param {String} str
29118 * @return {String}
29119 */
29120exports.addHexPrefix = function (str) {
29121 if (typeof str !== 'string') {
29122 return str
29123 }
29124
29125 return exports.isHexPrefixed(str) ? str : '0x' + str
ebd8d4e8
IC
29126}
29127
8b095871
IC
29128/**
29129 * Validate ECDSA signature
29130 * @method isValidSignature
29131 * @param {Buffer} v
29132 * @param {Buffer} r
29133 * @param {Buffer} s
29134 * @param {Boolean} [homestead=true]
29135 * @return {Boolean}
29136 */
29137
29138exports.isValidSignature = function (v, r, s, homestead) {
29139 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
29140 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
29141
29142 if (r.length !== 32 || s.length !== 32) {
29143 return false
29144 }
29145
29146 if (v !== 27 && v !== 28) {
29147 return false
29148 }
29149
29150 r = new BN(r)
29151 s = new BN(s)
29152
29153 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
29154 return false
29155 }
29156
29157 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
29158 return false
29159 }
29160
29161 return true
ebd8d4e8
IC
29162}
29163
8b095871
IC
29164/**
29165 * Converts a `Buffer` or `Array` to JSON
29166 * @param {Buffer|Array} ba
29167 * @return {Array|String|null}
29168 */
29169exports.baToJSON = function (ba) {
29170 if (Buffer.isBuffer(ba)) {
29171 return '0x' + ba.toString('hex')
29172 } else if (ba instanceof Array) {
29173 var array = []
29174 for (var i = 0; i < ba.length; i++) {
29175 array.push(exports.baToJSON(ba[i]))
29176 }
29177 return array
29178 }
ab78acc6 29179}
ebd8d4e8 29180
8b095871
IC
29181/**
29182 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
29183 * @param {Object} self the `Object` to define properties on
29184 * @param {Array} fields an array fields to define. Fields can contain:
29185 * * `name` - the name of the properties
29186 * * `length` - the number of bytes the field can have
29187 * * `allowLess` - if the field can be less than the length
29188 * * `allowEmpty`
29189 * @param {*} data data to be validated against the definitions
29190 */
29191exports.defineProperties = function (self, fields, data) {
29192 self.raw = []
29193 self._fields = []
29194
29195 // attach the `toJSON`
29196 self.toJSON = function (label) {
29197 if (label) {
29198 var obj = {}
29199 self._fields.forEach(function (field) {
29200 obj[field] = '0x' + self[field].toString('hex')
29201 })
29202 return obj
29203 }
29204 return exports.baToJSON(this.raw)
29205 }
29206
29207 self.serialize = function serialize () {
29208 return rlp.encode(self.raw)
29209 }
29210
29211 fields.forEach(function (field, i) {
29212 self._fields.push(field.name)
29213 function getter () {
29214 return self.raw[i]
29215 }
29216 function setter (v) {
29217 v = exports.toBuffer(v)
29218
29219 if (v.toString('hex') === '00' && !field.allowZero) {
29220 v = Buffer.allocUnsafe(0)
29221 }
29222
29223 if (field.allowLess && field.length) {
29224 v = exports.stripZeros(v)
29225 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
29226 } else if (!(field.allowZero && v.length === 0) && field.length) {
29227 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
29228 }
29229
29230 self.raw[i] = v
29231 }
29232
29233 Object.defineProperty(self, field.name, {
29234 enumerable: true,
29235 configurable: true,
29236 get: getter,
29237 set: setter
29238 })
29239
29240 if (field.default) {
29241 self[field.name] = field.default
29242 }
29243
29244 // attach alias
29245 if (field.alias) {
29246 Object.defineProperty(self, field.alias, {
29247 enumerable: false,
29248 configurable: true,
29249 set: setter,
29250 get: getter
29251 })
29252 }
29253 })
29254
29255 // if the constuctor is passed data
29256 if (data) {
29257 if (typeof data === 'string') {
29258 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
29259 }
29260
29261 if (Buffer.isBuffer(data)) {
29262 data = rlp.decode(data)
29263 }
29264
29265 if (Array.isArray(data)) {
29266 if (data.length > self._fields.length) {
29267 throw (new Error('wrong number of fields in data'))
29268 }
29269
29270 // make sure all the items are buffers
29271 data.forEach(function (d, i) {
29272 self[self._fields[i]] = exports.toBuffer(d)
29273 })
29274 } else if (typeof data === 'object') {
29275 const keys = Object.keys(data)
29276 fields.forEach(function (field) {
29277 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
29278 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
29279 })
29280 } else {
29281 throw new Error('invalid data')
29282 }
29283 }
ab78acc6 29284}
ebd8d4e8 29285
8b095871
IC
29286}).call(this,require("buffer").Buffer)
29287},{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
29288(function (Buffer){
29289// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
29290// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
29291// NOTE: SIGHASH byte ignored AND restricted, truncate before use
29292
29293function check (buffer) {
29294 if (buffer.length < 8) return false
29295 if (buffer.length > 72) return false
29296 if (buffer[0] !== 0x30) return false
29297 if (buffer[1] !== buffer.length - 2) return false
29298 if (buffer[2] !== 0x02) return false
29299
29300 var lenR = buffer[3]
29301 if (lenR === 0) return false
29302 if (5 + lenR >= buffer.length) return false
29303 if (buffer[4 + lenR] !== 0x02) return false
29304
29305 var lenS = buffer[5 + lenR]
29306 if (lenS === 0) return false
29307 if ((6 + lenR + lenS) !== buffer.length) return false
29308
29309 if (buffer[4] & 0x80) return false
29310 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
29311
29312 if (buffer[lenR + 6] & 0x80) return false
29313 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
29314 return true
ab78acc6 29315}
ab78acc6 29316
8b095871
IC
29317function decode (buffer) {
29318 if (buffer.length < 8) throw new Error('DER sequence length is too short')
29319 if (buffer.length > 72) throw new Error('DER sequence length is too long')
29320 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
29321 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
29322 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
29323
29324 var lenR = buffer[3]
29325 if (lenR === 0) throw new Error('R length is zero')
29326 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
29327 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
29328
29329 var lenS = buffer[5 + lenR]
29330 if (lenS === 0) throw new Error('S length is zero')
29331 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
29332
29333 if (buffer[4] & 0x80) throw new Error('R value is negative')
29334 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
29335
29336 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
29337 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
29338
29339 // non-BIP66 - extract R, S values
29340 return {
29341 r: buffer.slice(4, 4 + lenR),
29342 s: buffer.slice(6 + lenR)
29343 }
ebd8d4e8
IC
29344}
29345
8b095871
IC
29346/*
29347 * Expects r and s to be positive DER integers.
29348 *
29349 * The DER format uses the most significant bit as a sign bit (& 0x80).
29350 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
29351 *
29352 * Examples:
29353 *
29354 * 0 => 0x00
29355 * 1 => 0x01
29356 * -1 => 0xff
29357 * 127 => 0x7f
29358 * -127 => 0x81
29359 * 128 => 0x0080
29360 * -128 => 0x80
29361 * 255 => 0x00ff
29362 * -255 => 0xff01
29363 * 16300 => 0x3fac
29364 * -16300 => 0xc054
29365 * 62300 => 0x00f35c
29366 * -62300 => 0xff0ca4
29367*/
29368function encode (r, s) {
29369 var lenR = r.length
29370 var lenS = s.length
29371 if (lenR === 0) throw new Error('R length is zero')
29372 if (lenS === 0) throw new Error('S length is zero')
29373 if (lenR > 33) throw new Error('R length is too long')
29374 if (lenS > 33) throw new Error('S length is too long')
29375 if (r[0] & 0x80) throw new Error('R value is negative')
29376 if (s[0] & 0x80) throw new Error('S value is negative')
29377 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
29378 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
29379
29380 var signature = new Buffer(6 + lenR + lenS)
29381
29382 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
29383 signature[0] = 0x30
29384 signature[1] = signature.length - 2
29385 signature[2] = 0x02
29386 signature[3] = r.length
29387 r.copy(signature, 4)
29388 signature[4 + lenR] = 0x02
29389 signature[5 + lenR] = s.length
29390 s.copy(signature, 6 + lenR)
29391
29392 return signature
ebd8d4e8
IC
29393}
29394
8b095871
IC
29395module.exports = {
29396 check: check,
29397 decode: decode,
29398 encode: encode
ebd8d4e8 29399}
8b095871 29400
ab78acc6 29401}).call(this,require("buffer").Buffer)
8b095871
IC
29402},{"buffer":5}],33:[function(require,module,exports){
29403(function (module, exports) {
29404 'use strict';
ebd8d4e8 29405
8b095871
IC
29406 // Utils
29407 function assert (val, msg) {
29408 if (!val) throw new Error(msg || 'Assertion failed');
29409 }
ebd8d4e8 29410
8b095871
IC
29411 // Could use `inherits` module, but don't want to move from single file
29412 // architecture yet.
29413 function inherits (ctor, superCtor) {
29414 ctor.super_ = superCtor;
29415 var TempCtor = function () {};
29416 TempCtor.prototype = superCtor.prototype;
29417 ctor.prototype = new TempCtor();
29418 ctor.prototype.constructor = ctor;
29419 }
ebd8d4e8 29420
8b095871 29421 // BN
ab78acc6 29422
8b095871
IC
29423 function BN (number, base, endian) {
29424 if (BN.isBN(number)) {
29425 return number;
29426 }
ab78acc6 29427
8b095871
IC
29428 this.negative = 0;
29429 this.words = null;
29430 this.length = 0;
ab78acc6 29431
8b095871
IC
29432 // Reduction context
29433 this.red = null;
ab78acc6 29434
8b095871
IC
29435 if (number !== null) {
29436 if (base === 'le' || base === 'be') {
29437 endian = base;
29438 base = 10;
29439 }
ab78acc6 29440
8b095871
IC
29441 this._init(number || 0, base || 10, endian || 'be');
29442 }
29443 }
29444 if (typeof module === 'object') {
29445 module.exports = BN;
29446 } else {
29447 exports.BN = BN;
29448 }
ab78acc6 29449
8b095871
IC
29450 BN.BN = BN;
29451 BN.wordSize = 26;
ab78acc6 29452
8b095871
IC
29453 var Buffer;
29454 try {
29455 Buffer = require('buf' + 'fer').Buffer;
29456 } catch (e) {
29457 }
ab78acc6 29458
8b095871
IC
29459 BN.isBN = function isBN (num) {
29460 if (num instanceof BN) {
29461 return true;
29462 }
ab78acc6 29463
8b095871
IC
29464 return num !== null && typeof num === 'object' &&
29465 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
29466 };
ebd8d4e8 29467
8b095871
IC
29468 BN.max = function max (left, right) {
29469 if (left.cmp(right) > 0) return left;
29470 return right;
29471 };
ebd8d4e8 29472
8b095871
IC
29473 BN.min = function min (left, right) {
29474 if (left.cmp(right) < 0) return left;
29475 return right;
29476 };
29477
29478 BN.prototype._init = function init (number, base, endian) {
29479 if (typeof number === 'number') {
29480 return this._initNumber(number, base, endian);
ab78acc6 29481 }
ebd8d4e8 29482
8b095871
IC
29483 if (typeof number === 'object') {
29484 return this._initArray(number, base, endian);
29485 }
ebd8d4e8 29486
8b095871
IC
29487 if (base === 'hex') {
29488 base = 16;
29489 }
29490 assert(base === (base | 0) && base >= 2 && base <= 36);
29491
29492 number = number.toString().replace(/\s+/g, '');
29493 var start = 0;
29494 if (number[0] === '-') {
29495 start++;
29496 }
29497
29498 if (base === 16) {
29499 this._parseHex(number, start);
29500 } else {
29501 this._parseBase(number, base, start);
ab78acc6 29502 }
ebd8d4e8 29503
8b095871
IC
29504 if (number[0] === '-') {
29505 this.negative = 1;
29506 }
ebd8d4e8 29507
8b095871 29508 this.strip();
ebd8d4e8 29509
8b095871 29510 if (endian !== 'le') return;
ebd8d4e8 29511
8b095871
IC
29512 this._initArray(this.toArray(), base, endian);
29513 };
ebd8d4e8 29514
8b095871
IC
29515 BN.prototype._initNumber = function _initNumber (number, base, endian) {
29516 if (number < 0) {
29517 this.negative = 1;
29518 number = -number;
29519 }
29520 if (number < 0x4000000) {
29521 this.words = [ number & 0x3ffffff ];
29522 this.length = 1;
29523 } else if (number < 0x10000000000000) {
29524 this.words = [
29525 number & 0x3ffffff,
29526 (number / 0x4000000) & 0x3ffffff
29527 ];
29528 this.length = 2;
29529 } else {
29530 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
29531 this.words = [
29532 number & 0x3ffffff,
29533 (number / 0x4000000) & 0x3ffffff,
29534 1
29535 ];
29536 this.length = 3;
29537 }
ebd8d4e8 29538
8b095871 29539 if (endian !== 'le') return;
ebd8d4e8 29540
8b095871
IC
29541 // Reverse the bytes
29542 this._initArray(this.toArray(), base, endian);
29543 };
ebd8d4e8 29544
8b095871
IC
29545 BN.prototype._initArray = function _initArray (number, base, endian) {
29546 // Perhaps a Uint8Array
29547 assert(typeof number.length === 'number');
29548 if (number.length <= 0) {
29549 this.words = [ 0 ];
29550 this.length = 1;
29551 return this;
ab78acc6 29552 }
ebd8d4e8 29553
8b095871
IC
29554 this.length = Math.ceil(number.length / 3);
29555 this.words = new Array(this.length);
29556 for (var i = 0; i < this.length; i++) {
29557 this.words[i] = 0;
29558 }
ebd8d4e8 29559
8b095871
IC
29560 var j, w;
29561 var off = 0;
29562 if (endian === 'be') {
29563 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
29564 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
29565 this.words[j] |= (w << off) & 0x3ffffff;
29566 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
29567 off += 24;
29568 if (off >= 26) {
29569 off -= 26;
29570 j++;
29571 }
29572 }
29573 } else if (endian === 'le') {
29574 for (i = 0, j = 0; i < number.length; i += 3) {
29575 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
29576 this.words[j] |= (w << off) & 0x3ffffff;
29577 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
29578 off += 24;
29579 if (off >= 26) {
29580 off -= 26;
29581 j++;
29582 }
29583 }
29584 }
29585 return this.strip();
29586 };
ebd8d4e8 29587
8b095871
IC
29588 function parseHex (str, start, end) {
29589 var r = 0;
29590 var len = Math.min(str.length, end);
29591 for (var i = start; i < len; i++) {
29592 var c = str.charCodeAt(i) - 48;
ab78acc6 29593
8b095871 29594 r <<= 4;
ab78acc6 29595
8b095871
IC
29596 // 'a' - 'f'
29597 if (c >= 49 && c <= 54) {
29598 r |= c - 49 + 0xa;
ab78acc6 29599
8b095871
IC
29600 // 'A' - 'F'
29601 } else if (c >= 17 && c <= 22) {
29602 r |= c - 17 + 0xa;
ebd8d4e8 29603
8b095871
IC
29604 // '0' - '9'
29605 } else {
29606 r |= c & 0xf;
29607 }
29608 }
29609 return r;
29610 }
29611
29612 BN.prototype._parseHex = function _parseHex (number, start) {
29613 // Create possibly bigger array to ensure that it fits the number
29614 this.length = Math.ceil((number.length - start) / 6);
29615 this.words = new Array(this.length);
29616 for (var i = 0; i < this.length; i++) {
29617 this.words[i] = 0;
29618 }
29619
29620 var j, w;
29621 // Scan 24-bit chunks and add them to the number
29622 var off = 0;
29623 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
29624 w = parseHex(number, i, i + 6);
29625 this.words[j] |= (w << off) & 0x3ffffff;
29626 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
29627 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
29628 off += 24;
29629 if (off >= 26) {
29630 off -= 26;
29631 j++;
29632 }
29633 }
29634 if (i + 6 !== start) {
29635 w = parseHex(number, start, i + 6);
29636 this.words[j] |= (w << off) & 0x3ffffff;
29637 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
29638 }
29639 this.strip();
29640 };
ebd8d4e8 29641
8b095871
IC
29642 function parseBase (str, start, end, mul) {
29643 var r = 0;
29644 var len = Math.min(str.length, end);
29645 for (var i = start; i < len; i++) {
29646 var c = str.charCodeAt(i) - 48;
ebd8d4e8 29647
8b095871 29648 r *= mul;
ebd8d4e8 29649
8b095871
IC
29650 // 'a'
29651 if (c >= 49) {
29652 r += c - 49 + 0xa;
ebd8d4e8 29653
8b095871
IC
29654 // 'A'
29655 } else if (c >= 17) {
29656 r += c - 17 + 0xa;
ebd8d4e8 29657
8b095871
IC
29658 // '0' - '9'
29659 } else {
29660 r += c;
29661 }
29662 }
29663 return r;
29664 }
ebd8d4e8 29665
8b095871
IC
29666 BN.prototype._parseBase = function _parseBase (number, base, start) {
29667 // Initialize as zero
29668 this.words = [ 0 ];
29669 this.length = 1;
ebd8d4e8 29670
8b095871
IC
29671 // Find length of limb in base
29672 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
29673 limbLen++;
29674 }
29675 limbLen--;
29676 limbPow = (limbPow / base) | 0;
ebd8d4e8 29677
8b095871
IC
29678 var total = number.length - start;
29679 var mod = total % limbLen;
29680 var end = Math.min(total, total - mod) + start;
ebd8d4e8 29681
8b095871
IC
29682 var word = 0;
29683 for (var i = start; i < end; i += limbLen) {
29684 word = parseBase(number, i, i + limbLen, base);
ebd8d4e8 29685
8b095871
IC
29686 this.imuln(limbPow);
29687 if (this.words[0] + word < 0x4000000) {
29688 this.words[0] += word;
29689 } else {
29690 this._iaddn(word);
29691 }
29692 }
ebd8d4e8 29693
8b095871
IC
29694 if (mod !== 0) {
29695 var pow = 1;
29696 word = parseBase(number, i, number.length, base);
ebd8d4e8 29697
8b095871
IC
29698 for (i = 0; i < mod; i++) {
29699 pow *= base;
29700 }
ab78acc6 29701
8b095871
IC
29702 this.imuln(pow);
29703 if (this.words[0] + word < 0x4000000) {
29704 this.words[0] += word;
29705 } else {
29706 this._iaddn(word);
29707 }
29708 }
29709 };
ab78acc6 29710
8b095871
IC
29711 BN.prototype.copy = function copy (dest) {
29712 dest.words = new Array(this.length);
29713 for (var i = 0; i < this.length; i++) {
29714 dest.words[i] = this.words[i];
ab78acc6 29715 }
8b095871
IC
29716 dest.length = this.length;
29717 dest.negative = this.negative;
29718 dest.red = this.red;
29719 };
ab78acc6 29720
8b095871
IC
29721 BN.prototype.clone = function clone () {
29722 var r = new BN(null);
29723 this.copy(r);
29724 return r;
29725 };
ab78acc6 29726
8b095871
IC
29727 BN.prototype._expand = function _expand (size) {
29728 while (this.length < size) {
29729 this.words[this.length++] = 0;
29730 }
29731 return this;
29732 };
ab78acc6 29733
8b095871
IC
29734 // Remove leading `0` from `this`
29735 BN.prototype.strip = function strip () {
29736 while (this.length > 1 && this.words[this.length - 1] === 0) {
29737 this.length--;
ab78acc6 29738 }
8b095871
IC
29739 return this._normSign();
29740 };
ebd8d4e8 29741
8b095871
IC
29742 BN.prototype._normSign = function _normSign () {
29743 // -0 = 0
29744 if (this.length === 1 && this.words[0] === 0) {
29745 this.negative = 0;
ab78acc6 29746 }
8b095871
IC
29747 return this;
29748 };
ebd8d4e8 29749
8b095871
IC
29750 BN.prototype.inspect = function inspect () {
29751 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
29752 };
ebd8d4e8 29753
8b095871 29754 /*
ebd8d4e8 29755
8b095871
IC
29756 var zeros = [];
29757 var groupSizes = [];
29758 var groupBases = [];
ebd8d4e8 29759
8b095871
IC
29760 var s = '';
29761 var i = -1;
29762 while (++i < BN.wordSize) {
29763 zeros[i] = s;
29764 s += '0';
29765 }
29766 groupSizes[0] = 0;
29767 groupSizes[1] = 0;
29768 groupBases[0] = 0;
29769 groupBases[1] = 0;
29770 var base = 2 - 1;
29771 while (++base < 36 + 1) {
29772 var groupSize = 0;
29773 var groupBase = 1;
29774 while (groupBase < (1 << BN.wordSize) / base) {
29775 groupBase *= base;
29776 groupSize += 1;
29777 }
29778 groupSizes[base] = groupSize;
29779 groupBases[base] = groupBase;
ebd8d4e8
IC
29780 }
29781
8b095871 29782 */
ebd8d4e8 29783
8b095871
IC
29784 var zeros = [
29785 '',
29786 '0',
29787 '00',
29788 '000',
29789 '0000',
29790 '00000',
29791 '000000',
29792 '0000000',
29793 '00000000',
29794 '000000000',
29795 '0000000000',
29796 '00000000000',
29797 '000000000000',
29798 '0000000000000',
29799 '00000000000000',
29800 '000000000000000',
29801 '0000000000000000',
29802 '00000000000000000',
29803 '000000000000000000',
29804 '0000000000000000000',
29805 '00000000000000000000',
29806 '000000000000000000000',
29807 '0000000000000000000000',
29808 '00000000000000000000000',
29809 '000000000000000000000000',
29810 '0000000000000000000000000'
29811 ];
29812
29813 var groupSizes = [
29814 0, 0,
29815 25, 16, 12, 11, 10, 9, 8,
29816 8, 7, 7, 7, 7, 6, 6,
29817 6, 6, 6, 6, 6, 5, 5,
29818 5, 5, 5, 5, 5, 5, 5,
29819 5, 5, 5, 5, 5, 5, 5
29820 ];
29821
29822 var groupBases = [
29823 0, 0,
29824 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
29825 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
29826 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
29827 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
29828 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
29829 ];
29830
29831 BN.prototype.toString = function toString (base, padding) {
29832 base = base || 10;
29833 padding = padding | 0 || 1;
29834
29835 var out;
29836 if (base === 16 || base === 'hex') {
29837 out = '';
29838 var off = 0;
29839 var carry = 0;
29840 for (var i = 0; i < this.length; i++) {
29841 var w = this.words[i];
29842 var word = (((w << off) | carry) & 0xffffff).toString(16);
29843 carry = (w >>> (24 - off)) & 0xffffff;
29844 if (carry !== 0 || i !== this.length - 1) {
29845 out = zeros[6 - word.length] + word + out;
29846 } else {
29847 out = word + out;
29848 }
29849 off += 2;
29850 if (off >= 26) {
29851 off -= 26;
29852 i--;
29853 }
29854 }
29855 if (carry !== 0) {
29856 out = carry.toString(16) + out;
29857 }
29858 while (out.length % padding !== 0) {
29859 out = '0' + out;
29860 }
29861 if (this.negative !== 0) {
29862 out = '-' + out;
29863 }
29864 return out;
29865 }
29866
29867 if (base === (base | 0) && base >= 2 && base <= 36) {
29868 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
29869 var groupSize = groupSizes[base];
29870 // var groupBase = Math.pow(base, groupSize);
29871 var groupBase = groupBases[base];
29872 out = '';
29873 var c = this.clone();
29874 c.negative = 0;
29875 while (!c.isZero()) {
29876 var r = c.modn(groupBase).toString(base);
29877 c = c.idivn(groupBase);
29878
29879 if (!c.isZero()) {
29880 out = zeros[groupSize - r.length] + r + out;
29881 } else {
29882 out = r + out;
29883 }
29884 }
29885 if (this.isZero()) {
29886 out = '0' + out;
29887 }
29888 while (out.length % padding !== 0) {
29889 out = '0' + out;
29890 }
29891 if (this.negative !== 0) {
29892 out = '-' + out;
29893 }
29894 return out;
29895 }
29896
29897 assert(false, 'Base should be between 2 and 36');
29898 };
29899
29900 BN.prototype.toNumber = function toNumber () {
29901 var ret = this.words[0];
29902 if (this.length === 2) {
29903 ret += this.words[1] * 0x4000000;
29904 } else if (this.length === 3 && this.words[2] === 0x01) {
29905 // NOTE: at this stage it is known that the top bit is set
29906 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
29907 } else if (this.length > 2) {
29908 assert(false, 'Number can only safely store up to 53 bits');
29909 }
29910 return (this.negative !== 0) ? -ret : ret;
29911 };
29912
29913 BN.prototype.toJSON = function toJSON () {
29914 return this.toString(16);
29915 };
29916
29917 BN.prototype.toBuffer = function toBuffer (endian, length) {
29918 assert(typeof Buffer !== 'undefined');
29919 return this.toArrayLike(Buffer, endian, length);
29920 };
ebd8d4e8 29921
8b095871
IC
29922 BN.prototype.toArray = function toArray (endian, length) {
29923 return this.toArrayLike(Array, endian, length);
29924 };
ebd8d4e8 29925
8b095871
IC
29926 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
29927 var byteLength = this.byteLength();
29928 var reqLength = length || Math.max(1, byteLength);
29929 assert(byteLength <= reqLength, 'byte array longer than desired length');
29930 assert(reqLength > 0, 'Requested array length <= 0');
29931
29932 this.strip();
29933 var littleEndian = endian === 'le';
29934 var res = new ArrayType(reqLength);
29935
29936 var b, i;
29937 var q = this.clone();
29938 if (!littleEndian) {
29939 // Assume big-endian
29940 for (i = 0; i < reqLength - byteLength; i++) {
29941 res[i] = 0;
29942 }
ebd8d4e8 29943
8b095871
IC
29944 for (i = 0; !q.isZero(); i++) {
29945 b = q.andln(0xff);
29946 q.iushrn(8);
ebd8d4e8 29947
8b095871
IC
29948 res[reqLength - i - 1] = b;
29949 }
29950 } else {
29951 for (i = 0; !q.isZero(); i++) {
29952 b = q.andln(0xff);
29953 q.iushrn(8);
ebd8d4e8 29954
8b095871
IC
29955 res[i] = b;
29956 }
29957
29958 for (; i < reqLength; i++) {
29959 res[i] = 0;
29960 }
ab78acc6 29961 }
ebd8d4e8 29962
8b095871
IC
29963 return res;
29964 };
ebd8d4e8 29965
8b095871
IC
29966 if (Math.clz32) {
29967 BN.prototype._countBits = function _countBits (w) {
29968 return 32 - Math.clz32(w);
29969 };
29970 } else {
29971 BN.prototype._countBits = function _countBits (w) {
29972 var t = w;
29973 var r = 0;
29974 if (t >= 0x1000) {
29975 r += 13;
29976 t >>>= 13;
29977 }
29978 if (t >= 0x40) {
29979 r += 7;
29980 t >>>= 7;
29981 }
29982 if (t >= 0x8) {
29983 r += 4;
29984 t >>>= 4;
29985 }
29986 if (t >= 0x02) {
29987 r += 2;
29988 t >>>= 2;
29989 }
29990 return r + t;
29991 };
ebd8d4e8
IC
29992 }
29993
8b095871
IC
29994 BN.prototype._zeroBits = function _zeroBits (w) {
29995 // Short-cut
29996 if (w === 0) return 26;
ebd8d4e8 29997
8b095871
IC
29998 var t = w;
29999 var r = 0;
30000 if ((t & 0x1fff) === 0) {
30001 r += 13;
30002 t >>>= 13;
30003 }
30004 if ((t & 0x7f) === 0) {
30005 r += 7;
30006 t >>>= 7;
30007 }
30008 if ((t & 0xf) === 0) {
30009 r += 4;
30010 t >>>= 4;
30011 }
30012 if ((t & 0x3) === 0) {
30013 r += 2;
30014 t >>>= 2;
30015 }
30016 if ((t & 0x1) === 0) {
30017 r++;
30018 }
30019 return r;
30020 };
ebd8d4e8 30021
8b095871
IC
30022 // Return number of used bits in a BN
30023 BN.prototype.bitLength = function bitLength () {
30024 var w = this.words[this.length - 1];
30025 var hi = this._countBits(w);
30026 return (this.length - 1) * 26 + hi;
30027 };
ebd8d4e8 30028
8b095871
IC
30029 function toBitArray (num) {
30030 var w = new Array(num.bitLength());
ebd8d4e8 30031
8b095871
IC
30032 for (var bit = 0; bit < w.length; bit++) {
30033 var off = (bit / 26) | 0;
30034 var wbit = bit % 26;
ebd8d4e8 30035
8b095871 30036 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
ab78acc6 30037 }
8b095871
IC
30038
30039 return w;
ab78acc6 30040 }
ebd8d4e8 30041
8b095871
IC
30042 // Number of trailing zero bits
30043 BN.prototype.zeroBits = function zeroBits () {
30044 if (this.isZero()) return 0;
30045
30046 var r = 0;
30047 for (var i = 0; i < this.length; i++) {
30048 var b = this._zeroBits(this.words[i]);
30049 r += b;
30050 if (b !== 26) break;
ab78acc6 30051 }
8b095871
IC
30052 return r;
30053 };
30054
30055 BN.prototype.byteLength = function byteLength () {
30056 return Math.ceil(this.bitLength() / 8);
30057 };
30058
30059 BN.prototype.toTwos = function toTwos (width) {
30060 if (this.negative !== 0) {
30061 return this.abs().inotn(width).iaddn(1);
ab78acc6 30062 }
8b095871
IC
30063 return this.clone();
30064 };
ebd8d4e8 30065
8b095871
IC
30066 BN.prototype.fromTwos = function fromTwos (width) {
30067 if (this.testn(width - 1)) {
30068 return this.notn(width).iaddn(1).ineg();
30069 }
30070 return this.clone();
30071 };
ebd8d4e8 30072
8b095871
IC
30073 BN.prototype.isNeg = function isNeg () {
30074 return this.negative !== 0;
30075 };
ebd8d4e8 30076
8b095871
IC
30077 // Return negative clone of `this`
30078 BN.prototype.neg = function neg () {
30079 return this.clone().ineg();
30080 };
ebd8d4e8 30081
8b095871
IC
30082 BN.prototype.ineg = function ineg () {
30083 if (!this.isZero()) {
30084 this.negative ^= 1;
ab78acc6 30085 }
ebd8d4e8 30086
8b095871
IC
30087 return this;
30088 };
ebd8d4e8 30089
8b095871
IC
30090 // Or `num` with `this` in-place
30091 BN.prototype.iuor = function iuor (num) {
30092 while (this.length < num.length) {
30093 this.words[this.length++] = 0;
30094 }
ebd8d4e8 30095
8b095871
IC
30096 for (var i = 0; i < num.length; i++) {
30097 this.words[i] = this.words[i] | num.words[i];
ebd8d4e8 30098 }
ebd8d4e8 30099
8b095871
IC
30100 return this.strip();
30101 };
ebd8d4e8 30102
8b095871
IC
30103 BN.prototype.ior = function ior (num) {
30104 assert((this.negative | num.negative) === 0);
30105 return this.iuor(num);
ab78acc6 30106 };
ebd8d4e8 30107
8b095871
IC
30108 // Or `num` with `this`
30109 BN.prototype.or = function or (num) {
30110 if (this.length > num.length) return this.clone().ior(num);
30111 return num.clone().ior(this);
30112 };
ebd8d4e8 30113
8b095871
IC
30114 BN.prototype.uor = function uor (num) {
30115 if (this.length > num.length) return this.clone().iuor(num);
30116 return num.clone().iuor(this);
30117 };
ebd8d4e8 30118
8b095871
IC
30119 // And `num` with `this` in-place
30120 BN.prototype.iuand = function iuand (num) {
30121 // b = min-length(num, this)
30122 var b;
30123 if (this.length > num.length) {
30124 b = num;
30125 } else {
30126 b = this;
30127 }
30128
30129 for (var i = 0; i < b.length; i++) {
30130 this.words[i] = this.words[i] & num.words[i];
30131 }
ebd8d4e8 30132
8b095871 30133 this.length = b.length;
ebd8d4e8 30134
8b095871
IC
30135 return this.strip();
30136 };
ebd8d4e8 30137
8b095871
IC
30138 BN.prototype.iand = function iand (num) {
30139 assert((this.negative | num.negative) === 0);
30140 return this.iuand(num);
30141 };
ebd8d4e8 30142
8b095871
IC
30143 // And `num` with `this`
30144 BN.prototype.and = function and (num) {
30145 if (this.length > num.length) return this.clone().iand(num);
30146 return num.clone().iand(this);
30147 };
ebd8d4e8 30148
8b095871
IC
30149 BN.prototype.uand = function uand (num) {
30150 if (this.length > num.length) return this.clone().iuand(num);
30151 return num.clone().iuand(this);
30152 };
ebd8d4e8 30153
8b095871
IC
30154 // Xor `num` with `this` in-place
30155 BN.prototype.iuxor = function iuxor (num) {
30156 // a.length > b.length
30157 var a;
30158 var b;
30159 if (this.length > num.length) {
30160 a = this;
30161 b = num;
30162 } else {
30163 a = num;
30164 b = this;
30165 }
ebd8d4e8 30166
8b095871
IC
30167 for (var i = 0; i < b.length; i++) {
30168 this.words[i] = a.words[i] ^ b.words[i];
30169 }
ebd8d4e8 30170
8b095871
IC
30171 if (this !== a) {
30172 for (; i < a.length; i++) {
30173 this.words[i] = a.words[i];
30174 }
30175 }
ebd8d4e8 30176
8b095871 30177 this.length = a.length;
ebd8d4e8 30178
8b095871
IC
30179 return this.strip();
30180 };
ebd8d4e8 30181
8b095871
IC
30182 BN.prototype.ixor = function ixor (num) {
30183 assert((this.negative | num.negative) === 0);
30184 return this.iuxor(num);
30185 };
ebd8d4e8 30186
8b095871
IC
30187 // Xor `num` with `this`
30188 BN.prototype.xor = function xor (num) {
30189 if (this.length > num.length) return this.clone().ixor(num);
30190 return num.clone().ixor(this);
30191 };
ebd8d4e8 30192
8b095871
IC
30193 BN.prototype.uxor = function uxor (num) {
30194 if (this.length > num.length) return this.clone().iuxor(num);
30195 return num.clone().iuxor(this);
30196 };
ebd8d4e8 30197
8b095871
IC
30198 // Not ``this`` with ``width`` bitwidth
30199 BN.prototype.inotn = function inotn (width) {
30200 assert(typeof width === 'number' && width >= 0);
ebd8d4e8 30201
8b095871
IC
30202 var bytesNeeded = Math.ceil(width / 26) | 0;
30203 var bitsLeft = width % 26;
ebd8d4e8 30204
8b095871
IC
30205 // Extend the buffer with leading zeroes
30206 this._expand(bytesNeeded);
30207
30208 if (bitsLeft > 0) {
30209 bytesNeeded--;
ab78acc6 30210 }
8b095871
IC
30211
30212 // Handle complete words
30213 for (var i = 0; i < bytesNeeded; i++) {
30214 this.words[i] = ~this.words[i] & 0x3ffffff;
ab78acc6 30215 }
8b095871
IC
30216
30217 // Handle the residue
30218 if (bitsLeft > 0) {
30219 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
ab78acc6 30220 }
ebd8d4e8 30221
8b095871
IC
30222 // And remove leading zeroes
30223 return this.strip();
30224 };
ebd8d4e8 30225
8b095871
IC
30226 BN.prototype.notn = function notn (width) {
30227 return this.clone().inotn(width);
30228 };
ebd8d4e8 30229
8b095871
IC
30230 // Set `bit` of `this`
30231 BN.prototype.setn = function setn (bit, val) {
30232 assert(typeof bit === 'number' && bit >= 0);
ebd8d4e8 30233
8b095871
IC
30234 var off = (bit / 26) | 0;
30235 var wbit = bit % 26;
ebd8d4e8 30236
8b095871 30237 this._expand(off + 1);
ebd8d4e8 30238
8b095871
IC
30239 if (val) {
30240 this.words[off] = this.words[off] | (1 << wbit);
30241 } else {
30242 this.words[off] = this.words[off] & ~(1 << wbit);
30243 }
ebd8d4e8 30244
8b095871
IC
30245 return this.strip();
30246 };
ebd8d4e8 30247
8b095871
IC
30248 // Add `num` to `this` in-place
30249 BN.prototype.iadd = function iadd (num) {
30250 var r;
30251
30252 // negative + positive
30253 if (this.negative !== 0 && num.negative === 0) {
30254 this.negative = 0;
30255 r = this.isub(num);
30256 this.negative ^= 1;
30257 return this._normSign();
30258
30259 // positive + negative
30260 } else if (this.negative === 0 && num.negative !== 0) {
30261 num.negative = 0;
30262 r = this.isub(num);
30263 num.negative = 1;
30264 return r._normSign();
30265 }
30266
30267 // a.length > b.length
30268 var a, b;
30269 if (this.length > num.length) {
30270 a = this;
30271 b = num;
ab78acc6 30272 } else {
8b095871
IC
30273 a = num;
30274 b = this;
30275 }
30276
30277 var carry = 0;
30278 for (var i = 0; i < b.length; i++) {
30279 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
30280 this.words[i] = r & 0x3ffffff;
30281 carry = r >>> 26;
30282 }
30283 for (; carry !== 0 && i < a.length; i++) {
30284 r = (a.words[i] | 0) + carry;
30285 this.words[i] = r & 0x3ffffff;
30286 carry = r >>> 26;
30287 }
30288
30289 this.length = a.length;
30290 if (carry !== 0) {
30291 this.words[this.length] = carry;
30292 this.length++;
30293 // Copy the rest of the words
30294 } else if (a !== this) {
30295 for (; i < a.length; i++) {
30296 this.words[i] = a.words[i];
30297 }
ab78acc6 30298 }
ebd8d4e8 30299
8b095871
IC
30300 return this;
30301 };
ebd8d4e8 30302
8b095871
IC
30303 // Add `num` to `this`
30304 BN.prototype.add = function add (num) {
30305 var res;
30306 if (num.negative !== 0 && this.negative === 0) {
30307 num.negative = 0;
30308 res = this.sub(num);
30309 num.negative ^= 1;
30310 return res;
30311 } else if (num.negative === 0 && this.negative !== 0) {
30312 this.negative = 0;
30313 res = num.sub(this);
30314 this.negative = 1;
30315 return res;
30316 }
ebd8d4e8 30317
8b095871 30318 if (this.length > num.length) return this.clone().iadd(num);
ebd8d4e8 30319
8b095871
IC
30320 return num.clone().iadd(this);
30321 };
ebd8d4e8 30322
8b095871
IC
30323 // Subtract `num` from `this` in-place
30324 BN.prototype.isub = function isub (num) {
30325 // this - (-num) = this + num
30326 if (num.negative !== 0) {
30327 num.negative = 0;
30328 var r = this.iadd(num);
30329 num.negative = 1;
30330 return r._normSign();
30331
30332 // -this - num = -(this + num)
30333 } else if (this.negative !== 0) {
30334 this.negative = 0;
30335 this.iadd(num);
30336 this.negative = 1;
30337 return this._normSign();
30338 }
30339
30340 // At this point both numbers are positive
30341 var cmp = this.cmp(num);
30342
30343 // Optimization - zeroify
30344 if (cmp === 0) {
30345 this.negative = 0;
30346 this.length = 1;
30347 this.words[0] = 0;
30348 return this;
30349 }
ebd8d4e8 30350
8b095871
IC
30351 // a > b
30352 var a, b;
30353 if (cmp > 0) {
30354 a = this;
30355 b = num;
30356 } else {
30357 a = num;
30358 b = this;
30359 }
ebd8d4e8 30360
8b095871
IC
30361 var carry = 0;
30362 for (var i = 0; i < b.length; i++) {
30363 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
30364 carry = r >> 26;
30365 this.words[i] = r & 0x3ffffff;
30366 }
30367 for (; carry !== 0 && i < a.length; i++) {
30368 r = (a.words[i] | 0) + carry;
30369 carry = r >> 26;
30370 this.words[i] = r & 0x3ffffff;
30371 }
ebd8d4e8 30372
8b095871
IC
30373 // Copy rest of the words
30374 if (carry === 0 && i < a.length && a !== this) {
30375 for (; i < a.length; i++) {
30376 this.words[i] = a.words[i];
30377 }
30378 }
ebd8d4e8 30379
8b095871 30380 this.length = Math.max(this.length, i);
ebd8d4e8 30381
8b095871
IC
30382 if (a !== this) {
30383 this.negative = 1;
ab78acc6 30384 }
ebd8d4e8 30385
8b095871
IC
30386 return this.strip();
30387 };
ebd8d4e8 30388
8b095871
IC
30389 // Subtract `num` from `this`
30390 BN.prototype.sub = function sub (num) {
30391 return this.clone().isub(num);
30392 };
30393
30394 function smallMulTo (self, num, out) {
30395 out.negative = num.negative ^ self.negative;
30396 var len = (self.length + num.length) | 0;
30397 out.length = len;
30398 len = (len - 1) | 0;
30399
30400 // Peel one iteration (compiler can't do it, because of code complexity)
30401 var a = self.words[0] | 0;
30402 var b = num.words[0] | 0;
30403 var r = a * b;
30404
30405 var lo = r & 0x3ffffff;
30406 var carry = (r / 0x4000000) | 0;
30407 out.words[0] = lo;
30408
30409 for (var k = 1; k < len; k++) {
30410 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
30411 // note that ncarry could be >= 0x3ffffff
30412 var ncarry = carry >>> 26;
30413 var rword = carry & 0x3ffffff;
30414 var maxJ = Math.min(k, num.length - 1);
30415 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
30416 var i = (k - j) | 0;
30417 a = self.words[i] | 0;
30418 b = num.words[j] | 0;
30419 r = a * b + rword;
30420 ncarry += (r / 0x4000000) | 0;
30421 rword = r & 0x3ffffff;
30422 }
30423 out.words[k] = rword | 0;
30424 carry = ncarry | 0;
30425 }
30426 if (carry !== 0) {
30427 out.words[k] = carry | 0;
ab78acc6 30428 } else {
8b095871
IC
30429 out.length--;
30430 }
30431
30432 return out.strip();
30433 }
30434
30435 // TODO(indutny): it may be reasonable to omit it for users who don't need
30436 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
30437 // multiplication (like elliptic secp256k1).
30438 var comb10MulTo = function comb10MulTo (self, num, out) {
30439 var a = self.words;
30440 var b = num.words;
30441 var o = out.words;
30442 var c = 0;
30443 var lo;
30444 var mid;
30445 var hi;
30446 var a0 = a[0] | 0;
30447 var al0 = a0 & 0x1fff;
30448 var ah0 = a0 >>> 13;
30449 var a1 = a[1] | 0;
30450 var al1 = a1 & 0x1fff;
30451 var ah1 = a1 >>> 13;
30452 var a2 = a[2] | 0;
30453 var al2 = a2 & 0x1fff;
30454 var ah2 = a2 >>> 13;
30455 var a3 = a[3] | 0;
30456 var al3 = a3 & 0x1fff;
30457 var ah3 = a3 >>> 13;
30458 var a4 = a[4] | 0;
30459 var al4 = a4 & 0x1fff;
30460 var ah4 = a4 >>> 13;
30461 var a5 = a[5] | 0;
30462 var al5 = a5 & 0x1fff;
30463 var ah5 = a5 >>> 13;
30464 var a6 = a[6] | 0;
30465 var al6 = a6 & 0x1fff;
30466 var ah6 = a6 >>> 13;
30467 var a7 = a[7] | 0;
30468 var al7 = a7 & 0x1fff;
30469 var ah7 = a7 >>> 13;
30470 var a8 = a[8] | 0;
30471 var al8 = a8 & 0x1fff;
30472 var ah8 = a8 >>> 13;
30473 var a9 = a[9] | 0;
30474 var al9 = a9 & 0x1fff;
30475 var ah9 = a9 >>> 13;
30476 var b0 = b[0] | 0;
30477 var bl0 = b0 & 0x1fff;
30478 var bh0 = b0 >>> 13;
30479 var b1 = b[1] | 0;
30480 var bl1 = b1 & 0x1fff;
30481 var bh1 = b1 >>> 13;
30482 var b2 = b[2] | 0;
30483 var bl2 = b2 & 0x1fff;
30484 var bh2 = b2 >>> 13;
30485 var b3 = b[3] | 0;
30486 var bl3 = b3 & 0x1fff;
30487 var bh3 = b3 >>> 13;
30488 var b4 = b[4] | 0;
30489 var bl4 = b4 & 0x1fff;
30490 var bh4 = b4 >>> 13;
30491 var b5 = b[5] | 0;
30492 var bl5 = b5 & 0x1fff;
30493 var bh5 = b5 >>> 13;
30494 var b6 = b[6] | 0;
30495 var bl6 = b6 & 0x1fff;
30496 var bh6 = b6 >>> 13;
30497 var b7 = b[7] | 0;
30498 var bl7 = b7 & 0x1fff;
30499 var bh7 = b7 >>> 13;
30500 var b8 = b[8] | 0;
30501 var bl8 = b8 & 0x1fff;
30502 var bh8 = b8 >>> 13;
30503 var b9 = b[9] | 0;
30504 var bl9 = b9 & 0x1fff;
30505 var bh9 = b9 >>> 13;
30506
30507 out.negative = self.negative ^ num.negative;
30508 out.length = 19;
30509 /* k = 0 */
30510 lo = Math.imul(al0, bl0);
30511 mid = Math.imul(al0, bh0);
30512 mid = (mid + Math.imul(ah0, bl0)) | 0;
30513 hi = Math.imul(ah0, bh0);
30514 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30515 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
30516 w0 &= 0x3ffffff;
30517 /* k = 1 */
30518 lo = Math.imul(al1, bl0);
30519 mid = Math.imul(al1, bh0);
30520 mid = (mid + Math.imul(ah1, bl0)) | 0;
30521 hi = Math.imul(ah1, bh0);
30522 lo = (lo + Math.imul(al0, bl1)) | 0;
30523 mid = (mid + Math.imul(al0, bh1)) | 0;
30524 mid = (mid + Math.imul(ah0, bl1)) | 0;
30525 hi = (hi + Math.imul(ah0, bh1)) | 0;
30526 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30527 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
30528 w1 &= 0x3ffffff;
30529 /* k = 2 */
30530 lo = Math.imul(al2, bl0);
30531 mid = Math.imul(al2, bh0);
30532 mid = (mid + Math.imul(ah2, bl0)) | 0;
30533 hi = Math.imul(ah2, bh0);
30534 lo = (lo + Math.imul(al1, bl1)) | 0;
30535 mid = (mid + Math.imul(al1, bh1)) | 0;
30536 mid = (mid + Math.imul(ah1, bl1)) | 0;
30537 hi = (hi + Math.imul(ah1, bh1)) | 0;
30538 lo = (lo + Math.imul(al0, bl2)) | 0;
30539 mid = (mid + Math.imul(al0, bh2)) | 0;
30540 mid = (mid + Math.imul(ah0, bl2)) | 0;
30541 hi = (hi + Math.imul(ah0, bh2)) | 0;
30542 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30543 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
30544 w2 &= 0x3ffffff;
30545 /* k = 3 */
30546 lo = Math.imul(al3, bl0);
30547 mid = Math.imul(al3, bh0);
30548 mid = (mid + Math.imul(ah3, bl0)) | 0;
30549 hi = Math.imul(ah3, bh0);
30550 lo = (lo + Math.imul(al2, bl1)) | 0;
30551 mid = (mid + Math.imul(al2, bh1)) | 0;
30552 mid = (mid + Math.imul(ah2, bl1)) | 0;
30553 hi = (hi + Math.imul(ah2, bh1)) | 0;
30554 lo = (lo + Math.imul(al1, bl2)) | 0;
30555 mid = (mid + Math.imul(al1, bh2)) | 0;
30556 mid = (mid + Math.imul(ah1, bl2)) | 0;
30557 hi = (hi + Math.imul(ah1, bh2)) | 0;
30558 lo = (lo + Math.imul(al0, bl3)) | 0;
30559 mid = (mid + Math.imul(al0, bh3)) | 0;
30560 mid = (mid + Math.imul(ah0, bl3)) | 0;
30561 hi = (hi + Math.imul(ah0, bh3)) | 0;
30562 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30563 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
30564 w3 &= 0x3ffffff;
30565 /* k = 4 */
30566 lo = Math.imul(al4, bl0);
30567 mid = Math.imul(al4, bh0);
30568 mid = (mid + Math.imul(ah4, bl0)) | 0;
30569 hi = Math.imul(ah4, bh0);
30570 lo = (lo + Math.imul(al3, bl1)) | 0;
30571 mid = (mid + Math.imul(al3, bh1)) | 0;
30572 mid = (mid + Math.imul(ah3, bl1)) | 0;
30573 hi = (hi + Math.imul(ah3, bh1)) | 0;
30574 lo = (lo + Math.imul(al2, bl2)) | 0;
30575 mid = (mid + Math.imul(al2, bh2)) | 0;
30576 mid = (mid + Math.imul(ah2, bl2)) | 0;
30577 hi = (hi + Math.imul(ah2, bh2)) | 0;
30578 lo = (lo + Math.imul(al1, bl3)) | 0;
30579 mid = (mid + Math.imul(al1, bh3)) | 0;
30580 mid = (mid + Math.imul(ah1, bl3)) | 0;
30581 hi = (hi + Math.imul(ah1, bh3)) | 0;
30582 lo = (lo + Math.imul(al0, bl4)) | 0;
30583 mid = (mid + Math.imul(al0, bh4)) | 0;
30584 mid = (mid + Math.imul(ah0, bl4)) | 0;
30585 hi = (hi + Math.imul(ah0, bh4)) | 0;
30586 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30587 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
30588 w4 &= 0x3ffffff;
30589 /* k = 5 */
30590 lo = Math.imul(al5, bl0);
30591 mid = Math.imul(al5, bh0);
30592 mid = (mid + Math.imul(ah5, bl0)) | 0;
30593 hi = Math.imul(ah5, bh0);
30594 lo = (lo + Math.imul(al4, bl1)) | 0;
30595 mid = (mid + Math.imul(al4, bh1)) | 0;
30596 mid = (mid + Math.imul(ah4, bl1)) | 0;
30597 hi = (hi + Math.imul(ah4, bh1)) | 0;
30598 lo = (lo + Math.imul(al3, bl2)) | 0;
30599 mid = (mid + Math.imul(al3, bh2)) | 0;
30600 mid = (mid + Math.imul(ah3, bl2)) | 0;
30601 hi = (hi + Math.imul(ah3, bh2)) | 0;
30602 lo = (lo + Math.imul(al2, bl3)) | 0;
30603 mid = (mid + Math.imul(al2, bh3)) | 0;
30604 mid = (mid + Math.imul(ah2, bl3)) | 0;
30605 hi = (hi + Math.imul(ah2, bh3)) | 0;
30606 lo = (lo + Math.imul(al1, bl4)) | 0;
30607 mid = (mid + Math.imul(al1, bh4)) | 0;
30608 mid = (mid + Math.imul(ah1, bl4)) | 0;
30609 hi = (hi + Math.imul(ah1, bh4)) | 0;
30610 lo = (lo + Math.imul(al0, bl5)) | 0;
30611 mid = (mid + Math.imul(al0, bh5)) | 0;
30612 mid = (mid + Math.imul(ah0, bl5)) | 0;
30613 hi = (hi + Math.imul(ah0, bh5)) | 0;
30614 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30615 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
30616 w5 &= 0x3ffffff;
30617 /* k = 6 */
30618 lo = Math.imul(al6, bl0);
30619 mid = Math.imul(al6, bh0);
30620 mid = (mid + Math.imul(ah6, bl0)) | 0;
30621 hi = Math.imul(ah6, bh0);
30622 lo = (lo + Math.imul(al5, bl1)) | 0;
30623 mid = (mid + Math.imul(al5, bh1)) | 0;
30624 mid = (mid + Math.imul(ah5, bl1)) | 0;
30625 hi = (hi + Math.imul(ah5, bh1)) | 0;
30626 lo = (lo + Math.imul(al4, bl2)) | 0;
30627 mid = (mid + Math.imul(al4, bh2)) | 0;
30628 mid = (mid + Math.imul(ah4, bl2)) | 0;
30629 hi = (hi + Math.imul(ah4, bh2)) | 0;
30630 lo = (lo + Math.imul(al3, bl3)) | 0;
30631 mid = (mid + Math.imul(al3, bh3)) | 0;
30632 mid = (mid + Math.imul(ah3, bl3)) | 0;
30633 hi = (hi + Math.imul(ah3, bh3)) | 0;
30634 lo = (lo + Math.imul(al2, bl4)) | 0;
30635 mid = (mid + Math.imul(al2, bh4)) | 0;
30636 mid = (mid + Math.imul(ah2, bl4)) | 0;
30637 hi = (hi + Math.imul(ah2, bh4)) | 0;
30638 lo = (lo + Math.imul(al1, bl5)) | 0;
30639 mid = (mid + Math.imul(al1, bh5)) | 0;
30640 mid = (mid + Math.imul(ah1, bl5)) | 0;
30641 hi = (hi + Math.imul(ah1, bh5)) | 0;
30642 lo = (lo + Math.imul(al0, bl6)) | 0;
30643 mid = (mid + Math.imul(al0, bh6)) | 0;
30644 mid = (mid + Math.imul(ah0, bl6)) | 0;
30645 hi = (hi + Math.imul(ah0, bh6)) | 0;
30646 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30647 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
30648 w6 &= 0x3ffffff;
30649 /* k = 7 */
30650 lo = Math.imul(al7, bl0);
30651 mid = Math.imul(al7, bh0);
30652 mid = (mid + Math.imul(ah7, bl0)) | 0;
30653 hi = Math.imul(ah7, bh0);
30654 lo = (lo + Math.imul(al6, bl1)) | 0;
30655 mid = (mid + Math.imul(al6, bh1)) | 0;
30656 mid = (mid + Math.imul(ah6, bl1)) | 0;
30657 hi = (hi + Math.imul(ah6, bh1)) | 0;
30658 lo = (lo + Math.imul(al5, bl2)) | 0;
30659 mid = (mid + Math.imul(al5, bh2)) | 0;
30660 mid = (mid + Math.imul(ah5, bl2)) | 0;
30661 hi = (hi + Math.imul(ah5, bh2)) | 0;
30662 lo = (lo + Math.imul(al4, bl3)) | 0;
30663 mid = (mid + Math.imul(al4, bh3)) | 0;
30664 mid = (mid + Math.imul(ah4, bl3)) | 0;
30665 hi = (hi + Math.imul(ah4, bh3)) | 0;
30666 lo = (lo + Math.imul(al3, bl4)) | 0;
30667 mid = (mid + Math.imul(al3, bh4)) | 0;
30668 mid = (mid + Math.imul(ah3, bl4)) | 0;
30669 hi = (hi + Math.imul(ah3, bh4)) | 0;
30670 lo = (lo + Math.imul(al2, bl5)) | 0;
30671 mid = (mid + Math.imul(al2, bh5)) | 0;
30672 mid = (mid + Math.imul(ah2, bl5)) | 0;
30673 hi = (hi + Math.imul(ah2, bh5)) | 0;
30674 lo = (lo + Math.imul(al1, bl6)) | 0;
30675 mid = (mid + Math.imul(al1, bh6)) | 0;
30676 mid = (mid + Math.imul(ah1, bl6)) | 0;
30677 hi = (hi + Math.imul(ah1, bh6)) | 0;
30678 lo = (lo + Math.imul(al0, bl7)) | 0;
30679 mid = (mid + Math.imul(al0, bh7)) | 0;
30680 mid = (mid + Math.imul(ah0, bl7)) | 0;
30681 hi = (hi + Math.imul(ah0, bh7)) | 0;
30682 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30683 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
30684 w7 &= 0x3ffffff;
30685 /* k = 8 */
30686 lo = Math.imul(al8, bl0);
30687 mid = Math.imul(al8, bh0);
30688 mid = (mid + Math.imul(ah8, bl0)) | 0;
30689 hi = Math.imul(ah8, bh0);
30690 lo = (lo + Math.imul(al7, bl1)) | 0;
30691 mid = (mid + Math.imul(al7, bh1)) | 0;
30692 mid = (mid + Math.imul(ah7, bl1)) | 0;
30693 hi = (hi + Math.imul(ah7, bh1)) | 0;
30694 lo = (lo + Math.imul(al6, bl2)) | 0;
30695 mid = (mid + Math.imul(al6, bh2)) | 0;
30696 mid = (mid + Math.imul(ah6, bl2)) | 0;
30697 hi = (hi + Math.imul(ah6, bh2)) | 0;
30698 lo = (lo + Math.imul(al5, bl3)) | 0;
30699 mid = (mid + Math.imul(al5, bh3)) | 0;
30700 mid = (mid + Math.imul(ah5, bl3)) | 0;
30701 hi = (hi + Math.imul(ah5, bh3)) | 0;
30702 lo = (lo + Math.imul(al4, bl4)) | 0;
30703 mid = (mid + Math.imul(al4, bh4)) | 0;
30704 mid = (mid + Math.imul(ah4, bl4)) | 0;
30705 hi = (hi + Math.imul(ah4, bh4)) | 0;
30706 lo = (lo + Math.imul(al3, bl5)) | 0;
30707 mid = (mid + Math.imul(al3, bh5)) | 0;
30708 mid = (mid + Math.imul(ah3, bl5)) | 0;
30709 hi = (hi + Math.imul(ah3, bh5)) | 0;
30710 lo = (lo + Math.imul(al2, bl6)) | 0;
30711 mid = (mid + Math.imul(al2, bh6)) | 0;
30712 mid = (mid + Math.imul(ah2, bl6)) | 0;
30713 hi = (hi + Math.imul(ah2, bh6)) | 0;
30714 lo = (lo + Math.imul(al1, bl7)) | 0;
30715 mid = (mid + Math.imul(al1, bh7)) | 0;
30716 mid = (mid + Math.imul(ah1, bl7)) | 0;
30717 hi = (hi + Math.imul(ah1, bh7)) | 0;
30718 lo = (lo + Math.imul(al0, bl8)) | 0;
30719 mid = (mid + Math.imul(al0, bh8)) | 0;
30720 mid = (mid + Math.imul(ah0, bl8)) | 0;
30721 hi = (hi + Math.imul(ah0, bh8)) | 0;
30722 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30723 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
30724 w8 &= 0x3ffffff;
30725 /* k = 9 */
30726 lo = Math.imul(al9, bl0);
30727 mid = Math.imul(al9, bh0);
30728 mid = (mid + Math.imul(ah9, bl0)) | 0;
30729 hi = Math.imul(ah9, bh0);
30730 lo = (lo + Math.imul(al8, bl1)) | 0;
30731 mid = (mid + Math.imul(al8, bh1)) | 0;
30732 mid = (mid + Math.imul(ah8, bl1)) | 0;
30733 hi = (hi + Math.imul(ah8, bh1)) | 0;
30734 lo = (lo + Math.imul(al7, bl2)) | 0;
30735 mid = (mid + Math.imul(al7, bh2)) | 0;
30736 mid = (mid + Math.imul(ah7, bl2)) | 0;
30737 hi = (hi + Math.imul(ah7, bh2)) | 0;
30738 lo = (lo + Math.imul(al6, bl3)) | 0;
30739 mid = (mid + Math.imul(al6, bh3)) | 0;
30740 mid = (mid + Math.imul(ah6, bl3)) | 0;
30741 hi = (hi + Math.imul(ah6, bh3)) | 0;
30742 lo = (lo + Math.imul(al5, bl4)) | 0;
30743 mid = (mid + Math.imul(al5, bh4)) | 0;
30744 mid = (mid + Math.imul(ah5, bl4)) | 0;
30745 hi = (hi + Math.imul(ah5, bh4)) | 0;
30746 lo = (lo + Math.imul(al4, bl5)) | 0;
30747 mid = (mid + Math.imul(al4, bh5)) | 0;
30748 mid = (mid + Math.imul(ah4, bl5)) | 0;
30749 hi = (hi + Math.imul(ah4, bh5)) | 0;
30750 lo = (lo + Math.imul(al3, bl6)) | 0;
30751 mid = (mid + Math.imul(al3, bh6)) | 0;
30752 mid = (mid + Math.imul(ah3, bl6)) | 0;
30753 hi = (hi + Math.imul(ah3, bh6)) | 0;
30754 lo = (lo + Math.imul(al2, bl7)) | 0;
30755 mid = (mid + Math.imul(al2, bh7)) | 0;
30756 mid = (mid + Math.imul(ah2, bl7)) | 0;
30757 hi = (hi + Math.imul(ah2, bh7)) | 0;
30758 lo = (lo + Math.imul(al1, bl8)) | 0;
30759 mid = (mid + Math.imul(al1, bh8)) | 0;
30760 mid = (mid + Math.imul(ah1, bl8)) | 0;
30761 hi = (hi + Math.imul(ah1, bh8)) | 0;
30762 lo = (lo + Math.imul(al0, bl9)) | 0;
30763 mid = (mid + Math.imul(al0, bh9)) | 0;
30764 mid = (mid + Math.imul(ah0, bl9)) | 0;
30765 hi = (hi + Math.imul(ah0, bh9)) | 0;
30766 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30767 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
30768 w9 &= 0x3ffffff;
30769 /* k = 10 */
30770 lo = Math.imul(al9, bl1);
30771 mid = Math.imul(al9, bh1);
30772 mid = (mid + Math.imul(ah9, bl1)) | 0;
30773 hi = Math.imul(ah9, bh1);
30774 lo = (lo + Math.imul(al8, bl2)) | 0;
30775 mid = (mid + Math.imul(al8, bh2)) | 0;
30776 mid = (mid + Math.imul(ah8, bl2)) | 0;
30777 hi = (hi + Math.imul(ah8, bh2)) | 0;
30778 lo = (lo + Math.imul(al7, bl3)) | 0;
30779 mid = (mid + Math.imul(al7, bh3)) | 0;
30780 mid = (mid + Math.imul(ah7, bl3)) | 0;
30781 hi = (hi + Math.imul(ah7, bh3)) | 0;
30782 lo = (lo + Math.imul(al6, bl4)) | 0;
30783 mid = (mid + Math.imul(al6, bh4)) | 0;
30784 mid = (mid + Math.imul(ah6, bl4)) | 0;
30785 hi = (hi + Math.imul(ah6, bh4)) | 0;
30786 lo = (lo + Math.imul(al5, bl5)) | 0;
30787 mid = (mid + Math.imul(al5, bh5)) | 0;
30788 mid = (mid + Math.imul(ah5, bl5)) | 0;
30789 hi = (hi + Math.imul(ah5, bh5)) | 0;
30790 lo = (lo + Math.imul(al4, bl6)) | 0;
30791 mid = (mid + Math.imul(al4, bh6)) | 0;
30792 mid = (mid + Math.imul(ah4, bl6)) | 0;
30793 hi = (hi + Math.imul(ah4, bh6)) | 0;
30794 lo = (lo + Math.imul(al3, bl7)) | 0;
30795 mid = (mid + Math.imul(al3, bh7)) | 0;
30796 mid = (mid + Math.imul(ah3, bl7)) | 0;
30797 hi = (hi + Math.imul(ah3, bh7)) | 0;
30798 lo = (lo + Math.imul(al2, bl8)) | 0;
30799 mid = (mid + Math.imul(al2, bh8)) | 0;
30800 mid = (mid + Math.imul(ah2, bl8)) | 0;
30801 hi = (hi + Math.imul(ah2, bh8)) | 0;
30802 lo = (lo + Math.imul(al1, bl9)) | 0;
30803 mid = (mid + Math.imul(al1, bh9)) | 0;
30804 mid = (mid + Math.imul(ah1, bl9)) | 0;
30805 hi = (hi + Math.imul(ah1, bh9)) | 0;
30806 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30807 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
30808 w10 &= 0x3ffffff;
30809 /* k = 11 */
30810 lo = Math.imul(al9, bl2);
30811 mid = Math.imul(al9, bh2);
30812 mid = (mid + Math.imul(ah9, bl2)) | 0;
30813 hi = Math.imul(ah9, bh2);
30814 lo = (lo + Math.imul(al8, bl3)) | 0;
30815 mid = (mid + Math.imul(al8, bh3)) | 0;
30816 mid = (mid + Math.imul(ah8, bl3)) | 0;
30817 hi = (hi + Math.imul(ah8, bh3)) | 0;
30818 lo = (lo + Math.imul(al7, bl4)) | 0;
30819 mid = (mid + Math.imul(al7, bh4)) | 0;
30820 mid = (mid + Math.imul(ah7, bl4)) | 0;
30821 hi = (hi + Math.imul(ah7, bh4)) | 0;
30822 lo = (lo + Math.imul(al6, bl5)) | 0;
30823 mid = (mid + Math.imul(al6, bh5)) | 0;
30824 mid = (mid + Math.imul(ah6, bl5)) | 0;
30825 hi = (hi + Math.imul(ah6, bh5)) | 0;
30826 lo = (lo + Math.imul(al5, bl6)) | 0;
30827 mid = (mid + Math.imul(al5, bh6)) | 0;
30828 mid = (mid + Math.imul(ah5, bl6)) | 0;
30829 hi = (hi + Math.imul(ah5, bh6)) | 0;
30830 lo = (lo + Math.imul(al4, bl7)) | 0;
30831 mid = (mid + Math.imul(al4, bh7)) | 0;
30832 mid = (mid + Math.imul(ah4, bl7)) | 0;
30833 hi = (hi + Math.imul(ah4, bh7)) | 0;
30834 lo = (lo + Math.imul(al3, bl8)) | 0;
30835 mid = (mid + Math.imul(al3, bh8)) | 0;
30836 mid = (mid + Math.imul(ah3, bl8)) | 0;
30837 hi = (hi + Math.imul(ah3, bh8)) | 0;
30838 lo = (lo + Math.imul(al2, bl9)) | 0;
30839 mid = (mid + Math.imul(al2, bh9)) | 0;
30840 mid = (mid + Math.imul(ah2, bl9)) | 0;
30841 hi = (hi + Math.imul(ah2, bh9)) | 0;
30842 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30843 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
30844 w11 &= 0x3ffffff;
30845 /* k = 12 */
30846 lo = Math.imul(al9, bl3);
30847 mid = Math.imul(al9, bh3);
30848 mid = (mid + Math.imul(ah9, bl3)) | 0;
30849 hi = Math.imul(ah9, bh3);
30850 lo = (lo + Math.imul(al8, bl4)) | 0;
30851 mid = (mid + Math.imul(al8, bh4)) | 0;
30852 mid = (mid + Math.imul(ah8, bl4)) | 0;
30853 hi = (hi + Math.imul(ah8, bh4)) | 0;
30854 lo = (lo + Math.imul(al7, bl5)) | 0;
30855 mid = (mid + Math.imul(al7, bh5)) | 0;
30856 mid = (mid + Math.imul(ah7, bl5)) | 0;
30857 hi = (hi + Math.imul(ah7, bh5)) | 0;
30858 lo = (lo + Math.imul(al6, bl6)) | 0;
30859 mid = (mid + Math.imul(al6, bh6)) | 0;
30860 mid = (mid + Math.imul(ah6, bl6)) | 0;
30861 hi = (hi + Math.imul(ah6, bh6)) | 0;
30862 lo = (lo + Math.imul(al5, bl7)) | 0;
30863 mid = (mid + Math.imul(al5, bh7)) | 0;
30864 mid = (mid + Math.imul(ah5, bl7)) | 0;
30865 hi = (hi + Math.imul(ah5, bh7)) | 0;
30866 lo = (lo + Math.imul(al4, bl8)) | 0;
30867 mid = (mid + Math.imul(al4, bh8)) | 0;
30868 mid = (mid + Math.imul(ah4, bl8)) | 0;
30869 hi = (hi + Math.imul(ah4, bh8)) | 0;
30870 lo = (lo + Math.imul(al3, bl9)) | 0;
30871 mid = (mid + Math.imul(al3, bh9)) | 0;
30872 mid = (mid + Math.imul(ah3, bl9)) | 0;
30873 hi = (hi + Math.imul(ah3, bh9)) | 0;
30874 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30875 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
30876 w12 &= 0x3ffffff;
30877 /* k = 13 */
30878 lo = Math.imul(al9, bl4);
30879 mid = Math.imul(al9, bh4);
30880 mid = (mid + Math.imul(ah9, bl4)) | 0;
30881 hi = Math.imul(ah9, bh4);
30882 lo = (lo + Math.imul(al8, bl5)) | 0;
30883 mid = (mid + Math.imul(al8, bh5)) | 0;
30884 mid = (mid + Math.imul(ah8, bl5)) | 0;
30885 hi = (hi + Math.imul(ah8, bh5)) | 0;
30886 lo = (lo + Math.imul(al7, bl6)) | 0;
30887 mid = (mid + Math.imul(al7, bh6)) | 0;
30888 mid = (mid + Math.imul(ah7, bl6)) | 0;
30889 hi = (hi + Math.imul(ah7, bh6)) | 0;
30890 lo = (lo + Math.imul(al6, bl7)) | 0;
30891 mid = (mid + Math.imul(al6, bh7)) | 0;
30892 mid = (mid + Math.imul(ah6, bl7)) | 0;
30893 hi = (hi + Math.imul(ah6, bh7)) | 0;
30894 lo = (lo + Math.imul(al5, bl8)) | 0;
30895 mid = (mid + Math.imul(al5, bh8)) | 0;
30896 mid = (mid + Math.imul(ah5, bl8)) | 0;
30897 hi = (hi + Math.imul(ah5, bh8)) | 0;
30898 lo = (lo + Math.imul(al4, bl9)) | 0;
30899 mid = (mid + Math.imul(al4, bh9)) | 0;
30900 mid = (mid + Math.imul(ah4, bl9)) | 0;
30901 hi = (hi + Math.imul(ah4, bh9)) | 0;
30902 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30903 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
30904 w13 &= 0x3ffffff;
30905 /* k = 14 */
30906 lo = Math.imul(al9, bl5);
30907 mid = Math.imul(al9, bh5);
30908 mid = (mid + Math.imul(ah9, bl5)) | 0;
30909 hi = Math.imul(ah9, bh5);
30910 lo = (lo + Math.imul(al8, bl6)) | 0;
30911 mid = (mid + Math.imul(al8, bh6)) | 0;
30912 mid = (mid + Math.imul(ah8, bl6)) | 0;
30913 hi = (hi + Math.imul(ah8, bh6)) | 0;
30914 lo = (lo + Math.imul(al7, bl7)) | 0;
30915 mid = (mid + Math.imul(al7, bh7)) | 0;
30916 mid = (mid + Math.imul(ah7, bl7)) | 0;
30917 hi = (hi + Math.imul(ah7, bh7)) | 0;
30918 lo = (lo + Math.imul(al6, bl8)) | 0;
30919 mid = (mid + Math.imul(al6, bh8)) | 0;
30920 mid = (mid + Math.imul(ah6, bl8)) | 0;
30921 hi = (hi + Math.imul(ah6, bh8)) | 0;
30922 lo = (lo + Math.imul(al5, bl9)) | 0;
30923 mid = (mid + Math.imul(al5, bh9)) | 0;
30924 mid = (mid + Math.imul(ah5, bl9)) | 0;
30925 hi = (hi + Math.imul(ah5, bh9)) | 0;
30926 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30927 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
30928 w14 &= 0x3ffffff;
30929 /* k = 15 */
30930 lo = Math.imul(al9, bl6);
30931 mid = Math.imul(al9, bh6);
30932 mid = (mid + Math.imul(ah9, bl6)) | 0;
30933 hi = Math.imul(ah9, bh6);
30934 lo = (lo + Math.imul(al8, bl7)) | 0;
30935 mid = (mid + Math.imul(al8, bh7)) | 0;
30936 mid = (mid + Math.imul(ah8, bl7)) | 0;
30937 hi = (hi + Math.imul(ah8, bh7)) | 0;
30938 lo = (lo + Math.imul(al7, bl8)) | 0;
30939 mid = (mid + Math.imul(al7, bh8)) | 0;
30940 mid = (mid + Math.imul(ah7, bl8)) | 0;
30941 hi = (hi + Math.imul(ah7, bh8)) | 0;
30942 lo = (lo + Math.imul(al6, bl9)) | 0;
30943 mid = (mid + Math.imul(al6, bh9)) | 0;
30944 mid = (mid + Math.imul(ah6, bl9)) | 0;
30945 hi = (hi + Math.imul(ah6, bh9)) | 0;
30946 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30947 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
30948 w15 &= 0x3ffffff;
30949 /* k = 16 */
30950 lo = Math.imul(al9, bl7);
30951 mid = Math.imul(al9, bh7);
30952 mid = (mid + Math.imul(ah9, bl7)) | 0;
30953 hi = Math.imul(ah9, bh7);
30954 lo = (lo + Math.imul(al8, bl8)) | 0;
30955 mid = (mid + Math.imul(al8, bh8)) | 0;
30956 mid = (mid + Math.imul(ah8, bl8)) | 0;
30957 hi = (hi + Math.imul(ah8, bh8)) | 0;
30958 lo = (lo + Math.imul(al7, bl9)) | 0;
30959 mid = (mid + Math.imul(al7, bh9)) | 0;
30960 mid = (mid + Math.imul(ah7, bl9)) | 0;
30961 hi = (hi + Math.imul(ah7, bh9)) | 0;
30962 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30963 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
30964 w16 &= 0x3ffffff;
30965 /* k = 17 */
30966 lo = Math.imul(al9, bl8);
30967 mid = Math.imul(al9, bh8);
30968 mid = (mid + Math.imul(ah9, bl8)) | 0;
30969 hi = Math.imul(ah9, bh8);
30970 lo = (lo + Math.imul(al8, bl9)) | 0;
30971 mid = (mid + Math.imul(al8, bh9)) | 0;
30972 mid = (mid + Math.imul(ah8, bl9)) | 0;
30973 hi = (hi + Math.imul(ah8, bh9)) | 0;
30974 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30975 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
30976 w17 &= 0x3ffffff;
30977 /* k = 18 */
30978 lo = Math.imul(al9, bl9);
30979 mid = Math.imul(al9, bh9);
30980 mid = (mid + Math.imul(ah9, bl9)) | 0;
30981 hi = Math.imul(ah9, bh9);
30982 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30983 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
30984 w18 &= 0x3ffffff;
30985 o[0] = w0;
30986 o[1] = w1;
30987 o[2] = w2;
30988 o[3] = w3;
30989 o[4] = w4;
30990 o[5] = w5;
30991 o[6] = w6;
30992 o[7] = w7;
30993 o[8] = w8;
30994 o[9] = w9;
30995 o[10] = w10;
30996 o[11] = w11;
30997 o[12] = w12;
30998 o[13] = w13;
30999 o[14] = w14;
31000 o[15] = w15;
31001 o[16] = w16;
31002 o[17] = w17;
31003 o[18] = w18;
31004 if (c !== 0) {
31005 o[19] = c;
31006 out.length++;
ab78acc6 31007 }
8b095871
IC
31008 return out;
31009 };
31010
31011 // Polyfill comb
31012 if (!Math.imul) {
31013 comb10MulTo = smallMulTo;
31014 }
31015
31016 function bigMulTo (self, num, out) {
31017 out.negative = num.negative ^ self.negative;
31018 out.length = self.length + num.length;
31019
31020 var carry = 0;
31021 var hncarry = 0;
31022 for (var k = 0; k < out.length - 1; k++) {
31023 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
31024 // note that ncarry could be >= 0x3ffffff
31025 var ncarry = hncarry;
31026 hncarry = 0;
31027 var rword = carry & 0x3ffffff;
31028 var maxJ = Math.min(k, num.length - 1);
31029 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
31030 var i = k - j;
31031 var a = self.words[i] | 0;
31032 var b = num.words[j] | 0;
31033 var r = a * b;
31034
31035 var lo = r & 0x3ffffff;
31036 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
31037 lo = (lo + rword) | 0;
31038 rword = lo & 0x3ffffff;
31039 ncarry = (ncarry + (lo >>> 26)) | 0;
31040
31041 hncarry += ncarry >>> 26;
31042 ncarry &= 0x3ffffff;
31043 }
31044 out.words[k] = rword;
31045 carry = ncarry;
31046 ncarry = hncarry;
31047 }
31048 if (carry !== 0) {
31049 out.words[k] = carry;
31050 } else {
31051 out.length--;
ab78acc6 31052 }
8b095871
IC
31053
31054 return out.strip();
ab78acc6 31055 }
8b095871
IC
31056
31057 function jumboMulTo (self, num, out) {
31058 var fftm = new FFTM();
31059 return fftm.mulp(self, num, out);
ab78acc6 31060 }
8b095871
IC
31061
31062 BN.prototype.mulTo = function mulTo (num, out) {
31063 var res;
31064 var len = this.length + num.length;
31065 if (this.length === 10 && num.length === 10) {
31066 res = comb10MulTo(this, num, out);
31067 } else if (len < 63) {
31068 res = smallMulTo(this, num, out);
31069 } else if (len < 1024) {
31070 res = bigMulTo(this, num, out);
ab78acc6 31071 } else {
8b095871 31072 res = jumboMulTo(this, num, out);
ab78acc6 31073 }
8b095871
IC
31074
31075 return res;
31076 };
31077
31078 // Cooley-Tukey algorithm for FFT
31079 // slightly revisited to rely on looping instead of recursion
31080
31081 function FFTM (x, y) {
31082 this.x = x;
31083 this.y = y;
ab78acc6 31084 }
8b095871
IC
31085
31086 FFTM.prototype.makeRBT = function makeRBT (N) {
31087 var t = new Array(N);
31088 var l = BN.prototype._countBits(N) - 1;
31089 for (var i = 0; i < N; i++) {
31090 t[i] = this.revBin(i, l, N);
31091 }
31092
31093 return t;
31094 };
31095
31096 // Returns binary-reversed representation of `x`
31097 FFTM.prototype.revBin = function revBin (x, l, N) {
31098 if (x === 0 || x === N - 1) return x;
31099
31100 var rb = 0;
31101 for (var i = 0; i < l; i++) {
31102 rb |= (x & 1) << (l - i - 1);
31103 x >>= 1;
31104 }
31105
31106 return rb;
31107 };
31108
31109 // Performs "tweedling" phase, therefore 'emulating'
31110 // behaviour of the recursive algorithm
31111 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
31112 for (var i = 0; i < N; i++) {
31113 rtws[i] = rws[rbt[i]];
31114 itws[i] = iws[rbt[i]];
31115 }
31116 };
31117
31118 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
31119 this.permute(rbt, rws, iws, rtws, itws, N);
31120
31121 for (var s = 1; s < N; s <<= 1) {
31122 var l = s << 1;
31123
31124 var rtwdf = Math.cos(2 * Math.PI / l);
31125 var itwdf = Math.sin(2 * Math.PI / l);
31126
31127 for (var p = 0; p < N; p += l) {
31128 var rtwdf_ = rtwdf;
31129 var itwdf_ = itwdf;
31130
31131 for (var j = 0; j < s; j++) {
31132 var re = rtws[p + j];
31133 var ie = itws[p + j];
31134
31135 var ro = rtws[p + j + s];
31136 var io = itws[p + j + s];
31137
31138 var rx = rtwdf_ * ro - itwdf_ * io;
31139
31140 io = rtwdf_ * io + itwdf_ * ro;
31141 ro = rx;
31142
31143 rtws[p + j] = re + ro;
31144 itws[p + j] = ie + io;
31145
31146 rtws[p + j + s] = re - ro;
31147 itws[p + j + s] = ie - io;
31148
31149 /* jshint maxdepth : false */
31150 if (j !== l) {
31151 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
31152
31153 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
31154 rtwdf_ = rx;
31155 }
31156 }
31157 }
ab78acc6 31158 }
8b095871
IC
31159 };
31160
31161 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
31162 var N = Math.max(m, n) | 1;
31163 var odd = N & 1;
31164 var i = 0;
31165 for (N = N / 2 | 0; N; N = N >>> 1) {
31166 i++;
ab78acc6 31167 }
ebd8d4e8 31168
8b095871
IC
31169 return 1 << i + 1 + odd;
31170 };
ebd8d4e8 31171
8b095871
IC
31172 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
31173 if (N <= 1) return;
ebd8d4e8 31174
8b095871
IC
31175 for (var i = 0; i < N / 2; i++) {
31176 var t = rws[i];
ebd8d4e8 31177
8b095871
IC
31178 rws[i] = rws[N - i - 1];
31179 rws[N - i - 1] = t;
ebd8d4e8 31180
8b095871 31181 t = iws[i];
ebd8d4e8 31182
8b095871
IC
31183 iws[i] = -iws[N - i - 1];
31184 iws[N - i - 1] = -t;
31185 }
31186 };
ebd8d4e8 31187
8b095871
IC
31188 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
31189 var carry = 0;
31190 for (var i = 0; i < N / 2; i++) {
31191 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
31192 Math.round(ws[2 * i] / N) +
31193 carry;
ebd8d4e8 31194
8b095871 31195 ws[i] = w & 0x3ffffff;
ebd8d4e8 31196
8b095871
IC
31197 if (w < 0x4000000) {
31198 carry = 0;
31199 } else {
31200 carry = w / 0x4000000 | 0;
31201 }
31202 }
ebd8d4e8 31203
8b095871
IC
31204 return ws;
31205 };
ebd8d4e8 31206
8b095871
IC
31207 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
31208 var carry = 0;
31209 for (var i = 0; i < len; i++) {
31210 carry = carry + (ws[i] | 0);
ebd8d4e8 31211
8b095871
IC
31212 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
31213 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
31214 }
ebd8d4e8 31215
8b095871
IC
31216 // Pad with zeroes
31217 for (i = 2 * len; i < N; ++i) {
31218 rws[i] = 0;
31219 }
ebd8d4e8 31220
8b095871
IC
31221 assert(carry === 0);
31222 assert((carry & ~0x1fff) === 0);
31223 };
ebd8d4e8 31224
8b095871
IC
31225 FFTM.prototype.stub = function stub (N) {
31226 var ph = new Array(N);
31227 for (var i = 0; i < N; i++) {
31228 ph[i] = 0;
31229 }
ebd8d4e8 31230
8b095871
IC
31231 return ph;
31232 };
ebd8d4e8 31233
8b095871
IC
31234 FFTM.prototype.mulp = function mulp (x, y, out) {
31235 var N = 2 * this.guessLen13b(x.length, y.length);
ebd8d4e8 31236
8b095871 31237 var rbt = this.makeRBT(N);
ebd8d4e8 31238
8b095871 31239 var _ = this.stub(N);
ebd8d4e8 31240
8b095871
IC
31241 var rws = new Array(N);
31242 var rwst = new Array(N);
31243 var iwst = new Array(N);
ebd8d4e8 31244
8b095871
IC
31245 var nrws = new Array(N);
31246 var nrwst = new Array(N);
31247 var niwst = new Array(N);
ebd8d4e8 31248
8b095871
IC
31249 var rmws = out.words;
31250 rmws.length = N;
ebd8d4e8 31251
8b095871
IC
31252 this.convert13b(x.words, x.length, rws, N);
31253 this.convert13b(y.words, y.length, nrws, N);
ebd8d4e8 31254
8b095871
IC
31255 this.transform(rws, _, rwst, iwst, N, rbt);
31256 this.transform(nrws, _, nrwst, niwst, N, rbt);
ebd8d4e8 31257
8b095871
IC
31258 for (var i = 0; i < N; i++) {
31259 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
31260 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
31261 rwst[i] = rx;
31262 }
ebd8d4e8 31263
8b095871
IC
31264 this.conjugate(rwst, iwst, N);
31265 this.transform(rwst, iwst, rmws, _, N, rbt);
31266 this.conjugate(rmws, _, N);
31267 this.normalize13b(rmws, N);
ebd8d4e8 31268
8b095871
IC
31269 out.negative = x.negative ^ y.negative;
31270 out.length = x.length + y.length;
31271 return out.strip();
31272 };
ebd8d4e8 31273
8b095871
IC
31274 // Multiply `this` by `num`
31275 BN.prototype.mul = function mul (num) {
31276 var out = new BN(null);
31277 out.words = new Array(this.length + num.length);
31278 return this.mulTo(num, out);
31279 };
ab78acc6 31280
8b095871
IC
31281 // Multiply employing FFT
31282 BN.prototype.mulf = function mulf (num) {
31283 var out = new BN(null);
31284 out.words = new Array(this.length + num.length);
31285 return jumboMulTo(this, num, out);
31286 };
ebd8d4e8 31287
8b095871
IC
31288 // In-place Multiplication
31289 BN.prototype.imul = function imul (num) {
31290 return this.clone().mulTo(num, this);
31291 };
ab78acc6 31292
8b095871
IC
31293 BN.prototype.imuln = function imuln (num) {
31294 assert(typeof num === 'number');
31295 assert(num < 0x4000000);
ab78acc6 31296
8b095871
IC
31297 // Carry
31298 var carry = 0;
31299 for (var i = 0; i < this.length; i++) {
31300 var w = (this.words[i] | 0) * num;
31301 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
31302 carry >>= 26;
31303 carry += (w / 0x4000000) | 0;
31304 // NOTE: lo is 27bit maximum
31305 carry += lo >>> 26;
31306 this.words[i] = lo & 0x3ffffff;
31307 }
ab78acc6 31308
8b095871
IC
31309 if (carry !== 0) {
31310 this.words[i] = carry;
31311 this.length++;
31312 }
ab78acc6 31313
8b095871
IC
31314 return this;
31315 };
ab78acc6 31316
8b095871
IC
31317 BN.prototype.muln = function muln (num) {
31318 return this.clone().imuln(num);
31319 };
ebd8d4e8 31320
8b095871
IC
31321 // `this` * `this`
31322 BN.prototype.sqr = function sqr () {
31323 return this.mul(this);
31324 };
ebd8d4e8 31325
8b095871
IC
31326 // `this` * `this` in-place
31327 BN.prototype.isqr = function isqr () {
31328 return this.imul(this.clone());
31329 };
ab78acc6 31330
8b095871
IC
31331 // Math.pow(`this`, `num`)
31332 BN.prototype.pow = function pow (num) {
31333 var w = toBitArray(num);
31334 if (w.length === 0) return new BN(1);
ab78acc6 31335
8b095871
IC
31336 // Skip leading zeroes
31337 var res = this;
31338 for (var i = 0; i < w.length; i++, res = res.sqr()) {
31339 if (w[i] !== 0) break;
31340 }
ebd8d4e8 31341
8b095871
IC
31342 if (++i < w.length) {
31343 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
31344 if (w[i] === 0) continue;
ebd8d4e8 31345
8b095871
IC
31346 res = res.mul(q);
31347 }
ab78acc6
IC
31348 }
31349
8b095871
IC
31350 return res;
31351 };
ab78acc6 31352
8b095871
IC
31353 // Shift-left in-place
31354 BN.prototype.iushln = function iushln (bits) {
31355 assert(typeof bits === 'number' && bits >= 0);
31356 var r = bits % 26;
31357 var s = (bits - r) / 26;
31358 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
31359 var i;
31360
31361 if (r !== 0) {
31362 var carry = 0;
31363
31364 for (i = 0; i < this.length; i++) {
31365 var newCarry = this.words[i] & carryMask;
31366 var c = ((this.words[i] | 0) - newCarry) << r;
31367 this.words[i] = c | carry;
31368 carry = newCarry >>> (26 - r);
31369 }
31370
31371 if (carry) {
31372 this.words[i] = carry;
31373 this.length++;
31374 }
ab78acc6 31375 }
ebd8d4e8 31376
8b095871
IC
31377 if (s !== 0) {
31378 for (i = this.length - 1; i >= 0; i--) {
31379 this.words[i + s] = this.words[i];
31380 }
ebd8d4e8 31381
8b095871
IC
31382 for (i = 0; i < s; i++) {
31383 this.words[i] = 0;
31384 }
ebd8d4e8 31385
8b095871
IC
31386 this.length += s;
31387 }
ebd8d4e8 31388
8b095871
IC
31389 return this.strip();
31390 };
ebd8d4e8 31391
8b095871
IC
31392 BN.prototype.ishln = function ishln (bits) {
31393 // TODO(indutny): implement me
31394 assert(this.negative === 0);
31395 return this.iushln(bits);
31396 };
ebd8d4e8 31397
8b095871
IC
31398 // Shift-right in-place
31399 // NOTE: `hint` is a lowest bit before trailing zeroes
31400 // NOTE: if `extended` is present - it will be filled with destroyed bits
31401 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
31402 assert(typeof bits === 'number' && bits >= 0);
31403 var h;
31404 if (hint) {
31405 h = (hint - (hint % 26)) / 26;
31406 } else {
31407 h = 0;
31408 }
ebd8d4e8 31409
8b095871
IC
31410 var r = bits % 26;
31411 var s = Math.min((bits - r) / 26, this.length);
31412 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
31413 var maskedWords = extended;
31414
31415 h -= s;
31416 h = Math.max(0, h);
31417
31418 // Extended mode, copy masked part
31419 if (maskedWords) {
31420 for (var i = 0; i < s; i++) {
31421 maskedWords.words[i] = this.words[i];
31422 }
31423 maskedWords.length = s;
ab78acc6 31424 }
ebd8d4e8 31425
8b095871
IC
31426 if (s === 0) {
31427 // No-op, we should not move anything at all
31428 } else if (this.length > s) {
31429 this.length -= s;
31430 for (i = 0; i < this.length; i++) {
31431 this.words[i] = this.words[i + s];
31432 }
31433 } else {
31434 this.words[0] = 0;
31435 this.length = 1;
31436 }
ab78acc6 31437
8b095871
IC
31438 var carry = 0;
31439 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
31440 var word = this.words[i] | 0;
31441 this.words[i] = (carry << (26 - r)) | (word >>> r);
31442 carry = word & mask;
ab78acc6 31443 }
ebd8d4e8 31444
8b095871
IC
31445 // Push carried bits as a mask
31446 if (maskedWords && carry !== 0) {
31447 maskedWords.words[maskedWords.length++] = carry;
31448 }
31449
31450 if (this.length === 0) {
31451 this.words[0] = 0;
31452 this.length = 1;
31453 }
31454
31455 return this.strip();
31456 };
31457
31458 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
31459 // TODO(indutny): implement me
31460 assert(this.negative === 0);
31461 return this.iushrn(bits, hint, extended);
31462 };
31463
31464 // Shift-left
31465 BN.prototype.shln = function shln (bits) {
31466 return this.clone().ishln(bits);
31467 };
31468
31469 BN.prototype.ushln = function ushln (bits) {
31470 return this.clone().iushln(bits);
31471 };
31472
31473 // Shift-right
31474 BN.prototype.shrn = function shrn (bits) {
31475 return this.clone().ishrn(bits);
31476 };
ebd8d4e8 31477
8b095871
IC
31478 BN.prototype.ushrn = function ushrn (bits) {
31479 return this.clone().iushrn(bits);
31480 };
ebd8d4e8 31481
8b095871
IC
31482 // Test if n bit is set
31483 BN.prototype.testn = function testn (bit) {
31484 assert(typeof bit === 'number' && bit >= 0);
31485 var r = bit % 26;
31486 var s = (bit - r) / 26;
31487 var q = 1 << r;
ebd8d4e8 31488
8b095871
IC
31489 // Fast case: bit is much higher than all existing words
31490 if (this.length <= s) return false;
ab78acc6 31491
8b095871
IC
31492 // Check bit and return
31493 var w = this.words[s];
ab78acc6 31494
8b095871
IC
31495 return !!(w & q);
31496 };
ab78acc6 31497
8b095871
IC
31498 // Return only lowers bits of number (in-place)
31499 BN.prototype.imaskn = function imaskn (bits) {
31500 assert(typeof bits === 'number' && bits >= 0);
31501 var r = bits % 26;
31502 var s = (bits - r) / 26;
ab78acc6 31503
8b095871 31504 assert(this.negative === 0, 'imaskn works only with positive numbers');
ab78acc6 31505
8b095871
IC
31506 if (this.length <= s) {
31507 return this;
31508 }
ab78acc6 31509
8b095871
IC
31510 if (r !== 0) {
31511 s++;
31512 }
31513 this.length = Math.min(s, this.length);
ab78acc6 31514
8b095871
IC
31515 if (r !== 0) {
31516 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
31517 this.words[this.length - 1] &= mask;
31518 }
ab78acc6 31519
8b095871
IC
31520 return this.strip();
31521 };
ab78acc6 31522
8b095871
IC
31523 // Return only lowers bits of number
31524 BN.prototype.maskn = function maskn (bits) {
31525 return this.clone().imaskn(bits);
31526 };
ebd8d4e8 31527
8b095871
IC
31528 // Add plain number `num` to `this`
31529 BN.prototype.iaddn = function iaddn (num) {
31530 assert(typeof num === 'number');
31531 assert(num < 0x4000000);
31532 if (num < 0) return this.isubn(-num);
31533
31534 // Possible sign change
31535 if (this.negative !== 0) {
31536 if (this.length === 1 && (this.words[0] | 0) < num) {
31537 this.words[0] = num - (this.words[0] | 0);
31538 this.negative = 0;
31539 return this;
31540 }
ebd8d4e8 31541
8b095871
IC
31542 this.negative = 0;
31543 this.isubn(num);
31544 this.negative = 1;
31545 return this;
31546 }
ebd8d4e8 31547
8b095871
IC
31548 // Add without checks
31549 return this._iaddn(num);
31550 };
ebd8d4e8 31551
8b095871
IC
31552 BN.prototype._iaddn = function _iaddn (num) {
31553 this.words[0] += num;
ebd8d4e8 31554
8b095871
IC
31555 // Carry
31556 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
31557 this.words[i] -= 0x4000000;
31558 if (i === this.length - 1) {
31559 this.words[i + 1] = 1;
31560 } else {
31561 this.words[i + 1]++;
31562 }
31563 }
31564 this.length = Math.max(this.length, i + 1);
ebd8d4e8 31565
8b095871
IC
31566 return this;
31567 };
ebd8d4e8 31568
8b095871
IC
31569 // Subtract plain number `num` from `this`
31570 BN.prototype.isubn = function isubn (num) {
31571 assert(typeof num === 'number');
31572 assert(num < 0x4000000);
31573 if (num < 0) return this.iaddn(-num);
ebd8d4e8 31574
8b095871
IC
31575 if (this.negative !== 0) {
31576 this.negative = 0;
31577 this.iaddn(num);
31578 this.negative = 1;
31579 return this;
31580 }
ebd8d4e8 31581
8b095871 31582 this.words[0] -= num;
ab78acc6 31583
8b095871
IC
31584 if (this.length === 1 && this.words[0] < 0) {
31585 this.words[0] = -this.words[0];
31586 this.negative = 1;
31587 } else {
31588 // Carry
31589 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
31590 this.words[i] += 0x4000000;
31591 this.words[i + 1] -= 1;
31592 }
31593 }
ebd8d4e8 31594
8b095871
IC
31595 return this.strip();
31596 };
ab78acc6 31597
8b095871
IC
31598 BN.prototype.addn = function addn (num) {
31599 return this.clone().iaddn(num);
31600 };
ab78acc6 31601
8b095871
IC
31602 BN.prototype.subn = function subn (num) {
31603 return this.clone().isubn(num);
31604 };
ab78acc6 31605
8b095871
IC
31606 BN.prototype.iabs = function iabs () {
31607 this.negative = 0;
ab78acc6 31608
8b095871
IC
31609 return this;
31610 };
ab78acc6 31611
8b095871
IC
31612 BN.prototype.abs = function abs () {
31613 return this.clone().iabs();
31614 };
ab78acc6 31615
8b095871
IC
31616 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
31617 var len = num.length + shift;
31618 var i;
ab78acc6 31619
8b095871 31620 this._expand(len);
ab78acc6 31621
8b095871
IC
31622 var w;
31623 var carry = 0;
31624 for (i = 0; i < num.length; i++) {
31625 w = (this.words[i + shift] | 0) + carry;
31626 var right = (num.words[i] | 0) * mul;
31627 w -= right & 0x3ffffff;
31628 carry = (w >> 26) - ((right / 0x4000000) | 0);
31629 this.words[i + shift] = w & 0x3ffffff;
31630 }
31631 for (; i < this.length - shift; i++) {
31632 w = (this.words[i + shift] | 0) + carry;
31633 carry = w >> 26;
31634 this.words[i + shift] = w & 0x3ffffff;
31635 }
ebd8d4e8 31636
8b095871 31637 if (carry === 0) return this.strip();
ab78acc6 31638
8b095871
IC
31639 // Subtraction overflow
31640 assert(carry === -1);
31641 carry = 0;
31642 for (i = 0; i < this.length; i++) {
31643 w = -(this.words[i] | 0) + carry;
31644 carry = w >> 26;
31645 this.words[i] = w & 0x3ffffff;
31646 }
31647 this.negative = 1;
ab78acc6 31648
8b095871
IC
31649 return this.strip();
31650 };
ab78acc6 31651
8b095871
IC
31652 BN.prototype._wordDiv = function _wordDiv (num, mode) {
31653 var shift = this.length - num.length;
ebd8d4e8 31654
8b095871
IC
31655 var a = this.clone();
31656 var b = num;
ab78acc6 31657
8b095871
IC
31658 // Normalize
31659 var bhi = b.words[b.length - 1] | 0;
31660 var bhiBits = this._countBits(bhi);
31661 shift = 26 - bhiBits;
31662 if (shift !== 0) {
31663 b = b.ushln(shift);
31664 a.iushln(shift);
31665 bhi = b.words[b.length - 1] | 0;
31666 }
ebd8d4e8 31667
8b095871
IC
31668 // Initialize quotient
31669 var m = a.length - b.length;
31670 var q;
ab78acc6 31671
8b095871
IC
31672 if (mode !== 'mod') {
31673 q = new BN(null);
31674 q.length = m + 1;
31675 q.words = new Array(q.length);
31676 for (var i = 0; i < q.length; i++) {
31677 q.words[i] = 0;
31678 }
31679 }
ebd8d4e8 31680
8b095871
IC
31681 var diff = a.clone()._ishlnsubmul(b, 1, m);
31682 if (diff.negative === 0) {
31683 a = diff;
31684 if (q) {
31685 q.words[m] = 1;
31686 }
31687 }
ebd8d4e8 31688
8b095871
IC
31689 for (var j = m - 1; j >= 0; j--) {
31690 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
31691 (a.words[b.length + j - 1] | 0);
ebd8d4e8 31692
8b095871
IC
31693 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
31694 // (0x7ffffff)
31695 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
ebd8d4e8 31696
8b095871
IC
31697 a._ishlnsubmul(b, qj, j);
31698 while (a.negative !== 0) {
31699 qj--;
31700 a.negative = 0;
31701 a._ishlnsubmul(b, 1, j);
31702 if (!a.isZero()) {
31703 a.negative ^= 1;
31704 }
31705 }
31706 if (q) {
31707 q.words[j] = qj;
31708 }
31709 }
31710 if (q) {
31711 q.strip();
31712 }
31713 a.strip();
ebd8d4e8 31714
8b095871
IC
31715 // Denormalize
31716 if (mode !== 'div' && shift !== 0) {
31717 a.iushrn(shift);
31718 }
ebd8d4e8 31719
8b095871
IC
31720 return {
31721 div: q || null,
31722 mod: a
31723 };
31724 };
ebd8d4e8 31725
8b095871
IC
31726 // NOTE: 1) `mode` can be set to `mod` to request mod only,
31727 // to `div` to request div only, or be absent to
31728 // request both div & mod
31729 // 2) `positive` is true if unsigned mod is requested
31730 BN.prototype.divmod = function divmod (num, mode, positive) {
31731 assert(!num.isZero());
31732
31733 if (this.isZero()) {
31734 return {
31735 div: new BN(0),
31736 mod: new BN(0)
31737 };
31738 }
ebd8d4e8 31739
8b095871
IC
31740 var div, mod, res;
31741 if (this.negative !== 0 && num.negative === 0) {
31742 res = this.neg().divmod(num, mode);
ebd8d4e8 31743
8b095871
IC
31744 if (mode !== 'mod') {
31745 div = res.div.neg();
31746 }
ebd8d4e8 31747
8b095871
IC
31748 if (mode !== 'div') {
31749 mod = res.mod.neg();
31750 if (positive && mod.negative !== 0) {
31751 mod.iadd(num);
31752 }
31753 }
ebd8d4e8 31754
8b095871
IC
31755 return {
31756 div: div,
31757 mod: mod
31758 };
31759 }
ebd8d4e8 31760
8b095871
IC
31761 if (this.negative === 0 && num.negative !== 0) {
31762 res = this.divmod(num.neg(), mode);
ebd8d4e8 31763
8b095871
IC
31764 if (mode !== 'mod') {
31765 div = res.div.neg();
31766 }
ebd8d4e8 31767
8b095871
IC
31768 return {
31769 div: div,
31770 mod: res.mod
31771 };
31772 }
ebd8d4e8 31773
8b095871
IC
31774 if ((this.negative & num.negative) !== 0) {
31775 res = this.neg().divmod(num.neg(), mode);
ebd8d4e8 31776
8b095871
IC
31777 if (mode !== 'div') {
31778 mod = res.mod.neg();
31779 if (positive && mod.negative !== 0) {
31780 mod.isub(num);
31781 }
31782 }
ebd8d4e8 31783
8b095871
IC
31784 return {
31785 div: res.div,
31786 mod: mod
31787 };
31788 }
ebd8d4e8 31789
8b095871 31790 // Both numbers are positive at this point
ebd8d4e8 31791
8b095871
IC
31792 // Strip both numbers to approximate shift value
31793 if (num.length > this.length || this.cmp(num) < 0) {
31794 return {
31795 div: new BN(0),
31796 mod: this
31797 };
31798 }
ebd8d4e8 31799
8b095871
IC
31800 // Very short reduction
31801 if (num.length === 1) {
31802 if (mode === 'div') {
31803 return {
31804 div: this.divn(num.words[0]),
31805 mod: null
31806 };
31807 }
ebd8d4e8 31808
8b095871
IC
31809 if (mode === 'mod') {
31810 return {
31811 div: null,
31812 mod: new BN(this.modn(num.words[0]))
31813 };
31814 }
ebd8d4e8 31815
8b095871
IC
31816 return {
31817 div: this.divn(num.words[0]),
31818 mod: new BN(this.modn(num.words[0]))
31819 };
31820 }
ebd8d4e8 31821
8b095871
IC
31822 return this._wordDiv(num, mode);
31823 };
ab78acc6 31824
8b095871
IC
31825 // Find `this` / `num`
31826 BN.prototype.div = function div (num) {
31827 return this.divmod(num, 'div', false).div;
31828 };
ab78acc6 31829
8b095871
IC
31830 // Find `this` % `num`
31831 BN.prototype.mod = function mod (num) {
31832 return this.divmod(num, 'mod', false).mod;
31833 };
ab78acc6 31834
8b095871
IC
31835 BN.prototype.umod = function umod (num) {
31836 return this.divmod(num, 'mod', true).mod;
31837 };
ebd8d4e8 31838
8b095871
IC
31839 // Find Round(`this` / `num`)
31840 BN.prototype.divRound = function divRound (num) {
31841 var dm = this.divmod(num);
ebd8d4e8 31842
8b095871
IC
31843 // Fast case - exact division
31844 if (dm.mod.isZero()) return dm.div;
ebd8d4e8 31845
8b095871 31846 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
ebd8d4e8 31847
8b095871
IC
31848 var half = num.ushrn(1);
31849 var r2 = num.andln(1);
31850 var cmp = mod.cmp(half);
ebd8d4e8 31851
8b095871
IC
31852 // Round down
31853 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
ebd8d4e8 31854
8b095871
IC
31855 // Round up
31856 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
31857 };
ab78acc6 31858
8b095871
IC
31859 BN.prototype.modn = function modn (num) {
31860 assert(num <= 0x3ffffff);
31861 var p = (1 << 26) % num;
ab78acc6 31862
8b095871
IC
31863 var acc = 0;
31864 for (var i = this.length - 1; i >= 0; i--) {
31865 acc = (p * acc + (this.words[i] | 0)) % num;
ab78acc6 31866 }
ab78acc6 31867
8b095871
IC
31868 return acc;
31869 };
31870
31871 // In-place division by number
31872 BN.prototype.idivn = function idivn (num) {
31873 assert(num <= 0x3ffffff);
31874
31875 var carry = 0;
31876 for (var i = this.length - 1; i >= 0; i--) {
31877 var w = (this.words[i] | 0) + carry * 0x4000000;
31878 this.words[i] = (w / num) | 0;
31879 carry = w % num;
ebd8d4e8 31880 }
ebd8d4e8 31881
8b095871
IC
31882 return this.strip();
31883 };
ab78acc6 31884
8b095871
IC
31885 BN.prototype.divn = function divn (num) {
31886 return this.clone().idivn(num);
31887 };
ebd8d4e8 31888
8b095871
IC
31889 BN.prototype.egcd = function egcd (p) {
31890 assert(p.negative === 0);
31891 assert(!p.isZero());
ebd8d4e8 31892
8b095871
IC
31893 var x = this;
31894 var y = p.clone();
31895
31896 if (x.negative !== 0) {
31897 x = x.umod(p);
31898 } else {
31899 x = x.clone();
31900 }
31901
31902 // A * x + B * y = x
31903 var A = new BN(1);
31904 var B = new BN(0);
31905
31906 // C * x + D * y = y
31907 var C = new BN(0);
31908 var D = new BN(1);
31909
31910 var g = 0;
31911
31912 while (x.isEven() && y.isEven()) {
31913 x.iushrn(1);
31914 y.iushrn(1);
31915 ++g;
31916 }
ebd8d4e8 31917
8b095871
IC
31918 var yp = y.clone();
31919 var xp = x.clone();
ebd8d4e8 31920
8b095871
IC
31921 while (!x.isZero()) {
31922 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
31923 if (i > 0) {
31924 x.iushrn(i);
31925 while (i-- > 0) {
31926 if (A.isOdd() || B.isOdd()) {
31927 A.iadd(yp);
31928 B.isub(xp);
31929 }
ebd8d4e8 31930
8b095871
IC
31931 A.iushrn(1);
31932 B.iushrn(1);
31933 }
31934 }
ebd8d4e8 31935
8b095871
IC
31936 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
31937 if (j > 0) {
31938 y.iushrn(j);
31939 while (j-- > 0) {
31940 if (C.isOdd() || D.isOdd()) {
31941 C.iadd(yp);
31942 D.isub(xp);
31943 }
ab78acc6 31944
8b095871
IC
31945 C.iushrn(1);
31946 D.iushrn(1);
31947 }
31948 }
ebd8d4e8 31949
8b095871
IC
31950 if (x.cmp(y) >= 0) {
31951 x.isub(y);
31952 A.isub(C);
31953 B.isub(D);
31954 } else {
31955 y.isub(x);
31956 C.isub(A);
31957 D.isub(B);
31958 }
31959 }
ebd8d4e8 31960
8b095871
IC
31961 return {
31962 a: C,
31963 b: D,
31964 gcd: y.iushln(g)
31965 };
31966 };
ebd8d4e8 31967
8b095871
IC
31968 // This is reduced incarnation of the binary EEA
31969 // above, designated to invert members of the
31970 // _prime_ fields F(p) at a maximal speed
31971 BN.prototype._invmp = function _invmp (p) {
31972 assert(p.negative === 0);
31973 assert(!p.isZero());
ebd8d4e8 31974
8b095871
IC
31975 var a = this;
31976 var b = p.clone();
ebd8d4e8 31977
8b095871
IC
31978 if (a.negative !== 0) {
31979 a = a.umod(p);
31980 } else {
31981 a = a.clone();
31982 }
ebd8d4e8 31983
8b095871
IC
31984 var x1 = new BN(1);
31985 var x2 = new BN(0);
ebd8d4e8 31986
8b095871 31987 var delta = b.clone();
ebd8d4e8 31988
8b095871
IC
31989 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
31990 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
31991 if (i > 0) {
31992 a.iushrn(i);
31993 while (i-- > 0) {
31994 if (x1.isOdd()) {
31995 x1.iadd(delta);
31996 }
ebd8d4e8 31997
8b095871
IC
31998 x1.iushrn(1);
31999 }
32000 }
ab78acc6 32001
8b095871
IC
32002 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
32003 if (j > 0) {
32004 b.iushrn(j);
32005 while (j-- > 0) {
32006 if (x2.isOdd()) {
32007 x2.iadd(delta);
32008 }
ebd8d4e8 32009
8b095871
IC
32010 x2.iushrn(1);
32011 }
32012 }
ebd8d4e8 32013
8b095871
IC
32014 if (a.cmp(b) >= 0) {
32015 a.isub(b);
32016 x1.isub(x2);
32017 } else {
32018 b.isub(a);
32019 x2.isub(x1);
32020 }
32021 }
ebd8d4e8 32022
8b095871
IC
32023 var res;
32024 if (a.cmpn(1) === 0) {
32025 res = x1;
32026 } else {
32027 res = x2;
32028 }
ebd8d4e8 32029
8b095871
IC
32030 if (res.cmpn(0) < 0) {
32031 res.iadd(p);
ab78acc6
IC
32032 }
32033
8b095871
IC
32034 return res;
32035 };
ebd8d4e8 32036
8b095871
IC
32037 BN.prototype.gcd = function gcd (num) {
32038 if (this.isZero()) return num.abs();
32039 if (num.isZero()) return this.abs();
32040
32041 var a = this.clone();
32042 var b = num.clone();
32043 a.negative = 0;
32044 b.negative = 0;
32045
32046 // Remove common factor of two
32047 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
32048 a.iushrn(1);
32049 b.iushrn(1);
ab78acc6 32050 }
ab78acc6 32051
8b095871
IC
32052 do {
32053 while (a.isEven()) {
32054 a.iushrn(1);
32055 }
32056 while (b.isEven()) {
32057 b.iushrn(1);
32058 }
ebd8d4e8 32059
8b095871
IC
32060 var r = a.cmp(b);
32061 if (r < 0) {
32062 // Swap `a` and `b` to make `a` always bigger than `b`
32063 var t = a;
32064 a = b;
32065 b = t;
32066 } else if (r === 0 || b.cmpn(1) === 0) {
32067 break;
32068 }
ab78acc6 32069
8b095871
IC
32070 a.isub(b);
32071 } while (true);
ab78acc6 32072
8b095871
IC
32073 return b.iushln(shift);
32074 };
ab78acc6 32075
8b095871
IC
32076 // Invert number in the field F(num)
32077 BN.prototype.invm = function invm (num) {
32078 return this.egcd(num).a.umod(num);
32079 };
ebd8d4e8 32080
8b095871
IC
32081 BN.prototype.isEven = function isEven () {
32082 return (this.words[0] & 1) === 0;
32083 };
ab78acc6 32084
8b095871
IC
32085 BN.prototype.isOdd = function isOdd () {
32086 return (this.words[0] & 1) === 1;
32087 };
ebd8d4e8 32088
8b095871
IC
32089 // And first word and num
32090 BN.prototype.andln = function andln (num) {
32091 return this.words[0] & num;
32092 };
ebd8d4e8 32093
8b095871
IC
32094 // Increment at the bit position in-line
32095 BN.prototype.bincn = function bincn (bit) {
32096 assert(typeof bit === 'number');
32097 var r = bit % 26;
32098 var s = (bit - r) / 26;
32099 var q = 1 << r;
32100
32101 // Fast case: bit is much higher than all existing words
32102 if (this.length <= s) {
32103 this._expand(s + 1);
32104 this.words[s] |= q;
32105 return this;
32106 }
ebd8d4e8 32107
8b095871
IC
32108 // Add bit and propagate, if needed
32109 var carry = q;
32110 for (var i = s; carry !== 0 && i < this.length; i++) {
32111 var w = this.words[i] | 0;
32112 w += carry;
32113 carry = w >>> 26;
32114 w &= 0x3ffffff;
32115 this.words[i] = w;
32116 }
32117 if (carry !== 0) {
32118 this.words[i] = carry;
32119 this.length++;
32120 }
32121 return this;
32122 };
ebd8d4e8 32123
8b095871
IC
32124 BN.prototype.isZero = function isZero () {
32125 return this.length === 1 && this.words[0] === 0;
32126 };
ebd8d4e8 32127
8b095871
IC
32128 BN.prototype.cmpn = function cmpn (num) {
32129 var negative = num < 0;
ebd8d4e8 32130
8b095871
IC
32131 if (this.negative !== 0 && !negative) return -1;
32132 if (this.negative === 0 && negative) return 1;
ab78acc6 32133
8b095871 32134 this.strip();
ab78acc6 32135
8b095871
IC
32136 var res;
32137 if (this.length > 1) {
32138 res = 1;
32139 } else {
32140 if (negative) {
32141 num = -num;
32142 }
ebd8d4e8 32143
8b095871 32144 assert(num <= 0x3ffffff, 'Number is too big');
ebd8d4e8 32145
8b095871
IC
32146 var w = this.words[0] | 0;
32147 res = w === num ? 0 : w < num ? -1 : 1;
32148 }
32149 if (this.negative !== 0) return -res | 0;
32150 return res;
32151 };
ebd8d4e8 32152
8b095871
IC
32153 // Compare two numbers and return:
32154 // 1 - if `this` > `num`
32155 // 0 - if `this` == `num`
32156 // -1 - if `this` < `num`
32157 BN.prototype.cmp = function cmp (num) {
32158 if (this.negative !== 0 && num.negative === 0) return -1;
32159 if (this.negative === 0 && num.negative !== 0) return 1;
32160
32161 var res = this.ucmp(num);
32162 if (this.negative !== 0) return -res | 0;
32163 return res;
32164 };
ebd8d4e8 32165
8b095871
IC
32166 // Unsigned comparison
32167 BN.prototype.ucmp = function ucmp (num) {
32168 // At this point both numbers have the same sign
32169 if (this.length > num.length) return 1;
32170 if (this.length < num.length) return -1;
32171
32172 var res = 0;
32173 for (var i = this.length - 1; i >= 0; i--) {
32174 var a = this.words[i] | 0;
32175 var b = num.words[i] | 0;
32176
32177 if (a === b) continue;
32178 if (a < b) {
32179 res = -1;
32180 } else if (a > b) {
32181 res = 1;
32182 }
32183 break;
32184 }
32185 return res;
32186 };
ebd8d4e8 32187
8b095871
IC
32188 BN.prototype.gtn = function gtn (num) {
32189 return this.cmpn(num) === 1;
32190 };
ebd8d4e8 32191
8b095871
IC
32192 BN.prototype.gt = function gt (num) {
32193 return this.cmp(num) === 1;
32194 };
ebd8d4e8 32195
8b095871
IC
32196 BN.prototype.gten = function gten (num) {
32197 return this.cmpn(num) >= 0;
32198 };
ab78acc6 32199
8b095871
IC
32200 BN.prototype.gte = function gte (num) {
32201 return this.cmp(num) >= 0;
32202 };
ab78acc6 32203
8b095871
IC
32204 BN.prototype.ltn = function ltn (num) {
32205 return this.cmpn(num) === -1;
32206 };
ab78acc6 32207
8b095871
IC
32208 BN.prototype.lt = function lt (num) {
32209 return this.cmp(num) === -1;
32210 };
ebd8d4e8 32211
8b095871
IC
32212 BN.prototype.lten = function lten (num) {
32213 return this.cmpn(num) <= 0;
32214 };
ab78acc6 32215
8b095871
IC
32216 BN.prototype.lte = function lte (num) {
32217 return this.cmp(num) <= 0;
32218 };
ab78acc6 32219
8b095871
IC
32220 BN.prototype.eqn = function eqn (num) {
32221 return this.cmpn(num) === 0;
32222 };
ab78acc6 32223
8b095871
IC
32224 BN.prototype.eq = function eq (num) {
32225 return this.cmp(num) === 0;
32226 };
ebd8d4e8 32227
8b095871
IC
32228 //
32229 // A reduce context, could be using montgomery or something better, depending
32230 // on the `m` itself.
32231 //
32232 BN.red = function red (num) {
32233 return new Red(num);
32234 };
ab78acc6 32235
8b095871
IC
32236 BN.prototype.toRed = function toRed (ctx) {
32237 assert(!this.red, 'Already a number in reduction context');
32238 assert(this.negative === 0, 'red works only with positives');
32239 return ctx.convertTo(this)._forceRed(ctx);
32240 };
32241
32242 BN.prototype.fromRed = function fromRed () {
32243 assert(this.red, 'fromRed works only with numbers in reduction context');
32244 return this.red.convertFrom(this);
32245 };
32246
32247 BN.prototype._forceRed = function _forceRed (ctx) {
32248 this.red = ctx;
32249 return this;
32250 };
32251
32252 BN.prototype.forceRed = function forceRed (ctx) {
32253 assert(!this.red, 'Already a number in reduction context');
32254 return this._forceRed(ctx);
32255 };
32256
32257 BN.prototype.redAdd = function redAdd (num) {
32258 assert(this.red, 'redAdd works only with red numbers');
32259 return this.red.add(this, num);
32260 };
ebd8d4e8 32261
8b095871
IC
32262 BN.prototype.redIAdd = function redIAdd (num) {
32263 assert(this.red, 'redIAdd works only with red numbers');
32264 return this.red.iadd(this, num);
32265 };
ab78acc6 32266
8b095871
IC
32267 BN.prototype.redSub = function redSub (num) {
32268 assert(this.red, 'redSub works only with red numbers');
32269 return this.red.sub(this, num);
32270 };
ab78acc6 32271
8b095871
IC
32272 BN.prototype.redISub = function redISub (num) {
32273 assert(this.red, 'redISub works only with red numbers');
32274 return this.red.isub(this, num);
32275 };
ebd8d4e8 32276
8b095871
IC
32277 BN.prototype.redShl = function redShl (num) {
32278 assert(this.red, 'redShl works only with red numbers');
32279 return this.red.shl(this, num);
32280 };
ebd8d4e8 32281
8b095871
IC
32282 BN.prototype.redMul = function redMul (num) {
32283 assert(this.red, 'redMul works only with red numbers');
32284 this.red._verify2(this, num);
32285 return this.red.mul(this, num);
32286 };
ebd8d4e8 32287
8b095871
IC
32288 BN.prototype.redIMul = function redIMul (num) {
32289 assert(this.red, 'redMul works only with red numbers');
32290 this.red._verify2(this, num);
32291 return this.red.imul(this, num);
32292 };
ebd8d4e8 32293
8b095871
IC
32294 BN.prototype.redSqr = function redSqr () {
32295 assert(this.red, 'redSqr works only with red numbers');
32296 this.red._verify1(this);
32297 return this.red.sqr(this);
32298 };
ebd8d4e8 32299
8b095871
IC
32300 BN.prototype.redISqr = function redISqr () {
32301 assert(this.red, 'redISqr works only with red numbers');
32302 this.red._verify1(this);
32303 return this.red.isqr(this);
32304 };
ebd8d4e8 32305
8b095871
IC
32306 // Square root over p
32307 BN.prototype.redSqrt = function redSqrt () {
32308 assert(this.red, 'redSqrt works only with red numbers');
32309 this.red._verify1(this);
32310 return this.red.sqrt(this);
32311 };
ebd8d4e8 32312
8b095871
IC
32313 BN.prototype.redInvm = function redInvm () {
32314 assert(this.red, 'redInvm works only with red numbers');
32315 this.red._verify1(this);
32316 return this.red.invm(this);
32317 };
ebd8d4e8 32318
8b095871
IC
32319 // Return negative clone of `this` % `red modulo`
32320 BN.prototype.redNeg = function redNeg () {
32321 assert(this.red, 'redNeg works only with red numbers');
32322 this.red._verify1(this);
32323 return this.red.neg(this);
32324 };
ebd8d4e8 32325
8b095871
IC
32326 BN.prototype.redPow = function redPow (num) {
32327 assert(this.red && !num.red, 'redPow(normalNum)');
32328 this.red._verify1(this);
32329 return this.red.pow(this, num);
32330 };
ebd8d4e8 32331
8b095871
IC
32332 // Prime numbers with efficient reduction
32333 var primes = {
32334 k256: null,
32335 p224: null,
32336 p192: null,
32337 p25519: null
32338 };
ebd8d4e8 32339
8b095871
IC
32340 // Pseudo-Mersenne prime
32341 function MPrime (name, p) {
32342 // P = 2 ^ N - K
32343 this.name = name;
32344 this.p = new BN(p, 16);
32345 this.n = this.p.bitLength();
32346 this.k = new BN(1).iushln(this.n).isub(this.p);
ebd8d4e8 32347
8b095871
IC
32348 this.tmp = this._tmp();
32349 }
ebd8d4e8 32350
8b095871
IC
32351 MPrime.prototype._tmp = function _tmp () {
32352 var tmp = new BN(null);
32353 tmp.words = new Array(Math.ceil(this.n / 13));
32354 return tmp;
32355 };
ebd8d4e8 32356
8b095871
IC
32357 MPrime.prototype.ireduce = function ireduce (num) {
32358 // Assumes that `num` is less than `P^2`
32359 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
32360 var r = num;
32361 var rlen;
ebd8d4e8 32362
8b095871
IC
32363 do {
32364 this.split(r, this.tmp);
32365 r = this.imulK(r);
32366 r = r.iadd(this.tmp);
32367 rlen = r.bitLength();
32368 } while (rlen > this.n);
32369
32370 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
32371 if (cmp === 0) {
32372 r.words[0] = 0;
32373 r.length = 1;
32374 } else if (cmp > 0) {
32375 r.isub(this.p);
32376 } else {
32377 r.strip();
32378 }
ebd8d4e8 32379
8b095871
IC
32380 return r;
32381 };
ebd8d4e8 32382
8b095871
IC
32383 MPrime.prototype.split = function split (input, out) {
32384 input.iushrn(this.n, 0, out);
32385 };
ebd8d4e8 32386
8b095871
IC
32387 MPrime.prototype.imulK = function imulK (num) {
32388 return num.imul(this.k);
32389 };
ebd8d4e8 32390
8b095871
IC
32391 function K256 () {
32392 MPrime.call(
32393 this,
32394 'k256',
32395 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
32396 }
32397 inherits(K256, MPrime);
ebd8d4e8 32398
8b095871
IC
32399 K256.prototype.split = function split (input, output) {
32400 // 256 = 9 * 26 + 22
32401 var mask = 0x3fffff;
ebd8d4e8 32402
8b095871
IC
32403 var outLen = Math.min(input.length, 9);
32404 for (var i = 0; i < outLen; i++) {
32405 output.words[i] = input.words[i];
32406 }
32407 output.length = outLen;
ebd8d4e8 32408
8b095871
IC
32409 if (input.length <= 9) {
32410 input.words[0] = 0;
32411 input.length = 1;
32412 return;
32413 }
ebd8d4e8 32414
8b095871
IC
32415 // Shift by 9 limbs
32416 var prev = input.words[9];
32417 output.words[output.length++] = prev & mask;
ebd8d4e8 32418
8b095871
IC
32419 for (i = 10; i < input.length; i++) {
32420 var next = input.words[i] | 0;
32421 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
32422 prev = next;
32423 }
32424 prev >>>= 22;
32425 input.words[i - 10] = prev;
32426 if (prev === 0 && input.length > 10) {
32427 input.length -= 10;
32428 } else {
32429 input.length -= 9;
32430 }
32431 };
ebd8d4e8 32432
8b095871
IC
32433 K256.prototype.imulK = function imulK (num) {
32434 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
32435 num.words[num.length] = 0;
32436 num.words[num.length + 1] = 0;
32437 num.length += 2;
32438
32439 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
32440 var lo = 0;
32441 for (var i = 0; i < num.length; i++) {
32442 var w = num.words[i] | 0;
32443 lo += w * 0x3d1;
32444 num.words[i] = lo & 0x3ffffff;
32445 lo = w * 0x40 + ((lo / 0x4000000) | 0);
32446 }
32447
32448 // Fast length reduction
32449 if (num.words[num.length - 1] === 0) {
32450 num.length--;
32451 if (num.words[num.length - 1] === 0) {
32452 num.length--;
32453 }
32454 }
32455 return num;
32456 };
ebd8d4e8 32457
8b095871
IC
32458 function P224 () {
32459 MPrime.call(
32460 this,
32461 'p224',
32462 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
32463 }
32464 inherits(P224, MPrime);
ebd8d4e8 32465
8b095871
IC
32466 function P192 () {
32467 MPrime.call(
32468 this,
32469 'p192',
32470 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
32471 }
32472 inherits(P192, MPrime);
ebd8d4e8 32473
8b095871
IC
32474 function P25519 () {
32475 // 2 ^ 255 - 19
32476 MPrime.call(
32477 this,
32478 '25519',
32479 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
32480 }
32481 inherits(P25519, MPrime);
ebd8d4e8 32482
8b095871
IC
32483 P25519.prototype.imulK = function imulK (num) {
32484 // K = 0x13
32485 var carry = 0;
32486 for (var i = 0; i < num.length; i++) {
32487 var hi = (num.words[i] | 0) * 0x13 + carry;
32488 var lo = hi & 0x3ffffff;
32489 hi >>>= 26;
ebd8d4e8 32490
8b095871
IC
32491 num.words[i] = lo;
32492 carry = hi;
32493 }
32494 if (carry !== 0) {
32495 num.words[num.length++] = carry;
32496 }
32497 return num;
32498 };
ebd8d4e8 32499
8b095871
IC
32500 // Exported mostly for testing purposes, use plain name instead
32501 BN._prime = function prime (name) {
32502 // Cached version of prime
32503 if (primes[name]) return primes[name];
32504
32505 var prime;
32506 if (name === 'k256') {
32507 prime = new K256();
32508 } else if (name === 'p224') {
32509 prime = new P224();
32510 } else if (name === 'p192') {
32511 prime = new P192();
32512 } else if (name === 'p25519') {
32513 prime = new P25519();
32514 } else {
32515 throw new Error('Unknown prime ' + name);
32516 }
32517 primes[name] = prime;
ab78acc6 32518
8b095871
IC
32519 return prime;
32520 };
ab78acc6 32521
8b095871
IC
32522 //
32523 // Base reduction engine
32524 //
32525 function Red (m) {
32526 if (typeof m === 'string') {
32527 var prime = BN._prime(m);
32528 this.m = prime.p;
32529 this.prime = prime;
32530 } else {
32531 assert(m.gtn(1), 'modulus must be greater than 1');
32532 this.m = m;
32533 this.prime = null;
32534 }
32535 }
ab78acc6 32536
8b095871
IC
32537 Red.prototype._verify1 = function _verify1 (a) {
32538 assert(a.negative === 0, 'red works only with positives');
32539 assert(a.red, 'red works only with red numbers');
32540 };
ab78acc6 32541
8b095871
IC
32542 Red.prototype._verify2 = function _verify2 (a, b) {
32543 assert((a.negative | b.negative) === 0, 'red works only with positives');
32544 assert(a.red && a.red === b.red,
32545 'red works only with red numbers');
32546 };
ebd8d4e8 32547
8b095871
IC
32548 Red.prototype.imod = function imod (a) {
32549 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
32550 return a.umod(this.m)._forceRed(this);
32551 };
ebd8d4e8 32552
8b095871
IC
32553 Red.prototype.neg = function neg (a) {
32554 if (a.isZero()) {
32555 return a.clone();
32556 }
ebd8d4e8 32557
8b095871
IC
32558 return this.m.sub(a)._forceRed(this);
32559 };
ab78acc6 32560
8b095871
IC
32561 Red.prototype.add = function add (a, b) {
32562 this._verify2(a, b);
ab78acc6 32563
8b095871
IC
32564 var res = a.add(b);
32565 if (res.cmp(this.m) >= 0) {
32566 res.isub(this.m);
32567 }
32568 return res._forceRed(this);
32569 };
ab78acc6 32570
8b095871
IC
32571 Red.prototype.iadd = function iadd (a, b) {
32572 this._verify2(a, b);
ab78acc6 32573
8b095871
IC
32574 var res = a.iadd(b);
32575 if (res.cmp(this.m) >= 0) {
32576 res.isub(this.m);
32577 }
32578 return res;
32579 };
ab78acc6 32580
8b095871
IC
32581 Red.prototype.sub = function sub (a, b) {
32582 this._verify2(a, b);
ab78acc6 32583
8b095871
IC
32584 var res = a.sub(b);
32585 if (res.cmpn(0) < 0) {
32586 res.iadd(this.m);
32587 }
32588 return res._forceRed(this);
32589 };
ab78acc6 32590
8b095871
IC
32591 Red.prototype.isub = function isub (a, b) {
32592 this._verify2(a, b);
ebd8d4e8 32593
8b095871
IC
32594 var res = a.isub(b);
32595 if (res.cmpn(0) < 0) {
32596 res.iadd(this.m);
32597 }
32598 return res;
32599 };
ebd8d4e8 32600
8b095871
IC
32601 Red.prototype.shl = function shl (a, num) {
32602 this._verify1(a);
32603 return this.imod(a.ushln(num));
32604 };
ebd8d4e8 32605
8b095871
IC
32606 Red.prototype.imul = function imul (a, b) {
32607 this._verify2(a, b);
32608 return this.imod(a.imul(b));
32609 };
ebd8d4e8 32610
8b095871
IC
32611 Red.prototype.mul = function mul (a, b) {
32612 this._verify2(a, b);
32613 return this.imod(a.mul(b));
32614 };
ebd8d4e8 32615
8b095871
IC
32616 Red.prototype.isqr = function isqr (a) {
32617 return this.imul(a, a.clone());
32618 };
32619
32620 Red.prototype.sqr = function sqr (a) {
32621 return this.mul(a, a);
32622 };
ebd8d4e8 32623
8b095871
IC
32624 Red.prototype.sqrt = function sqrt (a) {
32625 if (a.isZero()) return a.clone();
ebd8d4e8 32626
8b095871
IC
32627 var mod3 = this.m.andln(3);
32628 assert(mod3 % 2 === 1);
ebd8d4e8 32629
8b095871
IC
32630 // Fast case
32631 if (mod3 === 3) {
32632 var pow = this.m.add(new BN(1)).iushrn(2);
32633 return this.pow(a, pow);
32634 }
ebd8d4e8 32635
8b095871
IC
32636 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
32637 //
32638 // Find Q and S, that Q * 2 ^ S = (P - 1)
32639 var q = this.m.subn(1);
32640 var s = 0;
32641 while (!q.isZero() && q.andln(1) === 0) {
32642 s++;
32643 q.iushrn(1);
32644 }
32645 assert(!q.isZero());
ebd8d4e8 32646
8b095871
IC
32647 var one = new BN(1).toRed(this);
32648 var nOne = one.redNeg();
ebd8d4e8 32649
8b095871
IC
32650 // Find quadratic non-residue
32651 // NOTE: Max is such because of generalized Riemann hypothesis.
32652 var lpow = this.m.subn(1).iushrn(1);
32653 var z = this.m.bitLength();
32654 z = new BN(2 * z * z).toRed(this);
ebd8d4e8 32655
8b095871
IC
32656 while (this.pow(z, lpow).cmp(nOne) !== 0) {
32657 z.redIAdd(nOne);
32658 }
ebd8d4e8 32659
8b095871
IC
32660 var c = this.pow(z, q);
32661 var r = this.pow(a, q.addn(1).iushrn(1));
32662 var t = this.pow(a, q);
32663 var m = s;
32664 while (t.cmp(one) !== 0) {
32665 var tmp = t;
32666 for (var i = 0; tmp.cmp(one) !== 0; i++) {
32667 tmp = tmp.redSqr();
32668 }
32669 assert(i < m);
32670 var b = this.pow(c, new BN(1).iushln(m - i - 1));
ebd8d4e8 32671
8b095871
IC
32672 r = r.redMul(b);
32673 c = b.redSqr();
32674 t = t.redMul(c);
32675 m = i;
32676 }
ebd8d4e8 32677
8b095871
IC
32678 return r;
32679 };
ebd8d4e8 32680
8b095871
IC
32681 Red.prototype.invm = function invm (a) {
32682 var inv = a._invmp(this.m);
32683 if (inv.negative !== 0) {
32684 inv.negative = 0;
32685 return this.imod(inv).redNeg();
32686 } else {
32687 return this.imod(inv);
32688 }
32689 };
ebd8d4e8 32690
8b095871
IC
32691 Red.prototype.pow = function pow (a, num) {
32692 if (num.isZero()) return new BN(1);
32693 if (num.cmpn(1) === 0) return a.clone();
ebd8d4e8 32694
8b095871
IC
32695 var windowSize = 4;
32696 var wnd = new Array(1 << windowSize);
32697 wnd[0] = new BN(1).toRed(this);
32698 wnd[1] = a;
32699 for (var i = 2; i < wnd.length; i++) {
32700 wnd[i] = this.mul(wnd[i - 1], a);
32701 }
ebd8d4e8 32702
8b095871
IC
32703 var res = wnd[0];
32704 var current = 0;
32705 var currentLen = 0;
32706 var start = num.bitLength() % 26;
32707 if (start === 0) {
32708 start = 26;
32709 }
ebd8d4e8 32710
8b095871
IC
32711 for (i = num.length - 1; i >= 0; i--) {
32712 var word = num.words[i];
32713 for (var j = start - 1; j >= 0; j--) {
32714 var bit = (word >> j) & 1;
32715 if (res !== wnd[0]) {
32716 res = this.sqr(res);
32717 }
ebd8d4e8 32718
8b095871
IC
32719 if (bit === 0 && current === 0) {
32720 currentLen = 0;
32721 continue;
32722 }
ebd8d4e8 32723
8b095871
IC
32724 current <<= 1;
32725 current |= bit;
32726 currentLen++;
32727 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
ebd8d4e8 32728
8b095871
IC
32729 res = this.mul(res, wnd[current]);
32730 currentLen = 0;
32731 current = 0;
32732 }
32733 start = 26;
32734 }
ebd8d4e8 32735
8b095871
IC
32736 return res;
32737 };
ebd8d4e8 32738
8b095871
IC
32739 Red.prototype.convertTo = function convertTo (num) {
32740 var r = num.umod(this.m);
ebd8d4e8 32741
8b095871
IC
32742 return r === num ? r.clone() : r;
32743 };
ebd8d4e8 32744
8b095871
IC
32745 Red.prototype.convertFrom = function convertFrom (num) {
32746 var res = num.clone();
32747 res.red = null;
32748 return res;
32749 };
ebd8d4e8 32750
8b095871
IC
32751 //
32752 // Montgomery method engine
32753 //
ebd8d4e8 32754
8b095871
IC
32755 BN.mont = function mont (num) {
32756 return new Mont(num);
32757 };
ebd8d4e8 32758
8b095871
IC
32759 function Mont (m) {
32760 Red.call(this, m);
ebd8d4e8 32761
8b095871
IC
32762 this.shift = this.m.bitLength();
32763 if (this.shift % 26 !== 0) {
32764 this.shift += 26 - (this.shift % 26);
32765 }
ebd8d4e8 32766
8b095871
IC
32767 this.r = new BN(1).iushln(this.shift);
32768 this.r2 = this.imod(this.r.sqr());
32769 this.rinv = this.r._invmp(this.m);
32770
32771 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
32772 this.minv = this.minv.umod(this.r);
32773 this.minv = this.r.sub(this.minv);
ebd8d4e8 32774 }
8b095871 32775 inherits(Mont, Red);
ebd8d4e8 32776
8b095871
IC
32777 Mont.prototype.convertTo = function convertTo (num) {
32778 return this.imod(num.ushln(this.shift));
32779 };
ab78acc6 32780
8b095871
IC
32781 Mont.prototype.convertFrom = function convertFrom (num) {
32782 var r = this.imod(num.mul(this.rinv));
32783 r.red = null;
32784 return r;
32785 };
ebd8d4e8 32786
8b095871
IC
32787 Mont.prototype.imul = function imul (a, b) {
32788 if (a.isZero() || b.isZero()) {
32789 a.words[0] = 0;
32790 a.length = 1;
32791 return a;
32792 }
ebd8d4e8 32793
8b095871
IC
32794 var t = a.imul(b);
32795 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
32796 var u = t.isub(c).iushrn(this.shift);
32797 var res = u;
ab78acc6 32798
8b095871
IC
32799 if (u.cmp(this.m) >= 0) {
32800 res = u.isub(this.m);
32801 } else if (u.cmpn(0) < 0) {
32802 res = u.iadd(this.m);
32803 }
ab78acc6 32804
8b095871
IC
32805 return res._forceRed(this);
32806 };
ab78acc6 32807
8b095871
IC
32808 Mont.prototype.mul = function mul (a, b) {
32809 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
ab78acc6 32810
8b095871
IC
32811 var t = a.mul(b);
32812 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
32813 var u = t.isub(c).iushrn(this.shift);
32814 var res = u;
32815 if (u.cmp(this.m) >= 0) {
32816 res = u.isub(this.m);
32817 } else if (u.cmpn(0) < 0) {
32818 res = u.iadd(this.m);
32819 }
ab78acc6 32820
8b095871
IC
32821 return res._forceRed(this);
32822 };
ab78acc6 32823
8b095871
IC
32824 Mont.prototype.invm = function invm (a) {
32825 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
32826 var res = this.imod(a._invmp(this.m).mul(this.r2));
32827 return res._forceRed(this);
32828 };
32829})(typeof module === 'undefined' || module, this);
ab78acc6 32830
8b095871
IC
32831},{}],34:[function(require,module,exports){
32832var r;
ebd8d4e8 32833
8b095871
IC
32834module.exports = function rand(len) {
32835 if (!r)
32836 r = new Rand(null);
ebd8d4e8 32837
8b095871
IC
32838 return r.generate(len);
32839};
ab78acc6 32840
8b095871
IC
32841function Rand(rand) {
32842 this.rand = rand;
ab78acc6 32843}
8b095871 32844module.exports.Rand = Rand;
ab78acc6 32845
8b095871
IC
32846Rand.prototype.generate = function generate(len) {
32847 return this._rand(len);
32848};
ab78acc6 32849
8b095871
IC
32850if (typeof self === 'object') {
32851 if (self.crypto && self.crypto.getRandomValues) {
32852 // Modern browsers
32853 Rand.prototype._rand = function _rand(n) {
32854 var arr = new Uint8Array(n);
32855 self.crypto.getRandomValues(arr);
32856 return arr;
32857 };
32858 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
32859 // IE
32860 Rand.prototype._rand = function _rand(n) {
32861 var arr = new Uint8Array(n);
32862 self.msCrypto.getRandomValues(arr);
32863 return arr;
32864 };
32865 } else {
32866 // Old junk
32867 Rand.prototype._rand = function() {
32868 throw new Error('Not implemented yet');
32869 };
32870 }
32871} else {
32872 // Node.js or Web worker with no crypto support
32873 try {
32874 var crypto = require('crypto');
ab78acc6 32875
8b095871
IC
32876 Rand.prototype._rand = function _rand(n) {
32877 return crypto.randomBytes(n);
32878 };
32879 } catch (e) {
32880 // Emulate crypto API using randy
32881 Rand.prototype._rand = function _rand(n) {
32882 var res = new Uint8Array(n);
32883 for (var i = 0; i < res.length; i++)
32884 res[i] = this.rand.getByte();
32885 return res;
32886 };
32887 }
32888}
32889
32890},{"crypto":3}],35:[function(require,module,exports){
32891(function (Buffer){
32892var Transform = require('stream').Transform
32893var inherits = require('inherits')
32894var StringDecoder = require('string_decoder').StringDecoder
32895module.exports = CipherBase
32896inherits(CipherBase, Transform)
32897function CipherBase (hashMode) {
32898 Transform.call(this)
32899 this.hashMode = typeof hashMode === 'string'
32900 if (this.hashMode) {
32901 this[hashMode] = this._finalOrDigest
32902 } else {
32903 this.final = this._finalOrDigest
32904 }
32905 this._decoder = null
32906 this._encoding = null
32907}
32908CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
32909 if (typeof data === 'string') {
32910 data = new Buffer(data, inputEnc)
32911 }
32912 var outData = this._update(data)
32913 if (this.hashMode) {
32914 return this
32915 }
32916 if (outputEnc) {
32917 outData = this._toString(outData, outputEnc)
32918 }
32919 return outData
32920}
ab78acc6 32921
8b095871 32922CipherBase.prototype.setAutoPadding = function () {}
ab78acc6 32923
8b095871
IC
32924CipherBase.prototype.getAuthTag = function () {
32925 throw new Error('trying to get auth tag in unsupported state')
32926}
ab78acc6 32927
8b095871
IC
32928CipherBase.prototype.setAuthTag = function () {
32929 throw new Error('trying to set auth tag in unsupported state')
32930}
ab78acc6 32931
8b095871
IC
32932CipherBase.prototype.setAAD = function () {
32933 throw new Error('trying to set aad in unsupported state')
32934}
ab78acc6 32935
8b095871
IC
32936CipherBase.prototype._transform = function (data, _, next) {
32937 var err
32938 try {
32939 if (this.hashMode) {
32940 this._update(data)
32941 } else {
32942 this.push(this._update(data))
32943 }
32944 } catch (e) {
32945 err = e
32946 } finally {
32947 next(err)
32948 }
32949}
32950CipherBase.prototype._flush = function (done) {
32951 var err
32952 try {
32953 this.push(this._final())
32954 } catch (e) {
32955 err = e
32956 } finally {
32957 done(err)
32958 }
32959}
32960CipherBase.prototype._finalOrDigest = function (outputEnc) {
32961 var outData = this._final() || new Buffer('')
32962 if (outputEnc) {
32963 outData = this._toString(outData, outputEnc, true)
32964 }
32965 return outData
32966}
ebd8d4e8 32967
8b095871
IC
32968CipherBase.prototype._toString = function (value, enc, fin) {
32969 if (!this._decoder) {
32970 this._decoder = new StringDecoder(enc)
32971 this._encoding = enc
32972 }
32973 if (this._encoding !== enc) {
32974 throw new Error('can\'t switch encodings')
32975 }
32976 var out = this._decoder.write(value)
32977 if (fin) {
32978 out += this._decoder.end()
ab78acc6 32979 }
8b095871
IC
32980 return out
32981}
ab78acc6 32982
8b095871
IC
32983}).call(this,require("buffer").Buffer)
32984},{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
32985(function (Buffer){
32986'use strict';
32987var inherits = require('inherits')
32988var md5 = require('./md5')
32989var rmd160 = require('ripemd160')
32990var sha = require('sha.js')
ebd8d4e8 32991
8b095871 32992var Base = require('cipher-base')
ebd8d4e8 32993
8b095871
IC
32994function HashNoConstructor(hash) {
32995 Base.call(this, 'digest')
ebd8d4e8 32996
8b095871
IC
32997 this._hash = hash
32998 this.buffers = []
32999}
ebd8d4e8 33000
8b095871 33001inherits(HashNoConstructor, Base)
ebd8d4e8 33002
8b095871
IC
33003HashNoConstructor.prototype._update = function (data) {
33004 this.buffers.push(data)
33005}
ebd8d4e8 33006
8b095871
IC
33007HashNoConstructor.prototype._final = function () {
33008 var buf = Buffer.concat(this.buffers)
33009 var r = this._hash(buf)
33010 this.buffers = null
ebd8d4e8 33011
8b095871
IC
33012 return r
33013}
ab78acc6 33014
8b095871
IC
33015function Hash(hash) {
33016 Base.call(this, 'digest')
ab78acc6 33017
8b095871
IC
33018 this._hash = hash
33019}
ab78acc6 33020
8b095871 33021inherits(Hash, Base)
ab78acc6 33022
8b095871
IC
33023Hash.prototype._update = function (data) {
33024 this._hash.update(data)
33025}
ab78acc6 33026
8b095871
IC
33027Hash.prototype._final = function () {
33028 return this._hash.digest()
33029}
ab78acc6 33030
8b095871
IC
33031module.exports = function createHash (alg) {
33032 alg = alg.toLowerCase()
33033 if ('md5' === alg) return new HashNoConstructor(md5)
33034 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
33035
33036 return new Hash(sha(alg))
ab78acc6
IC
33037}
33038
8b095871
IC
33039}).call(this,require("buffer").Buffer)
33040},{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
33041(function (Buffer){
33042'use strict';
33043var intSize = 4;
33044var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
33045var chrsz = 8;
ab78acc6 33046
8b095871
IC
33047function toArray(buf, bigEndian) {
33048 if ((buf.length % intSize) !== 0) {
33049 var len = buf.length + (intSize - (buf.length % intSize));
33050 buf = Buffer.concat([buf, zeroBuffer], len);
ab78acc6
IC
33051 }
33052
8b095871
IC
33053 var arr = [];
33054 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
33055 for (var i = 0; i < buf.length; i += intSize) {
33056 arr.push(fn.call(buf, i));
33057 }
33058 return arr;
ab78acc6
IC
33059}
33060
8b095871
IC
33061function toBuffer(arr, size, bigEndian) {
33062 var buf = new Buffer(size);
33063 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
33064 for (var i = 0; i < arr.length; i++) {
33065 fn.call(buf, arr[i], i * 4, true);
33066 }
33067 return buf;
33068}
ab78acc6 33069
8b095871
IC
33070function hash(buf, fn, hashSize, bigEndian) {
33071 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
33072 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
33073 return toBuffer(arr, hashSize, bigEndian);
33074}
33075exports.hash = hash;
ab78acc6 33076}).call(this,require("buffer").Buffer)
8b095871 33077},{"buffer":5}],38:[function(require,module,exports){
ab78acc6 33078'use strict';
8b095871
IC
33079/*
33080 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
33081 * Digest Algorithm, as defined in RFC 1321.
33082 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
33083 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
33084 * Distributed under the BSD License
33085 * See http://pajhome.org.uk/crypt/md5 for more info.
33086 */
ebd8d4e8 33087
8b095871 33088var helpers = require('./helpers');
ebd8d4e8 33089
8b095871
IC
33090/*
33091 * Calculate the MD5 of an array of little-endian words, and a bit length
33092 */
33093function core_md5(x, len)
33094{
33095 /* append padding */
33096 x[len >> 5] |= 0x80 << ((len) % 32);
33097 x[(((len + 64) >>> 9) << 4) + 14] = len;
ebd8d4e8 33098
8b095871
IC
33099 var a = 1732584193;
33100 var b = -271733879;
33101 var c = -1732584194;
33102 var d = 271733878;
ebd8d4e8 33103
8b095871
IC
33104 for(var i = 0; i < x.length; i += 16)
33105 {
33106 var olda = a;
33107 var oldb = b;
33108 var oldc = c;
33109 var oldd = d;
ebd8d4e8 33110
8b095871
IC
33111 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
33112 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
33113 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
33114 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
33115 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
33116 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
33117 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
33118 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
33119 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
33120 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
33121 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
33122 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
33123 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
33124 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
33125 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
33126 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
ebd8d4e8 33127
8b095871
IC
33128 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
33129 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
33130 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
33131 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
33132 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
33133 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
33134 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
33135 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
33136 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
33137 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
33138 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
33139 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
33140 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
33141 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
33142 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
33143 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
ebd8d4e8 33144
8b095871
IC
33145 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
33146 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
33147 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
33148 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
33149 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
33150 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
33151 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
33152 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
33153 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
33154 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
33155 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
33156 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
33157 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
33158 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
33159 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
33160 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
ebd8d4e8 33161
8b095871
IC
33162 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
33163 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
33164 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
33165 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
33166 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
33167 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
33168 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
33169 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
33170 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
33171 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
33172 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
33173 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
33174 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
33175 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
33176 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
33177 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
ebd8d4e8 33178
8b095871
IC
33179 a = safe_add(a, olda);
33180 b = safe_add(b, oldb);
33181 c = safe_add(c, oldc);
33182 d = safe_add(d, oldd);
ab78acc6 33183 }
8b095871 33184 return Array(a, b, c, d);
ebd8d4e8 33185
ab78acc6 33186}
ebd8d4e8 33187
8b095871
IC
33188/*
33189 * These functions implement the four basic operations the algorithm uses.
33190 */
33191function md5_cmn(q, a, b, x, s, t)
33192{
33193 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
ab78acc6 33194}
8b095871
IC
33195function md5_ff(a, b, c, d, x, s, t)
33196{
33197 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
ab78acc6 33198}
8b095871
IC
33199function md5_gg(a, b, c, d, x, s, t)
33200{
33201 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
ab78acc6 33202}
8b095871
IC
33203function md5_hh(a, b, c, d, x, s, t)
33204{
33205 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
33206}
33207function md5_ii(a, b, c, d, x, s, t)
33208{
33209 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
ab78acc6 33210}
ebd8d4e8 33211
8b095871
IC
33212/*
33213 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
33214 * to work around bugs in some JS interpreters.
33215 */
33216function safe_add(x, y)
33217{
33218 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
33219 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
33220 return (msw << 16) | (lsw & 0xFFFF);
ab78acc6 33221}
ebd8d4e8 33222
8b095871
IC
33223/*
33224 * Bitwise rotate a 32-bit number to the left.
33225 */
33226function bit_rol(num, cnt)
33227{
33228 return (num << cnt) | (num >>> (32 - cnt));
33229}
ebd8d4e8 33230
8b095871
IC
33231module.exports = function md5(buf) {
33232 return helpers.hash(buf, core_md5, 16);
33233};
33234},{"./helpers":37}],39:[function(require,module,exports){
33235'use strict';
ebd8d4e8 33236
8b095871 33237var elliptic = exports;
ebd8d4e8 33238
8b095871
IC
33239elliptic.version = require('../package.json').version;
33240elliptic.utils = require('./elliptic/utils');
33241elliptic.rand = require('brorand');
33242elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
33243elliptic.curve = require('./elliptic/curve');
33244elliptic.curves = require('./elliptic/curves');
ebd8d4e8 33245
8b095871
IC
33246// Protocols
33247elliptic.ec = require('./elliptic/ec');
33248elliptic.eddsa = require('./elliptic/eddsa');
ebd8d4e8 33249
8b095871
IC
33250},{"../package.json":55,"./elliptic/curve":42,"./elliptic/curves":45,"./elliptic/ec":46,"./elliptic/eddsa":49,"./elliptic/hmac-drbg":52,"./elliptic/utils":54,"brorand":34}],40:[function(require,module,exports){
33251'use strict';
ebd8d4e8 33252
8b095871
IC
33253var BN = require('bn.js');
33254var elliptic = require('../../elliptic');
33255var utils = elliptic.utils;
33256var getNAF = utils.getNAF;
33257var getJSF = utils.getJSF;
33258var assert = utils.assert;
33259
33260function BaseCurve(type, conf) {
33261 this.type = type;
33262 this.p = new BN(conf.p, 16);
33263
33264 // Use Montgomery, when there is no fast reduction for the prime
33265 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
33266
33267 // Useful for many curves
33268 this.zero = new BN(0).toRed(this.red);
33269 this.one = new BN(1).toRed(this.red);
33270 this.two = new BN(2).toRed(this.red);
33271
33272 // Curve configuration, optional
33273 this.n = conf.n && new BN(conf.n, 16);
33274 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
33275
33276 // Temporary arrays
33277 this._wnafT1 = new Array(4);
33278 this._wnafT2 = new Array(4);
33279 this._wnafT3 = new Array(4);
33280 this._wnafT4 = new Array(4);
33281
33282 // Generalized Greg Maxwell's trick
33283 var adjustCount = this.n && this.p.div(this.n);
33284 if (!adjustCount || adjustCount.cmpn(100) > 0) {
33285 this.redN = null;
33286 } else {
33287 this._maxwellTrick = true;
33288 this.redN = this.n.toRed(this.red);
ebd8d4e8 33289 }
ebd8d4e8 33290}
8b095871 33291module.exports = BaseCurve;
ebd8d4e8 33292
8b095871
IC
33293BaseCurve.prototype.point = function point() {
33294 throw new Error('Not implemented');
33295};
ebd8d4e8 33296
8b095871
IC
33297BaseCurve.prototype.validate = function validate() {
33298 throw new Error('Not implemented');
33299};
ebd8d4e8 33300
8b095871
IC
33301BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
33302 assert(p.precomputed);
33303 var doubles = p._getDoubles();
ebd8d4e8 33304
8b095871
IC
33305 var naf = getNAF(k, 1);
33306 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
33307 I /= 3;
ebd8d4e8 33308
8b095871
IC
33309 // Translate into more windowed form
33310 var repr = [];
33311 for (var j = 0; j < naf.length; j += doubles.step) {
33312 var nafW = 0;
33313 for (var k = j + doubles.step - 1; k >= j; k--)
33314 nafW = (nafW << 1) + naf[k];
33315 repr.push(nafW);
33316 }
ebd8d4e8 33317
8b095871
IC
33318 var a = this.jpoint(null, null, null);
33319 var b = this.jpoint(null, null, null);
33320 for (var i = I; i > 0; i--) {
33321 for (var j = 0; j < repr.length; j++) {
33322 var nafW = repr[j];
33323 if (nafW === i)
33324 b = b.mixedAdd(doubles.points[j]);
33325 else if (nafW === -i)
33326 b = b.mixedAdd(doubles.points[j].neg());
33327 }
33328 a = a.add(b);
33329 }
33330 return a.toP();
33331};
ebd8d4e8 33332
8b095871
IC
33333BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
33334 var w = 4;
ebd8d4e8 33335
8b095871
IC
33336 // Precompute window
33337 var nafPoints = p._getNAFPoints(w);
33338 w = nafPoints.wnd;
33339 var wnd = nafPoints.points;
ebd8d4e8 33340
8b095871
IC
33341 // Get NAF form
33342 var naf = getNAF(k, w);
ebd8d4e8 33343
8b095871
IC
33344 // Add `this`*(N+1) for every w-NAF index
33345 var acc = this.jpoint(null, null, null);
33346 for (var i = naf.length - 1; i >= 0; i--) {
33347 // Count zeroes
33348 for (var k = 0; i >= 0 && naf[i] === 0; i--)
33349 k++;
33350 if (i >= 0)
33351 k++;
33352 acc = acc.dblp(k);
ebd8d4e8 33353
8b095871
IC
33354 if (i < 0)
33355 break;
33356 var z = naf[i];
33357 assert(z !== 0);
33358 if (p.type === 'affine') {
33359 // J +- P
33360 if (z > 0)
33361 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
33362 else
33363 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
33364 } else {
33365 // J +- J
33366 if (z > 0)
33367 acc = acc.add(wnd[(z - 1) >> 1]);
33368 else
33369 acc = acc.add(wnd[(-z - 1) >> 1].neg());
33370 }
ebd8d4e8 33371 }
8b095871
IC
33372 return p.type === 'affine' ? acc.toP() : acc;
33373};
ebd8d4e8 33374
8b095871
IC
33375BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
33376 points,
33377 coeffs,
33378 len,
33379 jacobianResult) {
33380 var wndWidth = this._wnafT1;
33381 var wnd = this._wnafT2;
33382 var naf = this._wnafT3;
33383
33384 // Fill all arrays
33385 var max = 0;
33386 for (var i = 0; i < len; i++) {
33387 var p = points[i];
33388 var nafPoints = p._getNAFPoints(defW);
33389 wndWidth[i] = nafPoints.wnd;
33390 wnd[i] = nafPoints.points;
33391 }
33392
33393 // Comb small window NAFs
33394 for (var i = len - 1; i >= 1; i -= 2) {
33395 var a = i - 1;
33396 var b = i;
33397 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
33398 naf[a] = getNAF(coeffs[a], wndWidth[a]);
33399 naf[b] = getNAF(coeffs[b], wndWidth[b]);
33400 max = Math.max(naf[a].length, max);
33401 max = Math.max(naf[b].length, max);
33402 continue;
33403 }
ebd8d4e8 33404
8b095871
IC
33405 var comb = [
33406 points[a], /* 1 */
33407 null, /* 3 */
33408 null, /* 5 */
33409 points[b] /* 7 */
33410 ];
33411
33412 // Try to avoid Projective points, if possible
33413 if (points[a].y.cmp(points[b].y) === 0) {
33414 comb[1] = points[a].add(points[b]);
33415 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
33416 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
33417 comb[1] = points[a].toJ().mixedAdd(points[b]);
33418 comb[2] = points[a].add(points[b].neg());
33419 } else {
33420 comb[1] = points[a].toJ().mixedAdd(points[b]);
33421 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
33422 }
ebd8d4e8 33423
8b095871
IC
33424 var index = [
33425 -3, /* -1 -1 */
33426 -1, /* -1 0 */
33427 -5, /* -1 1 */
33428 -7, /* 0 -1 */
33429 0, /* 0 0 */
33430 7, /* 0 1 */
33431 5, /* 1 -1 */
33432 1, /* 1 0 */
33433 3 /* 1 1 */
33434 ];
ebd8d4e8 33435
8b095871
IC
33436 var jsf = getJSF(coeffs[a], coeffs[b]);
33437 max = Math.max(jsf[0].length, max);
33438 naf[a] = new Array(max);
33439 naf[b] = new Array(max);
33440 for (var j = 0; j < max; j++) {
33441 var ja = jsf[0][j] | 0;
33442 var jb = jsf[1][j] | 0;
ebd8d4e8 33443
8b095871
IC
33444 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
33445 naf[b][j] = 0;
33446 wnd[a] = comb;
33447 }
33448 }
ebd8d4e8 33449
8b095871
IC
33450 var acc = this.jpoint(null, null, null);
33451 var tmp = this._wnafT4;
33452 for (var i = max; i >= 0; i--) {
33453 var k = 0;
ebd8d4e8 33454
8b095871
IC
33455 while (i >= 0) {
33456 var zero = true;
33457 for (var j = 0; j < len; j++) {
33458 tmp[j] = naf[j][i] | 0;
33459 if (tmp[j] !== 0)
33460 zero = false;
33461 }
33462 if (!zero)
33463 break;
33464 k++;
33465 i--;
33466 }
33467 if (i >= 0)
33468 k++;
33469 acc = acc.dblp(k);
33470 if (i < 0)
33471 break;
ebd8d4e8 33472
8b095871
IC
33473 for (var j = 0; j < len; j++) {
33474 var z = tmp[j];
33475 var p;
33476 if (z === 0)
33477 continue;
33478 else if (z > 0)
33479 p = wnd[j][(z - 1) >> 1];
33480 else if (z < 0)
33481 p = wnd[j][(-z - 1) >> 1].neg();
33482
33483 if (p.type === 'affine')
33484 acc = acc.mixedAdd(p);
33485 else
33486 acc = acc.add(p);
33487 }
33488 }
33489 // Zeroify references
33490 for (var i = 0; i < len; i++)
33491 wnd[i] = null;
ebd8d4e8 33492
8b095871
IC
33493 if (jacobianResult)
33494 return acc;
33495 else
33496 return acc.toP();
33497};
ebd8d4e8 33498
8b095871
IC
33499function BasePoint(curve, type) {
33500 this.curve = curve;
33501 this.type = type;
33502 this.precomputed = null;
33503}
33504BaseCurve.BasePoint = BasePoint;
ebd8d4e8 33505
8b095871
IC
33506BasePoint.prototype.eq = function eq(/*other*/) {
33507 throw new Error('Not implemented');
33508};
ebd8d4e8 33509
8b095871
IC
33510BasePoint.prototype.validate = function validate() {
33511 return this.curve.validate(this);
33512};
ebd8d4e8 33513
8b095871
IC
33514BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
33515 bytes = utils.toArray(bytes, enc);
ebd8d4e8 33516
8b095871 33517 var len = this.p.byteLength();
ebd8d4e8 33518
8b095871
IC
33519 // uncompressed, hybrid-odd, hybrid-even
33520 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
33521 bytes.length - 1 === 2 * len) {
33522 if (bytes[0] === 0x06)
33523 assert(bytes[bytes.length - 1] % 2 === 0);
33524 else if (bytes[0] === 0x07)
33525 assert(bytes[bytes.length - 1] % 2 === 1);
ebd8d4e8 33526
8b095871
IC
33527 var res = this.point(bytes.slice(1, 1 + len),
33528 bytes.slice(1 + len, 1 + 2 * len));
ebd8d4e8 33529
8b095871
IC
33530 return res;
33531 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
33532 bytes.length - 1 === len) {
33533 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
ebd8d4e8 33534 }
8b095871
IC
33535 throw new Error('Unknown point format');
33536};
ebd8d4e8 33537
8b095871
IC
33538BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
33539 return this.encode(enc, true);
33540};
33541
33542BasePoint.prototype._encode = function _encode(compact) {
33543 var len = this.curve.p.byteLength();
33544 var x = this.getX().toArray('be', len);
33545
33546 if (compact)
33547 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
33548
33549 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
33550};
33551
33552BasePoint.prototype.encode = function encode(enc, compact) {
33553 return utils.encode(this._encode(compact), enc);
33554};
33555
33556BasePoint.prototype.precompute = function precompute(power) {
33557 if (this.precomputed)
33558 return this;
33559
33560 var precomputed = {
33561 doubles: null,
33562 naf: null,
33563 beta: null
33564 };
33565 precomputed.naf = this._getNAFPoints(8);
33566 precomputed.doubles = this._getDoubles(4, power);
33567 precomputed.beta = this._getBeta();
33568 this.precomputed = precomputed;
33569
33570 return this;
33571};
33572
33573BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
33574 if (!this.precomputed)
33575 return false;
33576
33577 var doubles = this.precomputed.doubles;
33578 if (!doubles)
33579 return false;
33580
33581 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
33582};
33583
33584BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
33585 if (this.precomputed && this.precomputed.doubles)
33586 return this.precomputed.doubles;
33587
33588 var doubles = [ this ];
33589 var acc = this;
33590 for (var i = 0; i < power; i += step) {
33591 for (var j = 0; j < step; j++)
33592 acc = acc.dbl();
33593 doubles.push(acc);
ebd8d4e8 33594 }
8b095871
IC
33595 return {
33596 step: step,
33597 points: doubles
33598 };
33599};
ebd8d4e8 33600
8b095871
IC
33601BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
33602 if (this.precomputed && this.precomputed.naf)
33603 return this.precomputed.naf;
ebd8d4e8 33604
8b095871
IC
33605 var res = [ this ];
33606 var max = (1 << wnd) - 1;
33607 var dbl = max === 1 ? null : this.dbl();
33608 for (var i = 1; i < max; i++)
33609 res[i] = res[i - 1].add(dbl);
33610 return {
33611 wnd: wnd,
33612 points: res
33613 };
33614};
ebd8d4e8 33615
8b095871
IC
33616BasePoint.prototype._getBeta = function _getBeta() {
33617 return null;
33618};
ebd8d4e8 33619
8b095871
IC
33620BasePoint.prototype.dblp = function dblp(k) {
33621 var r = this;
33622 for (var i = 0; i < k; i++)
33623 r = r.dbl();
33624 return r;
33625};
ebd8d4e8 33626
8b095871
IC
33627},{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
33628'use strict';
ebd8d4e8 33629
8b095871
IC
33630var curve = require('../curve');
33631var elliptic = require('../../elliptic');
33632var BN = require('bn.js');
33633var inherits = require('inherits');
33634var Base = curve.base;
ebd8d4e8 33635
8b095871 33636var assert = elliptic.utils.assert;
ebd8d4e8 33637
8b095871
IC
33638function EdwardsCurve(conf) {
33639 // NOTE: Important as we are creating point in Base.call()
33640 this.twisted = (conf.a | 0) !== 1;
33641 this.mOneA = this.twisted && (conf.a | 0) === -1;
33642 this.extended = this.mOneA;
33643
33644 Base.call(this, 'edwards', conf);
33645
33646 this.a = new BN(conf.a, 16).umod(this.red.m);
33647 this.a = this.a.toRed(this.red);
33648 this.c = new BN(conf.c, 16).toRed(this.red);
33649 this.c2 = this.c.redSqr();
33650 this.d = new BN(conf.d, 16).toRed(this.red);
33651 this.dd = this.d.redAdd(this.d);
33652
33653 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
33654 this.oneC = (conf.c | 0) === 1;
ebd8d4e8 33655}
8b095871
IC
33656inherits(EdwardsCurve, Base);
33657module.exports = EdwardsCurve;
ebd8d4e8 33658
8b095871
IC
33659EdwardsCurve.prototype._mulA = function _mulA(num) {
33660 if (this.mOneA)
33661 return num.redNeg();
33662 else
33663 return this.a.redMul(num);
33664};
ebd8d4e8 33665
8b095871
IC
33666EdwardsCurve.prototype._mulC = function _mulC(num) {
33667 if (this.oneC)
33668 return num;
33669 else
33670 return this.c.redMul(num);
33671};
ebd8d4e8 33672
8b095871
IC
33673// Just for compatibility with Short curve
33674EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
33675 return this.point(x, y, z, t);
33676};
ebd8d4e8 33677
8b095871
IC
33678EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
33679 x = new BN(x, 16);
33680 if (!x.red)
33681 x = x.toRed(this.red);
ebd8d4e8 33682
8b095871
IC
33683 var x2 = x.redSqr();
33684 var rhs = this.c2.redSub(this.a.redMul(x2));
33685 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
33686
33687 var y2 = rhs.redMul(lhs.redInvm());
33688 var y = y2.redSqrt();
33689 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
33690 throw new Error('invalid point');
33691
33692 var isOdd = y.fromRed().isOdd();
33693 if (odd && !isOdd || !odd && isOdd)
33694 y = y.redNeg();
33695
33696 return this.point(x, y);
33697};
33698
33699EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
33700 y = new BN(y, 16);
33701 if (!y.red)
33702 y = y.toRed(this.red);
33703
33704 // x^2 = (y^2 - 1) / (d y^2 + 1)
33705 var y2 = y.redSqr();
33706 var lhs = y2.redSub(this.one);
33707 var rhs = y2.redMul(this.d).redAdd(this.one);
33708 var x2 = lhs.redMul(rhs.redInvm());
33709
33710 if (x2.cmp(this.zero) === 0) {
33711 if (odd)
33712 throw new Error('invalid point');
33713 else
33714 return this.point(this.zero, y);
ebd8d4e8
IC
33715 }
33716
8b095871
IC
33717 var x = x2.redSqrt();
33718 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
33719 throw new Error('invalid point');
ebd8d4e8 33720
8b095871
IC
33721 if (x.isOdd() !== odd)
33722 x = x.redNeg();
ebd8d4e8 33723
8b095871
IC
33724 return this.point(x, y);
33725};
ebd8d4e8 33726
8b095871
IC
33727EdwardsCurve.prototype.validate = function validate(point) {
33728 if (point.isInfinity())
33729 return true;
ebd8d4e8 33730
8b095871
IC
33731 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
33732 point.normalize();
ebd8d4e8 33733
8b095871
IC
33734 var x2 = point.x.redSqr();
33735 var y2 = point.y.redSqr();
33736 var lhs = x2.redMul(this.a).redAdd(y2);
33737 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
ebd8d4e8 33738
8b095871
IC
33739 return lhs.cmp(rhs) === 0;
33740};
ebd8d4e8 33741
8b095871
IC
33742function Point(curve, x, y, z, t) {
33743 Base.BasePoint.call(this, curve, 'projective');
33744 if (x === null && y === null && z === null) {
33745 this.x = this.curve.zero;
33746 this.y = this.curve.one;
33747 this.z = this.curve.one;
33748 this.t = this.curve.zero;
33749 this.zOne = true;
33750 } else {
33751 this.x = new BN(x, 16);
33752 this.y = new BN(y, 16);
33753 this.z = z ? new BN(z, 16) : this.curve.one;
33754 this.t = t && new BN(t, 16);
33755 if (!this.x.red)
33756 this.x = this.x.toRed(this.curve.red);
33757 if (!this.y.red)
33758 this.y = this.y.toRed(this.curve.red);
33759 if (!this.z.red)
33760 this.z = this.z.toRed(this.curve.red);
33761 if (this.t && !this.t.red)
33762 this.t = this.t.toRed(this.curve.red);
33763 this.zOne = this.z === this.curve.one;
33764
33765 // Use extended coordinates
33766 if (this.curve.extended && !this.t) {
33767 this.t = this.x.redMul(this.y);
33768 if (!this.zOne)
33769 this.t = this.t.redMul(this.z.redInvm());
33770 }
33771 }
33772}
33773inherits(Point, Base.BasePoint);
33774
33775EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
33776 return Point.fromJSON(this, obj);
33777};
33778
33779EdwardsCurve.prototype.point = function point(x, y, z, t) {
33780 return new Point(this, x, y, z, t);
33781};
33782
33783Point.fromJSON = function fromJSON(curve, obj) {
33784 return new Point(curve, obj[0], obj[1], obj[2]);
33785};
33786
33787Point.prototype.inspect = function inspect() {
33788 if (this.isInfinity())
33789 return '<EC Point Infinity>';
33790 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
33791 ' y: ' + this.y.fromRed().toString(16, 2) +
33792 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
33793};
33794
33795Point.prototype.isInfinity = function isInfinity() {
33796 // XXX This code assumes that zero is always zero in red
33797 return this.x.cmpn(0) === 0 &&
33798 this.y.cmp(this.z) === 0;
33799};
33800
33801Point.prototype._extDbl = function _extDbl() {
33802 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
33803 // #doubling-dbl-2008-hwcd
33804 // 4M + 4S
33805
33806 // A = X1^2
33807 var a = this.x.redSqr();
33808 // B = Y1^2
33809 var b = this.y.redSqr();
33810 // C = 2 * Z1^2
33811 var c = this.z.redSqr();
33812 c = c.redIAdd(c);
33813 // D = a * A
33814 var d = this.curve._mulA(a);
33815 // E = (X1 + Y1)^2 - A - B
33816 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
33817 // G = D + B
33818 var g = d.redAdd(b);
33819 // F = G - C
33820 var f = g.redSub(c);
33821 // H = D - B
33822 var h = d.redSub(b);
33823 // X3 = E * F
33824 var nx = e.redMul(f);
33825 // Y3 = G * H
33826 var ny = g.redMul(h);
33827 // T3 = E * H
33828 var nt = e.redMul(h);
33829 // Z3 = F * G
33830 var nz = f.redMul(g);
33831 return this.curve.point(nx, ny, nz, nt);
33832};
33833
33834Point.prototype._projDbl = function _projDbl() {
33835 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
33836 // #doubling-dbl-2008-bbjlp
33837 // #doubling-dbl-2007-bl
33838 // and others
33839 // Generally 3M + 4S or 2M + 4S
33840
33841 // B = (X1 + Y1)^2
33842 var b = this.x.redAdd(this.y).redSqr();
33843 // C = X1^2
33844 var c = this.x.redSqr();
33845 // D = Y1^2
33846 var d = this.y.redSqr();
33847
33848 var nx;
33849 var ny;
33850 var nz;
33851 if (this.curve.twisted) {
33852 // E = a * C
33853 var e = this.curve._mulA(c);
33854 // F = E + D
33855 var f = e.redAdd(d);
33856 if (this.zOne) {
33857 // X3 = (B - C - D) * (F - 2)
33858 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
33859 // Y3 = F * (E - D)
33860 ny = f.redMul(e.redSub(d));
33861 // Z3 = F^2 - 2 * F
33862 nz = f.redSqr().redSub(f).redSub(f);
33863 } else {
33864 // H = Z1^2
33865 var h = this.z.redSqr();
33866 // J = F - 2 * H
33867 var j = f.redSub(h).redISub(h);
33868 // X3 = (B-C-D)*J
33869 nx = b.redSub(c).redISub(d).redMul(j);
33870 // Y3 = F * (E - D)
33871 ny = f.redMul(e.redSub(d));
33872 // Z3 = F * J
33873 nz = f.redMul(j);
33874 }
33875 } else {
33876 // E = C + D
33877 var e = c.redAdd(d);
33878 // H = (c * Z1)^2
33879 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
33880 // J = E - 2 * H
33881 var j = e.redSub(h).redSub(h);
33882 // X3 = c * (B - E) * J
33883 nx = this.curve._mulC(b.redISub(e)).redMul(j);
33884 // Y3 = c * E * (C - D)
33885 ny = this.curve._mulC(e).redMul(c.redISub(d));
33886 // Z3 = E * J
33887 nz = e.redMul(j);
33888 }
33889 return this.curve.point(nx, ny, nz);
33890};
33891
33892Point.prototype.dbl = function dbl() {
33893 if (this.isInfinity())
33894 return this;
33895
33896 // Double in extended coordinates
33897 if (this.curve.extended)
33898 return this._extDbl();
33899 else
33900 return this._projDbl();
33901};
33902
33903Point.prototype._extAdd = function _extAdd(p) {
33904 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
33905 // #addition-add-2008-hwcd-3
33906 // 8M
33907
33908 // A = (Y1 - X1) * (Y2 - X2)
33909 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
33910 // B = (Y1 + X1) * (Y2 + X2)
33911 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
33912 // C = T1 * k * T2
33913 var c = this.t.redMul(this.curve.dd).redMul(p.t);
33914 // D = Z1 * 2 * Z2
33915 var d = this.z.redMul(p.z.redAdd(p.z));
33916 // E = B - A
33917 var e = b.redSub(a);
33918 // F = D - C
33919 var f = d.redSub(c);
33920 // G = D + C
33921 var g = d.redAdd(c);
33922 // H = B + A
33923 var h = b.redAdd(a);
33924 // X3 = E * F
33925 var nx = e.redMul(f);
33926 // Y3 = G * H
33927 var ny = g.redMul(h);
33928 // T3 = E * H
33929 var nt = e.redMul(h);
33930 // Z3 = F * G
33931 var nz = f.redMul(g);
33932 return this.curve.point(nx, ny, nz, nt);
33933};
33934
33935Point.prototype._projAdd = function _projAdd(p) {
33936 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
33937 // #addition-add-2008-bbjlp
33938 // #addition-add-2007-bl
33939 // 10M + 1S
33940
33941 // A = Z1 * Z2
33942 var a = this.z.redMul(p.z);
33943 // B = A^2
33944 var b = a.redSqr();
33945 // C = X1 * X2
33946 var c = this.x.redMul(p.x);
33947 // D = Y1 * Y2
33948 var d = this.y.redMul(p.y);
33949 // E = d * C * D
33950 var e = this.curve.d.redMul(c).redMul(d);
33951 // F = B - E
33952 var f = b.redSub(e);
33953 // G = B + E
33954 var g = b.redAdd(e);
33955 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
33956 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
33957 var nx = a.redMul(f).redMul(tmp);
33958 var ny;
33959 var nz;
33960 if (this.curve.twisted) {
33961 // Y3 = A * G * (D - a * C)
33962 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
33963 // Z3 = F * G
33964 nz = f.redMul(g);
33965 } else {
33966 // Y3 = A * G * (D - C)
33967 ny = a.redMul(g).redMul(d.redSub(c));
33968 // Z3 = c * F * G
33969 nz = this.curve._mulC(f).redMul(g);
ebd8d4e8 33970 }
8b095871
IC
33971 return this.curve.point(nx, ny, nz);
33972};
ebd8d4e8 33973
8b095871
IC
33974Point.prototype.add = function add(p) {
33975 if (this.isInfinity())
33976 return p;
33977 if (p.isInfinity())
33978 return this;
ebd8d4e8 33979
8b095871
IC
33980 if (this.curve.extended)
33981 return this._extAdd(p);
33982 else
33983 return this._projAdd(p);
33984};
ebd8d4e8 33985
8b095871
IC
33986Point.prototype.mul = function mul(k) {
33987 if (this._hasDoubles(k))
33988 return this.curve._fixedNafMul(this, k);
33989 else
33990 return this.curve._wnafMul(this, k);
33991};
ebd8d4e8 33992
8b095871
IC
33993Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
33994 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
33995};
ebd8d4e8 33996
8b095871
IC
33997Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
33998 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
33999};
ebd8d4e8 34000
8b095871
IC
34001Point.prototype.normalize = function normalize() {
34002 if (this.zOne)
34003 return this;
34004
34005 // Normalize coordinates
34006 var zi = this.z.redInvm();
34007 this.x = this.x.redMul(zi);
34008 this.y = this.y.redMul(zi);
34009 if (this.t)
34010 this.t = this.t.redMul(zi);
34011 this.z = this.curve.one;
34012 this.zOne = true;
34013 return this;
34014};
34015
34016Point.prototype.neg = function neg() {
34017 return this.curve.point(this.x.redNeg(),
34018 this.y,
34019 this.z,
34020 this.t && this.t.redNeg());
34021};
34022
34023Point.prototype.getX = function getX() {
34024 this.normalize();
34025 return this.x.fromRed();
34026};
34027
34028Point.prototype.getY = function getY() {
34029 this.normalize();
34030 return this.y.fromRed();
34031};
34032
34033Point.prototype.eq = function eq(other) {
34034 return this === other ||
34035 this.getX().cmp(other.getX()) === 0 &&
34036 this.getY().cmp(other.getY()) === 0;
34037};
34038
34039Point.prototype.eqXToP = function eqXToP(x) {
34040 var rx = x.toRed(this.curve.red).redMul(this.z);
34041 if (this.x.cmp(rx) === 0)
34042 return true;
ebd8d4e8 34043
8b095871
IC
34044 var xc = x.clone();
34045 var t = this.curve.redN.redMul(this.z);
34046 for (;;) {
34047 xc.iadd(this.curve.n);
34048 if (xc.cmp(this.curve.p) >= 0)
34049 return false;
ebd8d4e8 34050
8b095871
IC
34051 rx.redIAdd(t);
34052 if (this.x.cmp(rx) === 0)
34053 return true;
ebd8d4e8 34054 }
8b095871
IC
34055 return false;
34056};
ebd8d4e8 34057
8b095871
IC
34058// Compatibility with BaseCurve
34059Point.prototype.toP = Point.prototype.normalize;
34060Point.prototype.mixedAdd = Point.prototype.add;
ebd8d4e8 34061
8b095871
IC
34062},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
34063'use strict';
ebd8d4e8 34064
8b095871 34065var curve = exports;
ebd8d4e8 34066
8b095871
IC
34067curve.base = require('./base');
34068curve.short = require('./short');
34069curve.mont = require('./mont');
34070curve.edwards = require('./edwards');
ebd8d4e8 34071
8b095871
IC
34072},{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
34073'use strict';
ebd8d4e8 34074
8b095871
IC
34075var curve = require('../curve');
34076var BN = require('bn.js');
34077var inherits = require('inherits');
34078var Base = curve.base;
ebd8d4e8 34079
8b095871
IC
34080var elliptic = require('../../elliptic');
34081var utils = elliptic.utils;
ebd8d4e8 34082
8b095871
IC
34083function MontCurve(conf) {
34084 Base.call(this, 'mont', conf);
ebd8d4e8 34085
8b095871
IC
34086 this.a = new BN(conf.a, 16).toRed(this.red);
34087 this.b = new BN(conf.b, 16).toRed(this.red);
34088 this.i4 = new BN(4).toRed(this.red).redInvm();
34089 this.two = new BN(2).toRed(this.red);
34090 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
ebd8d4e8 34091}
8b095871
IC
34092inherits(MontCurve, Base);
34093module.exports = MontCurve;
ebd8d4e8 34094
8b095871
IC
34095MontCurve.prototype.validate = function validate(point) {
34096 var x = point.normalize().x;
34097 var x2 = x.redSqr();
34098 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
34099 var y = rhs.redSqrt();
ebd8d4e8 34100
8b095871
IC
34101 return y.redSqr().cmp(rhs) === 0;
34102};
ebd8d4e8 34103
8b095871
IC
34104function Point(curve, x, z) {
34105 Base.BasePoint.call(this, curve, 'projective');
34106 if (x === null && z === null) {
34107 this.x = this.curve.one;
34108 this.z = this.curve.zero;
34109 } else {
34110 this.x = new BN(x, 16);
34111 this.z = new BN(z, 16);
34112 if (!this.x.red)
34113 this.x = this.x.toRed(this.curve.red);
34114 if (!this.z.red)
34115 this.z = this.z.toRed(this.curve.red);
34116 }
34117}
34118inherits(Point, Base.BasePoint);
ebd8d4e8 34119
8b095871
IC
34120MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
34121 return this.point(utils.toArray(bytes, enc), 1);
34122};
ebd8d4e8 34123
8b095871
IC
34124MontCurve.prototype.point = function point(x, z) {
34125 return new Point(this, x, z);
34126};
ebd8d4e8 34127
8b095871
IC
34128MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
34129 return Point.fromJSON(this, obj);
34130};
ebd8d4e8 34131
8b095871
IC
34132Point.prototype.precompute = function precompute() {
34133 // No-op
34134};
ebd8d4e8 34135
8b095871
IC
34136Point.prototype._encode = function _encode() {
34137 return this.getX().toArray('be', this.curve.p.byteLength());
34138};
ebd8d4e8 34139
8b095871
IC
34140Point.fromJSON = function fromJSON(curve, obj) {
34141 return new Point(curve, obj[0], obj[1] || curve.one);
34142};
ebd8d4e8 34143
8b095871
IC
34144Point.prototype.inspect = function inspect() {
34145 if (this.isInfinity())
34146 return '<EC Point Infinity>';
34147 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
34148 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
34149};
ebd8d4e8 34150
8b095871
IC
34151Point.prototype.isInfinity = function isInfinity() {
34152 // XXX This code assumes that zero is always zero in red
34153 return this.z.cmpn(0) === 0;
34154};
ebd8d4e8 34155
8b095871
IC
34156Point.prototype.dbl = function dbl() {
34157 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
34158 // 2M + 2S + 4A
34159
34160 // A = X1 + Z1
34161 var a = this.x.redAdd(this.z);
34162 // AA = A^2
34163 var aa = a.redSqr();
34164 // B = X1 - Z1
34165 var b = this.x.redSub(this.z);
34166 // BB = B^2
34167 var bb = b.redSqr();
34168 // C = AA - BB
34169 var c = aa.redSub(bb);
34170 // X3 = AA * BB
34171 var nx = aa.redMul(bb);
34172 // Z3 = C * (BB + A24 * C)
34173 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
34174 return this.curve.point(nx, nz);
34175};
ebd8d4e8 34176
8b095871
IC
34177Point.prototype.add = function add() {
34178 throw new Error('Not supported on Montgomery curve');
34179};
ebd8d4e8 34180
8b095871
IC
34181Point.prototype.diffAdd = function diffAdd(p, diff) {
34182 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
34183 // 4M + 2S + 6A
34184
34185 // A = X2 + Z2
34186 var a = this.x.redAdd(this.z);
34187 // B = X2 - Z2
34188 var b = this.x.redSub(this.z);
34189 // C = X3 + Z3
34190 var c = p.x.redAdd(p.z);
34191 // D = X3 - Z3
34192 var d = p.x.redSub(p.z);
34193 // DA = D * A
34194 var da = d.redMul(a);
34195 // CB = C * B
34196 var cb = c.redMul(b);
34197 // X5 = Z1 * (DA + CB)^2
34198 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
34199 // Z5 = X1 * (DA - CB)^2
34200 var nz = diff.x.redMul(da.redISub(cb).redSqr());
34201 return this.curve.point(nx, nz);
34202};
ebd8d4e8 34203
8b095871
IC
34204Point.prototype.mul = function mul(k) {
34205 var t = k.clone();
34206 var a = this; // (N / 2) * Q + Q
34207 var b = this.curve.point(null, null); // (N / 2) * Q
34208 var c = this; // Q
34209
34210 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
34211 bits.push(t.andln(1));
34212
34213 for (var i = bits.length - 1; i >= 0; i--) {
34214 if (bits[i] === 0) {
34215 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
34216 a = a.diffAdd(b, c);
34217 // N * Q = 2 * ((N / 2) * Q + Q))
34218 b = b.dbl();
34219 } else {
34220 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
34221 b = a.diffAdd(b, c);
34222 // N * Q + Q = 2 * ((N / 2) * Q + Q)
34223 a = a.dbl();
34224 }
ebd8d4e8 34225 }
8b095871
IC
34226 return b;
34227};
ebd8d4e8 34228
8b095871
IC
34229Point.prototype.mulAdd = function mulAdd() {
34230 throw new Error('Not supported on Montgomery curve');
34231};
ebd8d4e8 34232
8b095871
IC
34233Point.prototype.jumlAdd = function jumlAdd() {
34234 throw new Error('Not supported on Montgomery curve');
34235};
ebd8d4e8 34236
8b095871
IC
34237Point.prototype.eq = function eq(other) {
34238 return this.getX().cmp(other.getX()) === 0;
34239};
ebd8d4e8 34240
8b095871
IC
34241Point.prototype.normalize = function normalize() {
34242 this.x = this.x.redMul(this.z.redInvm());
34243 this.z = this.curve.one;
34244 return this;
34245};
ebd8d4e8 34246
8b095871
IC
34247Point.prototype.getX = function getX() {
34248 // Normalize coordinates
34249 this.normalize();
34250
34251 return this.x.fromRed();
34252};
34253
34254},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
ab78acc6 34255'use strict';
ebd8d4e8 34256
8b095871
IC
34257var curve = require('../curve');
34258var elliptic = require('../../elliptic');
34259var BN = require('bn.js');
34260var inherits = require('inherits');
34261var Base = curve.base;
ab78acc6 34262
8b095871 34263var assert = elliptic.utils.assert;
ebd8d4e8 34264
8b095871
IC
34265function ShortCurve(conf) {
34266 Base.call(this, 'short', conf);
ebd8d4e8 34267
8b095871
IC
34268 this.a = new BN(conf.a, 16).toRed(this.red);
34269 this.b = new BN(conf.b, 16).toRed(this.red);
34270 this.tinv = this.two.redInvm();
ab78acc6 34271
8b095871
IC
34272 this.zeroA = this.a.fromRed().cmpn(0) === 0;
34273 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
ab78acc6 34274
8b095871
IC
34275 // If the curve is endomorphic, precalculate beta and lambda
34276 this.endo = this._getEndomorphism(conf);
34277 this._endoWnafT1 = new Array(4);
34278 this._endoWnafT2 = new Array(4);
ebd8d4e8 34279}
8b095871
IC
34280inherits(ShortCurve, Base);
34281module.exports = ShortCurve;
ebd8d4e8 34282
8b095871
IC
34283ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
34284 // No efficient endomorphism
34285 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
34286 return;
ebd8d4e8 34287
8b095871
IC
34288 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
34289 var beta;
34290 var lambda;
34291 if (conf.beta) {
34292 beta = new BN(conf.beta, 16).toRed(this.red);
34293 } else {
34294 var betas = this._getEndoRoots(this.p);
34295 // Choose the smallest beta
34296 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
34297 beta = beta.toRed(this.red);
34298 }
34299 if (conf.lambda) {
34300 lambda = new BN(conf.lambda, 16);
34301 } else {
34302 // Choose the lambda that is matching selected beta
34303 var lambdas = this._getEndoRoots(this.n);
34304 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
34305 lambda = lambdas[0];
34306 } else {
34307 lambda = lambdas[1];
34308 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
34309 }
34310 }
ab78acc6 34311
8b095871
IC
34312 // Get basis vectors, used for balanced length-two representation
34313 var basis;
34314 if (conf.basis) {
34315 basis = conf.basis.map(function(vec) {
34316 return {
34317 a: new BN(vec.a, 16),
34318 b: new BN(vec.b, 16)
34319 };
34320 });
34321 } else {
34322 basis = this._getEndoBasis(lambda);
34323 }
ab78acc6 34324
8b095871
IC
34325 return {
34326 beta: beta,
34327 lambda: lambda,
34328 basis: basis
34329 };
34330};
ab78acc6 34331
8b095871
IC
34332ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
34333 // Find roots of for x^2 + x + 1 in F
34334 // Root = (-1 +- Sqrt(-3)) / 2
34335 //
34336 var red = num === this.p ? this.red : BN.mont(num);
34337 var tinv = new BN(2).toRed(red).redInvm();
34338 var ntinv = tinv.redNeg();
ab78acc6 34339
8b095871 34340 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
ab78acc6 34341
8b095871
IC
34342 var l1 = ntinv.redAdd(s).fromRed();
34343 var l2 = ntinv.redSub(s).fromRed();
34344 return [ l1, l2 ];
34345};
ab78acc6 34346
8b095871
IC
34347ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
34348 // aprxSqrt >= sqrt(this.n)
34349 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
34350
34351 // 3.74
34352 // Run EGCD, until r(L + 1) < aprxSqrt
34353 var u = lambda;
34354 var v = this.n.clone();
34355 var x1 = new BN(1);
34356 var y1 = new BN(0);
34357 var x2 = new BN(0);
34358 var y2 = new BN(1);
34359
34360 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
34361 var a0;
34362 var b0;
34363 // First vector
34364 var a1;
34365 var b1;
34366 // Second vector
34367 var a2;
34368 var b2;
34369
34370 var prevR;
34371 var i = 0;
34372 var r;
34373 var x;
34374 while (u.cmpn(0) !== 0) {
34375 var q = v.div(u);
34376 r = v.sub(q.mul(u));
34377 x = x2.sub(q.mul(x1));
34378 var y = y2.sub(q.mul(y1));
34379
34380 if (!a1 && r.cmp(aprxSqrt) < 0) {
34381 a0 = prevR.neg();
34382 b0 = x1;
34383 a1 = r.neg();
34384 b1 = x;
34385 } else if (a1 && ++i === 2) {
34386 break;
ab78acc6 34387 }
8b095871 34388 prevR = r;
ab78acc6 34389
8b095871
IC
34390 v = u;
34391 u = r;
34392 x2 = x1;
34393 x1 = x;
34394 y2 = y1;
34395 y1 = y;
ebd8d4e8 34396 }
8b095871
IC
34397 a2 = r.neg();
34398 b2 = x;
ab78acc6 34399
8b095871
IC
34400 var len1 = a1.sqr().add(b1.sqr());
34401 var len2 = a2.sqr().add(b2.sqr());
34402 if (len2.cmp(len1) >= 0) {
34403 a2 = a0;
34404 b2 = b0;
34405 }
ebd8d4e8 34406
8b095871
IC
34407 // Normalize signs
34408 if (a1.negative) {
34409 a1 = a1.neg();
34410 b1 = b1.neg();
34411 }
34412 if (a2.negative) {
34413 a2 = a2.neg();
34414 b2 = b2.neg();
34415 }
ebd8d4e8 34416
8b095871
IC
34417 return [
34418 { a: a1, b: b1 },
34419 { a: a2, b: b2 }
34420 ];
34421};
ab78acc6 34422
8b095871
IC
34423ShortCurve.prototype._endoSplit = function _endoSplit(k) {
34424 var basis = this.endo.basis;
34425 var v1 = basis[0];
34426 var v2 = basis[1];
ab78acc6 34427
8b095871
IC
34428 var c1 = v2.b.mul(k).divRound(this.n);
34429 var c2 = v1.b.neg().mul(k).divRound(this.n);
ab78acc6 34430
8b095871
IC
34431 var p1 = c1.mul(v1.a);
34432 var p2 = c2.mul(v2.a);
34433 var q1 = c1.mul(v1.b);
34434 var q2 = c2.mul(v2.b);
ab78acc6 34435
8b095871
IC
34436 // Calculate answer
34437 var k1 = k.sub(p1).sub(p2);
34438 var k2 = q1.add(q2).neg();
34439 return { k1: k1, k2: k2 };
34440};
ab78acc6 34441
8b095871
IC
34442ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
34443 x = new BN(x, 16);
34444 if (!x.red)
34445 x = x.toRed(this.red);
ab78acc6 34446
8b095871
IC
34447 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
34448 var y = y2.redSqrt();
34449 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
34450 throw new Error('invalid point');
ab78acc6 34451
8b095871
IC
34452 // XXX Is there any way to tell if the number is odd without converting it
34453 // to non-red form?
34454 var isOdd = y.fromRed().isOdd();
34455 if (odd && !isOdd || !odd && isOdd)
34456 y = y.redNeg();
ab78acc6 34457
8b095871
IC
34458 return this.point(x, y);
34459};
ab78acc6 34460
8b095871
IC
34461ShortCurve.prototype.validate = function validate(point) {
34462 if (point.inf)
34463 return true;
ab78acc6 34464
8b095871
IC
34465 var x = point.x;
34466 var y = point.y;
ab78acc6 34467
8b095871
IC
34468 var ax = this.a.redMul(x);
34469 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
34470 return y.redSqr().redISub(rhs).cmpn(0) === 0;
34471};
ab78acc6 34472
8b095871
IC
34473ShortCurve.prototype._endoWnafMulAdd =
34474 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
34475 var npoints = this._endoWnafT1;
34476 var ncoeffs = this._endoWnafT2;
34477 for (var i = 0; i < points.length; i++) {
34478 var split = this._endoSplit(coeffs[i]);
34479 var p = points[i];
34480 var beta = p._getBeta();
ab78acc6 34481
8b095871
IC
34482 if (split.k1.negative) {
34483 split.k1.ineg();
34484 p = p.neg(true);
34485 }
34486 if (split.k2.negative) {
34487 split.k2.ineg();
34488 beta = beta.neg(true);
ab78acc6 34489 }
ab78acc6 34490
8b095871
IC
34491 npoints[i * 2] = p;
34492 npoints[i * 2 + 1] = beta;
34493 ncoeffs[i * 2] = split.k1;
34494 ncoeffs[i * 2 + 1] = split.k2;
34495 }
34496 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
ab78acc6 34497
8b095871
IC
34498 // Clean-up references to points and coefficients
34499 for (var j = 0; j < i * 2; j++) {
34500 npoints[j] = null;
34501 ncoeffs[j] = null;
34502 }
34503 return res;
34504};
34505
34506function Point(curve, x, y, isRed) {
34507 Base.BasePoint.call(this, curve, 'affine');
34508 if (x === null && y === null) {
34509 this.x = null;
34510 this.y = null;
34511 this.inf = true;
34512 } else {
34513 this.x = new BN(x, 16);
34514 this.y = new BN(y, 16);
34515 // Force redgomery representation when loading from JSON
34516 if (isRed) {
34517 this.x.forceRed(this.curve.red);
34518 this.y.forceRed(this.curve.red);
ab78acc6 34519 }
8b095871
IC
34520 if (!this.x.red)
34521 this.x = this.x.toRed(this.curve.red);
34522 if (!this.y.red)
34523 this.y = this.y.toRed(this.curve.red);
34524 this.inf = false;
34525 }
34526}
34527inherits(Point, Base.BasePoint);
ab78acc6 34528
8b095871
IC
34529ShortCurve.prototype.point = function point(x, y, isRed) {
34530 return new Point(this, x, y, isRed);
34531};
ab78acc6 34532
8b095871
IC
34533ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
34534 return Point.fromJSON(this, obj, red);
34535};
ab78acc6 34536
8b095871
IC
34537Point.prototype._getBeta = function _getBeta() {
34538 if (!this.curve.endo)
34539 return;
ab78acc6 34540
8b095871
IC
34541 var pre = this.precomputed;
34542 if (pre && pre.beta)
34543 return pre.beta;
ab78acc6 34544
8b095871
IC
34545 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
34546 if (pre) {
34547 var curve = this.curve;
34548 var endoMul = function(p) {
34549 return curve.point(p.x.redMul(curve.endo.beta), p.y);
34550 };
34551 pre.beta = beta;
34552 beta.precomputed = {
34553 beta: null,
34554 naf: pre.naf && {
34555 wnd: pre.naf.wnd,
34556 points: pre.naf.points.map(endoMul)
34557 },
34558 doubles: pre.doubles && {
34559 step: pre.doubles.step,
34560 points: pre.doubles.points.map(endoMul)
34561 }
ab78acc6 34562 };
ab78acc6 34563 }
8b095871 34564 return beta;
ab78acc6
IC
34565};
34566
8b095871
IC
34567Point.prototype.toJSON = function toJSON() {
34568 if (!this.precomputed)
34569 return [ this.x, this.y ];
ab78acc6 34570
8b095871
IC
34571 return [ this.x, this.y, this.precomputed && {
34572 doubles: this.precomputed.doubles && {
34573 step: this.precomputed.doubles.step,
34574 points: this.precomputed.doubles.points.slice(1)
34575 },
34576 naf: this.precomputed.naf && {
34577 wnd: this.precomputed.naf.wnd,
34578 points: this.precomputed.naf.points.slice(1)
34579 }
34580 } ];
34581};
ab78acc6 34582
8b095871
IC
34583Point.fromJSON = function fromJSON(curve, obj, red) {
34584 if (typeof obj === 'string')
34585 obj = JSON.parse(obj);
34586 var res = curve.point(obj[0], obj[1], red);
34587 if (!obj[2])
34588 return res;
ab78acc6 34589
8b095871
IC
34590 function obj2point(obj) {
34591 return curve.point(obj[0], obj[1], red);
34592 }
34593
34594 var pre = obj[2];
34595 res.precomputed = {
34596 beta: null,
34597 doubles: pre.doubles && {
34598 step: pre.doubles.step,
34599 points: [ res ].concat(pre.doubles.points.map(obj2point))
34600 },
34601 naf: pre.naf && {
34602 wnd: pre.naf.wnd,
34603 points: [ res ].concat(pre.naf.points.map(obj2point))
ab78acc6 34604 }
8b095871
IC
34605 };
34606 return res;
34607};
ab78acc6 34608
8b095871
IC
34609Point.prototype.inspect = function inspect() {
34610 if (this.isInfinity())
34611 return '<EC Point Infinity>';
34612 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
34613 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
34614};
ab78acc6 34615
8b095871
IC
34616Point.prototype.isInfinity = function isInfinity() {
34617 return this.inf;
34618};
ebd8d4e8 34619
8b095871
IC
34620Point.prototype.add = function add(p) {
34621 // O + P = P
34622 if (this.inf)
34623 return p;
ab78acc6 34624
8b095871
IC
34625 // P + O = P
34626 if (p.inf)
34627 return this;
ab78acc6 34628
8b095871
IC
34629 // P + P = 2P
34630 if (this.eq(p))
34631 return this.dbl();
ab78acc6 34632
8b095871
IC
34633 // P + (-P) = O
34634 if (this.neg().eq(p))
34635 return this.curve.point(null, null);
ab78acc6 34636
8b095871
IC
34637 // P + Q = O
34638 if (this.x.cmp(p.x) === 0)
34639 return this.curve.point(null, null);
ebd8d4e8 34640
8b095871
IC
34641 var c = this.y.redSub(p.y);
34642 if (c.cmpn(0) !== 0)
34643 c = c.redMul(this.x.redSub(p.x).redInvm());
34644 var nx = c.redSqr().redISub(this.x).redISub(p.x);
34645 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
34646 return this.curve.point(nx, ny);
34647};
ab78acc6 34648
8b095871
IC
34649Point.prototype.dbl = function dbl() {
34650 if (this.inf)
34651 return this;
ebd8d4e8 34652
8b095871
IC
34653 // 2P = O
34654 var ys1 = this.y.redAdd(this.y);
34655 if (ys1.cmpn(0) === 0)
34656 return this.curve.point(null, null);
ebd8d4e8 34657
8b095871 34658 var a = this.curve.a;
ebd8d4e8 34659
8b095871
IC
34660 var x2 = this.x.redSqr();
34661 var dyinv = ys1.redInvm();
34662 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
ebd8d4e8 34663
8b095871
IC
34664 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
34665 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
34666 return this.curve.point(nx, ny);
34667};
ebd8d4e8 34668
8b095871
IC
34669Point.prototype.getX = function getX() {
34670 return this.x.fromRed();
34671};
ab78acc6 34672
8b095871
IC
34673Point.prototype.getY = function getY() {
34674 return this.y.fromRed();
34675};
ebd8d4e8 34676
8b095871
IC
34677Point.prototype.mul = function mul(k) {
34678 k = new BN(k, 16);
ebd8d4e8 34679
8b095871
IC
34680 if (this._hasDoubles(k))
34681 return this.curve._fixedNafMul(this, k);
34682 else if (this.curve.endo)
34683 return this.curve._endoWnafMulAdd([ this ], [ k ]);
34684 else
34685 return this.curve._wnafMul(this, k);
34686};
ebd8d4e8 34687
8b095871
IC
34688Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
34689 var points = [ this, p2 ];
34690 var coeffs = [ k1, k2 ];
34691 if (this.curve.endo)
34692 return this.curve._endoWnafMulAdd(points, coeffs);
34693 else
34694 return this.curve._wnafMulAdd(1, points, coeffs, 2);
34695};
ebd8d4e8 34696
8b095871
IC
34697Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
34698 var points = [ this, p2 ];
34699 var coeffs = [ k1, k2 ];
34700 if (this.curve.endo)
34701 return this.curve._endoWnafMulAdd(points, coeffs, true);
34702 else
34703 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
34704};
ebd8d4e8 34705
8b095871
IC
34706Point.prototype.eq = function eq(p) {
34707 return this === p ||
34708 this.inf === p.inf &&
34709 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
34710};
ebd8d4e8 34711
8b095871
IC
34712Point.prototype.neg = function neg(_precompute) {
34713 if (this.inf)
34714 return this;
ebd8d4e8 34715
8b095871
IC
34716 var res = this.curve.point(this.x, this.y.redNeg());
34717 if (_precompute && this.precomputed) {
34718 var pre = this.precomputed;
34719 var negate = function(p) {
34720 return p.neg();
34721 };
34722 res.precomputed = {
34723 naf: pre.naf && {
34724 wnd: pre.naf.wnd,
34725 points: pre.naf.points.map(negate)
34726 },
34727 doubles: pre.doubles && {
34728 step: pre.doubles.step,
34729 points: pre.doubles.points.map(negate)
34730 }
34731 };
34732 }
34733 return res;
34734};
ebd8d4e8 34735
8b095871
IC
34736Point.prototype.toJ = function toJ() {
34737 if (this.inf)
34738 return this.curve.jpoint(null, null, null);
ebd8d4e8 34739
8b095871
IC
34740 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
34741 return res;
34742};
ebd8d4e8 34743
8b095871
IC
34744function JPoint(curve, x, y, z) {
34745 Base.BasePoint.call(this, curve, 'jacobian');
34746 if (x === null && y === null && z === null) {
34747 this.x = this.curve.one;
34748 this.y = this.curve.one;
34749 this.z = new BN(0);
34750 } else {
34751 this.x = new BN(x, 16);
34752 this.y = new BN(y, 16);
34753 this.z = new BN(z, 16);
34754 }
34755 if (!this.x.red)
34756 this.x = this.x.toRed(this.curve.red);
34757 if (!this.y.red)
34758 this.y = this.y.toRed(this.curve.red);
34759 if (!this.z.red)
34760 this.z = this.z.toRed(this.curve.red);
ebd8d4e8 34761
8b095871 34762 this.zOne = this.z === this.curve.one;
ab78acc6 34763}
8b095871 34764inherits(JPoint, Base.BasePoint);
ab78acc6 34765
8b095871
IC
34766ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
34767 return new JPoint(this, x, y, z);
34768};
ab78acc6 34769
8b095871
IC
34770JPoint.prototype.toP = function toP() {
34771 if (this.isInfinity())
34772 return this.curve.point(null, null);
ab78acc6 34773
8b095871
IC
34774 var zinv = this.z.redInvm();
34775 var zinv2 = zinv.redSqr();
34776 var ax = this.x.redMul(zinv2);
34777 var ay = this.y.redMul(zinv2).redMul(zinv);
ab78acc6 34778
8b095871
IC
34779 return this.curve.point(ax, ay);
34780};
ab78acc6 34781
8b095871
IC
34782JPoint.prototype.neg = function neg() {
34783 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
34784};
ab78acc6 34785
8b095871
IC
34786JPoint.prototype.add = function add(p) {
34787 // O + P = P
34788 if (this.isInfinity())
34789 return p;
ab78acc6 34790
8b095871
IC
34791 // P + O = P
34792 if (p.isInfinity())
34793 return this;
ab78acc6 34794
8b095871
IC
34795 // 12M + 4S + 7A
34796 var pz2 = p.z.redSqr();
34797 var z2 = this.z.redSqr();
34798 var u1 = this.x.redMul(pz2);
34799 var u2 = p.x.redMul(z2);
34800 var s1 = this.y.redMul(pz2.redMul(p.z));
34801 var s2 = p.y.redMul(z2.redMul(this.z));
34802
34803 var h = u1.redSub(u2);
34804 var r = s1.redSub(s2);
34805 if (h.cmpn(0) === 0) {
34806 if (r.cmpn(0) !== 0)
34807 return this.curve.jpoint(null, null, null);
34808 else
34809 return this.dbl();
34810 }
ab78acc6 34811
8b095871
IC
34812 var h2 = h.redSqr();
34813 var h3 = h2.redMul(h);
34814 var v = u1.redMul(h2);
ab78acc6 34815
8b095871
IC
34816 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
34817 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
34818 var nz = this.z.redMul(p.z).redMul(h);
ab78acc6 34819
8b095871
IC
34820 return this.curve.jpoint(nx, ny, nz);
34821};
ab78acc6 34822
8b095871
IC
34823JPoint.prototype.mixedAdd = function mixedAdd(p) {
34824 // O + P = P
34825 if (this.isInfinity())
34826 return p.toJ();
ab78acc6 34827
8b095871
IC
34828 // P + O = P
34829 if (p.isInfinity())
34830 return this;
ab78acc6 34831
8b095871
IC
34832 // 8M + 3S + 7A
34833 var z2 = this.z.redSqr();
34834 var u1 = this.x;
34835 var u2 = p.x.redMul(z2);
34836 var s1 = this.y;
34837 var s2 = p.y.redMul(z2).redMul(this.z);
34838
34839 var h = u1.redSub(u2);
34840 var r = s1.redSub(s2);
34841 if (h.cmpn(0) === 0) {
34842 if (r.cmpn(0) !== 0)
34843 return this.curve.jpoint(null, null, null);
34844 else
34845 return this.dbl();
ab78acc6
IC
34846 }
34847
8b095871
IC
34848 var h2 = h.redSqr();
34849 var h3 = h2.redMul(h);
34850 var v = u1.redMul(h2);
ab78acc6 34851
8b095871
IC
34852 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
34853 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
34854 var nz = this.z.redMul(h);
ab78acc6 34855
8b095871
IC
34856 return this.curve.jpoint(nx, ny, nz);
34857};
ab78acc6 34858
8b095871
IC
34859JPoint.prototype.dblp = function dblp(pow) {
34860 if (pow === 0)
34861 return this;
34862 if (this.isInfinity())
34863 return this;
34864 if (!pow)
34865 return this.dbl();
34866
34867 if (this.curve.zeroA || this.curve.threeA) {
34868 var r = this;
34869 for (var i = 0; i < pow; i++)
34870 r = r.dbl();
34871 return r;
34872 }
34873
34874 // 1M + 2S + 1A + N * (4S + 5M + 8A)
34875 // N = 1 => 6M + 6S + 9A
34876 var a = this.curve.a;
34877 var tinv = this.curve.tinv;
34878
34879 var jx = this.x;
34880 var jy = this.y;
34881 var jz = this.z;
34882 var jz4 = jz.redSqr().redSqr();
34883
34884 // Reuse results
34885 var jyd = jy.redAdd(jy);
34886 for (var i = 0; i < pow; i++) {
34887 var jx2 = jx.redSqr();
34888 var jyd2 = jyd.redSqr();
34889 var jyd4 = jyd2.redSqr();
34890 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
34891
34892 var t1 = jx.redMul(jyd2);
34893 var nx = c.redSqr().redISub(t1.redAdd(t1));
34894 var t2 = t1.redISub(nx);
34895 var dny = c.redMul(t2);
34896 dny = dny.redIAdd(dny).redISub(jyd4);
34897 var nz = jyd.redMul(jz);
34898 if (i + 1 < pow)
34899 jz4 = jz4.redMul(jyd4);
34900
34901 jx = nx;
34902 jz = nz;
34903 jyd = dny;
34904 }
34905
34906 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
34907};
ab78acc6 34908
8b095871
IC
34909JPoint.prototype.dbl = function dbl() {
34910 if (this.isInfinity())
34911 return this;
ab78acc6 34912
8b095871
IC
34913 if (this.curve.zeroA)
34914 return this._zeroDbl();
34915 else if (this.curve.threeA)
34916 return this._threeDbl();
34917 else
34918 return this._dbl();
34919};
ab78acc6 34920
8b095871
IC
34921JPoint.prototype._zeroDbl = function _zeroDbl() {
34922 var nx;
34923 var ny;
34924 var nz;
34925 // Z = 1
34926 if (this.zOne) {
34927 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
34928 // #doubling-mdbl-2007-bl
34929 // 1M + 5S + 14A
34930
34931 // XX = X1^2
34932 var xx = this.x.redSqr();
34933 // YY = Y1^2
34934 var yy = this.y.redSqr();
34935 // YYYY = YY^2
34936 var yyyy = yy.redSqr();
34937 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
34938 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
34939 s = s.redIAdd(s);
34940 // M = 3 * XX + a; a = 0
34941 var m = xx.redAdd(xx).redIAdd(xx);
34942 // T = M ^ 2 - 2*S
34943 var t = m.redSqr().redISub(s).redISub(s);
34944
34945 // 8 * YYYY
34946 var yyyy8 = yyyy.redIAdd(yyyy);
34947 yyyy8 = yyyy8.redIAdd(yyyy8);
34948 yyyy8 = yyyy8.redIAdd(yyyy8);
34949
34950 // X3 = T
34951 nx = t;
34952 // Y3 = M * (S - T) - 8 * YYYY
34953 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
34954 // Z3 = 2*Y1
34955 nz = this.y.redAdd(this.y);
34956 } else {
34957 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
34958 // #doubling-dbl-2009-l
34959 // 2M + 5S + 13A
34960
34961 // A = X1^2
34962 var a = this.x.redSqr();
34963 // B = Y1^2
34964 var b = this.y.redSqr();
34965 // C = B^2
34966 var c = b.redSqr();
34967 // D = 2 * ((X1 + B)^2 - A - C)
34968 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
34969 d = d.redIAdd(d);
34970 // E = 3 * A
34971 var e = a.redAdd(a).redIAdd(a);
34972 // F = E^2
34973 var f = e.redSqr();
34974
34975 // 8 * C
34976 var c8 = c.redIAdd(c);
34977 c8 = c8.redIAdd(c8);
34978 c8 = c8.redIAdd(c8);
34979
34980 // X3 = F - 2 * D
34981 nx = f.redISub(d).redISub(d);
34982 // Y3 = E * (D - X3) - 8 * C
34983 ny = e.redMul(d.redISub(nx)).redISub(c8);
34984 // Z3 = 2 * Y1 * Z1
34985 nz = this.y.redMul(this.z);
34986 nz = nz.redIAdd(nz);
34987 }
34988
34989 return this.curve.jpoint(nx, ny, nz);
34990};
ab78acc6 34991
8b095871
IC
34992JPoint.prototype._threeDbl = function _threeDbl() {
34993 var nx;
34994 var ny;
34995 var nz;
34996 // Z = 1
34997 if (this.zOne) {
34998 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
34999 // #doubling-mdbl-2007-bl
35000 // 1M + 5S + 15A
35001
35002 // XX = X1^2
35003 var xx = this.x.redSqr();
35004 // YY = Y1^2
35005 var yy = this.y.redSqr();
35006 // YYYY = YY^2
35007 var yyyy = yy.redSqr();
35008 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
35009 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
35010 s = s.redIAdd(s);
35011 // M = 3 * XX + a
35012 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
35013 // T = M^2 - 2 * S
35014 var t = m.redSqr().redISub(s).redISub(s);
35015 // X3 = T
35016 nx = t;
35017 // Y3 = M * (S - T) - 8 * YYYY
35018 var yyyy8 = yyyy.redIAdd(yyyy);
35019 yyyy8 = yyyy8.redIAdd(yyyy8);
35020 yyyy8 = yyyy8.redIAdd(yyyy8);
35021 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
35022 // Z3 = 2 * Y1
35023 nz = this.y.redAdd(this.y);
35024 } else {
35025 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
35026 // 3M + 5S
35027
35028 // delta = Z1^2
35029 var delta = this.z.redSqr();
35030 // gamma = Y1^2
35031 var gamma = this.y.redSqr();
35032 // beta = X1 * gamma
35033 var beta = this.x.redMul(gamma);
35034 // alpha = 3 * (X1 - delta) * (X1 + delta)
35035 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
35036 alpha = alpha.redAdd(alpha).redIAdd(alpha);
35037 // X3 = alpha^2 - 8 * beta
35038 var beta4 = beta.redIAdd(beta);
35039 beta4 = beta4.redIAdd(beta4);
35040 var beta8 = beta4.redAdd(beta4);
35041 nx = alpha.redSqr().redISub(beta8);
35042 // Z3 = (Y1 + Z1)^2 - gamma - delta
35043 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
35044 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
35045 var ggamma8 = gamma.redSqr();
35046 ggamma8 = ggamma8.redIAdd(ggamma8);
35047 ggamma8 = ggamma8.redIAdd(ggamma8);
35048 ggamma8 = ggamma8.redIAdd(ggamma8);
35049 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
35050 }
35051
35052 return this.curve.jpoint(nx, ny, nz);
35053};
ab78acc6 35054
8b095871
IC
35055JPoint.prototype._dbl = function _dbl() {
35056 var a = this.curve.a;
ab78acc6 35057
8b095871
IC
35058 // 4M + 6S + 10A
35059 var jx = this.x;
35060 var jy = this.y;
35061 var jz = this.z;
35062 var jz4 = jz.redSqr().redSqr();
ab78acc6 35063
8b095871
IC
35064 var jx2 = jx.redSqr();
35065 var jy2 = jy.redSqr();
ebd8d4e8 35066
8b095871 35067 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
ebd8d4e8 35068
8b095871
IC
35069 var jxd4 = jx.redAdd(jx);
35070 jxd4 = jxd4.redIAdd(jxd4);
35071 var t1 = jxd4.redMul(jy2);
35072 var nx = c.redSqr().redISub(t1.redAdd(t1));
35073 var t2 = t1.redISub(nx);
ebd8d4e8 35074
8b095871
IC
35075 var jyd8 = jy2.redSqr();
35076 jyd8 = jyd8.redIAdd(jyd8);
35077 jyd8 = jyd8.redIAdd(jyd8);
35078 jyd8 = jyd8.redIAdd(jyd8);
35079 var ny = c.redMul(t2).redISub(jyd8);
35080 var nz = jy.redAdd(jy).redMul(jz);
ebd8d4e8 35081
8b095871
IC
35082 return this.curve.jpoint(nx, ny, nz);
35083};
ebd8d4e8 35084
8b095871
IC
35085JPoint.prototype.trpl = function trpl() {
35086 if (!this.curve.zeroA)
35087 return this.dbl().add(this);
35088
35089 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
35090 // 5M + 10S + ...
35091
35092 // XX = X1^2
35093 var xx = this.x.redSqr();
35094 // YY = Y1^2
35095 var yy = this.y.redSqr();
35096 // ZZ = Z1^2
35097 var zz = this.z.redSqr();
35098 // YYYY = YY^2
35099 var yyyy = yy.redSqr();
35100 // M = 3 * XX + a * ZZ2; a = 0
35101 var m = xx.redAdd(xx).redIAdd(xx);
35102 // MM = M^2
35103 var mm = m.redSqr();
35104 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
35105 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
35106 e = e.redIAdd(e);
35107 e = e.redAdd(e).redIAdd(e);
35108 e = e.redISub(mm);
35109 // EE = E^2
35110 var ee = e.redSqr();
35111 // T = 16*YYYY
35112 var t = yyyy.redIAdd(yyyy);
35113 t = t.redIAdd(t);
35114 t = t.redIAdd(t);
35115 t = t.redIAdd(t);
35116 // U = (M + E)^2 - MM - EE - T
35117 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
35118 // X3 = 4 * (X1 * EE - 4 * YY * U)
35119 var yyu4 = yy.redMul(u);
35120 yyu4 = yyu4.redIAdd(yyu4);
35121 yyu4 = yyu4.redIAdd(yyu4);
35122 var nx = this.x.redMul(ee).redISub(yyu4);
35123 nx = nx.redIAdd(nx);
35124 nx = nx.redIAdd(nx);
35125 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
35126 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
35127 ny = ny.redIAdd(ny);
35128 ny = ny.redIAdd(ny);
35129 ny = ny.redIAdd(ny);
35130 // Z3 = (Z1 + E)^2 - ZZ - EE
35131 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
35132
35133 return this.curve.jpoint(nx, ny, nz);
35134};
ebd8d4e8 35135
8b095871
IC
35136JPoint.prototype.mul = function mul(k, kbase) {
35137 k = new BN(k, kbase);
ebd8d4e8 35138
8b095871
IC
35139 return this.curve._wnafMul(this, k);
35140};
ebd8d4e8 35141
8b095871
IC
35142JPoint.prototype.eq = function eq(p) {
35143 if (p.type === 'affine')
35144 return this.eq(p.toJ());
ebd8d4e8 35145
8b095871
IC
35146 if (this === p)
35147 return true;
ebd8d4e8 35148
8b095871
IC
35149 // x1 * z2^2 == x2 * z1^2
35150 var z2 = this.z.redSqr();
35151 var pz2 = p.z.redSqr();
35152 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
35153 return false;
ebd8d4e8 35154
8b095871
IC
35155 // y1 * z2^3 == y2 * z1^3
35156 var z3 = z2.redMul(this.z);
35157 var pz3 = pz2.redMul(p.z);
35158 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
35159};
ab78acc6 35160
8b095871
IC
35161JPoint.prototype.eqXToP = function eqXToP(x) {
35162 var zs = this.z.redSqr();
35163 var rx = x.toRed(this.curve.red).redMul(zs);
35164 if (this.x.cmp(rx) === 0)
35165 return true;
ebd8d4e8 35166
8b095871
IC
35167 var xc = x.clone();
35168 var t = this.curve.redN.redMul(zs);
35169 for (;;) {
35170 xc.iadd(this.curve.n);
35171 if (xc.cmp(this.curve.p) >= 0)
35172 return false;
ebd8d4e8 35173
8b095871
IC
35174 rx.redIAdd(t);
35175 if (this.x.cmp(rx) === 0)
35176 return true;
35177 }
35178 return false;
35179};
ebd8d4e8 35180
8b095871
IC
35181JPoint.prototype.inspect = function inspect() {
35182 if (this.isInfinity())
35183 return '<EC JPoint Infinity>';
35184 return '<EC JPoint x: ' + this.x.toString(16, 2) +
35185 ' y: ' + this.y.toString(16, 2) +
35186 ' z: ' + this.z.toString(16, 2) + '>';
35187};
ebd8d4e8 35188
8b095871
IC
35189JPoint.prototype.isInfinity = function isInfinity() {
35190 // XXX This code assumes that zero is always zero in red
35191 return this.z.cmpn(0) === 0;
35192};
ebd8d4e8 35193
8b095871
IC
35194},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
35195'use strict';
ebd8d4e8 35196
8b095871 35197var curves = exports;
ebd8d4e8 35198
8b095871
IC
35199var hash = require('hash.js');
35200var elliptic = require('../elliptic');
ebd8d4e8 35201
8b095871 35202var assert = elliptic.utils.assert;
ebd8d4e8 35203
8b095871
IC
35204function PresetCurve(options) {
35205 if (options.type === 'short')
35206 this.curve = new elliptic.curve.short(options);
35207 else if (options.type === 'edwards')
35208 this.curve = new elliptic.curve.edwards(options);
35209 else
35210 this.curve = new elliptic.curve.mont(options);
35211 this.g = this.curve.g;
35212 this.n = this.curve.n;
35213 this.hash = options.hash;
35214
35215 assert(this.g.validate(), 'Invalid curve');
35216 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
35217}
35218curves.PresetCurve = PresetCurve;
35219
35220function defineCurve(name, options) {
35221 Object.defineProperty(curves, name, {
35222 configurable: true,
35223 enumerable: true,
35224 get: function() {
35225 var curve = new PresetCurve(options);
35226 Object.defineProperty(curves, name, {
35227 configurable: true,
35228 enumerable: true,
35229 value: curve
35230 });
35231 return curve;
35232 }
35233 });
ebd8d4e8
IC
35234}
35235
8b095871
IC
35236defineCurve('p192', {
35237 type: 'short',
35238 prime: 'p192',
35239 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
35240 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
35241 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
35242 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
35243 hash: hash.sha256,
35244 gRed: false,
35245 g: [
35246 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
35247 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
35248 ]
35249});
ebd8d4e8 35250
8b095871
IC
35251defineCurve('p224', {
35252 type: 'short',
35253 prime: 'p224',
35254 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
35255 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
35256 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
35257 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
35258 hash: hash.sha256,
35259 gRed: false,
35260 g: [
35261 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
35262 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
35263 ]
35264});
ebd8d4e8 35265
8b095871
IC
35266defineCurve('p256', {
35267 type: 'short',
35268 prime: null,
35269 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
35270 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
35271 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
35272 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
35273 hash: hash.sha256,
35274 gRed: false,
35275 g: [
35276 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
35277 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
35278 ]
35279});
ebd8d4e8 35280
8b095871
IC
35281defineCurve('p384', {
35282 type: 'short',
35283 prime: null,
35284 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35285 'fffffffe ffffffff 00000000 00000000 ffffffff',
35286 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35287 'fffffffe ffffffff 00000000 00000000 fffffffc',
35288 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
35289 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
35290 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
35291 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
35292 hash: hash.sha384,
35293 gRed: false,
35294 g: [
35295 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
35296 '5502f25d bf55296c 3a545e38 72760ab7',
35297 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
35298 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
35299 ]
35300});
ebd8d4e8 35301
8b095871
IC
35302defineCurve('p521', {
35303 type: 'short',
35304 prime: null,
35305 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35306 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35307 'ffffffff ffffffff ffffffff ffffffff ffffffff',
35308 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35309 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35310 'ffffffff ffffffff ffffffff ffffffff fffffffc',
35311 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
35312 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
35313 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
35314 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35315 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
35316 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
35317 hash: hash.sha512,
35318 gRed: false,
35319 g: [
35320 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
35321 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
35322 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
35323 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
35324 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
35325 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
35326 ]
35327});
ebd8d4e8 35328
8b095871
IC
35329defineCurve('curve25519', {
35330 type: 'mont',
35331 prime: 'p25519',
35332 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
35333 a: '76d06',
35334 b: '1',
35335 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
35336 hash: hash.sha256,
35337 gRed: false,
35338 g: [
35339 '9'
35340 ]
35341});
ebd8d4e8 35342
8b095871
IC
35343defineCurve('ed25519', {
35344 type: 'edwards',
35345 prime: 'p25519',
35346 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
35347 a: '-1',
35348 c: '1',
35349 // -121665 * (121666^(-1)) (mod P)
35350 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
35351 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
35352 hash: hash.sha256,
35353 gRed: false,
35354 g: [
35355 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
35356
35357 // 4/5
35358 '6666666666666666666666666666666666666666666666666666666666666658'
35359 ]
35360});
ebd8d4e8 35361
8b095871
IC
35362var pre;
35363try {
35364 pre = require('./precomputed/secp256k1');
35365} catch (e) {
35366 pre = undefined;
35367}
35368
35369defineCurve('secp256k1', {
35370 type: 'short',
35371 prime: 'k256',
35372 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
35373 a: '0',
35374 b: '7',
35375 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
35376 h: '1',
35377 hash: hash.sha256,
35378
35379 // Precomputed endomorphism
35380 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
35381 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
35382 basis: [
35383 {
35384 a: '3086d221a7d46bcde86c90e49284eb15',
35385 b: '-e4437ed6010e88286f547fa90abfe4c3'
35386 },
35387 {
35388 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
35389 b: '3086d221a7d46bcde86c90e49284eb15'
35390 }
35391 ],
ebd8d4e8 35392
8b095871
IC
35393 gRed: false,
35394 g: [
35395 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
35396 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
35397 pre
35398 ]
35399});
ebd8d4e8 35400
8b095871
IC
35401},{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
35402'use strict';
ebd8d4e8 35403
8b095871
IC
35404var BN = require('bn.js');
35405var elliptic = require('../../elliptic');
35406var utils = elliptic.utils;
35407var assert = utils.assert;
ebd8d4e8 35408
8b095871
IC
35409var KeyPair = require('./key');
35410var Signature = require('./signature');
ebd8d4e8 35411
8b095871
IC
35412function EC(options) {
35413 if (!(this instanceof EC))
35414 return new EC(options);
ebd8d4e8 35415
8b095871
IC
35416 // Shortcut `elliptic.ec(curve-name)`
35417 if (typeof options === 'string') {
35418 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
35419
35420 options = elliptic.curves[options];
ebd8d4e8
IC
35421 }
35422
8b095871
IC
35423 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
35424 if (options instanceof elliptic.curves.PresetCurve)
35425 options = { curve: options };
ebd8d4e8 35426
8b095871
IC
35427 this.curve = options.curve.curve;
35428 this.n = this.curve.n;
35429 this.nh = this.n.ushrn(1);
35430 this.g = this.curve.g;
ebd8d4e8 35431
8b095871
IC
35432 // Point on curve
35433 this.g = options.curve.g;
35434 this.g.precompute(options.curve.n.bitLength() + 1);
ebd8d4e8 35435
8b095871
IC
35436 // Hash for function for DRBG
35437 this.hash = options.hash || options.curve.hash;
ebd8d4e8 35438}
8b095871 35439module.exports = EC;
ebd8d4e8 35440
8b095871
IC
35441EC.prototype.keyPair = function keyPair(options) {
35442 return new KeyPair(this, options);
35443};
35444
35445EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
35446 return KeyPair.fromPrivate(this, priv, enc);
35447};
35448
35449EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
35450 return KeyPair.fromPublic(this, pub, enc);
35451};
35452
35453EC.prototype.genKeyPair = function genKeyPair(options) {
35454 if (!options)
35455 options = {};
35456
35457 // Instantiate Hmac_DRBG
35458 var drbg = new elliptic.hmacDRBG({
35459 hash: this.hash,
35460 pers: options.pers,
35461 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
35462 nonce: this.n.toArray()
35463 });
ebd8d4e8 35464
8b095871
IC
35465 var bytes = this.n.byteLength();
35466 var ns2 = this.n.sub(new BN(2));
35467 do {
35468 var priv = new BN(drbg.generate(bytes));
35469 if (priv.cmp(ns2) > 0)
35470 continue;
ebd8d4e8 35471
8b095871
IC
35472 priv.iaddn(1);
35473 return this.keyFromPrivate(priv);
35474 } while (true);
35475};
ebd8d4e8 35476
8b095871
IC
35477EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
35478 var delta = msg.byteLength() * 8 - this.n.bitLength();
35479 if (delta > 0)
35480 msg = msg.ushrn(delta);
35481 if (!truncOnly && msg.cmp(this.n) >= 0)
35482 return msg.sub(this.n);
35483 else
35484 return msg;
35485};
ebd8d4e8 35486
8b095871
IC
35487EC.prototype.sign = function sign(msg, key, enc, options) {
35488 if (typeof enc === 'object') {
35489 options = enc;
35490 enc = null;
ebd8d4e8 35491 }
8b095871
IC
35492 if (!options)
35493 options = {};
ebd8d4e8 35494
8b095871
IC
35495 key = this.keyFromPrivate(key, enc);
35496 msg = this._truncateToN(new BN(msg, 16));
ebd8d4e8 35497
8b095871
IC
35498 // Zero-extend key to provide enough entropy
35499 var bytes = this.n.byteLength();
35500 var bkey = key.getPrivate().toArray('be', bytes);
ab78acc6 35501
8b095871
IC
35502 // Zero-extend nonce to have the same byte size as N
35503 var nonce = msg.toArray('be', bytes);
ab78acc6 35504
8b095871
IC
35505 // Instantiate Hmac_DRBG
35506 var drbg = new elliptic.hmacDRBG({
35507 hash: this.hash,
35508 entropy: bkey,
35509 nonce: nonce,
35510 pers: options.pers,
35511 persEnc: options.persEnc
35512 });
ab78acc6 35513
8b095871
IC
35514 // Number of bytes to generate
35515 var ns1 = this.n.sub(new BN(1));
ebd8d4e8 35516
8b095871
IC
35517 for (var iter = 0; true; iter++) {
35518 var k = options.k ?
35519 options.k(iter) :
35520 new BN(drbg.generate(this.n.byteLength()));
35521 k = this._truncateToN(k, true);
35522 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
35523 continue;
ebd8d4e8 35524
8b095871
IC
35525 var kp = this.g.mul(k);
35526 if (kp.isInfinity())
35527 continue;
ebd8d4e8 35528
8b095871
IC
35529 var kpX = kp.getX();
35530 var r = kpX.umod(this.n);
35531 if (r.cmpn(0) === 0)
35532 continue;
ebd8d4e8 35533
8b095871
IC
35534 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
35535 s = s.umod(this.n);
35536 if (s.cmpn(0) === 0)
35537 continue;
ebd8d4e8 35538
8b095871
IC
35539 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
35540 (kpX.cmp(r) !== 0 ? 2 : 0);
ebd8d4e8 35541
8b095871
IC
35542 // Use complement of `s`, if it is > `n / 2`
35543 if (options.canonical && s.cmp(this.nh) > 0) {
35544 s = this.n.sub(s);
35545 recoveryParam ^= 1;
35546 }
ebd8d4e8 35547
8b095871
IC
35548 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
35549 }
35550};
ebd8d4e8 35551
8b095871
IC
35552EC.prototype.verify = function verify(msg, signature, key, enc) {
35553 msg = this._truncateToN(new BN(msg, 16));
35554 key = this.keyFromPublic(key, enc);
35555 signature = new Signature(signature, 'hex');
ebd8d4e8 35556
8b095871
IC
35557 // Perform primitive values validation
35558 var r = signature.r;
35559 var s = signature.s;
35560 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
35561 return false;
35562 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
35563 return false;
ebd8d4e8 35564
8b095871
IC
35565 // Validate signature
35566 var sinv = s.invm(this.n);
35567 var u1 = sinv.mul(msg).umod(this.n);
35568 var u2 = sinv.mul(r).umod(this.n);
ebd8d4e8 35569
8b095871
IC
35570 if (!this.curve._maxwellTrick) {
35571 var p = this.g.mulAdd(u1, key.getPublic(), u2);
35572 if (p.isInfinity())
35573 return false;
ebd8d4e8 35574
8b095871
IC
35575 return p.getX().umod(this.n).cmp(r) === 0;
35576 }
ab78acc6 35577
8b095871
IC
35578 // NOTE: Greg Maxwell's trick, inspired by:
35579 // https://git.io/vad3K
ebd8d4e8 35580
8b095871
IC
35581 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
35582 if (p.isInfinity())
35583 return false;
ab78acc6 35584
8b095871
IC
35585 // Compare `p.x` of Jacobian point with `r`,
35586 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
35587 // inverse of `p.z^2`
35588 return p.eqXToP(r);
35589};
ab78acc6 35590
8b095871
IC
35591EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
35592 assert((3 & j) === j, 'The recovery param is more than two bits');
35593 signature = new Signature(signature, enc);
ab78acc6 35594
8b095871
IC
35595 var n = this.n;
35596 var e = new BN(msg);
35597 var r = signature.r;
35598 var s = signature.s;
ab78acc6 35599
8b095871
IC
35600 // A set LSB signifies that the y-coordinate is odd
35601 var isYOdd = j & 1;
35602 var isSecondKey = j >> 1;
35603 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
35604 throw new Error('Unable to find sencond key candinate');
35605
35606 // 1.1. Let x = r + jn.
35607 if (isSecondKey)
35608 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
35609 else
35610 r = this.curve.pointFromX(r, isYOdd);
ab78acc6 35611
8b095871
IC
35612 var rInv = signature.r.invm(n);
35613 var s1 = n.sub(e).mul(rInv).umod(n);
35614 var s2 = s.mul(rInv).umod(n);
ab78acc6 35615
8b095871
IC
35616 // 1.6.1 Compute Q = r^-1 (sR - eG)
35617 // Q = r^-1 (sR + -eG)
35618 return this.g.mulAdd(s1, r, s2);
35619};
ab78acc6 35620
8b095871
IC
35621EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
35622 signature = new Signature(signature, enc);
35623 if (signature.recoveryParam !== null)
35624 return signature.recoveryParam;
ab78acc6 35625
8b095871
IC
35626 for (var i = 0; i < 4; i++) {
35627 var Qprime;
35628 try {
35629 Qprime = this.recoverPubKey(e, signature, i);
35630 } catch (e) {
35631 continue;
ab78acc6 35632 }
ab78acc6 35633
8b095871
IC
35634 if (Qprime.eq(Q))
35635 return i;
35636 }
35637 throw new Error('Unable to find valid recovery factor');
35638};
ebd8d4e8 35639
8b095871
IC
35640},{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
35641'use strict';
ebd8d4e8 35642
8b095871
IC
35643var BN = require('bn.js');
35644var elliptic = require('../../elliptic');
35645var utils = elliptic.utils;
35646var assert = utils.assert;
ebd8d4e8 35647
8b095871
IC
35648function KeyPair(ec, options) {
35649 this.ec = ec;
35650 this.priv = null;
35651 this.pub = null;
ebd8d4e8 35652
8b095871
IC
35653 // KeyPair(ec, { priv: ..., pub: ... })
35654 if (options.priv)
35655 this._importPrivate(options.priv, options.privEnc);
35656 if (options.pub)
35657 this._importPublic(options.pub, options.pubEnc);
35658}
35659module.exports = KeyPair;
ebd8d4e8 35660
8b095871
IC
35661KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
35662 if (pub instanceof KeyPair)
35663 return pub;
ebd8d4e8 35664
8b095871
IC
35665 return new KeyPair(ec, {
35666 pub: pub,
35667 pubEnc: enc
35668 });
35669};
ebd8d4e8 35670
8b095871
IC
35671KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
35672 if (priv instanceof KeyPair)
35673 return priv;
ebd8d4e8 35674
8b095871
IC
35675 return new KeyPair(ec, {
35676 priv: priv,
35677 privEnc: enc
35678 });
35679};
ebd8d4e8 35680
8b095871
IC
35681KeyPair.prototype.validate = function validate() {
35682 var pub = this.getPublic();
ebd8d4e8 35683
8b095871
IC
35684 if (pub.isInfinity())
35685 return { result: false, reason: 'Invalid public key' };
35686 if (!pub.validate())
35687 return { result: false, reason: 'Public key is not a point' };
35688 if (!pub.mul(this.ec.curve.n).isInfinity())
35689 return { result: false, reason: 'Public key * N != O' };
ab78acc6 35690
8b095871
IC
35691 return { result: true, reason: null };
35692};
ebd8d4e8 35693
8b095871
IC
35694KeyPair.prototype.getPublic = function getPublic(compact, enc) {
35695 // compact is optional argument
35696 if (typeof compact === 'string') {
35697 enc = compact;
35698 compact = null;
ebd8d4e8
IC
35699 }
35700
8b095871
IC
35701 if (!this.pub)
35702 this.pub = this.ec.g.mul(this.priv);
ebd8d4e8 35703
8b095871
IC
35704 if (!enc)
35705 return this.pub;
ebd8d4e8 35706
8b095871
IC
35707 return this.pub.encode(enc, compact);
35708};
ebd8d4e8 35709
8b095871
IC
35710KeyPair.prototype.getPrivate = function getPrivate(enc) {
35711 if (enc === 'hex')
35712 return this.priv.toString(16, 2);
35713 else
35714 return this.priv;
35715};
ab78acc6 35716
8b095871
IC
35717KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
35718 this.priv = new BN(key, enc || 16);
ab78acc6 35719
8b095871
IC
35720 // Ensure that the priv won't be bigger than n, otherwise we may fail
35721 // in fixed multiplication method
35722 this.priv = this.priv.umod(this.ec.curve.n);
35723};
ab78acc6 35724
8b095871
IC
35725KeyPair.prototype._importPublic = function _importPublic(key, enc) {
35726 if (key.x || key.y) {
35727 // Montgomery points only have an `x` coordinate.
35728 // Weierstrass/Edwards points on the other hand have both `x` and
35729 // `y` coordinates.
35730 if (this.ec.curve.type === 'mont') {
35731 assert(key.x, 'Need x coordinate');
35732 } else if (this.ec.curve.type === 'short' ||
35733 this.ec.curve.type === 'edwards') {
35734 assert(key.x && key.y, 'Need both x and y coordinate');
35735 }
35736 this.pub = this.ec.curve.point(key.x, key.y);
35737 return;
35738 }
35739 this.pub = this.ec.curve.decodePoint(key, enc);
35740};
ebd8d4e8 35741
8b095871
IC
35742// ECDH
35743KeyPair.prototype.derive = function derive(pub) {
35744 return pub.mul(this.priv).getX();
35745};
ebd8d4e8 35746
8b095871
IC
35747// ECDSA
35748KeyPair.prototype.sign = function sign(msg, enc, options) {
35749 return this.ec.sign(msg, this, enc, options);
35750};
ebd8d4e8 35751
8b095871
IC
35752KeyPair.prototype.verify = function verify(msg, signature) {
35753 return this.ec.verify(msg, signature, this);
35754};
ebd8d4e8 35755
8b095871
IC
35756KeyPair.prototype.inspect = function inspect() {
35757 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
35758 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
35759};
ebd8d4e8 35760
8b095871
IC
35761},{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
35762'use strict';
ebd8d4e8 35763
8b095871 35764var BN = require('bn.js');
ebd8d4e8 35765
8b095871
IC
35766var elliptic = require('../../elliptic');
35767var utils = elliptic.utils;
35768var assert = utils.assert;
ebd8d4e8 35769
8b095871
IC
35770function Signature(options, enc) {
35771 if (options instanceof Signature)
35772 return options;
ebd8d4e8 35773
8b095871
IC
35774 if (this._importDER(options, enc))
35775 return;
ebd8d4e8 35776
8b095871
IC
35777 assert(options.r && options.s, 'Signature without r or s');
35778 this.r = new BN(options.r, 16);
35779 this.s = new BN(options.s, 16);
35780 if (options.recoveryParam === undefined)
35781 this.recoveryParam = null;
35782 else
35783 this.recoveryParam = options.recoveryParam;
35784}
35785module.exports = Signature;
35786
35787function Position() {
35788 this.place = 0;
35789}
35790
35791function getLength(buf, p) {
35792 var initial = buf[p.place++];
35793 if (!(initial & 0x80)) {
35794 return initial;
35795 }
35796 var octetLen = initial & 0xf;
35797 var val = 0;
35798 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
35799 val <<= 8;
35800 val |= buf[off];
35801 }
35802 p.place = off;
35803 return val;
35804}
35805
35806function rmPadding(buf) {
35807 var i = 0;
35808 var len = buf.length - 1;
35809 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
35810 i++;
35811 }
35812 if (i === 0) {
35813 return buf;
35814 }
35815 return buf.slice(i);
35816}
ebd8d4e8 35817
8b095871
IC
35818Signature.prototype._importDER = function _importDER(data, enc) {
35819 data = utils.toArray(data, enc);
35820 var p = new Position();
35821 if (data[p.place++] !== 0x30) {
35822 return false;
35823 }
35824 var len = getLength(data, p);
35825 if ((len + p.place) !== data.length) {
35826 return false;
35827 }
35828 if (data[p.place++] !== 0x02) {
35829 return false;
35830 }
35831 var rlen = getLength(data, p);
35832 var r = data.slice(p.place, rlen + p.place);
35833 p.place += rlen;
35834 if (data[p.place++] !== 0x02) {
35835 return false;
35836 }
35837 var slen = getLength(data, p);
35838 if (data.length !== slen + p.place) {
35839 return false;
35840 }
35841 var s = data.slice(p.place, slen + p.place);
35842 if (r[0] === 0 && (r[1] & 0x80)) {
35843 r = r.slice(1);
35844 }
35845 if (s[0] === 0 && (s[1] & 0x80)) {
35846 s = s.slice(1);
35847 }
ab78acc6 35848
8b095871
IC
35849 this.r = new BN(r);
35850 this.s = new BN(s);
35851 this.recoveryParam = null;
ebd8d4e8 35852
8b095871
IC
35853 return true;
35854};
ab78acc6 35855
8b095871
IC
35856function constructLength(arr, len) {
35857 if (len < 0x80) {
35858 arr.push(len);
35859 return;
35860 }
35861 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
35862 arr.push(octets | 0x80);
35863 while (--octets) {
35864 arr.push((len >>> (octets << 3)) & 0xff);
35865 }
35866 arr.push(len);
35867}
35868
35869Signature.prototype.toDER = function toDER(enc) {
35870 var r = this.r.toArray();
35871 var s = this.s.toArray();
35872
35873 // Pad values
35874 if (r[0] & 0x80)
35875 r = [ 0 ].concat(r);
35876 // Pad values
35877 if (s[0] & 0x80)
35878 s = [ 0 ].concat(s);
35879
35880 r = rmPadding(r);
35881 s = rmPadding(s);
35882
35883 while (!s[0] && !(s[1] & 0x80)) {
35884 s = s.slice(1);
35885 }
35886 var arr = [ 0x02 ];
35887 constructLength(arr, r.length);
35888 arr = arr.concat(r);
35889 arr.push(0x02);
35890 constructLength(arr, s.length);
35891 var backHalf = arr.concat(s);
35892 var res = [ 0x30 ];
35893 constructLength(res, backHalf.length);
35894 res = res.concat(backHalf);
35895 return utils.encode(res, enc);
35896};
ab78acc6 35897
8b095871
IC
35898},{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
35899'use strict';
ebd8d4e8 35900
8b095871
IC
35901var hash = require('hash.js');
35902var elliptic = require('../../elliptic');
35903var utils = elliptic.utils;
35904var assert = utils.assert;
35905var parseBytes = utils.parseBytes;
35906var KeyPair = require('./key');
35907var Signature = require('./signature');
ab78acc6 35908
8b095871
IC
35909function EDDSA(curve) {
35910 assert(curve === 'ed25519', 'only tested with ed25519 so far');
ebd8d4e8 35911
8b095871
IC
35912 if (!(this instanceof EDDSA))
35913 return new EDDSA(curve);
ab78acc6 35914
8b095871
IC
35915 var curve = elliptic.curves[curve].curve;
35916 this.curve = curve;
35917 this.g = curve.g;
35918 this.g.precompute(curve.n.bitLength() + 1);
ebd8d4e8 35919
8b095871
IC
35920 this.pointClass = curve.point().constructor;
35921 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
35922 this.hash = hash.sha512;
35923}
ebd8d4e8 35924
8b095871 35925module.exports = EDDSA;
ebd8d4e8 35926
8b095871
IC
35927/**
35928* @param {Array|String} message - message bytes
35929* @param {Array|String|KeyPair} secret - secret bytes or a keypair
35930* @returns {Signature} - signature
35931*/
35932EDDSA.prototype.sign = function sign(message, secret) {
35933 message = parseBytes(message);
35934 var key = this.keyFromSecret(secret);
35935 var r = this.hashInt(key.messagePrefix(), message);
35936 var R = this.g.mul(r);
35937 var Rencoded = this.encodePoint(R);
35938 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
35939 .mul(key.priv());
35940 var S = r.add(s_).umod(this.curve.n);
35941 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
35942};
ebd8d4e8 35943
8b095871
IC
35944/**
35945* @param {Array} message - message bytes
35946* @param {Array|String|Signature} sig - sig bytes
35947* @param {Array|String|Point|KeyPair} pub - public key
35948* @returns {Boolean} - true if public key matches sig of message
35949*/
35950EDDSA.prototype.verify = function verify(message, sig, pub) {
35951 message = parseBytes(message);
35952 sig = this.makeSignature(sig);
35953 var key = this.keyFromPublic(pub);
35954 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
35955 var SG = this.g.mul(sig.S());
35956 var RplusAh = sig.R().add(key.pub().mul(h));
35957 return RplusAh.eq(SG);
35958};
ebd8d4e8 35959
8b095871
IC
35960EDDSA.prototype.hashInt = function hashInt() {
35961 var hash = this.hash();
35962 for (var i = 0; i < arguments.length; i++)
35963 hash.update(arguments[i]);
35964 return utils.intFromLE(hash.digest()).umod(this.curve.n);
35965};
ebd8d4e8 35966
8b095871
IC
35967EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
35968 return KeyPair.fromPublic(this, pub);
35969};
ebd8d4e8 35970
8b095871
IC
35971EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
35972 return KeyPair.fromSecret(this, secret);
35973};
35974
35975EDDSA.prototype.makeSignature = function makeSignature(sig) {
35976 if (sig instanceof Signature)
35977 return sig;
35978 return new Signature(this, sig);
35979};
ebd8d4e8
IC
35980
35981/**
8b095871
IC
35982* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
35983*
35984* EDDSA defines methods for encoding and decoding points and integers. These are
35985* helper convenience methods, that pass along to utility functions implied
35986* parameters.
35987*
35988*/
35989EDDSA.prototype.encodePoint = function encodePoint(point) {
35990 var enc = point.getY().toArray('le', this.encodingLength);
35991 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
35992 return enc;
35993};
ebd8d4e8 35994
8b095871
IC
35995EDDSA.prototype.decodePoint = function decodePoint(bytes) {
35996 bytes = utils.parseBytes(bytes);
ebd8d4e8 35997
8b095871
IC
35998 var lastIx = bytes.length - 1;
35999 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
36000 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
ebd8d4e8 36001
8b095871
IC
36002 var y = utils.intFromLE(normed);
36003 return this.curve.pointFromY(y, xIsOdd);
36004};
ebd8d4e8 36005
8b095871
IC
36006EDDSA.prototype.encodeInt = function encodeInt(num) {
36007 return num.toArray('le', this.encodingLength);
36008};
ebd8d4e8 36009
8b095871
IC
36010EDDSA.prototype.decodeInt = function decodeInt(bytes) {
36011 return utils.intFromLE(bytes);
36012};
ebd8d4e8 36013
8b095871
IC
36014EDDSA.prototype.isPoint = function isPoint(val) {
36015 return val instanceof this.pointClass;
36016};
ebd8d4e8 36017
8b095871
IC
36018},{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
36019'use strict';
ebd8d4e8 36020
8b095871
IC
36021var elliptic = require('../../elliptic');
36022var utils = elliptic.utils;
36023var assert = utils.assert;
36024var parseBytes = utils.parseBytes;
36025var cachedProperty = utils.cachedProperty;
ebd8d4e8 36026
8b095871
IC
36027/**
36028* @param {EDDSA} eddsa - instance
36029* @param {Object} params - public/private key parameters
36030*
36031* @param {Array<Byte>} [params.secret] - secret seed bytes
36032* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
36033* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
36034*
36035*/
36036function KeyPair(eddsa, params) {
36037 this.eddsa = eddsa;
36038 this._secret = parseBytes(params.secret);
36039 if (eddsa.isPoint(params.pub))
36040 this._pub = params.pub;
36041 else
36042 this._pubBytes = parseBytes(params.pub);
ebd8d4e8
IC
36043}
36044
8b095871
IC
36045KeyPair.fromPublic = function fromPublic(eddsa, pub) {
36046 if (pub instanceof KeyPair)
36047 return pub;
36048 return new KeyPair(eddsa, { pub: pub });
36049};
ebd8d4e8 36050
8b095871
IC
36051KeyPair.fromSecret = function fromSecret(eddsa, secret) {
36052 if (secret instanceof KeyPair)
36053 return secret;
36054 return new KeyPair(eddsa, { secret: secret });
36055};
ebd8d4e8 36056
8b095871
IC
36057KeyPair.prototype.secret = function secret() {
36058 return this._secret;
36059};
ebd8d4e8 36060
8b095871
IC
36061cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
36062 return this.eddsa.encodePoint(this.pub());
36063});
ebd8d4e8 36064
8b095871
IC
36065cachedProperty(KeyPair, 'pub', function pub() {
36066 if (this._pubBytes)
36067 return this.eddsa.decodePoint(this._pubBytes);
36068 return this.eddsa.g.mul(this.priv());
36069});
ebd8d4e8 36070
8b095871
IC
36071cachedProperty(KeyPair, 'privBytes', function privBytes() {
36072 var eddsa = this.eddsa;
36073 var hash = this.hash();
36074 var lastIx = eddsa.encodingLength - 1;
ebd8d4e8 36075
8b095871
IC
36076 var a = hash.slice(0, eddsa.encodingLength);
36077 a[0] &= 248;
36078 a[lastIx] &= 127;
36079 a[lastIx] |= 64;
ebd8d4e8 36080
8b095871
IC
36081 return a;
36082});
ebd8d4e8 36083
8b095871
IC
36084cachedProperty(KeyPair, 'priv', function priv() {
36085 return this.eddsa.decodeInt(this.privBytes());
36086});
ebd8d4e8 36087
8b095871
IC
36088cachedProperty(KeyPair, 'hash', function hash() {
36089 return this.eddsa.hash().update(this.secret()).digest();
36090});
ebd8d4e8 36091
8b095871
IC
36092cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
36093 return this.hash().slice(this.eddsa.encodingLength);
36094});
ebd8d4e8 36095
8b095871
IC
36096KeyPair.prototype.sign = function sign(message) {
36097 assert(this._secret, 'KeyPair can only verify');
36098 return this.eddsa.sign(message, this);
36099};
ebd8d4e8 36100
8b095871
IC
36101KeyPair.prototype.verify = function verify(message, sig) {
36102 return this.eddsa.verify(message, sig, this);
36103};
ebd8d4e8 36104
8b095871
IC
36105KeyPair.prototype.getSecret = function getSecret(enc) {
36106 assert(this._secret, 'KeyPair is public only');
36107 return utils.encode(this.secret(), enc);
36108};
ebd8d4e8 36109
8b095871
IC
36110KeyPair.prototype.getPublic = function getPublic(enc) {
36111 return utils.encode(this.pubBytes(), enc);
36112};
ebd8d4e8 36113
8b095871 36114module.exports = KeyPair;
ebd8d4e8 36115
8b095871
IC
36116},{"../../elliptic":39}],51:[function(require,module,exports){
36117'use strict';
ebd8d4e8 36118
8b095871
IC
36119var BN = require('bn.js');
36120var elliptic = require('../../elliptic');
36121var utils = elliptic.utils;
36122var assert = utils.assert;
36123var cachedProperty = utils.cachedProperty;
36124var parseBytes = utils.parseBytes;
ebd8d4e8 36125
8b095871
IC
36126/**
36127* @param {EDDSA} eddsa - eddsa instance
36128* @param {Array<Bytes>|Object} sig -
36129* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
36130* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
36131* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
36132* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
36133*/
36134function Signature(eddsa, sig) {
36135 this.eddsa = eddsa;
ebd8d4e8 36136
8b095871
IC
36137 if (typeof sig !== 'object')
36138 sig = parseBytes(sig);
ebd8d4e8 36139
8b095871
IC
36140 if (Array.isArray(sig)) {
36141 sig = {
36142 R: sig.slice(0, eddsa.encodingLength),
36143 S: sig.slice(eddsa.encodingLength)
36144 };
ab78acc6 36145 }
ebd8d4e8 36146
8b095871 36147 assert(sig.R && sig.S, 'Signature without R or S');
ebd8d4e8 36148
8b095871
IC
36149 if (eddsa.isPoint(sig.R))
36150 this._R = sig.R;
36151 if (sig.S instanceof BN)
36152 this._S = sig.S;
36153
36154 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
36155 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
ebd8d4e8
IC
36156}
36157
8b095871
IC
36158cachedProperty(Signature, 'S', function S() {
36159 return this.eddsa.decodeInt(this.Sencoded());
36160});
ab78acc6 36161
8b095871
IC
36162cachedProperty(Signature, 'R', function R() {
36163 return this.eddsa.decodePoint(this.Rencoded());
36164});
ebd8d4e8 36165
8b095871
IC
36166cachedProperty(Signature, 'Rencoded', function Rencoded() {
36167 return this.eddsa.encodePoint(this.R());
36168});
ebd8d4e8 36169
8b095871
IC
36170cachedProperty(Signature, 'Sencoded', function Sencoded() {
36171 return this.eddsa.encodeInt(this.S());
36172});
ebd8d4e8 36173
8b095871
IC
36174Signature.prototype.toBytes = function toBytes() {
36175 return this.Rencoded().concat(this.Sencoded());
36176};
ebd8d4e8 36177
8b095871
IC
36178Signature.prototype.toHex = function toHex() {
36179 return utils.encode(this.toBytes(), 'hex').toUpperCase();
36180};
ebd8d4e8 36181
8b095871 36182module.exports = Signature;
ebd8d4e8 36183
8b095871
IC
36184},{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
36185'use strict';
ebd8d4e8 36186
8b095871
IC
36187var hash = require('hash.js');
36188var elliptic = require('../elliptic');
36189var utils = elliptic.utils;
36190var assert = utils.assert;
ebd8d4e8 36191
8b095871
IC
36192function HmacDRBG(options) {
36193 if (!(this instanceof HmacDRBG))
36194 return new HmacDRBG(options);
36195 this.hash = options.hash;
36196 this.predResist = !!options.predResist;
ab78acc6 36197
8b095871
IC
36198 this.outLen = this.hash.outSize;
36199 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
ab78acc6 36200
8b095871
IC
36201 this.reseed = null;
36202 this.reseedInterval = null;
36203 this.K = null;
36204 this.V = null;
ebd8d4e8 36205
8b095871
IC
36206 var entropy = utils.toArray(options.entropy, options.entropyEnc);
36207 var nonce = utils.toArray(options.nonce, options.nonceEnc);
36208 var pers = utils.toArray(options.pers, options.persEnc);
36209 assert(entropy.length >= (this.minEntropy / 8),
36210 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
36211 this._init(entropy, nonce, pers);
ebd8d4e8 36212}
8b095871 36213module.exports = HmacDRBG;
ebd8d4e8 36214
8b095871
IC
36215HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
36216 var seed = entropy.concat(nonce).concat(pers);
ebd8d4e8 36217
8b095871
IC
36218 this.K = new Array(this.outLen / 8);
36219 this.V = new Array(this.outLen / 8);
36220 for (var i = 0; i < this.V.length; i++) {
36221 this.K[i] = 0x00;
36222 this.V[i] = 0x01;
36223 }
ebd8d4e8 36224
8b095871
IC
36225 this._update(seed);
36226 this.reseed = 1;
36227 this.reseedInterval = 0x1000000000000; // 2^48
36228};
ebd8d4e8 36229
8b095871
IC
36230HmacDRBG.prototype._hmac = function hmac() {
36231 return new hash.hmac(this.hash, this.K);
36232};
ebd8d4e8 36233
8b095871
IC
36234HmacDRBG.prototype._update = function update(seed) {
36235 var kmac = this._hmac()
36236 .update(this.V)
36237 .update([ 0x00 ]);
36238 if (seed)
36239 kmac = kmac.update(seed);
36240 this.K = kmac.digest();
36241 this.V = this._hmac().update(this.V).digest();
36242 if (!seed)
36243 return;
36244
36245 this.K = this._hmac()
36246 .update(this.V)
36247 .update([ 0x01 ])
36248 .update(seed)
36249 .digest();
36250 this.V = this._hmac().update(this.V).digest();
36251};
36252
36253HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
36254 // Optional entropy enc
36255 if (typeof entropyEnc !== 'string') {
36256 addEnc = add;
36257 add = entropyEnc;
36258 entropyEnc = null;
ebd8d4e8 36259 }
ebd8d4e8 36260
8b095871
IC
36261 entropy = utils.toBuffer(entropy, entropyEnc);
36262 add = utils.toBuffer(add, addEnc);
ebd8d4e8 36263
8b095871
IC
36264 assert(entropy.length >= (this.minEntropy / 8),
36265 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
ebd8d4e8 36266
8b095871
IC
36267 this._update(entropy.concat(add || []));
36268 this.reseed = 1;
36269};
ebd8d4e8 36270
8b095871
IC
36271HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
36272 if (this.reseed > this.reseedInterval)
36273 throw new Error('Reseed is required');
ebd8d4e8 36274
8b095871
IC
36275 // Optional encoding
36276 if (typeof enc !== 'string') {
36277 addEnc = add;
36278 add = enc;
36279 enc = null;
36280 }
ebd8d4e8 36281
8b095871
IC
36282 // Optional additional data
36283 if (add) {
36284 add = utils.toArray(add, addEnc);
36285 this._update(add);
ebd8d4e8
IC
36286 }
36287
8b095871
IC
36288 var temp = [];
36289 while (temp.length < len) {
36290 this.V = this._hmac().update(this.V).digest();
36291 temp = temp.concat(this.V);
ebd8d4e8
IC
36292 }
36293
8b095871
IC
36294 var res = temp.slice(0, len);
36295 this._update(add);
36296 this.reseed++;
36297 return utils.encode(res, enc);
36298};
ebd8d4e8 36299
8b095871
IC
36300},{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
36301module.exports = {
36302 doubles: {
36303 step: 4,
36304 points: [
36305 [
36306 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
36307 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
36308 ],
36309 [
36310 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
36311 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
36312 ],
36313 [
36314 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
36315 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
36316 ],
36317 [
36318 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
36319 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
36320 ],
36321 [
36322 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
36323 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
36324 ],
36325 [
36326 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
36327 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
36328 ],
36329 [
36330 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
36331 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
36332 ],
36333 [
36334 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
36335 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
36336 ],
36337 [
36338 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
36339 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
36340 ],
36341 [
36342 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
36343 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
36344 ],
36345 [
36346 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
36347 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
36348 ],
36349 [
36350 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
36351 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
36352 ],
36353 [
36354 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
36355 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
36356 ],
36357 [
36358 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
36359 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
36360 ],
36361 [
36362 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
36363 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
36364 ],
36365 [
36366 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
36367 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
36368 ],
36369 [
36370 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
36371 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
36372 ],
36373 [
36374 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
36375 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
36376 ],
36377 [
36378 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
36379 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
36380 ],
36381 [
36382 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
36383 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
36384 ],
36385 [
36386 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
36387 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
36388 ],
36389 [
36390 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
36391 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
36392 ],
36393 [
36394 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
36395 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
36396 ],
36397 [
36398 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
36399 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
36400 ],
36401 [
36402 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
36403 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
36404 ],
36405 [
36406 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
36407 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
36408 ],
36409 [
36410 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
36411 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
36412 ],
36413 [
36414 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
36415 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
36416 ],
36417 [
36418 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
36419 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
36420 ],
36421 [
36422 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
36423 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
36424 ],
36425 [
36426 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
36427 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
36428 ],
36429 [
36430 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
36431 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
36432 ],
36433 [
36434 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
36435 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
36436 ],
36437 [
36438 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
36439 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
36440 ],
36441 [
36442 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
36443 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
36444 ],
36445 [
36446 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
36447 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
36448 ],
36449 [
36450 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
36451 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
36452 ],
36453 [
36454 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
36455 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
36456 ],
36457 [
36458 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
36459 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
36460 ],
36461 [
36462 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
36463 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
36464 ],
36465 [
36466 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
36467 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
36468 ],
36469 [
36470 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
36471 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
36472 ],
36473 [
36474 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
36475 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
36476 ],
36477 [
36478 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
36479 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
36480 ],
36481 [
36482 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
36483 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
36484 ],
36485 [
36486 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
36487 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
36488 ],
36489 [
36490 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
36491 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
36492 ],
36493 [
36494 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
36495 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
36496 ],
36497 [
36498 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
36499 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
36500 ],
36501 [
36502 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
36503 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
36504 ],
36505 [
36506 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
36507 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
36508 ],
36509 [
36510 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
36511 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
36512 ],
36513 [
36514 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
36515 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
36516 ],
36517 [
36518 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
36519 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
36520 ],
36521 [
36522 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
36523 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
36524 ],
36525 [
36526 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
36527 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
36528 ],
36529 [
36530 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
36531 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
36532 ],
36533 [
36534 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
36535 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
36536 ],
36537 [
36538 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
36539 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
36540 ],
36541 [
36542 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
36543 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
36544 ],
36545 [
36546 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
36547 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
36548 ],
36549 [
36550 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
36551 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
36552 ],
36553 [
36554 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
36555 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
36556 ],
36557 [
36558 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
36559 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
36560 ],
36561 [
36562 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
36563 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
36564 ]
36565 ]
36566 },
36567 naf: {
36568 wnd: 7,
36569 points: [
36570 [
36571 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
36572 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
36573 ],
36574 [
36575 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
36576 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
36577 ],
36578 [
36579 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
36580 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
36581 ],
36582 [
36583 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
36584 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
36585 ],
36586 [
36587 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
36588 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
36589 ],
36590 [
36591 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
36592 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
36593 ],
36594 [
36595 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
36596 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
36597 ],
36598 [
36599 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
36600 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
36601 ],
36602 [
36603 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
36604 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
36605 ],
36606 [
36607 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
36608 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
36609 ],
36610 [
36611 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
36612 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
36613 ],
36614 [
36615 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
36616 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
36617 ],
36618 [
36619 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
36620 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
36621 ],
36622 [
36623 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
36624 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
36625 ],
36626 [
36627 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
36628 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
36629 ],
36630 [
36631 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
36632 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
36633 ],
36634 [
36635 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
36636 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
36637 ],
36638 [
36639 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
36640 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
36641 ],
36642 [
36643 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
36644 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
36645 ],
36646 [
36647 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
36648 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
36649 ],
36650 [
36651 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
36652 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
36653 ],
36654 [
36655 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
36656 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
36657 ],
36658 [
36659 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
36660 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
36661 ],
36662 [
36663 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
36664 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
36665 ],
36666 [
36667 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
36668 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
36669 ],
36670 [
36671 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
36672 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
36673 ],
36674 [
36675 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
36676 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
36677 ],
36678 [
36679 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
36680 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
36681 ],
36682 [
36683 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
36684 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
36685 ],
36686 [
36687 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
36688 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
36689 ],
36690 [
36691 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
36692 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
36693 ],
36694 [
36695 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
36696 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
36697 ],
36698 [
36699 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
36700 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
36701 ],
36702 [
36703 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
36704 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
36705 ],
36706 [
36707 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
36708 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
36709 ],
36710 [
36711 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
36712 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
36713 ],
36714 [
36715 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
36716 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
36717 ],
36718 [
36719 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
36720 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
36721 ],
36722 [
36723 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
36724 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
36725 ],
36726 [
36727 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
36728 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
36729 ],
36730 [
36731 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
36732 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
36733 ],
36734 [
36735 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
36736 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
36737 ],
36738 [
36739 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
36740 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
36741 ],
36742 [
36743 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
36744 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
36745 ],
36746 [
36747 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
36748 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
36749 ],
36750 [
36751 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
36752 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
36753 ],
36754 [
36755 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
36756 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
36757 ],
36758 [
36759 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
36760 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
36761 ],
36762 [
36763 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
36764 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
36765 ],
36766 [
36767 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
36768 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
36769 ],
36770 [
36771 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
36772 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
36773 ],
36774 [
36775 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
36776 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
36777 ],
36778 [
36779 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
36780 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
36781 ],
36782 [
36783 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
36784 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
36785 ],
36786 [
36787 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
36788 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
36789 ],
36790 [
36791 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
36792 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
36793 ],
36794 [
36795 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
36796 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
36797 ],
36798 [
36799 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
36800 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
36801 ],
36802 [
36803 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
36804 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
36805 ],
36806 [
36807 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
36808 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
36809 ],
36810 [
36811 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
36812 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
36813 ],
36814 [
36815 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
36816 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
36817 ],
36818 [
36819 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
36820 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
36821 ],
36822 [
36823 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
36824 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
36825 ],
36826 [
36827 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
36828 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
36829 ],
36830 [
36831 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
36832 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
36833 ],
36834 [
36835 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
36836 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
36837 ],
36838 [
36839 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
36840 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
36841 ],
36842 [
36843 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
36844 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
36845 ],
36846 [
36847 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
36848 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
36849 ],
36850 [
36851 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
36852 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
36853 ],
36854 [
36855 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
36856 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
36857 ],
36858 [
36859 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
36860 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
36861 ],
36862 [
36863 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
36864 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
36865 ],
36866 [
36867 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
36868 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
36869 ],
36870 [
36871 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
36872 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
36873 ],
36874 [
36875 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
36876 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
36877 ],
36878 [
36879 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
36880 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
36881 ],
36882 [
36883 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
36884 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
36885 ],
36886 [
36887 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
36888 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
36889 ],
36890 [
36891 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
36892 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
36893 ],
36894 [
36895 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
36896 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
36897 ],
36898 [
36899 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
36900 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
36901 ],
36902 [
36903 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
36904 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
36905 ],
36906 [
36907 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
36908 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
36909 ],
36910 [
36911 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
36912 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
36913 ],
36914 [
36915 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
36916 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
36917 ],
36918 [
36919 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
36920 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
36921 ],
36922 [
36923 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
36924 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
36925 ],
36926 [
36927 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
36928 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
36929 ],
36930 [
36931 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
36932 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
36933 ],
36934 [
36935 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
36936 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
36937 ],
36938 [
36939 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
36940 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
36941 ],
36942 [
36943 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
36944 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
36945 ],
36946 [
36947 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
36948 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
36949 ],
36950 [
36951 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
36952 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
36953 ],
36954 [
36955 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
36956 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
36957 ],
36958 [
36959 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
36960 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
36961 ],
36962 [
36963 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
36964 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
36965 ],
36966 [
36967 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
36968 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
36969 ],
36970 [
36971 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
36972 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
36973 ],
36974 [
36975 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
36976 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
36977 ],
36978 [
36979 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
36980 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
36981 ],
36982 [
36983 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
36984 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
36985 ],
36986 [
36987 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
36988 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
36989 ],
36990 [
36991 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
36992 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
36993 ],
36994 [
36995 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
36996 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
36997 ],
36998 [
36999 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
37000 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
37001 ],
37002 [
37003 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
37004 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
37005 ],
37006 [
37007 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
37008 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
37009 ],
37010 [
37011 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
37012 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
37013 ],
37014 [
37015 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
37016 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
37017 ],
37018 [
37019 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
37020 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
37021 ],
37022 [
37023 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
37024 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
37025 ],
37026 [
37027 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
37028 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
37029 ],
37030 [
37031 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
37032 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
37033 ],
37034 [
37035 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
37036 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
37037 ],
37038 [
37039 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
37040 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
37041 ],
37042 [
37043 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
37044 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
37045 ],
37046 [
37047 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
37048 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
37049 ],
37050 [
37051 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
37052 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
37053 ],
37054 [
37055 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
37056 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
37057 ],
37058 [
37059 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
37060 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
37061 ],
37062 [
37063 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
37064 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
37065 ],
37066 [
37067 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
37068 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
37069 ],
37070 [
37071 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
37072 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
37073 ],
37074 [
37075 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
37076 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
37077 ]
37078 ]
37079 }
37080};
ebd8d4e8 37081
8b095871
IC
37082},{}],54:[function(require,module,exports){
37083'use strict';
ebd8d4e8 37084
8b095871
IC
37085var utils = exports;
37086var BN = require('bn.js');
ebd8d4e8 37087
8b095871
IC
37088utils.assert = function assert(val, msg) {
37089 if (!val)
37090 throw new Error(msg || 'Assertion failed');
37091};
ebd8d4e8 37092
8b095871
IC
37093function toArray(msg, enc) {
37094 if (Array.isArray(msg))
37095 return msg.slice();
37096 if (!msg)
37097 return [];
37098 var res = [];
37099 if (typeof msg !== 'string') {
37100 for (var i = 0; i < msg.length; i++)
37101 res[i] = msg[i] | 0;
37102 return res;
37103 }
37104 if (!enc) {
37105 for (var i = 0; i < msg.length; i++) {
37106 var c = msg.charCodeAt(i);
37107 var hi = c >> 8;
37108 var lo = c & 0xff;
37109 if (hi)
37110 res.push(hi, lo);
37111 else
37112 res.push(lo);
37113 }
37114 } else if (enc === 'hex') {
37115 msg = msg.replace(/[^a-z0-9]+/ig, '');
37116 if (msg.length % 2 !== 0)
37117 msg = '0' + msg;
37118 for (var i = 0; i < msg.length; i += 2)
37119 res.push(parseInt(msg[i] + msg[i + 1], 16));
ebd8d4e8 37120 }
8b095871 37121 return res;
ebd8d4e8 37122}
8b095871 37123utils.toArray = toArray;
ebd8d4e8 37124
8b095871
IC
37125function zero2(word) {
37126 if (word.length === 1)
37127 return '0' + word;
37128 else
37129 return word;
37130}
37131utils.zero2 = zero2;
ab78acc6 37132
8b095871
IC
37133function toHex(msg) {
37134 var res = '';
37135 for (var i = 0; i < msg.length; i++)
37136 res += zero2(msg[i].toString(16));
37137 return res;
37138}
37139utils.toHex = toHex;
ebd8d4e8 37140
8b095871
IC
37141utils.encode = function encode(arr, enc) {
37142 if (enc === 'hex')
37143 return toHex(arr);
37144 else
37145 return arr;
37146};
ebd8d4e8 37147
8b095871
IC
37148// Represent num in a w-NAF form
37149function getNAF(num, w) {
37150 var naf = [];
37151 var ws = 1 << (w + 1);
37152 var k = num.clone();
37153 while (k.cmpn(1) >= 0) {
37154 var z;
37155 if (k.isOdd()) {
37156 var mod = k.andln(ws - 1);
37157 if (mod > (ws >> 1) - 1)
37158 z = (ws >> 1) - mod;
37159 else
37160 z = mod;
37161 k.isubn(z);
37162 } else {
37163 z = 0;
37164 }
37165 naf.push(z);
37166
37167 // Optimization, shift by word if possible
37168 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
37169 for (var i = 1; i < shift; i++)
37170 naf.push(0);
37171 k.iushrn(shift);
37172 }
37173
37174 return naf;
37175}
37176utils.getNAF = getNAF;
37177
37178// Represent k1, k2 in a Joint Sparse Form
37179function getJSF(k1, k2) {
37180 var jsf = [
37181 [],
37182 []
37183 ];
37184
37185 k1 = k1.clone();
37186 k2 = k2.clone();
37187 var d1 = 0;
37188 var d2 = 0;
37189 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
37190
37191 // First phase
37192 var m14 = (k1.andln(3) + d1) & 3;
37193 var m24 = (k2.andln(3) + d2) & 3;
37194 if (m14 === 3)
37195 m14 = -1;
37196 if (m24 === 3)
37197 m24 = -1;
37198 var u1;
37199 if ((m14 & 1) === 0) {
37200 u1 = 0;
37201 } else {
37202 var m8 = (k1.andln(7) + d1) & 7;
37203 if ((m8 === 3 || m8 === 5) && m24 === 2)
37204 u1 = -m14;
37205 else
37206 u1 = m14;
37207 }
37208 jsf[0].push(u1);
ebd8d4e8 37209
8b095871
IC
37210 var u2;
37211 if ((m24 & 1) === 0) {
37212 u2 = 0;
37213 } else {
37214 var m8 = (k2.andln(7) + d2) & 7;
37215 if ((m8 === 3 || m8 === 5) && m14 === 2)
37216 u2 = -m24;
37217 else
37218 u2 = m24;
37219 }
37220 jsf[1].push(u2);
ebd8d4e8 37221
8b095871
IC
37222 // Second phase
37223 if (2 * d1 === u1 + 1)
37224 d1 = 1 - d1;
37225 if (2 * d2 === u2 + 1)
37226 d2 = 1 - d2;
37227 k1.iushrn(1);
37228 k2.iushrn(1);
37229 }
ebd8d4e8 37230
8b095871
IC
37231 return jsf;
37232}
37233utils.getJSF = getJSF;
ab78acc6 37234
8b095871
IC
37235function cachedProperty(obj, name, computer) {
37236 var key = '_' + name;
37237 obj.prototype[name] = function cachedProperty() {
37238 return this[key] !== undefined ? this[key] :
37239 this[key] = computer.call(this);
37240 };
37241}
37242utils.cachedProperty = cachedProperty;
ebd8d4e8 37243
8b095871
IC
37244function parseBytes(bytes) {
37245 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
37246 bytes;
37247}
37248utils.parseBytes = parseBytes;
ebd8d4e8 37249
8b095871
IC
37250function intFromLE(bytes) {
37251 return new BN(bytes, 'hex', 'le');
37252}
37253utils.intFromLE = intFromLE;
ebd8d4e8 37254
8b095871
IC
37255
37256},{"bn.js":33}],55:[function(require,module,exports){
37257module.exports={
37258 "_args": [
37259 [
37260 {
37261 "raw": "elliptic@^6.2.3",
37262 "scope": null,
37263 "escapedName": "elliptic",
37264 "name": "elliptic",
37265 "rawSpec": "^6.2.3",
37266 "spec": ">=6.2.3 <7.0.0",
37267 "type": "range"
37268 },
37269 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
37270 ]
37271 ],
37272 "_from": "elliptic@>=6.2.3 <7.0.0",
37273 "_id": "elliptic@6.3.3",
37274 "_inCache": true,
37275 "_location": "/elliptic",
37276 "_nodeVersion": "7.0.0",
37277 "_npmOperationalInternal": {
37278 "host": "packages-18-east.internal.npmjs.com",
37279 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
37280 },
37281 "_npmUser": {
37282 "name": "indutny",
37283 "email": "fedor@indutny.com"
37284 },
37285 "_npmVersion": "3.10.8",
37286 "_phantomChildren": {},
37287 "_requested": {
37288 "raw": "elliptic@^6.2.3",
37289 "scope": null,
37290 "escapedName": "elliptic",
37291 "name": "elliptic",
37292 "rawSpec": "^6.2.3",
37293 "spec": ">=6.2.3 <7.0.0",
37294 "type": "range"
37295 },
37296 "_requiredBy": [
37297 "/browserify-sign",
37298 "/create-ecdh",
37299 "/secp256k1"
37300 ],
37301 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
37302 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
37303 "_shrinkwrap": null,
37304 "_spec": "elliptic@^6.2.3",
37305 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
37306 "author": {
37307 "name": "Fedor Indutny",
37308 "email": "fedor@indutny.com"
37309 },
37310 "bugs": {
37311 "url": "https://github.com/indutny/elliptic/issues"
37312 },
37313 "dependencies": {
37314 "bn.js": "^4.4.0",
37315 "brorand": "^1.0.1",
37316 "hash.js": "^1.0.0",
37317 "inherits": "^2.0.1"
37318 },
37319 "description": "EC cryptography",
37320 "devDependencies": {
37321 "brfs": "^1.4.3",
37322 "coveralls": "^2.11.3",
37323 "grunt": "^0.4.5",
37324 "grunt-browserify": "^5.0.0",
37325 "grunt-cli": "^1.2.0",
37326 "grunt-contrib-connect": "^1.0.0",
37327 "grunt-contrib-copy": "^1.0.0",
37328 "grunt-contrib-uglify": "^1.0.1",
37329 "grunt-mocha-istanbul": "^3.0.1",
37330 "grunt-saucelabs": "^8.6.2",
37331 "istanbul": "^0.4.2",
37332 "jscs": "^2.9.0",
37333 "jshint": "^2.6.0",
37334 "mocha": "^2.1.0"
37335 },
37336 "directories": {},
37337 "dist": {
37338 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
37339 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
37340 },
37341 "files": [
37342 "lib"
37343 ],
37344 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
37345 "homepage": "https://github.com/indutny/elliptic",
37346 "keywords": [
37347 "EC",
37348 "Elliptic",
37349 "curve",
37350 "Cryptography"
37351 ],
37352 "license": "MIT",
37353 "main": "lib/elliptic.js",
37354 "maintainers": [
37355 {
37356 "name": "indutny",
37357 "email": "fedor@indutny.com"
37358 }
37359 ],
37360 "name": "elliptic",
37361 "optionalDependencies": {},
37362 "readme": "ERROR: No README data found!",
37363 "repository": {
37364 "type": "git",
37365 "url": "git+ssh://git@github.com/indutny/elliptic.git"
37366 },
37367 "scripts": {
37368 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
37369 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
37370 "lint": "npm run jscs && npm run jshint",
37371 "test": "npm run lint && npm run unit",
37372 "unit": "istanbul test _mocha --reporter=spec test/index.js",
37373 "version": "grunt dist && git add dist/"
37374 },
37375 "version": "6.3.3"
ebd8d4e8
IC
37376}
37377
8b095871
IC
37378},{}],56:[function(require,module,exports){
37379(function (Buffer){
37380'use strict';
ab78acc6 37381
8b095871
IC
37382var isHexPrefixed = require('is-hex-prefixed');
37383var stripHexPrefix = require('strip-hex-prefix');
ebd8d4e8 37384
8b095871
IC
37385/**
37386 * Pads a `String` to have an even length
37387 * @param {String} value
37388 * @return {String} output
37389 */
37390function padToEven(value) {
37391 var a = value; // eslint-disable-line
37392
37393 if (typeof a !== 'string') {
37394 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
37395 }
37396
37397 if (a.length % 2) {
37398 a = '0' + a;
37399 }
37400
37401 return a;
ebd8d4e8
IC
37402}
37403
8b095871
IC
37404/**
37405 * Converts a `Number` into a hex `String`
37406 * @param {Number} i
37407 * @return {String}
37408 */
37409function intToHex(i) {
37410 var hex = i.toString(16); // eslint-disable-line
ebd8d4e8 37411
8b095871
IC
37412 return '0x' + padToEven(hex);
37413}
ab78acc6 37414
8b095871
IC
37415/**
37416 * Converts an `Number` to a `Buffer`
37417 * @param {Number} i
37418 * @return {Buffer}
37419 */
37420function intToBuffer(i) {
37421 var hex = intToHex(i);
ab78acc6 37422
8b095871
IC
37423 return new Buffer(hex.slice(2), 'hex');
37424}
ebd8d4e8 37425
8b095871
IC
37426/**
37427 * Get the binary size of a string
37428 * @param {String} str
37429 * @return {Number}
37430 */
37431function getBinarySize(str) {
37432 if (typeof str !== 'string') {
37433 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
37434 }
ebd8d4e8 37435
8b095871
IC
37436 return Buffer.byteLength(str, 'utf8');
37437}
37438
37439/**
37440 * Returns TRUE if the first specified array contains all elements
37441 * from the second one. FALSE otherwise.
37442 *
37443 * @param {array} superset
37444 * @param {array} subset
37445 *
37446 * @returns {boolean}
37447 */
37448function arrayContainsArray(superset, subset, some) {
37449 if (Array.isArray(superset) !== true) {
37450 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
37451 }
37452 if (Array.isArray(subset) !== true) {
37453 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
ebd8d4e8
IC
37454 }
37455
8b095871
IC
37456 return subset[Boolean(some) && 'some' || 'every'](function (value) {
37457 return superset.indexOf(value) >= 0;
37458 });
ebd8d4e8
IC
37459}
37460
8b095871
IC
37461/**
37462 * Should be called to get utf8 from it's hex representation
37463 *
37464 * @method toUtf8
37465 * @param {String} string in hex
37466 * @returns {String} ascii string representation of hex value
37467 */
37468function toUtf8(hex) {
37469 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
ebd8d4e8 37470
8b095871
IC
37471 return bufferValue.toString('utf8');
37472}
ab78acc6 37473
8b095871
IC
37474/**
37475 * Should be called to get ascii from it's hex representation
37476 *
37477 * @method toAscii
37478 * @param {String} string in hex
37479 * @returns {String} ascii string representation of hex value
37480 */
37481function toAscii(hex) {
37482 var str = ''; // eslint-disable-line
37483 var i = 0,
37484 l = hex.length; // eslint-disable-line
ebd8d4e8 37485
8b095871
IC
37486 if (hex.substring(0, 2) === '0x') {
37487 i = 2;
37488 }
ebd8d4e8 37489
8b095871
IC
37490 for (; i < l; i += 2) {
37491 var code = parseInt(hex.substr(i, 2), 16);
37492 str += String.fromCharCode(code);
ebd8d4e8 37493 }
8b095871
IC
37494
37495 return str;
ebd8d4e8
IC
37496}
37497
8b095871
IC
37498/**
37499 * Should be called to get hex representation (prefixed by 0x) of utf8 string
37500 *
37501 * @method fromUtf8
37502 * @param {String} string
37503 * @param {Number} optional padding
37504 * @returns {String} hex representation of input string
37505 */
37506function fromUtf8(stringValue) {
37507 var str = new Buffer(stringValue, 'utf8');
ebd8d4e8 37508
8b095871
IC
37509 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
37510}
ab78acc6 37511
8b095871
IC
37512/**
37513 * Should be called to get hex representation (prefixed by 0x) of ascii string
37514 *
37515 * @method fromAscii
37516 * @param {String} string
37517 * @param {Number} optional padding
37518 * @returns {String} hex representation of input string
37519 */
37520function fromAscii(stringValue) {
37521 var hex = ''; // eslint-disable-line
37522 for (var i = 0; i < stringValue.length; i++) {
37523 // eslint-disable-line
37524 var code = stringValue.charCodeAt(i);
37525 var n = code.toString(16);
37526 hex += n.length < 2 ? '0' + n : n;
37527 }
ab78acc6 37528
8b095871
IC
37529 return '0x' + hex;
37530}
ebd8d4e8 37531
8b095871
IC
37532/**
37533 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
37534 *
37535 * @method getKeys get specific key from inner object array of objects
37536 * @param {String} params
37537 * @param {String} key
37538 * @param {Boolean} allowEmpty
37539 * @returns {Array} output just a simple array of output keys
37540 */
37541function getKeys(params, key, allowEmpty) {
37542 if (!Array.isArray(params)) {
37543 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
37544 }
37545 if (typeof key !== 'string') {
37546 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
37547 }
ebd8d4e8 37548
8b095871 37549 var result = []; // eslint-disable-line
ebd8d4e8 37550
8b095871
IC
37551 for (var i = 0; i < params.length; i++) {
37552 // eslint-disable-line
37553 var value = params[i][key]; // eslint-disable-line
37554 if (allowEmpty && !value) {
37555 value = '';
37556 } else if (typeof value !== 'string') {
37557 throw new Error('invalid abi');
37558 }
37559 result.push(value);
37560 }
ebd8d4e8 37561
8b095871 37562 return result;
ebd8d4e8
IC
37563}
37564
8b095871
IC
37565/**
37566 * Is the string a hex string.
37567 *
37568 * @method check if string is hex string of specific length
37569 * @param {String} value
37570 * @param {Number} length
37571 * @returns {Boolean} output the string is a hex string
37572 */
37573function isHexString(value, length) {
37574 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
37575 return false;
ab78acc6
IC
37576 }
37577
8b095871
IC
37578 if (length && value.length !== 2 + 2 * length) {
37579 return false;
37580 }
ebd8d4e8 37581
8b095871
IC
37582 return true;
37583}
ab78acc6 37584
8b095871
IC
37585module.exports = {
37586 arrayContainsArray: arrayContainsArray,
37587 intToBuffer: intToBuffer,
37588 getBinarySize: getBinarySize,
37589 isHexPrefixed: isHexPrefixed,
37590 stripHexPrefix: stripHexPrefix,
37591 padToEven: padToEven,
37592 intToHex: intToHex,
37593 fromAscii: fromAscii,
37594 fromUtf8: fromUtf8,
37595 toAscii: toAscii,
37596 toUtf8: toUtf8,
37597 getKeys: getKeys,
37598 isHexString: isHexString
37599};
37600}).call(this,require("buffer").Buffer)
37601},{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
37602var hash = exports;
37603
37604hash.utils = require('./hash/utils');
37605hash.common = require('./hash/common');
37606hash.sha = require('./hash/sha');
37607hash.ripemd = require('./hash/ripemd');
37608hash.hmac = require('./hash/hmac');
37609
37610// Proxy hash functions to the main object
37611hash.sha1 = hash.sha.sha1;
37612hash.sha256 = hash.sha.sha256;
37613hash.sha224 = hash.sha.sha224;
37614hash.sha384 = hash.sha.sha384;
37615hash.sha512 = hash.sha.sha512;
37616hash.ripemd160 = hash.ripemd.ripemd160;
37617
37618},{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
37619var hash = require('../hash');
37620var utils = hash.utils;
37621var assert = utils.assert;
37622
37623function BlockHash() {
37624 this.pending = null;
37625 this.pendingTotal = 0;
37626 this.blockSize = this.constructor.blockSize;
37627 this.outSize = this.constructor.outSize;
37628 this.hmacStrength = this.constructor.hmacStrength;
37629 this.padLength = this.constructor.padLength / 8;
37630 this.endian = 'big';
37631
37632 this._delta8 = this.blockSize / 8;
37633 this._delta32 = this.blockSize / 32;
37634}
37635exports.BlockHash = BlockHash;
37636
37637BlockHash.prototype.update = function update(msg, enc) {
37638 // Convert message to array, pad it, and join into 32bit blocks
37639 msg = utils.toArray(msg, enc);
37640 if (!this.pending)
37641 this.pending = msg;
37642 else
37643 this.pending = this.pending.concat(msg);
37644 this.pendingTotal += msg.length;
ab78acc6 37645
8b095871
IC
37646 // Enough data, try updating
37647 if (this.pending.length >= this._delta8) {
37648 msg = this.pending;
ebd8d4e8 37649
8b095871
IC
37650 // Process pending data in blocks
37651 var r = msg.length % this._delta8;
37652 this.pending = msg.slice(msg.length - r, msg.length);
37653 if (this.pending.length === 0)
37654 this.pending = null;
ebd8d4e8 37655
8b095871
IC
37656 msg = utils.join32(msg, 0, msg.length - r, this.endian);
37657 for (var i = 0; i < msg.length; i += this._delta32)
37658 this._update(msg, i, i + this._delta32);
ebd8d4e8
IC
37659 }
37660
8b095871
IC
37661 return this;
37662};
ebd8d4e8 37663
8b095871
IC
37664BlockHash.prototype.digest = function digest(enc) {
37665 this.update(this._pad());
37666 assert(this.pending === null);
ebd8d4e8 37667
8b095871
IC
37668 return this._digest(enc);
37669};
ebd8d4e8 37670
8b095871
IC
37671BlockHash.prototype._pad = function pad() {
37672 var len = this.pendingTotal;
37673 var bytes = this._delta8;
37674 var k = bytes - ((len + this.padLength) % bytes);
37675 var res = new Array(k + this.padLength);
37676 res[0] = 0x80;
37677 for (var i = 1; i < k; i++)
37678 res[i] = 0;
37679
37680 // Append length
37681 len <<= 3;
37682 if (this.endian === 'big') {
37683 for (var t = 8; t < this.padLength; t++)
37684 res[i++] = 0;
37685
37686 res[i++] = 0;
37687 res[i++] = 0;
37688 res[i++] = 0;
37689 res[i++] = 0;
37690 res[i++] = (len >>> 24) & 0xff;
37691 res[i++] = (len >>> 16) & 0xff;
37692 res[i++] = (len >>> 8) & 0xff;
37693 res[i++] = len & 0xff;
ebd8d4e8 37694 } else {
8b095871
IC
37695 res[i++] = len & 0xff;
37696 res[i++] = (len >>> 8) & 0xff;
37697 res[i++] = (len >>> 16) & 0xff;
37698 res[i++] = (len >>> 24) & 0xff;
37699 res[i++] = 0;
37700 res[i++] = 0;
37701 res[i++] = 0;
37702 res[i++] = 0;
ebd8d4e8 37703
8b095871
IC
37704 for (var t = 8; t < this.padLength; t++)
37705 res[i++] = 0;
ebd8d4e8
IC
37706 }
37707
8b095871
IC
37708 return res;
37709};
ebd8d4e8 37710
8b095871
IC
37711},{"../hash":57}],59:[function(require,module,exports){
37712var hmac = exports;
ebd8d4e8 37713
8b095871
IC
37714var hash = require('../hash');
37715var utils = hash.utils;
37716var assert = utils.assert;
ebd8d4e8 37717
8b095871
IC
37718function Hmac(hash, key, enc) {
37719 if (!(this instanceof Hmac))
37720 return new Hmac(hash, key, enc);
37721 this.Hash = hash;
37722 this.blockSize = hash.blockSize / 8;
37723 this.outSize = hash.outSize / 8;
37724 this.inner = null;
37725 this.outer = null;
ebd8d4e8 37726
8b095871 37727 this._init(utils.toArray(key, enc));
ebd8d4e8 37728}
8b095871 37729module.exports = Hmac;
ebd8d4e8 37730
8b095871
IC
37731Hmac.prototype._init = function init(key) {
37732 // Shorten key, if needed
37733 if (key.length > this.blockSize)
37734 key = new this.Hash().update(key).digest();
37735 assert(key.length <= this.blockSize);
ebd8d4e8 37736
8b095871
IC
37737 // Add padding to key
37738 for (var i = key.length; i < this.blockSize; i++)
37739 key.push(0);
ab78acc6 37740
8b095871
IC
37741 for (var i = 0; i < key.length; i++)
37742 key[i] ^= 0x36;
37743 this.inner = new this.Hash().update(key);
ab78acc6 37744
8b095871
IC
37745 // 0x36 ^ 0x5c = 0x6a
37746 for (var i = 0; i < key.length; i++)
37747 key[i] ^= 0x6a;
37748 this.outer = new this.Hash().update(key);
37749};
ebd8d4e8 37750
8b095871
IC
37751Hmac.prototype.update = function update(msg, enc) {
37752 this.inner.update(msg, enc);
37753 return this;
37754};
ab78acc6 37755
8b095871
IC
37756Hmac.prototype.digest = function digest(enc) {
37757 this.outer.update(this.inner.digest());
37758 return this.outer.digest(enc);
37759};
ab78acc6 37760
8b095871
IC
37761},{"../hash":57}],60:[function(require,module,exports){
37762var hash = require('../hash');
37763var utils = hash.utils;
37764
37765var rotl32 = utils.rotl32;
37766var sum32 = utils.sum32;
37767var sum32_3 = utils.sum32_3;
37768var sum32_4 = utils.sum32_4;
37769var BlockHash = hash.common.BlockHash;
37770
37771function RIPEMD160() {
37772 if (!(this instanceof RIPEMD160))
37773 return new RIPEMD160();
37774
37775 BlockHash.call(this);
37776
37777 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
37778 this.endian = 'little';
37779}
37780utils.inherits(RIPEMD160, BlockHash);
37781exports.ripemd160 = RIPEMD160;
37782
37783RIPEMD160.blockSize = 512;
37784RIPEMD160.outSize = 160;
37785RIPEMD160.hmacStrength = 192;
37786RIPEMD160.padLength = 64;
37787
37788RIPEMD160.prototype._update = function update(msg, start) {
37789 var A = this.h[0];
37790 var B = this.h[1];
37791 var C = this.h[2];
37792 var D = this.h[3];
37793 var E = this.h[4];
37794 var Ah = A;
37795 var Bh = B;
37796 var Ch = C;
37797 var Dh = D;
37798 var Eh = E;
37799 for (var j = 0; j < 80; j++) {
37800 var T = sum32(
37801 rotl32(
37802 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
37803 s[j]),
37804 E);
37805 A = E;
37806 E = D;
37807 D = rotl32(C, 10);
37808 C = B;
37809 B = T;
37810 T = sum32(
37811 rotl32(
37812 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
37813 sh[j]),
37814 Eh);
37815 Ah = Eh;
37816 Eh = Dh;
37817 Dh = rotl32(Ch, 10);
37818 Ch = Bh;
37819 Bh = T;
37820 }
37821 T = sum32_3(this.h[1], C, Dh);
37822 this.h[1] = sum32_3(this.h[2], D, Eh);
37823 this.h[2] = sum32_3(this.h[3], E, Ah);
37824 this.h[3] = sum32_3(this.h[4], A, Bh);
37825 this.h[4] = sum32_3(this.h[0], B, Ch);
37826 this.h[0] = T;
37827};
ebd8d4e8 37828
8b095871
IC
37829RIPEMD160.prototype._digest = function digest(enc) {
37830 if (enc === 'hex')
37831 return utils.toHex32(this.h, 'little');
37832 else
37833 return utils.split32(this.h, 'little');
37834};
ebd8d4e8 37835
8b095871
IC
37836function f(j, x, y, z) {
37837 if (j <= 15)
37838 return x ^ y ^ z;
37839 else if (j <= 31)
37840 return (x & y) | ((~x) & z);
37841 else if (j <= 47)
37842 return (x | (~y)) ^ z;
37843 else if (j <= 63)
37844 return (x & z) | (y & (~z));
37845 else
37846 return x ^ (y | (~z));
37847}
37848
37849function K(j) {
37850 if (j <= 15)
37851 return 0x00000000;
37852 else if (j <= 31)
37853 return 0x5a827999;
37854 else if (j <= 47)
37855 return 0x6ed9eba1;
37856 else if (j <= 63)
37857 return 0x8f1bbcdc;
37858 else
37859 return 0xa953fd4e;
37860}
37861
37862function Kh(j) {
37863 if (j <= 15)
37864 return 0x50a28be6;
37865 else if (j <= 31)
37866 return 0x5c4dd124;
37867 else if (j <= 47)
37868 return 0x6d703ef3;
37869 else if (j <= 63)
37870 return 0x7a6d76e9;
37871 else
37872 return 0x00000000;
37873}
ebd8d4e8 37874
8b095871
IC
37875var r = [
37876 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
37877 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
37878 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
37879 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
37880 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
37881];
ebd8d4e8 37882
8b095871
IC
37883var rh = [
37884 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
37885 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
37886 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
37887 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
37888 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
37889];
ebd8d4e8 37890
8b095871
IC
37891var s = [
37892 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
37893 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
37894 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
37895 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
37896 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
37897];
ebd8d4e8 37898
8b095871
IC
37899var sh = [
37900 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
37901 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
37902 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
37903 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
37904 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
37905];
ebd8d4e8 37906
8b095871
IC
37907},{"../hash":57}],61:[function(require,module,exports){
37908var hash = require('../hash');
37909var utils = hash.utils;
37910var assert = utils.assert;
37911
37912var rotr32 = utils.rotr32;
37913var rotl32 = utils.rotl32;
37914var sum32 = utils.sum32;
37915var sum32_4 = utils.sum32_4;
37916var sum32_5 = utils.sum32_5;
37917var rotr64_hi = utils.rotr64_hi;
37918var rotr64_lo = utils.rotr64_lo;
37919var shr64_hi = utils.shr64_hi;
37920var shr64_lo = utils.shr64_lo;
37921var sum64 = utils.sum64;
37922var sum64_hi = utils.sum64_hi;
37923var sum64_lo = utils.sum64_lo;
37924var sum64_4_hi = utils.sum64_4_hi;
37925var sum64_4_lo = utils.sum64_4_lo;
37926var sum64_5_hi = utils.sum64_5_hi;
37927var sum64_5_lo = utils.sum64_5_lo;
37928var BlockHash = hash.common.BlockHash;
37929
37930var sha256_K = [
37931 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
37932 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
37933 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
37934 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
37935 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
37936 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
37937 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
37938 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
37939 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
37940 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
37941 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
37942 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
37943 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
37944 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
37945 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
37946 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
37947];
ebd8d4e8 37948
8b095871
IC
37949var sha512_K = [
37950 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
37951 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
37952 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
37953 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
37954 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
37955 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
37956 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
37957 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
37958 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
37959 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
37960 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
37961 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
37962 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
37963 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
37964 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
37965 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
37966 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
37967 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
37968 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
37969 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
37970 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
37971 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
37972 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
37973 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
37974 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
37975 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
37976 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
37977 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
37978 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
37979 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
37980 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
37981 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
37982 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
37983 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
37984 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
37985 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
37986 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
37987 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
37988 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
37989 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
37990];
ebd8d4e8 37991
8b095871
IC
37992var sha1_K = [
37993 0x5A827999, 0x6ED9EBA1,
37994 0x8F1BBCDC, 0xCA62C1D6
37995];
ebd8d4e8 37996
8b095871
IC
37997function SHA256() {
37998 if (!(this instanceof SHA256))
37999 return new SHA256();
38000
38001 BlockHash.call(this);
38002 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
38003 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
38004 this.k = sha256_K;
38005 this.W = new Array(64);
38006}
38007utils.inherits(SHA256, BlockHash);
38008exports.sha256 = SHA256;
38009
38010SHA256.blockSize = 512;
38011SHA256.outSize = 256;
38012SHA256.hmacStrength = 192;
38013SHA256.padLength = 64;
38014
38015SHA256.prototype._update = function _update(msg, start) {
38016 var W = this.W;
38017
38018 for (var i = 0; i < 16; i++)
38019 W[i] = msg[start + i];
38020 for (; i < W.length; i++)
38021 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
38022
38023 var a = this.h[0];
38024 var b = this.h[1];
38025 var c = this.h[2];
38026 var d = this.h[3];
38027 var e = this.h[4];
38028 var f = this.h[5];
38029 var g = this.h[6];
38030 var h = this.h[7];
38031
38032 assert(this.k.length === W.length);
38033 for (var i = 0; i < W.length; i++) {
38034 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
38035 var T2 = sum32(s0_256(a), maj32(a, b, c));
38036 h = g;
38037 g = f;
38038 f = e;
38039 e = sum32(d, T1);
38040 d = c;
38041 c = b;
38042 b = a;
38043 a = sum32(T1, T2);
38044 }
38045
38046 this.h[0] = sum32(this.h[0], a);
38047 this.h[1] = sum32(this.h[1], b);
38048 this.h[2] = sum32(this.h[2], c);
38049 this.h[3] = sum32(this.h[3], d);
38050 this.h[4] = sum32(this.h[4], e);
38051 this.h[5] = sum32(this.h[5], f);
38052 this.h[6] = sum32(this.h[6], g);
38053 this.h[7] = sum32(this.h[7], h);
38054};
ebd8d4e8 38055
8b095871
IC
38056SHA256.prototype._digest = function digest(enc) {
38057 if (enc === 'hex')
38058 return utils.toHex32(this.h, 'big');
38059 else
38060 return utils.split32(this.h, 'big');
38061};
ebd8d4e8 38062
8b095871
IC
38063function SHA224() {
38064 if (!(this instanceof SHA224))
38065 return new SHA224();
ebd8d4e8 38066
8b095871
IC
38067 SHA256.call(this);
38068 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
38069 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
38070}
38071utils.inherits(SHA224, SHA256);
38072exports.sha224 = SHA224;
ebd8d4e8 38073
8b095871
IC
38074SHA224.blockSize = 512;
38075SHA224.outSize = 224;
38076SHA224.hmacStrength = 192;
38077SHA224.padLength = 64;
ebd8d4e8 38078
8b095871
IC
38079SHA224.prototype._digest = function digest(enc) {
38080 // Just truncate output
38081 if (enc === 'hex')
38082 return utils.toHex32(this.h.slice(0, 7), 'big');
38083 else
38084 return utils.split32(this.h.slice(0, 7), 'big');
38085};
38086
38087function SHA512() {
38088 if (!(this instanceof SHA512))
38089 return new SHA512();
38090
38091 BlockHash.call(this);
38092 this.h = [ 0x6a09e667, 0xf3bcc908,
38093 0xbb67ae85, 0x84caa73b,
38094 0x3c6ef372, 0xfe94f82b,
38095 0xa54ff53a, 0x5f1d36f1,
38096 0x510e527f, 0xade682d1,
38097 0x9b05688c, 0x2b3e6c1f,
38098 0x1f83d9ab, 0xfb41bd6b,
38099 0x5be0cd19, 0x137e2179 ];
38100 this.k = sha512_K;
38101 this.W = new Array(160);
38102}
38103utils.inherits(SHA512, BlockHash);
38104exports.sha512 = SHA512;
38105
38106SHA512.blockSize = 1024;
38107SHA512.outSize = 512;
38108SHA512.hmacStrength = 192;
38109SHA512.padLength = 128;
38110
38111SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
38112 var W = this.W;
38113
38114 // 32 x 32bit words
38115 for (var i = 0; i < 32; i++)
38116 W[i] = msg[start + i];
38117 for (; i < W.length; i += 2) {
38118 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
38119 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
38120 var c1_hi = W[i - 14]; // i - 7
38121 var c1_lo = W[i - 13];
38122 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
38123 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
38124 var c3_hi = W[i - 32]; // i - 16
38125 var c3_lo = W[i - 31];
38126
38127 W[i] = sum64_4_hi(c0_hi, c0_lo,
38128 c1_hi, c1_lo,
38129 c2_hi, c2_lo,
38130 c3_hi, c3_lo);
38131 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
38132 c1_hi, c1_lo,
38133 c2_hi, c2_lo,
38134 c3_hi, c3_lo);
ebd8d4e8 38135 }
8b095871
IC
38136};
38137
38138SHA512.prototype._update = function _update(msg, start) {
38139 this._prepareBlock(msg, start);
38140
38141 var W = this.W;
38142
38143 var ah = this.h[0];
38144 var al = this.h[1];
38145 var bh = this.h[2];
38146 var bl = this.h[3];
38147 var ch = this.h[4];
38148 var cl = this.h[5];
38149 var dh = this.h[6];
38150 var dl = this.h[7];
38151 var eh = this.h[8];
38152 var el = this.h[9];
38153 var fh = this.h[10];
38154 var fl = this.h[11];
38155 var gh = this.h[12];
38156 var gl = this.h[13];
38157 var hh = this.h[14];
38158 var hl = this.h[15];
38159
38160 assert(this.k.length === W.length);
38161 for (var i = 0; i < W.length; i += 2) {
38162 var c0_hi = hh;
38163 var c0_lo = hl;
38164 var c1_hi = s1_512_hi(eh, el);
38165 var c1_lo = s1_512_lo(eh, el);
38166 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
38167 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
38168 var c3_hi = this.k[i];
38169 var c3_lo = this.k[i + 1];
38170 var c4_hi = W[i];
38171 var c4_lo = W[i + 1];
38172
38173 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
38174 c1_hi, c1_lo,
38175 c2_hi, c2_lo,
38176 c3_hi, c3_lo,
38177 c4_hi, c4_lo);
38178 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
38179 c1_hi, c1_lo,
38180 c2_hi, c2_lo,
38181 c3_hi, c3_lo,
38182 c4_hi, c4_lo);
38183
38184 var c0_hi = s0_512_hi(ah, al);
38185 var c0_lo = s0_512_lo(ah, al);
38186 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
38187 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
38188
38189 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
38190 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
38191
38192 hh = gh;
38193 hl = gl;
38194
38195 gh = fh;
38196 gl = fl;
38197
38198 fh = eh;
38199 fl = el;
38200
38201 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
38202 el = sum64_lo(dl, dl, T1_hi, T1_lo);
38203
38204 dh = ch;
38205 dl = cl;
38206
38207 ch = bh;
38208 cl = bl;
38209
38210 bh = ah;
38211 bl = al;
38212
38213 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
38214 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
38215 }
38216
38217 sum64(this.h, 0, ah, al);
38218 sum64(this.h, 2, bh, bl);
38219 sum64(this.h, 4, ch, cl);
38220 sum64(this.h, 6, dh, dl);
38221 sum64(this.h, 8, eh, el);
38222 sum64(this.h, 10, fh, fl);
38223 sum64(this.h, 12, gh, gl);
38224 sum64(this.h, 14, hh, hl);
38225};
38226
38227SHA512.prototype._digest = function digest(enc) {
38228 if (enc === 'hex')
38229 return utils.toHex32(this.h, 'big');
38230 else
38231 return utils.split32(this.h, 'big');
38232};
38233
38234function SHA384() {
38235 if (!(this instanceof SHA384))
38236 return new SHA384();
38237
38238 SHA512.call(this);
38239 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
38240 0x629a292a, 0x367cd507,
38241 0x9159015a, 0x3070dd17,
38242 0x152fecd8, 0xf70e5939,
38243 0x67332667, 0xffc00b31,
38244 0x8eb44a87, 0x68581511,
38245 0xdb0c2e0d, 0x64f98fa7,
38246 0x47b5481d, 0xbefa4fa4 ];
38247}
38248utils.inherits(SHA384, SHA512);
38249exports.sha384 = SHA384;
38250
38251SHA384.blockSize = 1024;
38252SHA384.outSize = 384;
38253SHA384.hmacStrength = 192;
38254SHA384.padLength = 128;
38255
38256SHA384.prototype._digest = function digest(enc) {
38257 if (enc === 'hex')
38258 return utils.toHex32(this.h.slice(0, 12), 'big');
38259 else
38260 return utils.split32(this.h.slice(0, 12), 'big');
38261};
ebd8d4e8 38262
8b095871
IC
38263function SHA1() {
38264 if (!(this instanceof SHA1))
38265 return new SHA1();
ebd8d4e8 38266
8b095871
IC
38267 BlockHash.call(this);
38268 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
38269 0x10325476, 0xc3d2e1f0 ];
38270 this.W = new Array(80);
38271}
ebd8d4e8 38272
8b095871
IC
38273utils.inherits(SHA1, BlockHash);
38274exports.sha1 = SHA1;
ebd8d4e8 38275
8b095871
IC
38276SHA1.blockSize = 512;
38277SHA1.outSize = 160;
38278SHA1.hmacStrength = 80;
38279SHA1.padLength = 64;
ebd8d4e8 38280
8b095871
IC
38281SHA1.prototype._update = function _update(msg, start) {
38282 var W = this.W;
ebd8d4e8 38283
8b095871
IC
38284 for (var i = 0; i < 16; i++)
38285 W[i] = msg[start + i];
ebd8d4e8 38286
8b095871
IC
38287 for(; i < W.length; i++)
38288 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
ebd8d4e8 38289
8b095871
IC
38290 var a = this.h[0];
38291 var b = this.h[1];
38292 var c = this.h[2];
38293 var d = this.h[3];
38294 var e = this.h[4];
ebd8d4e8 38295
8b095871
IC
38296 for (var i = 0; i < W.length; i++) {
38297 var s = ~~(i / 20);
38298 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
38299 e = d;
38300 d = c;
38301 c = rotl32(b, 30);
38302 b = a;
38303 a = t;
ebd8d4e8
IC
38304 }
38305
8b095871
IC
38306 this.h[0] = sum32(this.h[0], a);
38307 this.h[1] = sum32(this.h[1], b);
38308 this.h[2] = sum32(this.h[2], c);
38309 this.h[3] = sum32(this.h[3], d);
38310 this.h[4] = sum32(this.h[4], e);
38311};
ebd8d4e8 38312
8b095871
IC
38313SHA1.prototype._digest = function digest(enc) {
38314 if (enc === 'hex')
38315 return utils.toHex32(this.h, 'big');
38316 else
38317 return utils.split32(this.h, 'big');
38318};
38319
38320function ch32(x, y, z) {
38321 return (x & y) ^ ((~x) & z);
ebd8d4e8
IC
38322}
38323
8b095871
IC
38324function maj32(x, y, z) {
38325 return (x & y) ^ (x & z) ^ (y & z);
ebd8d4e8
IC
38326}
38327
8b095871
IC
38328function p32(x, y, z) {
38329 return x ^ y ^ z;
38330}
ebd8d4e8 38331
8b095871
IC
38332function s0_256(x) {
38333 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
38334}
ebd8d4e8 38335
8b095871
IC
38336function s1_256(x) {
38337 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
ab78acc6
IC
38338}
38339
8b095871
IC
38340function g0_256(x) {
38341 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
38342}
ab78acc6 38343
8b095871
IC
38344function g1_256(x) {
38345 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
38346}
ab78acc6 38347
8b095871
IC
38348function ft_1(s, x, y, z) {
38349 if (s === 0)
38350 return ch32(x, y, z);
38351 if (s === 1 || s === 3)
38352 return p32(x, y, z);
38353 if (s === 2)
38354 return maj32(x, y, z);
38355}
ebd8d4e8 38356
8b095871
IC
38357function ch64_hi(xh, xl, yh, yl, zh, zl) {
38358 var r = (xh & yh) ^ ((~xh) & zh);
38359 if (r < 0)
38360 r += 0x100000000;
38361 return r;
38362}
ebd8d4e8 38363
8b095871
IC
38364function ch64_lo(xh, xl, yh, yl, zh, zl) {
38365 var r = (xl & yl) ^ ((~xl) & zl);
38366 if (r < 0)
38367 r += 0x100000000;
38368 return r;
ebd8d4e8
IC
38369}
38370
8b095871
IC
38371function maj64_hi(xh, xl, yh, yl, zh, zl) {
38372 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
38373 if (r < 0)
38374 r += 0x100000000;
38375 return r;
38376}
ebd8d4e8 38377
8b095871
IC
38378function maj64_lo(xh, xl, yh, yl, zh, zl) {
38379 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
38380 if (r < 0)
38381 r += 0x100000000;
38382 return r;
38383}
ebd8d4e8 38384
8b095871
IC
38385function s0_512_hi(xh, xl) {
38386 var c0_hi = rotr64_hi(xh, xl, 28);
38387 var c1_hi = rotr64_hi(xl, xh, 2); // 34
38388 var c2_hi = rotr64_hi(xl, xh, 7); // 39
38389
38390 var r = c0_hi ^ c1_hi ^ c2_hi;
38391 if (r < 0)
38392 r += 0x100000000;
38393 return r;
ebd8d4e8
IC
38394}
38395
8b095871
IC
38396function s0_512_lo(xh, xl) {
38397 var c0_lo = rotr64_lo(xh, xl, 28);
38398 var c1_lo = rotr64_lo(xl, xh, 2); // 34
38399 var c2_lo = rotr64_lo(xl, xh, 7); // 39
ab78acc6 38400
8b095871
IC
38401 var r = c0_lo ^ c1_lo ^ c2_lo;
38402 if (r < 0)
38403 r += 0x100000000;
38404 return r;
38405}
ebd8d4e8 38406
8b095871
IC
38407function s1_512_hi(xh, xl) {
38408 var c0_hi = rotr64_hi(xh, xl, 14);
38409 var c1_hi = rotr64_hi(xh, xl, 18);
38410 var c2_hi = rotr64_hi(xl, xh, 9); // 41
ebd8d4e8 38411
8b095871
IC
38412 var r = c0_hi ^ c1_hi ^ c2_hi;
38413 if (r < 0)
38414 r += 0x100000000;
38415 return r;
ebd8d4e8
IC
38416}
38417
8b095871
IC
38418function s1_512_lo(xh, xl) {
38419 var c0_lo = rotr64_lo(xh, xl, 14);
38420 var c1_lo = rotr64_lo(xh, xl, 18);
38421 var c2_lo = rotr64_lo(xl, xh, 9); // 41
38422
38423 var r = c0_lo ^ c1_lo ^ c2_lo;
38424 if (r < 0)
38425 r += 0x100000000;
38426 return r;
ebd8d4e8
IC
38427}
38428
8b095871
IC
38429function g0_512_hi(xh, xl) {
38430 var c0_hi = rotr64_hi(xh, xl, 1);
38431 var c1_hi = rotr64_hi(xh, xl, 8);
38432 var c2_hi = shr64_hi(xh, xl, 7);
ebd8d4e8 38433
8b095871
IC
38434 var r = c0_hi ^ c1_hi ^ c2_hi;
38435 if (r < 0)
38436 r += 0x100000000;
38437 return r;
38438}
38439
38440function g0_512_lo(xh, xl) {
38441 var c0_lo = rotr64_lo(xh, xl, 1);
38442 var c1_lo = rotr64_lo(xh, xl, 8);
38443 var c2_lo = shr64_lo(xh, xl, 7);
38444
38445 var r = c0_lo ^ c1_lo ^ c2_lo;
38446 if (r < 0)
38447 r += 0x100000000;
38448 return r;
38449}
38450
38451function g1_512_hi(xh, xl) {
38452 var c0_hi = rotr64_hi(xh, xl, 19);
38453 var c1_hi = rotr64_hi(xl, xh, 29); // 61
38454 var c2_hi = shr64_hi(xh, xl, 6);
38455
38456 var r = c0_hi ^ c1_hi ^ c2_hi;
38457 if (r < 0)
38458 r += 0x100000000;
38459 return r;
38460}
38461
38462function g1_512_lo(xh, xl) {
38463 var c0_lo = rotr64_lo(xh, xl, 19);
38464 var c1_lo = rotr64_lo(xl, xh, 29); // 61
38465 var c2_lo = shr64_lo(xh, xl, 6);
38466
38467 var r = c0_lo ^ c1_lo ^ c2_lo;
38468 if (r < 0)
38469 r += 0x100000000;
38470 return r;
38471}
38472
38473},{"../hash":57}],62:[function(require,module,exports){
38474var utils = exports;
38475var inherits = require('inherits');
38476
38477function toArray(msg, enc) {
38478 if (Array.isArray(msg))
38479 return msg.slice();
38480 if (!msg)
38481 return [];
38482 var res = [];
38483 if (typeof msg === 'string') {
38484 if (!enc) {
38485 for (var i = 0; i < msg.length; i++) {
38486 var c = msg.charCodeAt(i);
38487 var hi = c >> 8;
38488 var lo = c & 0xff;
38489 if (hi)
38490 res.push(hi, lo);
38491 else
38492 res.push(lo);
38493 }
38494 } else if (enc === 'hex') {
38495 msg = msg.replace(/[^a-z0-9]+/ig, '');
38496 if (msg.length % 2 !== 0)
38497 msg = '0' + msg;
38498 for (var i = 0; i < msg.length; i += 2)
38499 res.push(parseInt(msg[i] + msg[i + 1], 16));
38500 }
38501 } else {
38502 for (var i = 0; i < msg.length; i++)
38503 res[i] = msg[i] | 0;
ebd8d4e8 38504 }
8b095871 38505 return res;
ebd8d4e8 38506}
8b095871 38507utils.toArray = toArray;
ebd8d4e8 38508
8b095871
IC
38509function toHex(msg) {
38510 var res = '';
38511 for (var i = 0; i < msg.length; i++)
38512 res += zero2(msg[i].toString(16));
38513 return res;
38514}
38515utils.toHex = toHex;
ebd8d4e8 38516
8b095871
IC
38517function htonl(w) {
38518 var res = (w >>> 24) |
38519 ((w >>> 8) & 0xff00) |
38520 ((w << 8) & 0xff0000) |
38521 ((w & 0xff) << 24);
38522 return res >>> 0;
38523}
38524utils.htonl = htonl;
ebd8d4e8 38525
8b095871
IC
38526function toHex32(msg, endian) {
38527 var res = '';
38528 for (var i = 0; i < msg.length; i++) {
38529 var w = msg[i];
38530 if (endian === 'little')
38531 w = htonl(w);
38532 res += zero8(w.toString(16));
38533 }
38534 return res;
38535}
38536utils.toHex32 = toHex32;
ebd8d4e8 38537
8b095871
IC
38538function zero2(word) {
38539 if (word.length === 1)
38540 return '0' + word;
38541 else
38542 return word;
38543}
38544utils.zero2 = zero2;
38545
38546function zero8(word) {
38547 if (word.length === 7)
38548 return '0' + word;
38549 else if (word.length === 6)
38550 return '00' + word;
38551 else if (word.length === 5)
38552 return '000' + word;
38553 else if (word.length === 4)
38554 return '0000' + word;
38555 else if (word.length === 3)
38556 return '00000' + word;
38557 else if (word.length === 2)
38558 return '000000' + word;
38559 else if (word.length === 1)
38560 return '0000000' + word;
38561 else
38562 return word;
38563}
38564utils.zero8 = zero8;
38565
38566function join32(msg, start, end, endian) {
38567 var len = end - start;
38568 assert(len % 4 === 0);
38569 var res = new Array(len / 4);
38570 for (var i = 0, k = start; i < res.length; i++, k += 4) {
38571 var w;
38572 if (endian === 'big')
38573 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
38574 else
38575 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
38576 res[i] = w >>> 0;
38577 }
38578 return res;
38579}
38580utils.join32 = join32;
38581
38582function split32(msg, endian) {
38583 var res = new Array(msg.length * 4);
38584 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
38585 var m = msg[i];
38586 if (endian === 'big') {
38587 res[k] = m >>> 24;
38588 res[k + 1] = (m >>> 16) & 0xff;
38589 res[k + 2] = (m >>> 8) & 0xff;
38590 res[k + 3] = m & 0xff;
38591 } else {
38592 res[k + 3] = m >>> 24;
38593 res[k + 2] = (m >>> 16) & 0xff;
38594 res[k + 1] = (m >>> 8) & 0xff;
38595 res[k] = m & 0xff;
38596 }
ebd8d4e8 38597 }
8b095871 38598 return res;
ebd8d4e8 38599}
8b095871 38600utils.split32 = split32;
ebd8d4e8 38601
8b095871
IC
38602function rotr32(w, b) {
38603 return (w >>> b) | (w << (32 - b));
38604}
38605utils.rotr32 = rotr32;
ebd8d4e8 38606
8b095871
IC
38607function rotl32(w, b) {
38608 return (w << b) | (w >>> (32 - b));
38609}
38610utils.rotl32 = rotl32;
ebd8d4e8 38611
8b095871
IC
38612function sum32(a, b) {
38613 return (a + b) >>> 0;
38614}
38615utils.sum32 = sum32;
ebd8d4e8 38616
8b095871
IC
38617function sum32_3(a, b, c) {
38618 return (a + b + c) >>> 0;
38619}
38620utils.sum32_3 = sum32_3;
ebd8d4e8 38621
8b095871
IC
38622function sum32_4(a, b, c, d) {
38623 return (a + b + c + d) >>> 0;
38624}
38625utils.sum32_4 = sum32_4;
ebd8d4e8 38626
8b095871
IC
38627function sum32_5(a, b, c, d, e) {
38628 return (a + b + c + d + e) >>> 0;
38629}
38630utils.sum32_5 = sum32_5;
ebd8d4e8 38631
8b095871
IC
38632function assert(cond, msg) {
38633 if (!cond)
38634 throw new Error(msg || 'Assertion failed');
38635}
38636utils.assert = assert;
ab78acc6 38637
8b095871 38638utils.inherits = inherits;
ab78acc6 38639
8b095871
IC
38640function sum64(buf, pos, ah, al) {
38641 var bh = buf[pos];
38642 var bl = buf[pos + 1];
ab78acc6 38643
8b095871
IC
38644 var lo = (al + bl) >>> 0;
38645 var hi = (lo < al ? 1 : 0) + ah + bh;
38646 buf[pos] = hi >>> 0;
38647 buf[pos + 1] = lo;
38648}
38649exports.sum64 = sum64;
ebd8d4e8 38650
8b095871
IC
38651function sum64_hi(ah, al, bh, bl) {
38652 var lo = (al + bl) >>> 0;
38653 var hi = (lo < al ? 1 : 0) + ah + bh;
38654 return hi >>> 0;
38655};
38656exports.sum64_hi = sum64_hi;
ebd8d4e8 38657
8b095871
IC
38658function sum64_lo(ah, al, bh, bl) {
38659 var lo = al + bl;
38660 return lo >>> 0;
38661};
38662exports.sum64_lo = sum64_lo;
38663
38664function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
38665 var carry = 0;
38666 var lo = al;
38667 lo = (lo + bl) >>> 0;
38668 carry += lo < al ? 1 : 0;
38669 lo = (lo + cl) >>> 0;
38670 carry += lo < cl ? 1 : 0;
38671 lo = (lo + dl) >>> 0;
38672 carry += lo < dl ? 1 : 0;
38673
38674 var hi = ah + bh + ch + dh + carry;
38675 return hi >>> 0;
38676};
38677exports.sum64_4_hi = sum64_4_hi;
ebd8d4e8 38678
8b095871
IC
38679function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
38680 var lo = al + bl + cl + dl;
38681 return lo >>> 0;
38682};
38683exports.sum64_4_lo = sum64_4_lo;
38684
38685function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
38686 var carry = 0;
38687 var lo = al;
38688 lo = (lo + bl) >>> 0;
38689 carry += lo < al ? 1 : 0;
38690 lo = (lo + cl) >>> 0;
38691 carry += lo < cl ? 1 : 0;
38692 lo = (lo + dl) >>> 0;
38693 carry += lo < dl ? 1 : 0;
38694 lo = (lo + el) >>> 0;
38695 carry += lo < el ? 1 : 0;
38696
38697 var hi = ah + bh + ch + dh + eh + carry;
38698 return hi >>> 0;
38699};
38700exports.sum64_5_hi = sum64_5_hi;
38701
38702function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
38703 var lo = al + bl + cl + dl + el;
38704
38705 return lo >>> 0;
38706};
38707exports.sum64_5_lo = sum64_5_lo;
38708
38709function rotr64_hi(ah, al, num) {
38710 var r = (al << (32 - num)) | (ah >>> num);
38711 return r >>> 0;
38712};
38713exports.rotr64_hi = rotr64_hi;
38714
38715function rotr64_lo(ah, al, num) {
38716 var r = (ah << (32 - num)) | (al >>> num);
38717 return r >>> 0;
38718};
38719exports.rotr64_lo = rotr64_lo;
38720
38721function shr64_hi(ah, al, num) {
38722 return ah >>> num;
38723};
38724exports.shr64_hi = shr64_hi;
38725
38726function shr64_lo(ah, al, num) {
38727 var r = (ah << (32 - num)) | (al >>> num);
38728 return r >>> 0;
38729};
38730exports.shr64_lo = shr64_lo;
38731
38732},{"inherits":63}],63:[function(require,module,exports){
38733arguments[4][9][0].apply(exports,arguments)
38734},{"dup":9}],64:[function(require,module,exports){
38735/**
38736 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
38737 * @param {String} str the string input value
38738 * @return {Boolean} a boolean if it is or is not hex prefixed
38739 * @throws if the str input is not a string
38740 */
38741module.exports = function isHexPrefixed(str) {
38742 if (typeof str !== 'string') {
38743 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
38744 }
38745
38746 return str.slice(0, 2) === '0x';
ebd8d4e8
IC
38747}
38748
8b095871
IC
38749},{}],65:[function(require,module,exports){
38750'use strict'
38751module.exports = require('./lib/api')(require('./lib/keccak'))
38752
38753},{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
38754'use strict'
38755var createKeccak = require('./keccak')
38756var createShake = require('./shake')
38757
38758module.exports = function (KeccakState) {
38759 var Keccak = createKeccak(KeccakState)
38760 var Shake = createShake(KeccakState)
38761
38762 return function (algorithm, options) {
38763 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
38764 switch (hash) {
38765 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
38766 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
38767 case 'keccak384': return new Keccak(832, 768, null, 384, options)
38768 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
38769
38770 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
38771 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
38772 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
38773 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
38774
38775 case 'shake128': return new Shake(1344, 256, 0x1f, options)
38776 case 'shake256': return new Shake(1088, 512, 0x1f, options)
38777
38778 default: throw new Error('Invald algorithm: ' + algorithm)
38779 }
38780 }
38781}
38782
38783},{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
ebd8d4e8 38784(function (Buffer){
8b095871
IC
38785'use strict'
38786var Transform = require('stream').Transform
38787var inherits = require('inherits')
38788
38789module.exports = function (KeccakState) {
38790 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
38791 Transform.call(this, options)
38792
38793 this._rate = rate
38794 this._capacity = capacity
38795 this._delimitedSuffix = delimitedSuffix
38796 this._hashBitLength = hashBitLength
38797 this._options = options
38798
38799 this._state = new KeccakState()
38800 this._state.initialize(rate, capacity)
38801 this._finalized = false
38802 }
38803
38804 inherits(Keccak, Transform)
38805
38806 Keccak.prototype._transform = function (chunk, encoding, callback) {
38807 var error = null
38808 try {
38809 this.update(chunk, encoding)
38810 } catch (err) {
38811 error = err
38812 }
38813
38814 callback(error)
38815 }
38816
38817 Keccak.prototype._flush = function (callback) {
38818 var error = null
38819 try {
38820 this.push(this.digest())
38821 } catch (err) {
38822 error = err
38823 }
38824
38825 callback(error)
38826 }
38827
38828 Keccak.prototype.update = function (data, encoding) {
38829 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
38830 if (this._finalized) throw new Error('Digest already called')
38831 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
38832
38833 this._state.absorb(data)
38834
38835 return this
38836 }
38837
38838 Keccak.prototype.digest = function (encoding) {
38839 if (this._finalized) throw new Error('Digest already called')
38840 this._finalized = true
38841
38842 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
38843 var digest = this._state.squeeze(this._hashBitLength / 8)
38844 if (encoding !== undefined) digest = digest.toString(encoding)
38845
38846 this._resetState()
38847
38848 return digest
38849 }
38850
38851 // remove result from memory
38852 Keccak.prototype._resetState = function () {
38853 this._state.initialize(this._rate, this._capacity)
38854 return this
38855 }
38856
38857 // because sometimes we need hash right now and little later
38858 Keccak.prototype._clone = function () {
38859 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
38860 this._state.copy(clone._state)
38861 clone._finalized = this._finalized
38862
38863 return clone
38864 }
38865
38866 return Keccak
38867}
38868
38869}).call(this,require("buffer").Buffer)
38870},{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
38871(function (Buffer){
38872'use strict'
38873var Transform = require('stream').Transform
38874var inherits = require('inherits')
38875
38876module.exports = function (KeccakState) {
38877 function Shake (rate, capacity, delimitedSuffix, options) {
38878 Transform.call(this, options)
38879
38880 this._rate = rate
38881 this._capacity = capacity
38882 this._delimitedSuffix = delimitedSuffix
38883 this._options = options
38884
38885 this._state = new KeccakState()
38886 this._state.initialize(rate, capacity)
38887 this._finalized = false
38888 }
38889
38890 inherits(Shake, Transform)
38891
38892 Shake.prototype._transform = function (chunk, encoding, callback) {
38893 var error = null
38894 try {
38895 this.update(chunk, encoding)
38896 } catch (err) {
38897 error = err
38898 }
ebd8d4e8 38899
8b095871
IC
38900 callback(error)
38901 }
ebd8d4e8 38902
8b095871 38903 Shake.prototype._flush = function () {}
ebd8d4e8 38904
8b095871
IC
38905 Shake.prototype._read = function (size) {
38906 this.push(this.squeeze(size))
38907 }
ebd8d4e8 38908
8b095871
IC
38909 Shake.prototype.update = function (data, encoding) {
38910 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
38911 if (this._finalized) throw new Error('Squeeze already called')
38912 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
38913
38914 this._state.absorb(data)
38915
38916 return this
38917 }
38918
38919 Shake.prototype.squeeze = function (dataByteLength, encoding) {
38920 if (!this._finalized) {
38921 this._finalized = true
38922 this._state.absorbLastFewBits(this._delimitedSuffix)
ebd8d4e8 38923 }
ebd8d4e8 38924
8b095871
IC
38925 var data = this._state.squeeze(dataByteLength)
38926 if (encoding !== undefined) data = data.toString(encoding)
ebd8d4e8 38927
8b095871
IC
38928 return data
38929 }
ebd8d4e8 38930
8b095871
IC
38931 Shake.prototype._resetState = function () {
38932 this._state.initialize(this._rate, this._capacity)
38933 return this
38934 }
ebd8d4e8 38935
8b095871
IC
38936 Shake.prototype._clone = function () {
38937 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
38938 this._state.copy(clone._state)
38939 clone._finalized = this._finalized
ab78acc6 38940
8b095871
IC
38941 return clone
38942 }
ebd8d4e8 38943
8b095871
IC
38944 return Shake
38945}
ab78acc6 38946
8b095871
IC
38947}).call(this,require("buffer").Buffer)
38948},{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
38949'use strict'
38950var P1600_ROUND_CONSTANTS = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]
38951
38952exports.p1600 = function (s) {
38953 for (var round = 0; round < 24; ++round) {
38954 // theta
38955 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
38956 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
38957 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
38958 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
38959 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
38960 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
38961 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
38962 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
38963 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
38964 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
38965
38966 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
38967 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
38968 var t1slo0 = s[0] ^ lo
38969 var t1shi0 = s[1] ^ hi
38970 var t1slo5 = s[10] ^ lo
38971 var t1shi5 = s[11] ^ hi
38972 var t1slo10 = s[20] ^ lo
38973 var t1shi10 = s[21] ^ hi
38974 var t1slo15 = s[30] ^ lo
38975 var t1shi15 = s[31] ^ hi
38976 var t1slo20 = s[40] ^ lo
38977 var t1shi20 = s[41] ^ hi
38978 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
38979 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
38980 var t1slo1 = s[2] ^ lo
38981 var t1shi1 = s[3] ^ hi
38982 var t1slo6 = s[12] ^ lo
38983 var t1shi6 = s[13] ^ hi
38984 var t1slo11 = s[22] ^ lo
38985 var t1shi11 = s[23] ^ hi
38986 var t1slo16 = s[32] ^ lo
38987 var t1shi16 = s[33] ^ hi
38988 var t1slo21 = s[42] ^ lo
38989 var t1shi21 = s[43] ^ hi
38990 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
38991 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
38992 var t1slo2 = s[4] ^ lo
38993 var t1shi2 = s[5] ^ hi
38994 var t1slo7 = s[14] ^ lo
38995 var t1shi7 = s[15] ^ hi
38996 var t1slo12 = s[24] ^ lo
38997 var t1shi12 = s[25] ^ hi
38998 var t1slo17 = s[34] ^ lo
38999 var t1shi17 = s[35] ^ hi
39000 var t1slo22 = s[44] ^ lo
39001 var t1shi22 = s[45] ^ hi
39002 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
39003 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
39004 var t1slo3 = s[6] ^ lo
39005 var t1shi3 = s[7] ^ hi
39006 var t1slo8 = s[16] ^ lo
39007 var t1shi8 = s[17] ^ hi
39008 var t1slo13 = s[26] ^ lo
39009 var t1shi13 = s[27] ^ hi
39010 var t1slo18 = s[36] ^ lo
39011 var t1shi18 = s[37] ^ hi
39012 var t1slo23 = s[46] ^ lo
39013 var t1shi23 = s[47] ^ hi
39014 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
39015 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
39016 var t1slo4 = s[8] ^ lo
39017 var t1shi4 = s[9] ^ hi
39018 var t1slo9 = s[18] ^ lo
39019 var t1shi9 = s[19] ^ hi
39020 var t1slo14 = s[28] ^ lo
39021 var t1shi14 = s[29] ^ hi
39022 var t1slo19 = s[38] ^ lo
39023 var t1shi19 = s[39] ^ hi
39024 var t1slo24 = s[48] ^ lo
39025 var t1shi24 = s[49] ^ hi
39026
39027 // rho & pi
39028 var t2slo0 = t1slo0
39029 var t2shi0 = t1shi0
39030 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
39031 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
39032 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
39033 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
39034 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
39035 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
39036 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
39037 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
39038 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
39039 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
39040 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
39041 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
39042 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
39043 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
39044 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
39045 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
39046 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
39047 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
39048 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
39049 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
39050 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
39051 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
39052 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
39053 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
39054 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
39055 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
39056 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
39057 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
39058 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
39059 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
39060 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
39061 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
39062 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
39063 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
39064 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
39065 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
39066 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
39067 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
39068 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
39069 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
39070 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
39071 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
39072 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
39073 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
39074 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
39075 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
39076 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
39077 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
39078
39079 // chi
39080 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
39081 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
39082 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
39083 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
39084 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
39085 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
39086 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
39087 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
39088 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
39089 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
39090 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
39091 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
39092 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
39093 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
39094 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
39095 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
39096 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
39097 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
39098 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
39099 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
39100 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
39101 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
39102 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
39103 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
39104 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
39105 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
39106 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
39107 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
39108 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
39109 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
39110 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
39111 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
39112 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
39113 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
39114 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
39115 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
39116 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
39117 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
39118 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
39119 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
39120 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
39121 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
39122 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
39123 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
39124 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
39125 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
39126 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
39127 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
39128 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
39129 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
39130
39131 // iota
39132 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
39133 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
39134 }
39135}
39136
39137},{}],70:[function(require,module,exports){
39138(function (Buffer){
39139'use strict'
39140var keccakState = require('./keccak-state-unroll')
ebd8d4e8 39141
8b095871
IC
39142function Keccak () {
39143 // much faster than `new Array(50)`
39144 this.state = [
39145 0, 0, 0, 0, 0,
39146 0, 0, 0, 0, 0,
39147 0, 0, 0, 0, 0,
39148 0, 0, 0, 0, 0,
39149 0, 0, 0, 0, 0
39150 ]
ebd8d4e8 39151
8b095871
IC
39152 this.blockSize = null
39153 this.count = 0
39154 this.squeezing = false
39155}
ebd8d4e8 39156
8b095871
IC
39157Keccak.prototype.initialize = function (rate, capacity) {
39158 for (var i = 0; i < 50; ++i) this.state[i] = 0
39159 this.blockSize = rate / 8
39160 this.count = 0
39161 this.squeezing = false
39162}
39163
39164Keccak.prototype.absorb = function (data) {
39165 for (var i = 0; i < data.length; ++i) {
39166 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
39167 this.count += 1
39168 if (this.count === this.blockSize) {
39169 keccakState.p1600(this.state)
39170 this.count = 0
ebd8d4e8
IC
39171 }
39172 }
8b095871 39173}
ebd8d4e8 39174
8b095871
IC
39175Keccak.prototype.absorbLastFewBits = function (bits) {
39176 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
39177 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
39178 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
39179 keccakState.p1600(this.state)
39180 this.count = 0
39181 this.squeezing = true
ebd8d4e8
IC
39182}
39183
8b095871
IC
39184Keccak.prototype.squeeze = function (length) {
39185 if (!this.squeezing) this.absorbLastFewBits(0x01)
ebd8d4e8 39186
8b095871
IC
39187 var output = Buffer.allocUnsafe(length)
39188 for (var i = 0; i < length; ++i) {
39189 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
39190 this.count += 1
39191 if (this.count === this.blockSize) {
39192 keccakState.p1600(this.state)
39193 this.count = 0
ebd8d4e8 39194 }
8b095871 39195 }
ebd8d4e8 39196
8b095871
IC
39197 return output
39198}
ebd8d4e8 39199
8b095871
IC
39200Keccak.prototype.copy = function (dest) {
39201 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
39202 dest.blockSize = this.blockSize
39203 dest.count = this.count
39204 dest.squeezing = this.squeezing
39205}
ebd8d4e8 39206
8b095871 39207module.exports = Keccak
ebd8d4e8 39208
8b095871
IC
39209}).call(this,require("buffer").Buffer)
39210},{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
39211(function (Buffer){
39212/*
39213CryptoJS v3.1.2
39214code.google.com/p/crypto-js
39215(c) 2009-2013 by Jeff Mott. All rights reserved.
39216code.google.com/p/crypto-js/wiki/License
39217*/
39218/** @preserve
39219(c) 2012 by Cédric Mesnil. All rights reserved.
ebd8d4e8 39220
8b095871 39221Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
ebd8d4e8 39222
8b095871
IC
39223 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
39224 - 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.
39225
39226THIS 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.
39227*/
39228
39229// constants table
39230var zl = [
39231 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
39232 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
39233 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
39234 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
39235 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
39236]
39237
39238var zr = [
39239 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
39240 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
39241 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
39242 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
39243 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
39244]
39245
39246var sl = [
39247 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
39248 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
39249 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
39250 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
39251 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
39252]
39253
39254var sr = [
39255 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
39256 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
39257 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
39258 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
39259 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
39260]
39261
39262var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
39263var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
39264
39265function bytesToWords (bytes) {
39266 var words = []
39267 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
39268 words[b >>> 5] |= bytes[i] << (24 - b % 32)
39269 }
39270 return words
ebd8d4e8
IC
39271}
39272
8b095871
IC
39273function wordsToBytes (words) {
39274 var bytes = []
39275 for (var b = 0; b < words.length * 32; b += 8) {
39276 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
39277 }
39278 return bytes
ebd8d4e8
IC
39279}
39280
8b095871
IC
39281function processBlock (H, M, offset) {
39282 // swap endian
39283 for (var i = 0; i < 16; i++) {
39284 var offset_i = offset + i
39285 var M_offset_i = M[offset_i]
ebd8d4e8 39286
8b095871
IC
39287 // Swap
39288 M[offset_i] = (
39289 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
39290 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
39291 )
39292 }
ebd8d4e8 39293
8b095871
IC
39294 // Working variables
39295 var al, bl, cl, dl, el
39296 var ar, br, cr, dr, er
39297
39298 ar = al = H[0]
39299 br = bl = H[1]
39300 cr = cl = H[2]
39301 dr = dl = H[3]
39302 er = el = H[4]
39303
39304 // computation
39305 var t
39306 for (i = 0; i < 80; i += 1) {
39307 t = (al + M[offset + zl[i]]) | 0
39308 if (i < 16) {
39309 t += f1(bl, cl, dl) + hl[0]
39310 } else if (i < 32) {
39311 t += f2(bl, cl, dl) + hl[1]
39312 } else if (i < 48) {
39313 t += f3(bl, cl, dl) + hl[2]
39314 } else if (i < 64) {
39315 t += f4(bl, cl, dl) + hl[3]
39316 } else {// if (i<80) {
39317 t += f5(bl, cl, dl) + hl[4]
39318 }
39319 t = t | 0
39320 t = rotl(t, sl[i])
39321 t = (t + el) | 0
39322 al = el
39323 el = dl
39324 dl = rotl(cl, 10)
39325 cl = bl
39326 bl = t
39327
39328 t = (ar + M[offset + zr[i]]) | 0
39329 if (i < 16) {
39330 t += f5(br, cr, dr) + hr[0]
39331 } else if (i < 32) {
39332 t += f4(br, cr, dr) + hr[1]
39333 } else if (i < 48) {
39334 t += f3(br, cr, dr) + hr[2]
39335 } else if (i < 64) {
39336 t += f2(br, cr, dr) + hr[3]
39337 } else {// if (i<80) {
39338 t += f1(br, cr, dr) + hr[4]
39339 }
39340
39341 t = t | 0
39342 t = rotl(t, sr[i])
39343 t = (t + er) | 0
39344 ar = er
39345 er = dr
39346 dr = rotl(cr, 10)
39347 cr = br
39348 br = t
39349 }
39350
39351 // intermediate hash value
39352 t = (H[1] + cl + dr) | 0
39353 H[1] = (H[2] + dl + er) | 0
39354 H[2] = (H[3] + el + ar) | 0
39355 H[3] = (H[4] + al + br) | 0
39356 H[4] = (H[0] + bl + cr) | 0
39357 H[0] = t
ebd8d4e8
IC
39358}
39359
8b095871
IC
39360function f1 (x, y, z) {
39361 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
39362}
39363
8b095871
IC
39364function f2 (x, y, z) {
39365 return (((x) & (y)) | ((~x) & (z)))
39366}
ebd8d4e8 39367
8b095871
IC
39368function f3 (x, y, z) {
39369 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
39370}
39371
8b095871
IC
39372function f4 (x, y, z) {
39373 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
39374}
39375
8b095871
IC
39376function f5 (x, y, z) {
39377 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
39378}
39379
8b095871
IC
39380function rotl (x, n) {
39381 return (x << n) | (x >>> (32 - n))
39382}
ebd8d4e8 39383
8b095871
IC
39384function ripemd160 (message) {
39385 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 39386
8b095871
IC
39387 if (typeof message === 'string') {
39388 message = new Buffer(message, 'utf8')
39389 }
ebd8d4e8 39390
8b095871 39391 var m = bytesToWords(message)
ebd8d4e8 39392
8b095871
IC
39393 var nBitsLeft = message.length * 8
39394 var nBitsTotal = message.length * 8
ebd8d4e8 39395
8b095871
IC
39396 // Add padding
39397 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
39398 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
39399 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
39400 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
39401 )
ebd8d4e8 39402
8b095871
IC
39403 for (var i = 0; i < m.length; i += 16) {
39404 processBlock(H, m, i)
ebd8d4e8
IC
39405 }
39406
8b095871
IC
39407 // swap endian
39408 for (i = 0; i < 5; i++) {
39409 // shortcut
39410 var H_i = H[i]
ebd8d4e8 39411
8b095871
IC
39412 // Swap
39413 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
39414 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
39415 }
39416
8b095871
IC
39417 var digestbytes = wordsToBytes(H)
39418 return new Buffer(digestbytes)
ebd8d4e8
IC
39419}
39420
8b095871 39421module.exports = ripemd160
ebd8d4e8 39422
8b095871
IC
39423}).call(this,require("buffer").Buffer)
39424},{"buffer":5}],72:[function(require,module,exports){
39425(function (Buffer){
39426const assert = require('assert')
39427/**
39428 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
39429 * This function takes in a data, convert it to buffer if not, and a length for recursion
39430 *
39431 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
39432 * @returns {Buffer} - returns buffer of encoded data
39433 **/
39434exports.encode = function (input) {
39435 if (input instanceof Array) {
39436 var output = []
39437 for (var i = 0; i < input.length; i++) {
39438 output.push(exports.encode(input[i]))
39439 }
39440 var buf = Buffer.concat(output)
39441 return Buffer.concat([encodeLength(buf.length, 192), buf])
39442 } else {
39443 input = toBuffer(input)
39444 if (input.length === 1 && input[0] < 128) {
39445 return input
39446 } else {
39447 return Buffer.concat([encodeLength(input.length, 128), input])
39448 }
39449 }
ebd8d4e8
IC
39450}
39451
8b095871
IC
39452function safeParseInt (v, base) {
39453 if (v.slice(0, 2) === '00') {
39454 throw (new Error('invalid RLP: extra zeros'))
39455 }
ebd8d4e8 39456
8b095871 39457 return parseInt(v, base)
ebd8d4e8
IC
39458}
39459
8b095871
IC
39460function encodeLength (len, offset) {
39461 if (len < 56) {
39462 return new Buffer([len + offset])
39463 } else {
39464 var hexLength = intToHex(len)
39465 var lLength = hexLength.length / 2
39466 var firstByte = intToHex(offset + 55 + lLength)
39467 return new Buffer(firstByte + hexLength, 'hex')
39468 }
39469}
ebd8d4e8 39470
8b095871
IC
39471/**
39472 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
39473 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
39474 * @returns {Array} - returns decode Array of Buffers containg the original message
39475 **/
39476exports.decode = function (input, stream) {
39477 if (!input || input.length === 0) {
39478 return new Buffer([])
39479 }
ebd8d4e8 39480
8b095871
IC
39481 input = toBuffer(input)
39482 var decoded = _decode(input)
ab78acc6 39483
8b095871
IC
39484 if (stream) {
39485 return decoded
39486 }
ebd8d4e8 39487
8b095871
IC
39488 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
39489 return decoded.data
ebd8d4e8
IC
39490}
39491
8b095871
IC
39492exports.getLength = function (input) {
39493 if (!input || input.length === 0) {
39494 return new Buffer([])
ab78acc6
IC
39495 }
39496
8b095871
IC
39497 input = toBuffer(input)
39498 var firstByte = input[0]
39499 if (firstByte <= 0x7f) {
39500 return input.length
39501 } else if (firstByte <= 0xb7) {
39502 return firstByte - 0x7f
39503 } else if (firstByte <= 0xbf) {
39504 return firstByte - 0xb6
39505 } else if (firstByte <= 0xf7) {
39506 // a list between 0-55 bytes long
39507 return firstByte - 0xbf
39508 } else {
39509 // a list over 55 bytes long
39510 var llength = firstByte - 0xf6
39511 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
39512 return llength + length
39513 }
ebd8d4e8
IC
39514}
39515
8b095871
IC
39516function _decode (input) {
39517 var length, llength, data, innerRemainder, d
39518 var decoded = []
39519 var firstByte = input[0]
ebd8d4e8 39520
8b095871
IC
39521 if (firstByte <= 0x7f) {
39522 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
39523 return {
39524 data: input.slice(0, 1),
39525 remainder: input.slice(1)
39526 }
39527 } else if (firstByte <= 0xb7) {
39528 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
39529 // The range of the first byte is [0x80, 0xb7]
39530 length = firstByte - 0x7f
ebd8d4e8 39531
8b095871
IC
39532 // set 0x80 null to 0
39533 if (firstByte === 0x80) {
39534 data = new Buffer([])
39535 } else {
39536 data = input.slice(1, length)
39537 }
ebd8d4e8 39538
8b095871
IC
39539 if (length === 2 && data[0] < 0x80) {
39540 throw new Error('invalid rlp encoding: byte must be less 0x80')
39541 }
ebd8d4e8 39542
8b095871
IC
39543 return {
39544 data: data,
39545 remainder: input.slice(length)
39546 }
39547 } else if (firstByte <= 0xbf) {
39548 llength = firstByte - 0xb6
39549 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
39550 data = input.slice(llength, length + llength)
39551 if (data.length < length) {
39552 throw (new Error('invalid RLP'))
39553 }
ebd8d4e8 39554
8b095871
IC
39555 return {
39556 data: data,
39557 remainder: input.slice(length + llength)
39558 }
39559 } else if (firstByte <= 0xf7) {
39560 // a list between 0-55 bytes long
39561 length = firstByte - 0xbf
39562 innerRemainder = input.slice(1, length)
39563 while (innerRemainder.length) {
39564 d = _decode(innerRemainder)
39565 decoded.push(d.data)
39566 innerRemainder = d.remainder
39567 }
ebd8d4e8 39568
8b095871
IC
39569 return {
39570 data: decoded,
39571 remainder: input.slice(length)
39572 }
39573 } else {
39574 // a list over 55 bytes long
39575 llength = firstByte - 0xf6
39576 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
39577 var totalLength = llength + length
39578 if (totalLength > input.length) {
39579 throw new Error('invalid rlp: total length is larger than the data')
39580 }
ab78acc6 39581
8b095871
IC
39582 innerRemainder = input.slice(llength, totalLength)
39583 if (innerRemainder.length === 0) {
39584 throw new Error('invalid rlp, List has a invalid length')
39585 }
ab78acc6 39586
8b095871
IC
39587 while (innerRemainder.length) {
39588 d = _decode(innerRemainder)
39589 decoded.push(d.data)
39590 innerRemainder = d.remainder
39591 }
39592 return {
39593 data: decoded,
39594 remainder: input.slice(totalLength)
39595 }
ab78acc6 39596 }
8b095871 39597}
ab78acc6 39598
8b095871
IC
39599function isHexPrefixed (str) {
39600 return str.slice(0, 2) === '0x'
ab78acc6
IC
39601}
39602
8b095871
IC
39603// Removes 0x from a given String
39604function stripHexPrefix (str) {
39605 if (typeof str !== 'string') {
39606 return str
39607 }
39608 return isHexPrefixed(str) ? str.slice(2) : str
39609}
ab78acc6 39610
8b095871
IC
39611function intToHex (i) {
39612 var hex = i.toString(16)
39613 if (hex.length % 2) {
39614 hex = '0' + hex
ab78acc6
IC
39615 }
39616
8b095871 39617 return hex
ebd8d4e8
IC
39618}
39619
8b095871
IC
39620function padToEven (a) {
39621 if (a.length % 2) a = '0' + a
39622 return a
ebd8d4e8
IC
39623}
39624
8b095871
IC
39625function intToBuffer (i) {
39626 var hex = intToHex(i)
39627 return new Buffer(hex, 'hex')
ebd8d4e8
IC
39628}
39629
8b095871
IC
39630function toBuffer (v) {
39631 if (!Buffer.isBuffer(v)) {
39632 if (typeof v === 'string') {
39633 if (isHexPrefixed(v)) {
39634 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
39635 } else {
39636 v = new Buffer(v)
39637 }
39638 } else if (typeof v === 'number') {
39639 if (!v) {
39640 v = new Buffer([])
39641 } else {
39642 v = intToBuffer(v)
39643 }
39644 } else if (v === null || v === undefined) {
39645 v = new Buffer([])
39646 } else if (v.toArray) {
39647 // converts a BN to a Buffer
39648 v = new Buffer(v.toArray())
39649 } else {
39650 throw new Error('invalid type')
39651 }
39652 }
39653 return v
ebd8d4e8
IC
39654}
39655
8b095871
IC
39656}).call(this,require("buffer").Buffer)
39657},{"assert":1,"buffer":5}],73:[function(require,module,exports){
39658'use strict'
39659module.exports = require('./lib')(require('./lib/elliptic'))
ebd8d4e8 39660
8b095871
IC
39661},{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
39662(function (Buffer){
39663'use strict'
39664var toString = Object.prototype.toString
ebd8d4e8 39665
8b095871
IC
39666// TypeError
39667exports.isArray = function (value, message) {
39668 if (!Array.isArray(value)) throw TypeError(message)
ebd8d4e8
IC
39669}
39670
8b095871
IC
39671exports.isBoolean = function (value, message) {
39672 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
39673}
ebd8d4e8 39674
8b095871
IC
39675exports.isBuffer = function (value, message) {
39676 if (!Buffer.isBuffer(value)) throw TypeError(message)
ebd8d4e8
IC
39677}
39678
8b095871
IC
39679exports.isFunction = function (value, message) {
39680 if (toString.call(value) !== '[object Function]') throw TypeError(message)
ebd8d4e8
IC
39681}
39682
8b095871
IC
39683exports.isNumber = function (value, message) {
39684 if (toString.call(value) !== '[object Number]') throw TypeError(message)
39685}
ab78acc6 39686
8b095871
IC
39687exports.isObject = function (value, message) {
39688 if (toString.call(value) !== '[object Object]') throw TypeError(message)
39689}
ebd8d4e8 39690
8b095871
IC
39691// RangeError
39692exports.isBufferLength = function (buffer, length, message) {
39693 if (buffer.length !== length) throw RangeError(message)
39694}
ebd8d4e8 39695
8b095871
IC
39696exports.isBufferLength2 = function (buffer, length1, length2, message) {
39697 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
ab78acc6
IC
39698}
39699
8b095871
IC
39700exports.isLengthGTZero = function (value, message) {
39701 if (value.length === 0) throw RangeError(message)
ebd8d4e8
IC
39702}
39703
8b095871
IC
39704exports.isNumberInInterval = function (number, x, y, message) {
39705 if (number <= x || number >= y) throw RangeError(message)
ebd8d4e8
IC
39706}
39707
8b095871
IC
39708}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
39709},{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
ebd8d4e8 39710(function (Buffer){
8b095871
IC
39711'use strict'
39712var bip66 = require('bip66')
39713
39714var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
39715 // begin
39716 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
39717 // private key
39718 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39719 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39720 // middle
39721 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
39722 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39723 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39724 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
39725 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
39726 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
39727 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39728 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
39729 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
39730 // public key
39731 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39732 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39733 0x00
39734])
39735
39736var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
39737 // begin
39738 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
39739 // private key
39740 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39741 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39742 // middle
39743 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
39744 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39745 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39746 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
39747 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
39748 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
39749 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
39750 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
39751 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39752 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
39753 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
39754 // public key
39755 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39756 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39757 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39758 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39759 0x00
39760])
39761
39762var ZERO_BUFFER_32 = new Buffer([
39763 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39764 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
39765])
39766
39767exports.privateKeyExport = function (privateKey, publicKey, compressed) {
39768 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
39769 privateKey.copy(result, compressed ? 8 : 9)
39770 publicKey.copy(result, compressed ? 181 : 214)
39771 return result
39772}
39773
39774exports.privateKeyImport = function (privateKey) {
39775 var length = privateKey.length
39776
39777 // sequence header
39778 var index = 0
39779 if (length < index + 1 || privateKey[index] !== 0x30) return
39780 index += 1
39781
39782 // sequence length constructor
39783 if (length < index + 1 || !(privateKey[index] & 0x80)) return
39784
39785 var lenb = privateKey[index] & 0x7f
39786 index += 1
39787 if (lenb < 1 || lenb > 2) return
39788 if (length < index + lenb) return
39789
39790 // sequence length
39791 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
39792 index += lenb
39793 if (length < index + len) return
39794
39795 // sequence element 0: version number (=1)
39796 if (length < index + 3 ||
39797 privateKey[index] !== 0x02 ||
39798 privateKey[index + 1] !== 0x01 ||
39799 privateKey[index + 2] !== 0x01) {
39800 return
39801 }
39802 index += 3
ab78acc6 39803
8b095871
IC
39804 // sequence element 1: octet string, up to 32 bytes
39805 if (length < index + 2 ||
39806 privateKey[index] !== 0x04 ||
39807 privateKey[index + 1] > 0x20 ||
39808 length < index + 2 + privateKey[index + 1]) {
39809 return
39810 }
ab78acc6 39811
8b095871 39812 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
ab78acc6 39813}
ebd8d4e8 39814
8b095871
IC
39815exports.signatureExport = function (sigObj) {
39816 var r = Buffer.concat([new Buffer([0]), sigObj.r])
39817 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
ebd8d4e8 39818
8b095871
IC
39819 var s = Buffer.concat([new Buffer([0]), sigObj.s])
39820 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
ab78acc6 39821
8b095871
IC
39822 return bip66.encode(r.slice(posR), s.slice(posS))
39823}
ab78acc6 39824
8b095871
IC
39825exports.signatureImport = function (sig) {
39826 var r = new Buffer(ZERO_BUFFER_32)
39827 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 39828
8b095871
IC
39829 try {
39830 var sigObj = bip66.decode(sig)
39831 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
39832 if (sigObj.r.length > 32) throw new Error('R length is too long')
39833 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
39834 if (sigObj.s.length > 32) throw new Error('S length is too long')
39835 } catch (err) {
39836 return
ab78acc6
IC
39837 }
39838
8b095871
IC
39839 sigObj.r.copy(r, 32 - sigObj.r.length)
39840 sigObj.s.copy(s, 32 - sigObj.s.length)
ab78acc6 39841
8b095871
IC
39842 return { r: r, s: s }
39843}
ab78acc6 39844
8b095871
IC
39845exports.signatureImportLax = function (sig) {
39846 var r = new Buffer(ZERO_BUFFER_32)
39847 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 39848
8b095871
IC
39849 var length = sig.length
39850 var index = 0
ab78acc6 39851
8b095871
IC
39852 // sequence tag byte
39853 if (sig[index++] !== 0x30) return
39854
39855 // sequence length byte
39856 var lenbyte = sig[index++]
39857 if (lenbyte & 0x80) {
39858 index += lenbyte - 0x80
39859 if (index > length) return
ab78acc6
IC
39860 }
39861
8b095871
IC
39862 // sequence tag byte for r
39863 if (sig[index++] !== 0x02) return
39864
39865 // length for r
39866 var rlen = sig[index++]
39867 if (rlen & 0x80) {
39868 lenbyte = rlen - 0x80
39869 if (index + lenbyte > length) return
39870 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
39871 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
ab78acc6 39872 }
8b095871
IC
39873 if (rlen > length - index) return
39874 var rindex = index
39875 index += rlen
ab78acc6 39876
8b095871
IC
39877 // sequence tag byte for s
39878 if (sig[index++] !== 0x02) return
ab78acc6 39879
8b095871
IC
39880 // length for s
39881 var slen = sig[index++]
39882 if (slen & 0x80) {
39883 lenbyte = slen - 0x80
39884 if (index + lenbyte > length) return
39885 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
39886 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
ab78acc6 39887 }
8b095871
IC
39888 if (slen > length - index) return
39889 var sindex = index
39890 index += slen
ab78acc6 39891
8b095871
IC
39892 // ignore leading zeros in r
39893 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
39894 // copy r value
39895 if (rlen > 32) return
39896 var rvalue = sig.slice(rindex, rindex + rlen)
39897 rvalue.copy(r, 32 - rvalue.length)
ab78acc6 39898
8b095871
IC
39899 // ignore leading zeros in s
39900 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
39901 // copy s value
39902 if (slen > 32) return
39903 var svalue = sig.slice(sindex, sindex + slen)
39904 svalue.copy(s, 32 - svalue.length)
39905
39906 return { r: r, s: s }
ab78acc6
IC
39907}
39908
8b095871
IC
39909}).call(this,require("buffer").Buffer)
39910},{"bip66":32,"buffer":5}],76:[function(require,module,exports){
39911(function (Buffer){
39912'use strict'
39913var createHash = require('create-hash')
39914var BN = require('bn.js')
39915var EC = require('elliptic').ec
39916
39917var messages = require('../messages.json')
39918
39919var ec = new EC('secp256k1')
39920var ecparams = ec.curve
39921
39922function loadCompressedPublicKey (first, xBuffer) {
39923 var x = new BN(xBuffer)
39924
39925 // overflow
39926 if (x.cmp(ecparams.p) >= 0) return null
39927 x = x.toRed(ecparams.red)
39928
39929 // compute corresponding Y
39930 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
39931 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
39932
39933 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
39934}
39935
8b095871
IC
39936function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
39937 var x = new BN(xBuffer)
39938 var y = new BN(yBuffer)
ebd8d4e8 39939
8b095871
IC
39940 // overflow
39941 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
ebd8d4e8 39942
8b095871
IC
39943 x = x.toRed(ecparams.red)
39944 y = y.toRed(ecparams.red)
ebd8d4e8 39945
8b095871
IC
39946 // is odd flag
39947 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
ab78acc6 39948
8b095871
IC
39949 // x*x*x + b = y*y
39950 var x3 = x.redSqr().redIMul(x)
39951 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
ebd8d4e8 39952
8b095871 39953 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
39954}
39955
8b095871
IC
39956function loadPublicKey (publicKey) {
39957 var first = publicKey[0]
39958 switch (first) {
39959 case 0x02:
39960 case 0x03:
39961 if (publicKey.length !== 33) return null
39962 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
39963 case 0x04:
39964 case 0x06:
39965 case 0x07:
39966 if (publicKey.length !== 65) return null
39967 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
39968 default:
39969 return null
ebd8d4e8 39970 }
8b095871 39971}
ebd8d4e8 39972
8b095871
IC
39973exports.privateKeyVerify = function (privateKey) {
39974 var bn = new BN(privateKey)
39975 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
39976}
ebd8d4e8 39977
8b095871
IC
39978exports.privateKeyExport = function (privateKey, compressed) {
39979 var d = new BN(privateKey)
39980 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
ab78acc6 39981
8b095871 39982 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
ebd8d4e8
IC
39983}
39984
8b095871
IC
39985exports.privateKeyTweakAdd = function (privateKey, tweak) {
39986 var bn = new BN(tweak)
39987 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 39988
8b095871
IC
39989 bn.iadd(new BN(privateKey))
39990 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
39991 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 39992
8b095871
IC
39993 return bn.toArrayLike(Buffer, 'be', 32)
39994}
39995
39996exports.privateKeyTweakMul = function (privateKey, tweak) {
39997 var bn = new BN(tweak)
39998 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
39999
40000 bn.imul(new BN(privateKey))
40001 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
40002
40003 return bn.toArrayLike(Buffer, 'be', 32)
40004}
40005
40006exports.publicKeyCreate = function (privateKey, compressed) {
40007 var d = new BN(privateKey)
40008 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
40009
40010 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
40011}
40012
40013exports.publicKeyConvert = function (publicKey, compressed) {
40014 var pair = loadPublicKey(publicKey)
40015 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 40016
8b095871 40017 return new Buffer(pair.getPublic(compressed, true))
ab78acc6
IC
40018}
40019
8b095871
IC
40020exports.publicKeyVerify = function (publicKey) {
40021 return loadPublicKey(publicKey) !== null
40022}
ab78acc6 40023
8b095871
IC
40024exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
40025 var pair = loadPublicKey(publicKey)
40026 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 40027
8b095871
IC
40028 tweak = new BN(tweak)
40029 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
ab78acc6 40030
8b095871
IC
40031 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
40032}
ab78acc6 40033
8b095871
IC
40034exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
40035 var pair = loadPublicKey(publicKey)
40036 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 40037
8b095871
IC
40038 tweak = new BN(tweak)
40039 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
ab78acc6 40040
8b095871
IC
40041 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
40042}
ab78acc6 40043
8b095871
IC
40044exports.publicKeyCombine = function (publicKeys, compressed) {
40045 var pairs = new Array(publicKeys.length)
40046 for (var i = 0; i < publicKeys.length; ++i) {
40047 pairs[i] = loadPublicKey(publicKeys[i])
40048 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6
IC
40049 }
40050
8b095871
IC
40051 var point = pairs[0].pub
40052 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
40053 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
ab78acc6 40054
8b095871
IC
40055 return new Buffer(point.encode(true, compressed))
40056}
ab78acc6 40057
8b095871
IC
40058exports.signatureNormalize = function (signature) {
40059 var r = new BN(signature.slice(0, 32))
40060 var s = new BN(signature.slice(32, 64))
40061 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
40062
40063 var result = new Buffer(signature)
40064 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
40065
40066 return result
ab78acc6
IC
40067}
40068
8b095871
IC
40069exports.signatureExport = function (signature) {
40070 var r = signature.slice(0, 32)
40071 var s = signature.slice(32, 64)
40072 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
40073
40074 return { r: r, s: s }
ab78acc6
IC
40075}
40076
8b095871
IC
40077exports.signatureImport = function (sigObj) {
40078 var r = new BN(sigObj.r)
40079 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
40080
40081 var s = new BN(sigObj.s)
40082 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
40083
40084 return Buffer.concat([
40085 r.toArrayLike(Buffer, 'be', 32),
40086 s.toArrayLike(Buffer, 'be', 32)
40087 ])
ab78acc6
IC
40088}
40089
8b095871
IC
40090exports.sign = function (message, privateKey, noncefn, data) {
40091 if (typeof noncefn === 'function') {
40092 var getNonce = noncefn
40093 noncefn = function (counter) {
40094 var nonce = getNonce(message, privateKey, null, data, counter)
40095 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 40096
8b095871
IC
40097 return new BN(nonce)
40098 }
ab78acc6 40099 }
ebd8d4e8 40100
8b095871
IC
40101 var d = new BN(privateKey)
40102 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 40103
8b095871
IC
40104 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
40105 return {
40106 signature: Buffer.concat([
40107 result.r.toArrayLike(Buffer, 'be', 32),
40108 result.s.toArrayLike(Buffer, 'be', 32)
40109 ]),
40110 recovery: result.recoveryParam
ebd8d4e8 40111 }
8b095871 40112}
ab78acc6 40113
8b095871
IC
40114exports.verify = function (message, signature, publicKey) {
40115 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ab78acc6 40116
8b095871
IC
40117 var sigr = new BN(sigObj.r)
40118 var sigs = new BN(sigObj.s)
40119 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
40120 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
ab78acc6 40121
8b095871
IC
40122 var pair = loadPublicKey(publicKey)
40123 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ebd8d4e8 40124
8b095871
IC
40125 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
40126}
ebd8d4e8 40127
8b095871
IC
40128exports.recover = function (message, signature, recovery, compressed) {
40129 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ebd8d4e8 40130
8b095871
IC
40131 var sigr = new BN(sigObj.r)
40132 var sigs = new BN(sigObj.s)
40133 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
ebd8d4e8 40134
8b095871
IC
40135 try {
40136 if (sigr.isZero() || sigs.isZero()) throw new Error()
ebd8d4e8 40137
8b095871
IC
40138 var point = ec.recoverPubKey(message, sigObj, recovery)
40139 return new Buffer(point.encode(true, compressed))
40140 } catch (err) {
40141 throw new Error(messages.ECDSA_RECOVER_FAIL)
40142 }
ebd8d4e8
IC
40143}
40144
8b095871
IC
40145exports.ecdh = function (publicKey, privateKey) {
40146 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
40147 return createHash('sha256').update(shared).digest()
ebd8d4e8
IC
40148}
40149
8b095871
IC
40150exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
40151 var pair = loadPublicKey(publicKey)
40152 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 40153
8b095871
IC
40154 var scalar = new BN(privateKey)
40155 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
40156
40157 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
ab78acc6
IC
40158}
40159
8b095871
IC
40160}).call(this,require("buffer").Buffer)
40161},{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
40162'use strict'
40163var assert = require('./assert')
40164var der = require('./der')
40165var messages = require('./messages.json')
ab78acc6 40166
8b095871
IC
40167function initCompressedValue (value, defaultValue) {
40168 if (value === undefined) return defaultValue
ab78acc6 40169
8b095871
IC
40170 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
40171 return value
ab78acc6
IC
40172}
40173
8b095871
IC
40174module.exports = function (secp256k1) {
40175 return {
40176 privateKeyVerify: function (privateKey) {
40177 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40178 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
40179 },
ab78acc6 40180
8b095871
IC
40181 privateKeyExport: function (privateKey, compressed) {
40182 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40183 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40184
8b095871
IC
40185 compressed = initCompressedValue(compressed, true)
40186 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
ab78acc6 40187
8b095871
IC
40188 return der.privateKeyExport(privateKey, publicKey, compressed)
40189 },
ab78acc6 40190
8b095871
IC
40191 privateKeyImport: function (privateKey) {
40192 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
ab78acc6 40193
8b095871
IC
40194 privateKey = der.privateKeyImport(privateKey)
40195 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
ab78acc6 40196
8b095871
IC
40197 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
40198 },
ab78acc6 40199
8b095871
IC
40200 privateKeyTweakAdd: function (privateKey, tweak) {
40201 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40202 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40203
8b095871
IC
40204 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40205 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 40206
8b095871
IC
40207 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
40208 },
ab78acc6 40209
8b095871
IC
40210 privateKeyTweakMul: function (privateKey, tweak) {
40211 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40212 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40213
8b095871
IC
40214 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40215 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 40216
8b095871
IC
40217 return secp256k1.privateKeyTweakMul(privateKey, tweak)
40218 },
ab78acc6 40219
8b095871
IC
40220 publicKeyCreate: function (privateKey, compressed) {
40221 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40222 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40223
8b095871 40224 compressed = initCompressedValue(compressed, true)
ab78acc6 40225
8b095871
IC
40226 return secp256k1.publicKeyCreate(privateKey, compressed)
40227 },
ab78acc6 40228
8b095871
IC
40229 publicKeyConvert: function (publicKey, compressed) {
40230 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40231 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 40232
8b095871
IC
40233 compressed = initCompressedValue(compressed, true)
40234
40235 return secp256k1.publicKeyConvert(publicKey, compressed)
40236 },
40237
40238 publicKeyVerify: function (publicKey) {
40239 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40240 return secp256k1.publicKeyVerify(publicKey)
40241 },
40242
40243 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
40244 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40245 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
40246
40247 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40248 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
40249
40250 compressed = initCompressedValue(compressed, true)
40251
40252 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
40253 },
40254
40255 publicKeyTweakMul: function (publicKey, tweak, compressed) {
40256 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40257 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
40258
40259 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40260 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
40261
40262 compressed = initCompressedValue(compressed, true)
40263
40264 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
40265 },
40266
40267 publicKeyCombine: function (publicKeys, compressed) {
40268 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
40269 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
40270 for (var i = 0; i < publicKeys.length; ++i) {
40271 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
40272 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6
IC
40273 }
40274
8b095871 40275 compressed = initCompressedValue(compressed, true)
ab78acc6 40276
8b095871
IC
40277 return secp256k1.publicKeyCombine(publicKeys, compressed)
40278 },
ab78acc6 40279
8b095871
IC
40280 signatureNormalize: function (signature) {
40281 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40282 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 40283
8b095871
IC
40284 return secp256k1.signatureNormalize(signature)
40285 },
ab78acc6 40286
8b095871
IC
40287 signatureExport: function (signature) {
40288 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40289 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
40290
40291 var sigObj = secp256k1.signatureExport(signature)
40292 return der.signatureExport(sigObj)
40293 },
40294
40295 signatureImport: function (sig) {
40296 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40297 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
40298
40299 var sigObj = der.signatureImport(sig)
40300 if (sigObj) return secp256k1.signatureImport(sigObj)
40301
40302 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
40303 },
40304
40305 signatureImportLax: function (sig) {
40306 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40307 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
40308
40309 var sigObj = der.signatureImportLax(sig)
40310 if (sigObj) return secp256k1.signatureImport(sigObj)
40311
40312 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
40313 },
40314
40315 sign: function (message, privateKey, options) {
40316 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
40317 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
40318
40319 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40320 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
40321
40322 var data = null
40323 var noncefn = null
40324 if (options !== undefined) {
40325 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
40326
40327 if (options.data !== undefined) {
40328 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
40329 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
40330 data = options.data
40331 }
40332
40333 if (options.noncefn !== undefined) {
40334 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
40335 noncefn = options.noncefn
40336 }
ab78acc6
IC
40337 }
40338
8b095871
IC
40339 return secp256k1.sign(message, privateKey, noncefn, data)
40340 },
ab78acc6 40341
8b095871
IC
40342 verify: function (message, signature, publicKey) {
40343 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
40344 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 40345
8b095871
IC
40346 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40347 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 40348
8b095871
IC
40349 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40350 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
40351
40352 return secp256k1.verify(message, signature, publicKey)
40353 },
ab78acc6 40354
8b095871
IC
40355 recover: function (message, signature, recovery, compressed) {
40356 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
40357 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 40358
8b095871
IC
40359 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40360 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 40361
8b095871
IC
40362 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
40363 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
ab78acc6 40364
8b095871 40365 compressed = initCompressedValue(compressed, true)
ab78acc6 40366
8b095871
IC
40367 return secp256k1.recover(message, signature, recovery, compressed)
40368 },
ab78acc6 40369
8b095871
IC
40370 ecdh: function (publicKey, privateKey) {
40371 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40372 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 40373
8b095871
IC
40374 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40375 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40376
8b095871
IC
40377 return secp256k1.ecdh(publicKey, privateKey)
40378 },
ab78acc6 40379
8b095871
IC
40380 ecdhUnsafe: function (publicKey, privateKey, compressed) {
40381 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40382 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 40383
8b095871
IC
40384 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40385 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40386
8b095871 40387 compressed = initCompressedValue(compressed, true)
ab78acc6 40388
8b095871
IC
40389 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
40390 }
40391 }
40392}
ab78acc6 40393
8b095871
IC
40394},{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
40395module.exports={
40396 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
40397 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
40398 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
40399 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
40400 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
40401 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
40402 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
40403 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
40404 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
40405 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
40406 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
40407 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
40408 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
40409 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
40410 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
40411 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
40412 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
40413 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
40414 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
40415 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
40416 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
40417 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
40418 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
40419 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
40420 "MSG32_TYPE_INVALID": "message should be a Buffer",
40421 "MSG32_LENGTH_INVALID": "message length is invalid",
40422 "OPTIONS_TYPE_INVALID": "options should be an Object",
40423 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
40424 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
40425 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
40426 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
40427 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
40428 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
40429 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
40430}
40431
40432},{}],79:[function(require,module,exports){
40433(function (Buffer){
40434// prototype class for hash functions
40435function Hash (blockSize, finalSize) {
40436 this._block = new Buffer(blockSize)
40437 this._finalSize = finalSize
40438 this._blockSize = blockSize
40439 this._len = 0
40440 this._s = 0
40441}
40442
40443Hash.prototype.update = function (data, enc) {
40444 if (typeof data === 'string') {
40445 enc = enc || 'utf8'
40446 data = new Buffer(data, enc)
ab78acc6
IC
40447 }
40448
8b095871
IC
40449 var l = this._len += data.length
40450 var s = this._s || 0
40451 var f = 0
40452 var buffer = this._block
ab78acc6 40453
8b095871
IC
40454 while (s < l) {
40455 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
40456 var ch = (t - f)
ab78acc6 40457
8b095871
IC
40458 for (var i = 0; i < ch; i++) {
40459 buffer[(s % this._blockSize) + i] = data[i + f]
ab78acc6
IC
40460 }
40461
8b095871
IC
40462 s += ch
40463 f += ch
ab78acc6 40464
8b095871
IC
40465 if ((s % this._blockSize) === 0) {
40466 this._update(buffer)
40467 }
ab78acc6 40468 }
8b095871 40469 this._s = s
ab78acc6 40470
8b095871
IC
40471 return this
40472}
ab78acc6 40473
8b095871
IC
40474Hash.prototype.digest = function (enc) {
40475 // Suppose the length of the message M, in bits, is l
40476 var l = this._len * 8
ab78acc6 40477
8b095871
IC
40478 // Append the bit 1 to the end of the message
40479 this._block[this._len % this._blockSize] = 0x80
ab78acc6 40480
8b095871
IC
40481 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
40482 this._block.fill(0, this._len % this._blockSize + 1)
ab78acc6 40483
8b095871
IC
40484 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
40485 this._update(this._block)
40486 this._block.fill(0)
40487 }
ab78acc6 40488
8b095871
IC
40489 // to this append the block which is equal to the number l written in binary
40490 // TODO: handle case where l is > Math.pow(2, 29)
40491 this._block.writeInt32BE(l, this._blockSize - 4)
ebd8d4e8 40492
8b095871 40493 var hash = this._update(this._block) || this._hash()
ebd8d4e8 40494
8b095871 40495 return enc ? hash.toString(enc) : hash
ab78acc6 40496}
ebd8d4e8 40497
8b095871
IC
40498Hash.prototype._update = function () {
40499 throw new Error('_update must be implemented by subclass')
ab78acc6 40500}
8b095871
IC
40501
40502module.exports = Hash
40503
40504}).call(this,require("buffer").Buffer)
40505},{"buffer":5}],80:[function(require,module,exports){
40506var exports = module.exports = function SHA (algorithm) {
40507 algorithm = algorithm.toLowerCase()
40508
40509 var Algorithm = exports[algorithm]
40510 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
40511
40512 return new Algorithm()
ab78acc6 40513}
ebd8d4e8 40514
8b095871
IC
40515exports.sha = require('./sha')
40516exports.sha1 = require('./sha1')
40517exports.sha224 = require('./sha224')
40518exports.sha256 = require('./sha256')
40519exports.sha384 = require('./sha384')
40520exports.sha512 = require('./sha512')
40521
40522},{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
40523(function (Buffer){
40524/*
40525 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
40526 * in FIPS PUB 180-1
40527 * This source code is derived from sha1.js of the same repository.
40528 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
40529 * operation was added.
40530 */
40531
40532var inherits = require('inherits')
40533var Hash = require('./hash')
40534
40535var K = [
40536 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
40537]
40538
40539var W = new Array(80)
40540
40541function Sha () {
40542 this.init()
40543 this._w = W
40544
40545 Hash.call(this, 64, 56)
ab78acc6 40546}
ebd8d4e8 40547
8b095871 40548inherits(Sha, Hash)
ebd8d4e8 40549
8b095871
IC
40550Sha.prototype.init = function () {
40551 this._a = 0x67452301
40552 this._b = 0xefcdab89
40553 this._c = 0x98badcfe
40554 this._d = 0x10325476
40555 this._e = 0xc3d2e1f0
ebd8d4e8 40556
8b095871
IC
40557 return this
40558}
ebd8d4e8 40559
8b095871
IC
40560function rotl5 (num) {
40561 return (num << 5) | (num >>> 27)
40562}
ebd8d4e8 40563
8b095871
IC
40564function rotl30 (num) {
40565 return (num << 30) | (num >>> 2)
40566}
ebd8d4e8 40567
8b095871
IC
40568function ft (s, b, c, d) {
40569 if (s === 0) return (b & c) | ((~b) & d)
40570 if (s === 2) return (b & c) | (b & d) | (c & d)
40571 return b ^ c ^ d
40572}
ebd8d4e8 40573
8b095871
IC
40574Sha.prototype._update = function (M) {
40575 var W = this._w
ebd8d4e8 40576
8b095871
IC
40577 var a = this._a | 0
40578 var b = this._b | 0
40579 var c = this._c | 0
40580 var d = this._d | 0
40581 var e = this._e | 0
ebd8d4e8 40582
8b095871
IC
40583 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40584 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
ebd8d4e8 40585
8b095871
IC
40586 for (var j = 0; j < 80; ++j) {
40587 var s = ~~(j / 20)
40588 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
ebd8d4e8 40589
8b095871
IC
40590 e = d
40591 d = c
40592 c = rotl30(b)
40593 b = a
40594 a = t
40595 }
40596
40597 this._a = (a + this._a) | 0
40598 this._b = (b + this._b) | 0
40599 this._c = (c + this._c) | 0
40600 this._d = (d + this._d) | 0
40601 this._e = (e + this._e) | 0
40602}
40603
40604Sha.prototype._hash = function () {
40605 var H = new Buffer(20)
ab78acc6 40606
8b095871
IC
40607 H.writeInt32BE(this._a | 0, 0)
40608 H.writeInt32BE(this._b | 0, 4)
40609 H.writeInt32BE(this._c | 0, 8)
40610 H.writeInt32BE(this._d | 0, 12)
40611 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 40612
8b095871 40613 return H
ebd8d4e8
IC
40614}
40615
8b095871 40616module.exports = Sha
ebd8d4e8 40617
8b095871
IC
40618}).call(this,require("buffer").Buffer)
40619},{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
40620(function (Buffer){
40621/*
40622 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
40623 * in FIPS PUB 180-1
40624 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
40625 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40626 * Distributed under the BSD License
40627 * See http://pajhome.org.uk/crypt/md5 for details.
40628 */
ebd8d4e8 40629
8b095871
IC
40630var inherits = require('inherits')
40631var Hash = require('./hash')
ebd8d4e8 40632
8b095871
IC
40633var K = [
40634 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
40635]
ebd8d4e8 40636
8b095871 40637var W = new Array(80)
ab78acc6 40638
8b095871
IC
40639function Sha1 () {
40640 this.init()
40641 this._w = W
ebd8d4e8 40642
8b095871
IC
40643 Hash.call(this, 64, 56)
40644}
ebd8d4e8 40645
8b095871 40646inherits(Sha1, Hash)
ebd8d4e8 40647
8b095871
IC
40648Sha1.prototype.init = function () {
40649 this._a = 0x67452301
40650 this._b = 0xefcdab89
40651 this._c = 0x98badcfe
40652 this._d = 0x10325476
40653 this._e = 0xc3d2e1f0
ebd8d4e8 40654
8b095871
IC
40655 return this
40656}
ebd8d4e8 40657
8b095871
IC
40658function rotl1 (num) {
40659 return (num << 1) | (num >>> 31)
40660}
ebd8d4e8 40661
8b095871
IC
40662function rotl5 (num) {
40663 return (num << 5) | (num >>> 27)
40664}
ebd8d4e8 40665
8b095871
IC
40666function rotl30 (num) {
40667 return (num << 30) | (num >>> 2)
40668}
ebd8d4e8 40669
8b095871
IC
40670function ft (s, b, c, d) {
40671 if (s === 0) return (b & c) | ((~b) & d)
40672 if (s === 2) return (b & c) | (b & d) | (c & d)
40673 return b ^ c ^ d
40674}
ebd8d4e8 40675
8b095871
IC
40676Sha1.prototype._update = function (M) {
40677 var W = this._w
ebd8d4e8 40678
8b095871
IC
40679 var a = this._a | 0
40680 var b = this._b | 0
40681 var c = this._c | 0
40682 var d = this._d | 0
40683 var e = this._e | 0
ebd8d4e8 40684
8b095871
IC
40685 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40686 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
40687
40688 for (var j = 0; j < 80; ++j) {
40689 var s = ~~(j / 20)
40690 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
40691
40692 e = d
40693 d = c
40694 c = rotl30(b)
40695 b = a
40696 a = t
ab78acc6
IC
40697 }
40698
8b095871
IC
40699 this._a = (a + this._a) | 0
40700 this._b = (b + this._b) | 0
40701 this._c = (c + this._c) | 0
40702 this._d = (d + this._d) | 0
40703 this._e = (e + this._e) | 0
40704}
ab78acc6 40705
8b095871
IC
40706Sha1.prototype._hash = function () {
40707 var H = new Buffer(20)
ab78acc6 40708
8b095871
IC
40709 H.writeInt32BE(this._a | 0, 0)
40710 H.writeInt32BE(this._b | 0, 4)
40711 H.writeInt32BE(this._c | 0, 8)
40712 H.writeInt32BE(this._d | 0, 12)
40713 H.writeInt32BE(this._e | 0, 16)
ab78acc6 40714
8b095871
IC
40715 return H
40716}
ab78acc6 40717
8b095871 40718module.exports = Sha1
ab78acc6 40719
8b095871
IC
40720}).call(this,require("buffer").Buffer)
40721},{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
40722(function (Buffer){
40723/**
40724 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
40725 * in FIPS 180-2
40726 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
40727 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40728 *
40729 */
ab78acc6 40730
8b095871
IC
40731var inherits = require('inherits')
40732var Sha256 = require('./sha256')
40733var Hash = require('./hash')
ab78acc6 40734
8b095871 40735var W = new Array(64)
ab78acc6 40736
8b095871
IC
40737function Sha224 () {
40738 this.init()
ab78acc6 40739
8b095871 40740 this._w = W // new Array(64)
ebd8d4e8 40741
8b095871
IC
40742 Hash.call(this, 64, 56)
40743}
ebd8d4e8 40744
8b095871 40745inherits(Sha224, Sha256)
ebd8d4e8 40746
8b095871
IC
40747Sha224.prototype.init = function () {
40748 this._a = 0xc1059ed8
40749 this._b = 0x367cd507
40750 this._c = 0x3070dd17
40751 this._d = 0xf70e5939
40752 this._e = 0xffc00b31
40753 this._f = 0x68581511
40754 this._g = 0x64f98fa7
40755 this._h = 0xbefa4fa4
ebd8d4e8 40756
8b095871
IC
40757 return this
40758}
ab78acc6 40759
8b095871
IC
40760Sha224.prototype._hash = function () {
40761 var H = new Buffer(28)
ebd8d4e8 40762
8b095871
IC
40763 H.writeInt32BE(this._a, 0)
40764 H.writeInt32BE(this._b, 4)
40765 H.writeInt32BE(this._c, 8)
40766 H.writeInt32BE(this._d, 12)
40767 H.writeInt32BE(this._e, 16)
40768 H.writeInt32BE(this._f, 20)
40769 H.writeInt32BE(this._g, 24)
ab78acc6 40770
8b095871
IC
40771 return H
40772}
ebd8d4e8 40773
8b095871 40774module.exports = Sha224
ebd8d4e8 40775
8b095871
IC
40776}).call(this,require("buffer").Buffer)
40777},{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
40778(function (Buffer){
40779/**
40780 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
40781 * in FIPS 180-2
40782 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
40783 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40784 *
40785 */
ebd8d4e8 40786
8b095871
IC
40787var inherits = require('inherits')
40788var Hash = require('./hash')
ab78acc6 40789
8b095871
IC
40790var K = [
40791 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
40792 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
40793 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
40794 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
40795 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
40796 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
40797 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
40798 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
40799 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
40800 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
40801 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
40802 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
40803 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
40804 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
40805 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
40806 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
40807]
ebd8d4e8 40808
8b095871 40809var W = new Array(64)
ebd8d4e8 40810
8b095871
IC
40811function Sha256 () {
40812 this.init()
ebd8d4e8 40813
8b095871 40814 this._w = W // new Array(64)
ebd8d4e8 40815
8b095871 40816 Hash.call(this, 64, 56)
ab78acc6 40817}
ebd8d4e8 40818
8b095871 40819inherits(Sha256, Hash)
ebd8d4e8 40820
8b095871
IC
40821Sha256.prototype.init = function () {
40822 this._a = 0x6a09e667
40823 this._b = 0xbb67ae85
40824 this._c = 0x3c6ef372
40825 this._d = 0xa54ff53a
40826 this._e = 0x510e527f
40827 this._f = 0x9b05688c
40828 this._g = 0x1f83d9ab
40829 this._h = 0x5be0cd19
ebd8d4e8 40830
8b095871
IC
40831 return this
40832}
ebd8d4e8 40833
8b095871
IC
40834function ch (x, y, z) {
40835 return z ^ (x & (y ^ z))
40836}
ebd8d4e8 40837
8b095871
IC
40838function maj (x, y, z) {
40839 return (x & y) | (z & (x | y))
40840}
ebd8d4e8 40841
8b095871
IC
40842function sigma0 (x) {
40843 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
40844}
ebd8d4e8 40845
8b095871
IC
40846function sigma1 (x) {
40847 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
40848}
ebd8d4e8 40849
8b095871
IC
40850function gamma0 (x) {
40851 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
40852}
ebd8d4e8 40853
8b095871
IC
40854function gamma1 (x) {
40855 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
40856}
ab78acc6 40857
8b095871
IC
40858Sha256.prototype._update = function (M) {
40859 var W = this._w
ebd8d4e8 40860
8b095871
IC
40861 var a = this._a | 0
40862 var b = this._b | 0
40863 var c = this._c | 0
40864 var d = this._d | 0
40865 var e = this._e | 0
40866 var f = this._f | 0
40867 var g = this._g | 0
40868 var h = this._h | 0
ab78acc6 40869
8b095871
IC
40870 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40871 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
ab78acc6 40872
8b095871
IC
40873 for (var j = 0; j < 64; ++j) {
40874 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
40875 var T2 = (sigma0(a) + maj(a, b, c)) | 0
ebd8d4e8 40876
8b095871
IC
40877 h = g
40878 g = f
40879 f = e
40880 e = (d + T1) | 0
40881 d = c
40882 c = b
40883 b = a
40884 a = (T1 + T2) | 0
ebd8d4e8
IC
40885 }
40886
8b095871
IC
40887 this._a = (a + this._a) | 0
40888 this._b = (b + this._b) | 0
40889 this._c = (c + this._c) | 0
40890 this._d = (d + this._d) | 0
40891 this._e = (e + this._e) | 0
40892 this._f = (f + this._f) | 0
40893 this._g = (g + this._g) | 0
40894 this._h = (h + this._h) | 0
ab78acc6 40895}
ebd8d4e8 40896
8b095871
IC
40897Sha256.prototype._hash = function () {
40898 var H = new Buffer(32)
ebd8d4e8 40899
8b095871
IC
40900 H.writeInt32BE(this._a, 0)
40901 H.writeInt32BE(this._b, 4)
40902 H.writeInt32BE(this._c, 8)
40903 H.writeInt32BE(this._d, 12)
40904 H.writeInt32BE(this._e, 16)
40905 H.writeInt32BE(this._f, 20)
40906 H.writeInt32BE(this._g, 24)
40907 H.writeInt32BE(this._h, 28)
40908
40909 return H
ab78acc6 40910}
ebd8d4e8 40911
8b095871 40912module.exports = Sha256
ebd8d4e8 40913
8b095871
IC
40914}).call(this,require("buffer").Buffer)
40915},{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
40916(function (Buffer){
40917var inherits = require('inherits')
40918var SHA512 = require('./sha512')
40919var Hash = require('./hash')
ebd8d4e8 40920
8b095871 40921var W = new Array(160)
ebd8d4e8 40922
8b095871
IC
40923function Sha384 () {
40924 this.init()
40925 this._w = W
ab78acc6 40926
8b095871
IC
40927 Hash.call(this, 128, 112)
40928}
ab78acc6 40929
8b095871 40930inherits(Sha384, SHA512)
ebd8d4e8 40931
8b095871
IC
40932Sha384.prototype.init = function () {
40933 this._ah = 0xcbbb9d5d
40934 this._bh = 0x629a292a
40935 this._ch = 0x9159015a
40936 this._dh = 0x152fecd8
40937 this._eh = 0x67332667
40938 this._fh = 0x8eb44a87
40939 this._gh = 0xdb0c2e0d
40940 this._hh = 0x47b5481d
40941
40942 this._al = 0xc1059ed8
40943 this._bl = 0x367cd507
40944 this._cl = 0x3070dd17
40945 this._dl = 0xf70e5939
40946 this._el = 0xffc00b31
40947 this._fl = 0x68581511
40948 this._gl = 0x64f98fa7
40949 this._hl = 0xbefa4fa4
ebd8d4e8 40950
8b095871
IC
40951 return this
40952}
ebd8d4e8 40953
8b095871
IC
40954Sha384.prototype._hash = function () {
40955 var H = new Buffer(48)
ebd8d4e8 40956
8b095871
IC
40957 function writeInt64BE (h, l, offset) {
40958 H.writeInt32BE(h, offset)
40959 H.writeInt32BE(l, offset + 4)
40960 }
ebd8d4e8 40961
8b095871
IC
40962 writeInt64BE(this._ah, this._al, 0)
40963 writeInt64BE(this._bh, this._bl, 8)
40964 writeInt64BE(this._ch, this._cl, 16)
40965 writeInt64BE(this._dh, this._dl, 24)
40966 writeInt64BE(this._eh, this._el, 32)
40967 writeInt64BE(this._fh, this._fl, 40)
ebd8d4e8 40968
8b095871 40969 return H
ab78acc6 40970}
ebd8d4e8 40971
8b095871
IC
40972module.exports = Sha384
40973
40974}).call(this,require("buffer").Buffer)
40975},{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
40976(function (Buffer){
40977var inherits = require('inherits')
40978var Hash = require('./hash')
40979
40980var K = [
40981 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
40982 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
40983 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
40984 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
40985 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
40986 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
40987 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
40988 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
40989 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
40990 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
40991 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
40992 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
40993 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
40994 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
40995 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
40996 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
40997 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
40998 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
40999 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
41000 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
41001 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
41002 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
41003 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
41004 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
41005 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
41006 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
41007 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
41008 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
41009 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
41010 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
41011 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
41012 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
41013 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
41014 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
41015 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
41016 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
41017 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
41018 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
41019 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
41020 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
41021]
41022
41023var W = new Array(160)
ebd8d4e8 41024
8b095871
IC
41025function Sha512 () {
41026 this.init()
41027 this._w = W
ebd8d4e8 41028
8b095871 41029 Hash.call(this, 128, 112)
ab78acc6 41030}
ebd8d4e8 41031
8b095871 41032inherits(Sha512, Hash)
ebd8d4e8 41033
8b095871
IC
41034Sha512.prototype.init = function () {
41035 this._ah = 0x6a09e667
41036 this._bh = 0xbb67ae85
41037 this._ch = 0x3c6ef372
41038 this._dh = 0xa54ff53a
41039 this._eh = 0x510e527f
41040 this._fh = 0x9b05688c
41041 this._gh = 0x1f83d9ab
41042 this._hh = 0x5be0cd19
41043
41044 this._al = 0xf3bcc908
41045 this._bl = 0x84caa73b
41046 this._cl = 0xfe94f82b
41047 this._dl = 0x5f1d36f1
41048 this._el = 0xade682d1
41049 this._fl = 0x2b3e6c1f
41050 this._gl = 0xfb41bd6b
41051 this._hl = 0x137e2179
ebd8d4e8 41052
8b095871 41053 return this
ab78acc6 41054}
ebd8d4e8 41055
8b095871
IC
41056function Ch (x, y, z) {
41057 return z ^ (x & (y ^ z))
41058}
ebd8d4e8 41059
8b095871
IC
41060function maj (x, y, z) {
41061 return (x & y) | (z & (x | y))
ab78acc6 41062}
ebd8d4e8 41063
8b095871
IC
41064function sigma0 (x, xl) {
41065 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
41066}
ebd8d4e8 41067
8b095871
IC
41068function sigma1 (x, xl) {
41069 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
41070}
ab78acc6 41071
8b095871
IC
41072function Gamma0 (x, xl) {
41073 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
ab78acc6 41074}
ebd8d4e8 41075
8b095871
IC
41076function Gamma0l (x, xl) {
41077 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
41078}
ebd8d4e8 41079
8b095871
IC
41080function Gamma1 (x, xl) {
41081 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
ab78acc6
IC
41082}
41083
8b095871
IC
41084function Gamma1l (x, xl) {
41085 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
ab78acc6
IC
41086}
41087
8b095871
IC
41088function getCarry (a, b) {
41089 return (a >>> 0) < (b >>> 0) ? 1 : 0
ab78acc6
IC
41090}
41091
8b095871
IC
41092Sha512.prototype._update = function (M) {
41093 var W = this._w
ebd8d4e8 41094
8b095871
IC
41095 var ah = this._ah | 0
41096 var bh = this._bh | 0
41097 var ch = this._ch | 0
41098 var dh = this._dh | 0
41099 var eh = this._eh | 0
41100 var fh = this._fh | 0
41101 var gh = this._gh | 0
41102 var hh = this._hh | 0
ebd8d4e8 41103
8b095871
IC
41104 var al = this._al | 0
41105 var bl = this._bl | 0
41106 var cl = this._cl | 0
41107 var dl = this._dl | 0
41108 var el = this._el | 0
41109 var fl = this._fl | 0
41110 var gl = this._gl | 0
41111 var hl = this._hl | 0
ebd8d4e8 41112
8b095871
IC
41113 for (var i = 0; i < 32; i += 2) {
41114 W[i] = M.readInt32BE(i * 4)
41115 W[i + 1] = M.readInt32BE(i * 4 + 4)
41116 }
41117 for (; i < 160; i += 2) {
41118 var xh = W[i - 15 * 2]
41119 var xl = W[i - 15 * 2 + 1]
41120 var gamma0 = Gamma0(xh, xl)
41121 var gamma0l = Gamma0l(xl, xh)
ebd8d4e8 41122
8b095871
IC
41123 xh = W[i - 2 * 2]
41124 xl = W[i - 2 * 2 + 1]
41125 var gamma1 = Gamma1(xh, xl)
41126 var gamma1l = Gamma1l(xl, xh)
ebd8d4e8 41127
8b095871
IC
41128 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
41129 var Wi7h = W[i - 7 * 2]
41130 var Wi7l = W[i - 7 * 2 + 1]
ebd8d4e8 41131
8b095871
IC
41132 var Wi16h = W[i - 16 * 2]
41133 var Wi16l = W[i - 16 * 2 + 1]
ab78acc6 41134
8b095871
IC
41135 var Wil = (gamma0l + Wi7l) | 0
41136 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
41137 Wil = (Wil + gamma1l) | 0
41138 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
41139 Wil = (Wil + Wi16l) | 0
41140 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
ebd8d4e8 41141
8b095871
IC
41142 W[i] = Wih
41143 W[i + 1] = Wil
41144 }
ebd8d4e8 41145
8b095871
IC
41146 for (var j = 0; j < 160; j += 2) {
41147 Wih = W[j]
41148 Wil = W[j + 1]
ebd8d4e8 41149
8b095871
IC
41150 var majh = maj(ah, bh, ch)
41151 var majl = maj(al, bl, cl)
ebd8d4e8 41152
8b095871
IC
41153 var sigma0h = sigma0(ah, al)
41154 var sigma0l = sigma0(al, ah)
41155 var sigma1h = sigma1(eh, el)
41156 var sigma1l = sigma1(el, eh)
ab78acc6 41157
8b095871
IC
41158 // t1 = h + sigma1 + ch + K[j] + W[j]
41159 var Kih = K[j]
41160 var Kil = K[j + 1]
ab78acc6 41161
8b095871
IC
41162 var chh = Ch(eh, fh, gh)
41163 var chl = Ch(el, fl, gl)
ebd8d4e8 41164
8b095871
IC
41165 var t1l = (hl + sigma1l) | 0
41166 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
41167 t1l = (t1l + chl) | 0
41168 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
41169 t1l = (t1l + Kil) | 0
41170 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
41171 t1l = (t1l + Wil) | 0
41172 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
ebd8d4e8 41173
8b095871
IC
41174 // t2 = sigma0 + maj
41175 var t2l = (sigma0l + majl) | 0
41176 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
ebd8d4e8 41177
8b095871
IC
41178 hh = gh
41179 hl = gl
41180 gh = fh
41181 gl = fl
41182 fh = eh
41183 fl = el
41184 el = (dl + t1l) | 0
41185 eh = (dh + t1h + getCarry(el, dl)) | 0
41186 dh = ch
41187 dl = cl
41188 ch = bh
41189 cl = bl
41190 bh = ah
41191 bl = al
41192 al = (t1l + t2l) | 0
41193 ah = (t1h + t2h + getCarry(al, t1l)) | 0
41194 }
ab78acc6 41195
8b095871
IC
41196 this._al = (this._al + al) | 0
41197 this._bl = (this._bl + bl) | 0
41198 this._cl = (this._cl + cl) | 0
41199 this._dl = (this._dl + dl) | 0
41200 this._el = (this._el + el) | 0
41201 this._fl = (this._fl + fl) | 0
41202 this._gl = (this._gl + gl) | 0
41203 this._hl = (this._hl + hl) | 0
ab78acc6 41204
8b095871
IC
41205 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
41206 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
41207 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
41208 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
41209 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
41210 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
41211 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
41212 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
ab78acc6
IC
41213}
41214
8b095871
IC
41215Sha512.prototype._hash = function () {
41216 var H = new Buffer(64)
ab78acc6 41217
8b095871
IC
41218 function writeInt64BE (h, l, offset) {
41219 H.writeInt32BE(h, offset)
41220 H.writeInt32BE(l, offset + 4)
41221 }
ab78acc6 41222
8b095871
IC
41223 writeInt64BE(this._ah, this._al, 0)
41224 writeInt64BE(this._bh, this._bl, 8)
41225 writeInt64BE(this._ch, this._cl, 16)
41226 writeInt64BE(this._dh, this._dl, 24)
41227 writeInt64BE(this._eh, this._el, 32)
41228 writeInt64BE(this._fh, this._fl, 40)
41229 writeInt64BE(this._gh, this._gl, 48)
41230 writeInt64BE(this._hh, this._hl, 56)
ab78acc6 41231
8b095871 41232 return H
ebd8d4e8
IC
41233}
41234
8b095871 41235module.exports = Sha512
ebd8d4e8 41236
ab78acc6 41237}).call(this,require("buffer").Buffer)
8b095871
IC
41238},{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
41239var isHexPrefixed = require('is-hex-prefixed');
d5dc92fd 41240
8b095871
IC
41241/**
41242 * Removes '0x' from a given `String` is present
41243 * @param {String} str the string value
41244 * @return {String|Optional} a string by pass if necessary
41245 */
41246module.exports = function stripHexPrefix(str) {
41247 if (typeof str !== 'string') {
41248 return str;
41249 }
07ac4350 41250
8b095871
IC
41251 return isHexPrefixed(str) ? str.slice(2) : str;
41252}
07ac4350 41253
8b095871
IC
41254},{"is-hex-prefixed":64}]},{},[31])(31)
41255});</script>
8a1f452d 41256 <script>function convertRippleAdrr(address) {
41257 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
41258 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
41259 )
41260 }
41261
41262function convertRipplePriv(priv) {
920eb591 41263 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2,66)
8a1f452d 41264}
41265
41266</script>
ab78acc6 41267 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
41268
41269//// base.js
41270
41271/** @fileOverview Javascript cryptography implementation.
41272 *
41273 * Crush to remove comments, shorten variable names and
41274 * generally reduce transmission size.
41275 *
41276 * @author Emily Stark
41277 * @author Mike Hamburg
41278 * @author Dan Boneh
41279 */
41280
41281"use strict";
41282/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
41283/*global document, window, escape, unescape, module, require, Uint32Array */
41284
41285/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
41286var sjcl = {
41287 /** @namespace Symmetric ciphers. */
41288 cipher: {},
41289
41290 /** @namespace Hash functions. Right now only SHA256 is implemented. */
41291 hash: {},
41292
41293 /** @namespace Key exchange functions. Right now only SRP is implemented. */
41294 keyexchange: {},
41295
41296 /** @namespace Block cipher modes of operation. */
41297 mode: {},
41298
41299 /** @namespace Miscellaneous. HMAC and PBKDF2. */
41300 misc: {},
41301
41302 /**
41303 * @namespace Bit array encoders and decoders.
41304 *
41305 * @description
41306 * The members of this namespace are functions which translate between
41307 * SJCL's bitArrays and other objects (usually strings). Because it
41308 * isn't always clear which direction is encoding and which is decoding,
41309 * the method names are "fromBits" and "toBits".
41310 */
41311 codec: {},
41312
41313 /** @namespace Exceptions. */
41314 exception: {
41315 /** @constructor Ciphertext is corrupt. */
41316 corrupt: function(message) {
41317 this.toString = function() { return "CORRUPT: "+this.message; };
41318 this.message = message;
41319 },
41320
41321 /** @constructor Invalid parameter. */
41322 invalid: function(message) {
41323 this.toString = function() { return "INVALID: "+this.message; };
41324 this.message = message;
41325 },
41326
41327 /** @constructor Bug or missing feature in SJCL. @constructor */
41328 bug: function(message) {
41329 this.toString = function() { return "BUG: "+this.message; };
41330 this.message = message;
41331 },
41332
41333 /** @constructor Something isn't ready. */
41334 notReady: function(message) {
41335 this.toString = function() { return "NOT READY: "+this.message; };
41336 this.message = message;
ebd8d4e8 41337 }
80c4dd2a
IC
41338 }
41339};
41340
41341if(typeof module !== 'undefined' && module.exports){
41342 module.exports = sjcl;
41343}
41344if (typeof define === "function") {
41345 define([], function () {
41346 return sjcl;
41347 });
41348}
41349
41350
41351//// bitArray.js
41352
41353/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
41354 *
41355 * @author Emily Stark
41356 * @author Mike Hamburg
41357 * @author Dan Boneh
41358 */
41359
41360/** @namespace Arrays of bits, encoded as arrays of Numbers.
41361 *
41362 * @description
41363 * <p>
41364 * These objects are the currency accepted by SJCL's crypto functions.
41365 * </p>
41366 *
41367 * <p>
41368 * Most of our crypto primitives operate on arrays of 4-byte words internally,
41369 * but many of them can take arguments that are not a multiple of 4 bytes.
41370 * This library encodes arrays of bits (whose size need not be a multiple of 8
41371 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
41372 * array of words, 32 bits at a time. Since the words are double-precision
41373 * floating point numbers, they fit some extra data. We use this (in a private,
41374 * possibly-changing manner) to encode the number of bits actually present
41375 * in the last word of the array.
41376 * </p>
41377 *
41378 * <p>
41379 * Because bitwise ops clear this out-of-band data, these arrays can be passed
41380 * to ciphers like AES which want arrays of words.
41381 * </p>
41382 */
41383sjcl.bitArray = {
41384 /**
41385 * Array slices in units of bits.
41386 * @param {bitArray} a The array to slice.
41387 * @param {Number} bstart The offset to the start of the slice, in bits.
41388 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
41389 * slice until the end of the array.
41390 * @return {bitArray} The requested slice.
41391 */
41392 bitSlice: function (a, bstart, bend) {
41393 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
41394 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
41395 },
41396
41397 /**
41398 * Extract a number packed into a bit array.
41399 * @param {bitArray} a The array to slice.
41400 * @param {Number} bstart The offset to the start of the slice, in bits.
41401 * @param {Number} length The length of the number to extract.
41402 * @return {Number} The requested slice.
41403 */
41404 extract: function(a, bstart, blength) {
41405 // FIXME: this Math.floor is not necessary at all, but for some reason
41406 // seems to suppress a bug in the Chromium JIT.
41407 var x, sh = Math.floor((-bstart-blength) & 31);
41408 if ((bstart + blength - 1 ^ bstart) & -32) {
41409 // it crosses a boundary
41410 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
41411 } else {
41412 // within a single word
41413 x = a[bstart/32|0] >>> sh;
ebd8d4e8 41414 }
80c4dd2a
IC
41415 return x & ((1<<blength) - 1);
41416 },
41417
41418 /**
41419 * Concatenate two bit arrays.
41420 * @param {bitArray} a1 The first array.
41421 * @param {bitArray} a2 The second array.
41422 * @return {bitArray} The concatenation of a1 and a2.
41423 */
41424 concat: function (a1, a2) {
41425 if (a1.length === 0 || a2.length === 0) {
41426 return a1.concat(a2);
41427 }
41428
41429 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
41430 if (shift === 32) {
41431 return a1.concat(a2);
41432 } else {
41433 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 41434 }
80c4dd2a
IC
41435 },
41436
41437 /**
41438 * Find the length of an array of bits.
41439 * @param {bitArray} a The array.
41440 * @return {Number} The length of a, in bits.
41441 */
41442 bitLength: function (a) {
41443 var l = a.length, x;
41444 if (l === 0) { return 0; }
41445 x = a[l - 1];
41446 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
41447 },
41448
41449 /**
41450 * Truncate an array.
41451 * @param {bitArray} a The array.
41452 * @param {Number} len The length to truncate to, in bits.
41453 * @return {bitArray} A new array, truncated to len bits.
41454 */
41455 clamp: function (a, len) {
41456 if (a.length * 32 < len) { return a; }
41457 a = a.slice(0, Math.ceil(len / 32));
41458 var l = a.length;
41459 len = len & 31;
41460 if (l > 0 && len) {
41461 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
41462 }
41463 return a;
41464 },
41465
41466 /**
41467 * Make a partial word for a bit array.
41468 * @param {Number} len The number of bits in the word.
41469 * @param {Number} x The bits.
41470 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
41471 * @return {Number} The partial word.
41472 */
41473 partial: function (len, x, _end) {
41474 if (len === 32) { return x; }
41475 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
41476 },
41477
41478 /**
41479 * Get the number of bits used by a partial word.
41480 * @param {Number} x The partial word.
41481 * @return {Number} The number of bits used by the partial word.
41482 */
41483 getPartial: function (x) {
41484 return Math.round(x/0x10000000000) || 32;
41485 },
41486
41487 /**
41488 * Compare two arrays for equality in a predictable amount of time.
41489 * @param {bitArray} a The first array.
41490 * @param {bitArray} b The second array.
41491 * @return {boolean} true if a == b; false otherwise.
41492 */
41493 equal: function (a, b) {
41494 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
41495 return false;
ebd8d4e8 41496 }
80c4dd2a
IC
41497 var x = 0, i;
41498 for (i=0; i<a.length; i++) {
41499 x |= a[i]^b[i];
ebd8d4e8 41500 }
80c4dd2a
IC
41501 return (x === 0);
41502 },
41503
41504 /** Shift an array right.
41505 * @param {bitArray} a The array to shift.
41506 * @param {Number} shift The number of bits to shift.
41507 * @param {Number} [carry=0] A byte to carry in
41508 * @param {bitArray} [out=[]] An array to prepend to the output.
41509 * @private
41510 */
41511 _shiftRight: function (a, shift, carry, out) {
41512 var i, last2=0, shift2;
41513 if (out === undefined) { out = []; }
41514
41515 for (; shift >= 32; shift -= 32) {
41516 out.push(carry);
41517 carry = 0;
41518 }
41519 if (shift === 0) {
41520 return out.concat(a);
41521 }
41522
41523 for (i=0; i<a.length; i++) {
41524 out.push(carry | a[i]>>>shift);
41525 carry = a[i] << (32-shift);
41526 }
41527 last2 = a.length ? a[a.length-1] : 0;
41528 shift2 = sjcl.bitArray.getPartial(last2);
41529 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
41530 return out;
41531 },
41532
41533 /** xor a block of 4 words together.
41534 * @private
41535 */
41536 _xor4: function(x,y) {
41537 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
41538 },
41539
41540 /** byteswap a word array inplace.
41541 * (does not handle partial words)
41542 * @param {sjcl.bitArray} a word array
41543 * @return {sjcl.bitArray} byteswapped array
41544 */
41545 byteswapM: function(a) {
41546 var i, v, m = 0xff00;
41547 for (i = 0; i < a.length; ++i) {
41548 v = a[i];
41549 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 41550 }
80c4dd2a
IC
41551 return a;
41552 }
41553};
41554
41555
41556//// codecString.js
41557
41558/** @fileOverview Bit array codec implementations.
41559 *
41560 * @author Emily Stark
41561 * @author Mike Hamburg
41562 * @author Dan Boneh
41563 */
41564
41565/** @namespace UTF-8 strings */
41566sjcl.codec.utf8String = {
41567 /** Convert from a bitArray to a UTF-8 string. */
41568 fromBits: function (arr) {
41569 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
41570 for (i=0; i<bl/8; i++) {
41571 if ((i&3) === 0) {
41572 tmp = arr[i/4];
41573 }
41574 out += String.fromCharCode(tmp >>> 24);
41575 tmp <<= 8;
ebd8d4e8 41576 }
80c4dd2a
IC
41577 return decodeURIComponent(escape(out));
41578 },
41579
41580 /** Convert from a UTF-8 string to a bitArray. */
41581 toBits: function (str) {
41582 str = unescape(encodeURIComponent(str));
41583 var out = [], i, tmp=0;
41584 for (i=0; i<str.length; i++) {
41585 tmp = tmp << 8 | str.charCodeAt(i);
41586 if ((i&3) === 3) {
41587 out.push(tmp);
41588 tmp = 0;
41589 }
ebd8d4e8 41590 }
80c4dd2a
IC
41591 if (i&3) {
41592 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 41593 }
80c4dd2a
IC
41594 return out;
41595 }
41596};
41597
41598
41599//// codecHex.js
41600
41601/** @fileOverview Bit array codec implementations.
41602 *
41603 * @author Emily Stark
41604 * @author Mike Hamburg
41605 * @author Dan Boneh
41606 */
41607
41608/** @namespace Hexadecimal */
41609sjcl.codec.hex = {
41610 /** Convert from a bitArray to a hex string. */
41611 fromBits: function (arr) {
41612 var out = "", i;
41613 for (i=0; i<arr.length; i++) {
41614 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 41615 }
80c4dd2a
IC
41616 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
41617 },
41618 /** Convert from a hex string to a bitArray. */
41619 toBits: function (str) {
41620 var i, out=[], len;
41621 str = str.replace(/\s|0x/g, "");
41622 len = str.length;
41623 str = str + "00000000";
41624 for (i=0; i<str.length; i+=8) {
41625 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 41626 }
80c4dd2a
IC
41627 return sjcl.bitArray.clamp(out, len*4);
41628 }
41629};
41630
41631
41632//// sha512.js
41633
41634/** @fileOverview Javascript SHA-512 implementation.
41635 *
41636 * This implementation was written for CryptoJS by Jeff Mott and adapted for
41637 * SJCL by Stefan Thomas.
41638 *
41639 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
41640 * Released with New BSD License
41641 *
41642 * @author Emily Stark
41643 * @author Mike Hamburg
41644 * @author Dan Boneh
41645 * @author Jeff Mott
41646 * @author Stefan Thomas
41647 */
41648
41649/**
41650 * Context for a SHA-512 operation in progress.
41651 * @constructor
41652 * @class Secure Hash Algorithm, 512 bits.
41653 */
41654sjcl.hash.sha512 = function (hash) {
41655 if (!this._key[0]) { this._precompute(); }
41656 if (hash) {
41657 this._h = hash._h.slice(0);
41658 this._buffer = hash._buffer.slice(0);
41659 this._length = hash._length;
41660 } else {
41661 this.reset();
41662 }
41663};
41664
41665/**
41666 * Hash a string or an array of words.
41667 * @static
41668 * @param {bitArray|String} data the data to hash.
41669 * @return {bitArray} The hash value, an array of 16 big-endian words.
41670 */
41671sjcl.hash.sha512.hash = function (data) {
41672 return (new sjcl.hash.sha512()).update(data).finalize();
41673};
41674
41675sjcl.hash.sha512.prototype = {
41676 /**
41677 * The hash's block size, in bits.
41678 * @constant
41679 */
41680 blockSize: 1024,
41681
41682 /**
41683 * Reset the hash state.
41684 * @return this
41685 */
41686 reset:function () {
41687 this._h = this._init.slice(0);
41688 this._buffer = [];
41689 this._length = 0;
41690 return this;
41691 },
41692
41693 /**
41694 * Input several words to the hash.
41695 * @param {bitArray|String} data the data to hash.
41696 * @return this
41697 */
41698 update: function (data) {
41699 if (typeof data === "string") {
41700 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 41701 }
80c4dd2a
IC
41702 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
41703 ol = this._length,
41704 nl = this._length = ol + sjcl.bitArray.bitLength(data);
41705 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
41706 this._block(b.splice(0,32));
ebd8d4e8 41707 }
80c4dd2a
IC
41708 return this;
41709 },
41710
41711 /**
41712 * Complete hashing and output the hash value.
41713 * @return {bitArray} The hash value, an array of 16 big-endian words.
41714 */
41715 finalize:function () {
41716 var i, b = this._buffer, h = this._h;
41717
41718 // Round out and push the buffer
41719 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
41720
41721 // Round out the buffer to a multiple of 32 words, less the 4 length words.
41722 for (i = b.length + 4; i & 31; i++) {
41723 b.push(0);
ebd8d4e8 41724 }
80c4dd2a
IC
41725
41726 // append the length
41727 b.push(0);
41728 b.push(0);
41729 b.push(Math.floor(this._length / 0x100000000));
41730 b.push(this._length | 0);
41731
41732 while (b.length) {
41733 this._block(b.splice(0,32));
ebd8d4e8 41734 }
80c4dd2a
IC
41735
41736 this.reset();
41737 return h;
41738 },
41739
41740 /**
41741 * The SHA-512 initialization vector, to be precomputed.
41742 * @private
41743 */
41744 _init:[],
41745
41746 /**
41747 * Least significant 24 bits of SHA512 initialization values.
41748 *
41749 * Javascript only has 53 bits of precision, so we compute the 40 most
41750 * significant bits and add the remaining 24 bits as constants.
41751 *
41752 * @private
41753 */
41754 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
41755
41756 /*
41757 _init:
41758 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
41759 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
41760 */
41761
41762 /**
41763 * The SHA-512 hash key, to be precomputed.
41764 * @private
41765 */
41766 _key:[],
41767
41768 /**
41769 * Least significant 24 bits of SHA512 key values.
41770 * @private
41771 */
41772 _keyr:
41773 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
41774 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
41775 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
41776 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
41777 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
41778 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
41779 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
41780 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
41781 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
41782 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
41783
41784 /*
41785 _key:
41786 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
41787 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
41788 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
41789 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
41790 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
41791 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
41792 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
41793 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
41794 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
41795 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
41796 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
41797 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
41798 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
41799 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
41800 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
41801 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
41802 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
41803 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
41804 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
41805 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
41806 */
41807
41808 /**
41809 * Function to precompute _init and _key.
41810 * @private
41811 */
41812 _precompute: function () {
41813 // XXX: This code is for precomputing the SHA256 constants, change for
41814 // SHA512 and re-enable.
41815 var i = 0, prime = 2, factor;
41816
41817 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
41818 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
41819
41820 outer: for (; i<80; prime++) {
41821 for (factor=2; factor*factor <= prime; factor++) {
41822 if (prime % factor === 0) {
41823 // not a prime
41824 continue outer;
ebd8d4e8 41825 }
80c4dd2a
IC
41826 }
41827
41828 if (i<8) {
41829 this._init[i*2] = frac(Math.pow(prime, 1/2));
41830 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
41831 }
41832 this._key[i*2] = frac(Math.pow(prime, 1/3));
41833 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
41834 i++;
ebd8d4e8 41835 }
80c4dd2a
IC
41836 },
41837
41838 /**
41839 * Perform one cycle of SHA-512.
41840 * @param {bitArray} words one block of words.
41841 * @private
41842 */
41843 _block:function (words) {
41844 var i, wrh, wrl,
41845 w = words.slice(0),
41846 h = this._h,
41847 k = this._key,
41848 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
41849 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
41850 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
41851 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
41852
41853 // Working variables
41854 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
41855 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
41856 eh = h4h, el = h4l, fh = h5h, fl = h5l,
41857 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
41858
41859 for (i=0; i<80; i++) {
41860 // load up the input word for this round
41861 if (i<16) {
41862 wrh = w[i * 2];
41863 wrl = w[i * 2 + 1];
41864 } else {
41865 // Gamma0
41866 var gamma0xh = w[(i-15) * 2];
41867 var gamma0xl = w[(i-15) * 2 + 1];
41868 var gamma0h =
41869 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
41870 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
41871 (gamma0xh >>> 7);
41872 var gamma0l =
41873 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
41874 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
41875 ((gamma0xh << 25) | (gamma0xl >>> 7));
41876
41877 // Gamma1
41878 var gamma1xh = w[(i-2) * 2];
41879 var gamma1xl = w[(i-2) * 2 + 1];
41880 var gamma1h =
41881 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
41882 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
41883 (gamma1xh >>> 6);
41884 var gamma1l =
41885 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
41886 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
41887 ((gamma1xh << 26) | (gamma1xl >>> 6));
41888
41889 // Shortcuts
41890 var wr7h = w[(i-7) * 2];
41891 var wr7l = w[(i-7) * 2 + 1];
41892
41893 var wr16h = w[(i-16) * 2];
41894 var wr16l = w[(i-16) * 2 + 1];
41895
41896 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
41897 wrl = gamma0l + wr7l;
41898 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
41899 wrl += gamma1l;
41900 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
41901 wrl += wr16l;
41902 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
41903 }
41904
41905 w[i*2] = wrh |= 0;
41906 w[i*2 + 1] = wrl |= 0;
41907
41908 // Ch
41909 var chh = (eh & fh) ^ (~eh & gh);
41910 var chl = (el & fl) ^ (~el & gl);
41911
41912 // Maj
41913 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
41914 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
41915
41916 // Sigma0
41917 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
41918 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
41919
41920 // Sigma1
41921 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
41922 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
41923
41924 // K(round)
41925 var krh = k[i*2];
41926 var krl = k[i*2+1];
41927
41928 // t1 = h + sigma1 + ch + K(round) + W(round)
41929 var t1l = hl + sigma1l;
41930 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
41931 t1l += chl;
41932 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
41933 t1l += krl;
41934 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
41935 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
41936 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
41937
41938 // t2 = sigma0 + maj
41939 var t2l = sigma0l + majl;
41940 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
41941
41942 // Update working variables
41943 hh = gh;
41944 hl = gl;
41945 gh = fh;
41946 gl = fl;
41947 fh = eh;
41948 fl = el;
41949 el = (dl + t1l) | 0;
41950 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
41951 dh = ch;
41952 dl = cl;
41953 ch = bh;
41954 cl = bl;
41955 bh = ah;
41956 bl = al;
41957 al = (t1l + t2l) | 0;
41958 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
41959 }
41960
41961 // Intermediate hash
41962 h0l = h[1] = (h0l + al) | 0;
41963 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
41964 h1l = h[3] = (h1l + bl) | 0;
41965 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
41966 h2l = h[5] = (h2l + cl) | 0;
41967 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
41968 h3l = h[7] = (h3l + dl) | 0;
41969 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
41970 h4l = h[9] = (h4l + el) | 0;
41971 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
41972 h5l = h[11] = (h5l + fl) | 0;
41973 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
41974 h6l = h[13] = (h6l + gl) | 0;
41975 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
41976 h7l = h[15] = (h7l + hl) | 0;
41977 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
41978 }
41979};
41980
41981
41982//// hmac.js
41983
41984/** @fileOverview HMAC implementation.
41985 *
41986 * @author Emily Stark
41987 * @author Mike Hamburg
41988 * @author Dan Boneh
41989 */
41990
41991/** HMAC with the specified hash function.
41992 * @constructor
41993 * @param {bitArray} key the key for HMAC.
41994 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
41995 */
41996sjcl.misc.hmac = function (key, Hash) {
41997 this._hash = Hash = Hash || sjcl.hash.sha256;
41998 var exKey = [[],[]], i,
41999 bs = Hash.prototype.blockSize / 32;
42000 this._baseHash = [new Hash(), new Hash()];
42001
42002 if (key.length > bs) {
42003 key = Hash.hash(key);
42004 }
42005
42006 for (i=0; i<bs; i++) {
42007 exKey[0][i] = key[i]^0x36363636;
42008 exKey[1][i] = key[i]^0x5C5C5C5C;
42009 }
42010
42011 this._baseHash[0].update(exKey[0]);
42012 this._baseHash[1].update(exKey[1]);
42013 this._resultHash = new Hash(this._baseHash[0]);
42014};
42015
42016/** HMAC with the specified hash function. Also called encrypt since it's a prf.
42017 * @param {bitArray|String} data The data to mac.
42018 */
42019sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
42020 if (!this._updated) {
42021 this.update(data);
42022 return this.digest(data);
42023 } else {
42024 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
42025 }
42026};
42027
42028sjcl.misc.hmac.prototype.reset = function () {
42029 this._resultHash = new this._hash(this._baseHash[0]);
42030 this._updated = false;
42031};
42032
42033sjcl.misc.hmac.prototype.update = function (data) {
42034 this._updated = true;
42035 this._resultHash.update(data);
42036};
42037
42038sjcl.misc.hmac.prototype.digest = function () {
42039 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
42040
42041 this.reset();
42042
42043 return result;
42044};
42045
42046
42047//// pbkdf2.js
42048
42049
42050/** @fileOverview Password-based key-derivation function, version 2.0.
42051 *
42052 * @author Emily Stark
42053 * @author Mike Hamburg
42054 * @author Dan Boneh
42055 */
42056
42057/** Password-Based Key-Derivation Function, version 2.0.
42058 *
42059 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
42060 *
42061 * This is the method specified by RSA's PKCS #5 standard.
42062 *
42063 * @param {bitArray|String} password The password.
42064 * @param {bitArray|String} salt The salt. Should have lots of entropy.
42065 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
42066 * @param {Number} [length] The length of the derived key. Defaults to the
42067 output size of the hash function.
42068 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
42069 * @return {bitArray} the derived key.
42070 */
42071sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
42072 count = count || 1000;
42073
42074 if (length < 0 || count < 0) {
42075 throw sjcl.exception.invalid("invalid params to pbkdf2");
42076 }
42077
42078 if (typeof password === "string") {
42079 password = sjcl.codec.utf8String.toBits(password);
42080 }
42081
42082 if (typeof salt === "string") {
42083 salt = sjcl.codec.utf8String.toBits(salt);
42084 }
42085
42086 Prff = Prff || sjcl.misc.hmac;
42087
42088 var prf = new Prff(password),
42089 u, ui, i, j, k, out = [], b = sjcl.bitArray;
42090
42091 for (k = 1; 32 * out.length < (length || 1); k++) {
42092 u = ui = prf.encrypt(b.concat(salt,[k]));
42093
42094 for (i=1; i<count; i++) {
42095 ui = prf.encrypt(ui);
42096 for (j=0; j<ui.length; j++) {
42097 u[j] ^= ui[j];
42098 }
ebd8d4e8 42099 }
80c4dd2a
IC
42100
42101 out = out.concat(u);
42102 }
42103
42104 if (length) { out = b.clamp(out, length); }
42105
42106 return out;
42107};
42108
42109
42110//// sha256.js
42111
42112/** @fileOverview Javascript SHA-256 implementation.
42113 *
42114 * An older version of this implementation is available in the public
42115 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
42116 * Stanford University 2008-2010 and BSD-licensed for liability
42117 * reasons.
42118 *
42119 * Special thanks to Aldo Cortesi for pointing out several bugs in
42120 * this code.
42121 *
42122 * @author Emily Stark
42123 * @author Mike Hamburg
42124 * @author Dan Boneh
42125 */
42126
42127/**
42128 * Context for a SHA-256 operation in progress.
42129 * @constructor
42130 * @class Secure Hash Algorithm, 256 bits.
42131 */
42132sjcl.hash.sha256 = function (hash) {
42133 if (!this._key[0]) { this._precompute(); }
42134 if (hash) {
42135 this._h = hash._h.slice(0);
42136 this._buffer = hash._buffer.slice(0);
42137 this._length = hash._length;
42138 } else {
42139 this.reset();
42140 }
42141};
42142
42143/**
42144 * Hash a string or an array of words.
42145 * @static
42146 * @param {bitArray|String} data the data to hash.
42147 * @return {bitArray} The hash value, an array of 16 big-endian words.
42148 */
42149sjcl.hash.sha256.hash = function (data) {
42150 return (new sjcl.hash.sha256()).update(data).finalize();
42151};
42152
42153sjcl.hash.sha256.prototype = {
42154 /**
42155 * The hash's block size, in bits.
42156 * @constant
42157 */
42158 blockSize: 512,
42159
42160 /**
42161 * Reset the hash state.
42162 * @return this
42163 */
42164 reset:function () {
42165 this._h = this._init.slice(0);
42166 this._buffer = [];
42167 this._length = 0;
42168 return this;
42169 },
42170
42171 /**
42172 * Input several words to the hash.
42173 * @param {bitArray|String} data the data to hash.
42174 * @return this
42175 */
42176 update: function (data) {
42177 if (typeof data === "string") {
42178 data = sjcl.codec.utf8String.toBits(data);
42179 }
42180 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
42181 ol = this._length,
42182 nl = this._length = ol + sjcl.bitArray.bitLength(data);
42183 for (i = 512+ol & -512; i <= nl; i+= 512) {
42184 this._block(b.splice(0,16));
ebd8d4e8 42185 }
3af2954a 42186 return this;
80c4dd2a
IC
42187 },
42188
42189 /**
42190 * Complete hashing and output the hash value.
42191 * @return {bitArray} The hash value, an array of 8 big-endian words.
42192 */
42193 finalize:function () {
42194 var i, b = this._buffer, h = this._h;
42195
42196 // Round out and push the buffer
42197 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
42198
42199 // Round out the buffer to a multiple of 16 words, less the 2 length words.
42200 for (i = b.length + 2; i & 15; i++) {
42201 b.push(0);
42202 }
42203
42204 // append the length
42205 b.push(Math.floor(this._length / 0x100000000));
42206 b.push(this._length | 0);
42207
42208 while (b.length) {
42209 this._block(b.splice(0,16));
42210 }
42211
42212 this.reset();
42213 return h;
42214 },
42215
42216 /**
42217 * The SHA-256 initialization vector, to be precomputed.
42218 * @private
42219 */
42220 _init:[],
42221 /*
42222 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
42223 */
42224
42225 /**
42226 * The SHA-256 hash key, to be precomputed.
42227 * @private
42228 */
42229 _key:[],
42230 /*
42231 _key:
42232 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
42233 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
42234 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
42235 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
42236 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
42237 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
42238 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
42239 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
42240 */
42241
42242
42243 /**
42244 * Function to precompute _init and _key.
42245 * @private
42246 */
42247 _precompute: function () {
42248 var i = 0, prime = 2, factor;
42249
42250 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
42251
42252 outer: for (; i<64; prime++) {
42253 for (factor=2; factor*factor <= prime; factor++) {
42254 if (prime % factor === 0) {
42255 // not a prime
42256 continue outer;
ebd8d4e8 42257 }
80c4dd2a
IC
42258 }
42259
42260 if (i<8) {
42261 this._init[i] = frac(Math.pow(prime, 1/2));
42262 }
42263 this._key[i] = frac(Math.pow(prime, 1/3));
42264 i++;
ebd8d4e8 42265 }
80c4dd2a
IC
42266 },
42267
42268 /**
42269 * Perform one cycle of SHA-256.
42270 * @param {bitArray} words one block of words.
42271 * @private
42272 */
42273 _block:function (words) {
42274 var i, tmp, a, b,
42275 w = words.slice(0),
42276 h = this._h,
42277 k = this._key,
42278 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
42279 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
42280
42281 /* Rationale for placement of |0 :
42282 * If a value can overflow is original 32 bits by a factor of more than a few
42283 * million (2^23 ish), there is a possibility that it might overflow the
42284 * 53-bit mantissa and lose precision.
42285 *
42286 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
42287 * propagates around the loop, and on the hash state h[]. I don't believe
42288 * that the clamps on h4 and on h0 are strictly necessary, but it's close
42289 * (for h4 anyway), and better safe than sorry.
42290 *
42291 * The clamps on h[] are necessary for the output to be correct even in the
42292 * common case and for short inputs.
42293 */
42294 for (i=0; i<64; i++) {
42295 // load up the input word for this round
42296 if (i<16) {
42297 tmp = w[i];
42298 } else {
42299 a = w[(i+1 ) & 15];
42300 b = w[(i+14) & 15];
42301 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
42302 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
42303 w[i&15] + w[(i+9) & 15]) | 0;
42304 }
42305
42306 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
42307
42308 // shift register
42309 h7 = h6; h6 = h5; h5 = h4;
42310 h4 = h3 + tmp | 0;
42311 h3 = h2; h2 = h1; h1 = h0;
42312
42313 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
42314 }
42315
42316 h[0] = h[0]+h0 | 0;
42317 h[1] = h[1]+h1 | 0;
42318 h[2] = h[2]+h2 | 0;
42319 h[3] = h[3]+h3 | 0;
42320 h[4] = h[4]+h4 | 0;
42321 h[5] = h[5]+h5 | 0;
42322 h[6] = h[6]+h6 | 0;
42323 h[7] = h[7]+h7 | 0;
42324 }
42325};
dc55c6b0 42326</script>
ab78acc6 42327 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 42328WORDLISTS["english"] = [
ebd8d4e8
IC
42329"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
42330"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
42331"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
42332"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
42333"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
42334"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
42335"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
42336"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
42337"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
42338"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
42339"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
42340"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
42341"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
42342"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
42343"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
42344"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
42345"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
42346"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
42347"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
42348"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
42349"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
42350"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
42351"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
42352"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
42353"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
42354"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
42355"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
42356"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
42357"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
42358"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
42359"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
42360"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
42361"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
42362"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
42363"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
42364"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
42365"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
42366"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
42367"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
42368"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
42369"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
42370"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
42371"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
42372"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
42373"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
42374"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
42375"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
42376"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
42377"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
42378"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
42379"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
42380"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
42381"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
42382"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
42383"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
42384"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
42385"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
42386"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
42387"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
42388"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
42389"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
42390"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
42391"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
42392"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
42393"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
42394"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
42395"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
42396"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
42397"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
42398"film","filter","final","find","fine","finger","finish","fire","firm","first",
42399"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
42400"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
42401"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
42402"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
42403"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
42404"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
42405"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
42406"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
42407"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
42408"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
42409"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
42410"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
42411"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
42412"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
42413"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
42414"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
42415"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
42416"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
42417"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
42418"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
42419"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
42420"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
42421"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
42422"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
42423"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
42424"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
42425"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
42426"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
42427"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
42428"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
42429"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
42430"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
42431"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
42432"liar","liberty","library","license","life","lift","light","like","limb","limit",
42433"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
42434"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
42435"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
42436"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
42437"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
42438"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
42439"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
42440"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
42441"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
42442"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
42443"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
42444"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
42445"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
42446"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
42447"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
42448"network","neutral","never","news","next","nice","night","noble","noise","nominee",
42449"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
42450"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
42451"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
42452"oil","okay","old","olive","olympic","omit","once","one","onion","online",
42453"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
42454"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
42455"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
42456"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
42457"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
42458"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
42459"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
42460"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
42461"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
42462"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
42463"pole","police","pond","pony","pool","popular","portion","position","possible","post",
42464"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
42465"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
42466"prize","problem","process","produce","profit","program","project","promote","proof","property",
42467"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
42468"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
42469"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
42470"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
42471"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
42472"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
42473"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
42474"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
42475"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
42476"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
42477"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
42478"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
42479"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
42480"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
42481"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
42482"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
42483"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
42484"scrub","sea","search","season","seat","second","secret","section","security","seed",
42485"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
42486"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
42487"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
42488"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
42489"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
42490"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
42491"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
42492"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
42493"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
42494"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
42495"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
42496"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
42497"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
42498"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
42499"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
42500"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
42501"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
42502"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
42503"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
42504"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
42505"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
42506"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
42507"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
42508"thank","that","theme","then","theory","there","they","thing","this","thought",
42509"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
42510"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
42511"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
42512"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
42513"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
42514"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
42515"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
42516"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
42517"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
42518"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
42519"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
42520"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
42521"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
42522"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
42523"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
42524"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
42525"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
42526"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
42527"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
42528"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
42529"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
42530"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
42531"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
42532"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
42533"yellow","you","young","youth","zebra","zero","zone","zoo"]
0515eeec
IC
42534</script>
42535 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
42536WORDLISTS["japanese"] = [
42537"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
42538"あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
42539"あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
42540"あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
42541"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
42542"あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
42543"いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
42544"いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
42545"いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
42546"いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
42547"いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
42548"いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
42549"いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
42550"いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
42551"いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
42552"うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
42553"うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
42554"うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
42555"うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
42556"うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
42557"うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
42558"えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
42559"えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
42560"えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
42561"えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
42562"おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
42563"おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
42564"おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
42565"おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
42566"おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
42567"おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
42568"おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
42569"かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
42570"かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
42571"かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
42572"がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
42573"かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
42574"かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
42575"きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
42576"きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
42577"ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
42578"きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
42579"きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
42580"きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
42581"きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
42582"きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
42583"くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
42584"くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
42585"くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
42586"ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
42587"くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
42588"ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
42589"けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
42590"げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
42591"けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
42592"けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
42593"けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
42594"けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
42595"けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
42596"けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
42597"ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
42598"ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
42599"ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
42600"こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
42601"こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
42602"こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
42603"こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
42604"こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
42605"こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
42606"こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
42607"こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
42608"さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
42609"さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
42610"さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
42611"さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
42612"さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
42613"さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
42614"ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
42615"しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
42616"しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
42617"しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
42618"しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
42619"しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
42620"しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
42621"しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
42622"しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
42623"しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
42624"しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
42625"すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
42626"すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
42627"すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
42628"ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
42629"すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
42630"せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
42631"せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
42632"せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
42633"せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
42634"ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
42635"せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
42636"せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
42637"そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
42638"そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
42639"そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
42640"そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
42641"そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
42642"ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
42643"たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
42644"だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
42645"たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
42646"たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
42647"たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
42648"たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
42649"たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
42650"ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
42651"たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
42652"たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
42653"たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
42654"ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
42655"ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
42656"ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
42657"ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
42658"ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
42659"つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
42660"つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
42661"つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
42662"てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
42663"ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
42664"てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
42665"でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
42666"てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
42667"でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
42668"でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
42669"どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
42670"とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
42671"とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
42672"とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
42673"どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
42674"ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
42675"なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
42676"なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
42677"ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
42678"にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
42679"にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
42680"にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
42681"にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
42682"にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
42683"ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
42684"ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
42685"ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
42686"ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
42687"ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
42688"のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
42689"のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
42690"ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
42691"はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
42692"はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
42693"はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
42694"はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
42695"はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
42696"はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
42697"はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
42698"ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
42699"ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
42700"ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
42701"ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
42702"ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
42703"ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
42704"ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
42705"ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
42706"ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
42707"ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
42708"ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
42709"ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
42710"へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
42711"へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
42712"へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
42713"ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
42714"ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
42715"ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
42716"ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
42717"まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
42718"まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
42719"みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
42720"みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
42721"みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
42722"むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
42723"むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
42724"むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
42725"めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
42726"めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
42727"もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
42728"やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
42729"やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
42730"ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
42731"ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
42732"よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
42733"よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
42734"らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
42735"りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
42736"りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
42737"りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
42738"れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
42739"れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
42740"ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
42741"わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
42742</script>
42743 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
42744WORDLISTS["spanish"] = [
42745"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
42746"abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
42747"aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
42748"acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
42749"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
42750"agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
42751"alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
42752"aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
42753"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
42754"amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
42755"ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
42756"anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
42757"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
42758"apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
42759"arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
42760"arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
42761"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
42762"astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
42763"atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
42764"ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
42765"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
42766"baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
42767"banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
42768"batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
42769"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
42770"bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
42771"bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
42772"bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
42773"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
42774"bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
42775"caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
42776"caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
42777"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
42778"canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
42779"captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
42780"carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
42781"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
42782"ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
42783"chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
42784"choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
42785"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
42786"clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
42787"cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
42788"cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
42789"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
42790"copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
42791"cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
42792"cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
42793"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
42794"cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
42795"curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
42796"decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
42797"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
42798"detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
42799"dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
42800"dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
42801"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
42802"duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
42803"ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
42804"eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
42805"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
42806"encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
42807"enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
42808"erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
42809"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
42810"eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
42811"excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
42812"fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
42813"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
42814"fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
42815"fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
42816"fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
42817"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
42818"fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
42819"forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
42820"fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
42821"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
42822"gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
42823"ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
42824"género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
42825"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
42826"gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
42827"grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
42828"grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
42829"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
42830"harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
42831"hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
42832"hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
42833"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
42834"humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
42835"ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
42836"imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
42837"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
42838"ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
42839"jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
42840"juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
42841"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
42842"lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
42843"lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
42844"latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
42845"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
42846"leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
42847"lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
42848"líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
42849"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
42850"lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
42851"luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
42852"maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
42853"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
42854"manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
42855"marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
42856"matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
42857"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
42858"mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
42859"miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
42860"minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
42861"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
42862"monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
42863"morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
42864"mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
42865"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
42866"nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
42867"naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
42868"neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
42869"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
42870"novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
42871"nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
42872"observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
42873"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
42874"oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
42875"olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
42876"ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
42877"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
42878"orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
42879"óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
42880"país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
42881"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
42882"pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
42883"paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
42884"pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
42885"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
42886"pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
42887"persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
42888"pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
42889"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
42890"pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
42891"pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
42892"policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
42893"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
42894"premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
42895"proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
42896"prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
42897"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
42898"queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
42899"rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
42900"rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
42901"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
42902"reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
42903"reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
42904"remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
42905"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
42906"rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
42907"riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
42908"rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
42909"ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
42910"rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
42911"rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
42912"salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
42913"sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
42914"sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
42915"seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
42916"sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
42917"severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
42918"silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
42919"sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
42920"sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
42921"sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
42922"sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
42923"surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
42924"talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
42925"tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
42926"tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
42927"tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
42928"tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
42929"testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
42930"tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
42931"tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
42932"todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
42933"torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
42934"toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
42935"trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
42936"trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
42937"truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
42938"turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
42939"uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
42940"utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
42941"válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
42942"vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
42943"veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
42944"verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
42945"vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
42946"viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
42947"vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
42948"vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
42949"zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
42950</script>
42951 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
42952WORDLISTS["chinese_simplified"] = [
42953"的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
42954"中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
42955"时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
42956"就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
42957"同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
42958"面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
42959"民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
42960"度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
42961"二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
42962"两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
42963"去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
42964"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
42965"那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
42966"样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
42967"心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
42968"或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
42969"条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
42970"无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
42971"已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
42972"果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
42973"次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
42974"求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
42975"图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
42976"别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
42977"几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
42978"必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
42979"南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
42980"百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
42981"压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
42982"术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
42983"收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
42984"风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
42985"身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
42986"达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
42987"八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
42988"节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
42989"传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
42990"研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
42991"织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
42992"复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
42993"深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
42994"半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
42995"史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
42996"何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
42997"号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
42998"毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
42999"王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
43000"却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
43001"包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
43002"细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
43003"官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
43004"女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
43005"含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
43006"英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
43007"破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
43008"河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
43009"案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
43010"仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
43011"轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
43012"足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
43013"负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
43014"修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
43015"财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
43016"跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
43017"初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
43018"未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
43019"钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
43020"限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
43021"州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
43022"础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
43023"袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
43024"诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
43025"夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
43026"终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
43027"烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
43028"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
43029"侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
43030"货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
43031"息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
43032"医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
43033"训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
43034"脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
43035"械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
43036"粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
43037"钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
43038"培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
43039"答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
43040"脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
43041"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
43042"评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
43043"伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
43044"亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
43045"诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
43046"绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
43047"屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
43048"束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
43049"胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
43050"宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
43051"露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
43052"库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
43053"鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
43054"借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
43055"润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
43056"欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
43057"纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
43058"塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
43059"刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
43060"洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
43061"献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
43062"阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
43063"楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
43064"馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
43065"塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
43066"楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
43067"监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
43068"壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
43069"桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
43070"您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
43071"纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
43072"湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
43073"齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
43074"净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
43075"庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
43076"伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
43077"璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
43078"纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
43079"津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
43080"肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
43081"贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
43082"峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
43083"浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
43084"睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
43085"炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
43086"呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
43087"授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
43088"幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
43089"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
43090"夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
43091"绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
43092"礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
43093"勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
43094"饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
43095"扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
43096"奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
43097"寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
43098"贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
43099"渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
43100"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
43101"锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
43102"缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
43103"碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
43104"票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
43105"荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
43106"撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
43107"陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
43108"虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
43109"乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
43110"瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
43111"秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
43112"洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
43113"籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
43114"醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
43115"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
43116"趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
43117"滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
43118"泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
43119"胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
43120"串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
43121"辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
43122"沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
43123"侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
43124"豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
43125"掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
43126"雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
43127"蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
43128"番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
43129"扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
43130"悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
43131"渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
43132"霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
43133"甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
43134"伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
43135"弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
43136"逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
43137"冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
43138"欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
43139"搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
43140"忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
43141"杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
43142"烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
43143"姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
43144"董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
43145"拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
43146"览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
43147"凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
43148"丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
43149"铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
43150"窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
43151"胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
43152"疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
43153"嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
43154"莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
43155"皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
43156"巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
43157"卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
43158</script>
43159 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43160WORDLISTS["chinese_traditional"] = [
43161"的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
43162"中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
43163"時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
43164"就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
43165"同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
43166"面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
43167"民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
43168"度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
43169"二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
43170"兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
43171"去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
43172"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
43173"那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
43174"樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
43175"心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
43176"或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
43177"條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
43178"無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
43179"已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
43180"果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
43181"次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
43182"求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
43183"圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
43184"別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
43185"幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
43186"必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
43187"南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
43188"百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
43189"壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
43190"術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
43191"收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
43192"風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
43193"身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
43194"達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
43195"八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
43196"節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
43197"傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
43198"研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
43199"織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
43200"复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
43201"深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
43202"半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
43203"史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
43204"何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
43205"號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
43206"毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
43207"王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
43208"卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
43209"包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
43210"細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
43211"官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
43212"女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
43213"含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
43214"英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
43215"破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
43216"河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
43217"案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
43218"僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
43219"輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
43220"足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
43221"負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
43222"修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
43223"財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
43224"跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
43225"初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
43226"未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
43227"錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
43228"限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
43229"州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
43230"礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
43231"袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
43232"訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
43233"夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
43234"終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
43235"烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
43236"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
43237"侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
43238"貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
43239"息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
43240"醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
43241"訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
43242"脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
43243"械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
43244"粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
43245"鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
43246"培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
43247"答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
43248"腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
43249"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
43250"評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
43251"傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
43252"亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
43253"詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
43254"綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
43255"屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
43256"束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
43257"胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
43258"宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
43259"露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
43260"庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
43261"鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
43262"借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
43263"潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
43264"歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
43265"納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
43266"塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
43267"刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
43268"洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
43269"獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
43270"陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
43271"樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
43272"館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
43273"塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
43274"楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
43275"監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
43276"壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
43277"橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
43278"您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
43279"紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
43280"灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
43281"齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
43282"淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
43283"莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
43284"夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
43285"璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
43286"縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
43287"津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
43288"肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
43289"貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
43290"峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
43291"浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
43292"睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
43293"炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
43294"呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
43295"授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
43296"幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
43297"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
43298"夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
43299"繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
43300"禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
43301"勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
43302"飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
43303"掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
43304"奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
43305"寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
43306"貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
43307"漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
43308"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
43309"銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
43310"缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
43311"碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
43312"票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
43313"荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
43314"撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
43315"陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
43316"蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
43317"乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
43318"瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
43319"秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
43320"洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
43321"籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
43322"醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
43323"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
43324"趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
43325"灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
43326"泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
43327"脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
43328"串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
43329"輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
43330"沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
43331"僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
43332"豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
43333"掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
43334"霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
43335"蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
43336"番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
43337"扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
43338"悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
43339"渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
43340"黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
43341"甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
43342"偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
43343"弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
43344"逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
43345"冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
43346"欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
43347"搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
43348"憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
43349"杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
43350"烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
43351"姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
43352"董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
43353"拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
43354"覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
43355"兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
43356"叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
43357"鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
43358"窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
43359"胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
43360"瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
43361"嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
43362"蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
43363"皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
43364"巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
43365"卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
43366</script>
43367 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43368WORDLISTS["french"] = [
43369"abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
43370"abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
43371"acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
43372"aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
43373"adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
43374"adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
43375"agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
43376"aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
43377"alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
43378"ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
43379"amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
43380"animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
43381"anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
43382"aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
43383"armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
43384"aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
43385"atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
43386"audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
43387"aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
43388"badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
43389"bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
43390"bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
43391"bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
43392"bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
43393"biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
43394"blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
43395"bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
43396"bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
43397"breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
43398"broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
43399"bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
43400"caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
43401"caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
43402"caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
43403"carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
43404"caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
43405"cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
43406"charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
43407"chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
43408"chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
43409"citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
43410"cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
43411"coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
43412"colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
43413"connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
43414"corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
43415"couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
43416"crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
43417"crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
43418"curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
43419"dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
43420"déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
43421"dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
43422"dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
43423"dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
43424"détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
43425"différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
43426"discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
43427"domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
43428"doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
43429"dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
43430"écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
43431"écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
43432"effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
43433"élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
43434"embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
43435"émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
43436"enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
43437"ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
43438"énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
43439"épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
43440"épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
43441"espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
43442"estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
43443"ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
43444"évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
43445"exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
43446"exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
43447"exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
43448"farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
43449"favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
43450"féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
43451"figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
43452"fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
43453"fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
43454"fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
43455"fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
43456"frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
43457"fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
43458"galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
43459"gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
43460"gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
43461"gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
43462"goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
43463"grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
43464"gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
43465"hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
43466"hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
43467"histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
43468"horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
43469"humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
43470"illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
43471"imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
43472"inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
43473"inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
43474"inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
43475"inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
43476"jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
43477"jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
43478"joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
43479"kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
43480"laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
43481"laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
43482"lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
43483"ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
43484"lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
43485"loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
43486"lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
43487"magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
43488"malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
43489"marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
43490"matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
43491"méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
43492"mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
43493"métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
43494"mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
43495"moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
43496"morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
43497"mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
43498"muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
43499"natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
43500"négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
43501"nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
43502"normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
43503"nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
43504"obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
43505"octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
43506"olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
43507"opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
43508"oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
43509"otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
43510"paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
43511"panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
43512"parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
43513"patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
43514"pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
43515"perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
43516"pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
43517"pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
43518"pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
43519"pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
43520"pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
43521"ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
43522"pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
43523"préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
43524"problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
43525"prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
43526"pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
43527"question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
43528"ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
43529"réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
43530"rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
43531"régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
43532"remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
43533"reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
43534"rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
43535"révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
43536"rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
43537"rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
43538"ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
43539"sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
43540"sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
43541"savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
43542"scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
43543"séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
43544"séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
43545"sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
43546"sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
43547"soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
43548"sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
43549"soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
43550"station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
43551"subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
43552"surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
43553"synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
43554"tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
43555"tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
43556"tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
43557"tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
43558"tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
43559"torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
43560"trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
43561"tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
43562"tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
43563"typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
43564"univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
43565"vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
43566"valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
43567"végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
43568"vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
43569"viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
43570"violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
43571"vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
43572"voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
43573"voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
43574</script>
43575 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43576WORDLISTS["italian"] = [
43577"abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
43578"accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
43579"addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
43580"affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
43581"agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
43582"alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
43583"allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
43584"altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
43585"america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
43586"amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
43587"andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
43588"anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
43589"appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
43590"archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
43591"arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
43592"asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
43593"astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
43594"attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
43595"avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
43596"badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
43597"bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
43598"battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
43599"benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
43600"bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
43601"bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
43602"botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
43603"brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
43604"buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
43605"cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
43606"camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
43607"capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
43608"carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
43609"casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
43610"cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
43611"cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
43612"ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
43613"ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
43614"cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
43615"comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
43616"consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
43617"cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
43618"cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
43619"critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
43620"cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
43621"daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
43622"decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
43623"demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
43624"desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
43625"diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
43626"disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
43627"dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
43628"dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
43629"dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
43630"economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
43631"elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
43632"eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
43633"enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
43634"eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
43635"erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
43636"esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
43637"esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
43638"europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
43639"famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
43640"fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
43641"feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
43642"feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
43643"fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
43644"fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
43645"fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
43646"fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
43647"frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
43648"fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
43649"gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
43650"garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
43651"gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
43652"ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
43653"gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
43654"gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
43655"gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
43656"guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
43657"idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
43658"imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
43659"importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
43660"incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
43661"ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
43662"insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
43663"invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
43664"irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
43665"lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
43666"larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
43667"lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
43668"levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
43669"liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
43670"lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
43671"luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
43672"macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
43673"malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
43674"mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
43675"massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
43676"medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
43677"merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
43678"mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
43679"minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
43680"mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
43681"molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
43682"mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
43683"mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
43684"muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
43685"narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
43686"negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
43687"nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
43688"normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
43689"nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
43690"obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
43691"offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
43692"ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
43693"onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
43694"orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
43695"orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
43696"ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
43697"ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
43698"padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
43699"pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
43700"parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
43701"pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
43702"penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
43703"periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
43704"pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
43705"piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
43706"pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
43707"pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
43708"poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
43709"pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
43710"positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
43711"prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
43712"principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
43713"proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
43714"pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
43715"qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
43716"ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
43717"rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
43718"recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
43719"remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
43720"rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
43721"ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
43722"rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
43723"rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
43724"ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
43725"rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
43726"riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
43727"rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
43728"rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
43729"rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
43730"salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
43731"sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
43732"sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
43733"sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
43734"scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
43735"scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
43736"scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
43737"sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
43738"selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
43739"sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
43740"setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
43741"sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
43742"sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
43743"sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
43744"sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
43745"smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
43746"snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
43747"solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
43748"sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
43749"sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
43750"spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
43751"spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
43752"sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
43753"statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
43754"storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
43755"succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
43756"sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
43757"svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
43758"tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
43759"tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
43760"tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
43761"tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
43762"titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
43763"tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
43764"tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
43765"trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
43766"trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
43767"trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
43768"tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
43769"ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
43770"unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
43771"usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
43772"valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
43773"vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
43774"vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
43775"verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
43776"vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
43777"vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
43778"viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
43779"viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
43780"zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
43781"zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
dc55c6b0 43782</script>
ab78acc6 43783 <script>/*
3af2954a
IC
43784 * Copyright (c) 2013 Pavol Rusnak
43785 *
43786 * Permission is hereby granted, free of charge, to any person obtaining a copy of
43787 * this software and associated documentation files (the "Software"), to deal in
43788 * the Software without restriction, including without limitation the rights to
43789 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
43790 * of the Software, and to permit persons to whom the Software is furnished to do
43791 * so, subject to the following conditions:
43792 *
43793 * The above copyright notice and this permission notice shall be included in all
43794 * copies or substantial portions of the Software.
43795 *
43796 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
43797 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
43798 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
43799 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
43800 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
43801 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
43802 */
43803
43804/*
43805 * Javascript port from python by Ian Coleman
43806 *
80c4dd2a
IC
43807 * Requires code from sjcl
43808 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
43809 */
43810
43811var Mnemonic = function(language) {
43812
43813 var PBKDF2_ROUNDS = 2048;
43814 var RADIX = 2048;
43815
43816 var self = this;
43817 var wordlist = [];
43818
80c4dd2a
IC
43819 var hmacSHA512 = function(key) {
43820 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
43821 this.encrypt = function() {
43822 return hasher.encrypt.apply(hasher, arguments);
43823 };
43824 };
43825
3af2954a
IC
43826 function init() {
43827 wordlist = WORDLISTS[language];
43828 if (wordlist.length != RADIX) {
43829 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
43830 throw err;
43831 }
43832 }
43833
43834 self.generate = function(strength) {
43835 strength = strength || 128;
43836 var r = strength % 32;
43837 if (r > 0) {
43838 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
43839 }
43840 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
43841 if (!hasStrongCrypto) {
43842 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
43843 }
43844 var buffer = new Uint8Array(strength / 8);
43845 var data = crypto.getRandomValues(buffer);
43846 return self.toMnemonic(data);
43847 }
43848
80c4dd2a
IC
43849 self.toMnemonic = function(byteArray) {
43850 if (byteArray.length % 4 > 0) {
43851 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
43852 }
43853
43854 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
43855 var data = byteArrayToWordArray(byteArray);
43856 var hash = sjcl.hash.sha256.hash(data);
43857 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
43858
43859 // b is a binary string, eg '00111010101100...'
43860 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
43861 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
43862 //
43863 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
43864 // c = bin(int(h, 16))[2:].zfill(256)
43865 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
43866 var a = byteArrayToBinaryString(byteArray);
43867 var c = zfill(hexStringToBinaryString(h), 256);
43868 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
43869 // b = line1 + line2
43870 var b = a + d;
43871
43872 var result = [];
43873 var blen = b.length / 11;
43874 for (var i=0; i<blen; i++) {
43875 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
43876 result.push(wordlist[idx]);
43877 }
0515eeec 43878 return self.joinWords(result);
3af2954a
IC
43879 }
43880
43881 self.check = function(mnemonic) {
0515eeec 43882 var mnemonic = self.splitWords(mnemonic);
18abe53b 43883 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
3af2954a
IC
43884 return false
43885 }
43886 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
43887 var idx = [];
43888 for (var i=0; i<mnemonic.length; i++) {
43889 var word = mnemonic[i];
43890 var wordIndex = wordlist.indexOf(word);
43891 if (wordIndex == -1) {
43892 return false;
43893 }
43894 var binaryIndex = zfill(wordIndex.toString(2), 11);
43895 idx.push(binaryIndex);
43896 }
43897 var b = idx.join('');
43898 var l = b.length;
43899 //d = b[:l / 33 * 32]
43900 //h = b[-l / 33:]
43901 var d = b.substring(0, l / 33 * 32);
43902 var h = b.substring(l - l / 33, l);
43903 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 43904 var nd = binaryStringToWordArray(d);
3af2954a 43905 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
43906 var ndHash = sjcl.hash.sha256.hash(nd);
43907 var ndHex = sjcl.codec.hex.fromBits(ndHash);
43908 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
43909 var nh = ndBstr.substring(0,l/33);
43910 return h == nh;
43911 }
43912
43913 self.toSeed = function(mnemonic, passphrase) {
43914 passphrase = passphrase || '';
599fb39e
IC
43915 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
43916 var mnemonicNormalized = self.normalizeString(mnemonic);
3af2954a
IC
43917 passphrase = self.normalizeString(passphrase)
43918 passphrase = "mnemonic" + passphrase;
599fb39e 43919 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
80c4dd2a
IC
43920 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
43921 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
43922 var hashHex = sjcl.codec.hex.fromBits(result);
43923 return hashHex;
3af2954a
IC
43924 }
43925
0515eeec
IC
43926 self.splitWords = function(mnemonic) {
43927 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
43928 }
43929
43930 self.joinWords = function(words) {
43931 // Set space correctly depending on the language
43932 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
43933 var space = " ";
43934 if (language == "japanese") {
43935 space = "\u3000"; // ideographic space
43936 }
43937 return words.join(space);
43938 }
43939
3af2954a
IC
43940 self.normalizeString = function(str) {
43941 if (typeof str.normalize == "function") {
43942 return str.normalize("NFKD");
43943 }
43944 else {
43945 // TODO decide how to handle this in the future.
43946 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
43947 return str;
43948 }
43949 }
43950
80c4dd2a
IC
43951 function byteArrayToWordArray(data) {
43952 var a = [];
43953 for (var i=0; i<data.length/4; i++) {
43954 v = 0;
43955 v += data[i*4 + 0] << 8 * 3;
43956 v += data[i*4 + 1] << 8 * 2;
43957 v += data[i*4 + 2] << 8 * 1;
43958 v += data[i*4 + 3] << 8 * 0;
43959 a.push(v);
43960 }
43961 return a;
43962 }
43963
3af2954a
IC
43964 function byteArrayToBinaryString(data) {
43965 var bin = "";
43966 for (var i=0; i<data.length; i++) {
43967 bin += zfill(data[i].toString(2), 8);
43968 }
43969 return bin;
43970 }
43971
80c4dd2a
IC
43972 function hexStringToBinaryString(hexString) {
43973 binaryString = "";
43974 for (var i=0; i<hexString.length; i++) {
43975 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
43976 }
43977 return binaryString;
43978 }
43979
43980 function binaryStringToWordArray(binary) {
43981 var aLen = binary.length / 32;
43982 var a = [];
43983 for (var i=0; i<aLen; i++) {
43984 var valueStr = binary.substring(0,32);
3af2954a 43985 var value = parseInt(valueStr, 2);
80c4dd2a
IC
43986 a.push(value);
43987 binary = binary.slice(32);
3af2954a 43988 }
80c4dd2a 43989 return a;
3af2954a
IC
43990 }
43991
43992 // Pad a numeric string on the left with zero digits until the given width
43993 // is reached.
43994 // Note this differs to the python implementation because it does not
43995 // handle numbers starting with a sign.
43996 function zfill(source, length) {
43997 source = source.toString();
43998 while (source.length < length) {
43999 source = '0' + source;
44000 }
44001 return source;
44002 }
44003
44004 init();
ebd8d4e8 44005
3af2954a 44006}
dc55c6b0 44007</script>
95f04905
IC
44008 <script>/*
44009 JavaScript BigInteger library version 0.9.1
44010 http://silentmatt.com/biginteger/
18abe53b 44011
95f04905
IC
44012 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
44013 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
44014 Licensed under the MIT license.
c6624d51 44015
95f04905
IC
44016 Support for arbitrary internal representation base was added by
44017 Vitaly Magerya.
44018*/
18abe53b 44019
95f04905
IC
44020/*
44021 File: biginteger.js
18abe53b 44022
95f04905 44023 Exports:
18abe53b 44024
95f04905
IC
44025 <BigInteger>
44026*/
44027(function(exports) {
44028"use strict";
44029/*
44030 Class: BigInteger
44031 An arbitrarily-large integer.
18abe53b 44032
95f04905
IC
44033 <BigInteger> objects should be considered immutable. None of the "built-in"
44034 methods modify *this* or their arguments. All properties should be
44035 considered private.
18abe53b 44036
95f04905
IC
44037 All the methods of <BigInteger> instances can be called "statically". The
44038 static versions are convenient if you don't already have a <BigInteger>
44039 object.
18abe53b 44040
95f04905 44041 As an example, these calls are equivalent.
18abe53b 44042
95f04905
IC
44043 > BigInteger(4).multiply(5); // returns BigInteger(20);
44044 > BigInteger.multiply(4, 5); // returns BigInteger(20);
18abe53b 44045
95f04905
IC
44046 > var a = 42;
44047 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
44048*/
c6624d51 44049
95f04905 44050var CONSTRUCT = {}; // Unique token to call "private" version of constructor
c6624d51
IC
44051
44052/*
44053 Constructor: BigInteger()
44054 Convert a value to a <BigInteger>.
44055
44056 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
44057 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
44058 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
44059 without a radix argument.
44060
44061 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
44062 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
44063 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
44064 > var n3 = BigInteger(n2); // Return n2, unchanged
44065
44066 The constructor form only takes an array and a sign. *n* must be an
44067 array of numbers in little-endian order, where each digit is between 0
44068 and BigInteger.base. The second parameter sets the sign: -1 for
44069 negative, +1 for positive, or 0 for zero. The array is *not copied and
44070 may be modified*. If the array contains only zeros, the sign parameter
44071 is ignored and is forced to zero.
44072
44073 > new BigInteger([5], -1): create a new BigInteger with value -5
44074
44075 Parameters:
44076
44077 n - Value to convert to a <BigInteger>.
44078
44079 Returns:
44080
44081 A <BigInteger> value.
44082
44083 See Also:
44084
44085 <parse>, <BigInteger>
44086*/
44087function BigInteger(n, s, token) {
44088 if (token !== CONSTRUCT) {
44089 if (n instanceof BigInteger) {
44090 return n;
44091 }
44092 else if (typeof n === "undefined") {
44093 return ZERO;
44094 }
44095 return BigInteger.parse(n);
44096 }
44097
44098 n = n || []; // Provide the nullary constructor for subclasses.
44099 while (n.length && !n[n.length - 1]) {
44100 --n.length;
44101 }
44102 this._d = n;
44103 this._s = n.length ? (s || 1) : 0;
44104}
44105
44106BigInteger._construct = function(n, s) {
44107 return new BigInteger(n, s, CONSTRUCT);
44108};
44109
44110// Base-10 speedup hacks in parse, toString, exp10 and log functions
44111// require base to be a power of 10. 10^7 is the largest such power
44112// that won't cause a precision loss when digits are multiplied.
44113var BigInteger_base = 10000000;
44114var BigInteger_base_log10 = 7;
44115
44116BigInteger.base = BigInteger_base;
44117BigInteger.base_log10 = BigInteger_base_log10;
44118
44119var ZERO = new BigInteger([], 0, CONSTRUCT);
44120// Constant: ZERO
44121// <BigInteger> 0.
44122BigInteger.ZERO = ZERO;
44123
44124var ONE = new BigInteger([1], 1, CONSTRUCT);
44125// Constant: ONE
44126// <BigInteger> 1.
44127BigInteger.ONE = ONE;
44128
44129var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
44130// Constant: M_ONE
44131// <BigInteger> -1.
44132BigInteger.M_ONE = M_ONE;
44133
44134// Constant: _0
44135// Shortcut for <ZERO>.
44136BigInteger._0 = ZERO;
44137
44138// Constant: _1
44139// Shortcut for <ONE>.
44140BigInteger._1 = ONE;
44141
44142/*
44143 Constant: small
44144 Array of <BigIntegers> from 0 to 36.
44145
44146 These are used internally for parsing, but useful when you need a "small"
44147 <BigInteger>.
44148
44149 See Also:
44150
44151 <ZERO>, <ONE>, <_0>, <_1>
44152*/
44153BigInteger.small = [
44154 ZERO,
44155 ONE,
44156 /* Assuming BigInteger_base > 36 */
44157 new BigInteger( [2], 1, CONSTRUCT),
44158 new BigInteger( [3], 1, CONSTRUCT),
44159 new BigInteger( [4], 1, CONSTRUCT),
44160 new BigInteger( [5], 1, CONSTRUCT),
44161 new BigInteger( [6], 1, CONSTRUCT),
44162 new BigInteger( [7], 1, CONSTRUCT),
44163 new BigInteger( [8], 1, CONSTRUCT),
44164 new BigInteger( [9], 1, CONSTRUCT),
44165 new BigInteger([10], 1, CONSTRUCT),
44166 new BigInteger([11], 1, CONSTRUCT),
44167 new BigInteger([12], 1, CONSTRUCT),
44168 new BigInteger([13], 1, CONSTRUCT),
44169 new BigInteger([14], 1, CONSTRUCT),
44170 new BigInteger([15], 1, CONSTRUCT),
44171 new BigInteger([16], 1, CONSTRUCT),
44172 new BigInteger([17], 1, CONSTRUCT),
44173 new BigInteger([18], 1, CONSTRUCT),
44174 new BigInteger([19], 1, CONSTRUCT),
44175 new BigInteger([20], 1, CONSTRUCT),
44176 new BigInteger([21], 1, CONSTRUCT),
44177 new BigInteger([22], 1, CONSTRUCT),
44178 new BigInteger([23], 1, CONSTRUCT),
44179 new BigInteger([24], 1, CONSTRUCT),
44180 new BigInteger([25], 1, CONSTRUCT),
44181 new BigInteger([26], 1, CONSTRUCT),
44182 new BigInteger([27], 1, CONSTRUCT),
44183 new BigInteger([28], 1, CONSTRUCT),
44184 new BigInteger([29], 1, CONSTRUCT),
44185 new BigInteger([30], 1, CONSTRUCT),
44186 new BigInteger([31], 1, CONSTRUCT),
44187 new BigInteger([32], 1, CONSTRUCT),
44188 new BigInteger([33], 1, CONSTRUCT),
44189 new BigInteger([34], 1, CONSTRUCT),
44190 new BigInteger([35], 1, CONSTRUCT),
44191 new BigInteger([36], 1, CONSTRUCT)
44192];
44193
44194// Used for parsing/radix conversion
44195BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
44196
44197/*
44198 Method: toString
44199 Convert a <BigInteger> to a string.
44200
44201 When *base* is greater than 10, letters are upper case.
44202
44203 Parameters:
44204
44205 base - Optional base to represent the number in (default is base 10).
44206 Must be between 2 and 36 inclusive, or an Error will be thrown.
44207
44208 Returns:
44209
44210 The string representation of the <BigInteger>.
44211*/
44212BigInteger.prototype.toString = function(base) {
44213 base = +base || 10;
44214 if (base < 2 || base > 36) {
44215 throw new Error("illegal radix " + base + ".");
44216 }
44217 if (this._s === 0) {
44218 return "0";
44219 }
44220 if (base === 10) {
44221 var str = this._s < 0 ? "-" : "";
44222 str += this._d[this._d.length - 1].toString();
44223 for (var i = this._d.length - 2; i >= 0; i--) {
44224 var group = this._d[i].toString();
44225 while (group.length < BigInteger_base_log10) group = '0' + group;
44226 str += group;
44227 }
44228 return str;
44229 }
44230 else {
44231 var numerals = BigInteger.digits;
44232 base = BigInteger.small[base];
44233 var sign = this._s;
44234
44235 var n = this.abs();
44236 var digits = [];
44237 var digit;
44238
44239 while (n._s !== 0) {
44240 var divmod = n.divRem(base);
44241 n = divmod[0];
44242 digit = divmod[1];
44243 // TODO: This could be changed to unshift instead of reversing at the end.
44244 // Benchmark both to compare speeds.
44245 digits.push(numerals[digit.valueOf()]);
44246 }
44247 return (sign < 0 ? "-" : "") + digits.reverse().join("");
44248 }
44249};
44250
44251// Verify strings for parsing
44252BigInteger.radixRegex = [
44253 /^$/,
44254 /^$/,
44255 /^[01]*$/,
44256 /^[012]*$/,
44257 /^[0-3]*$/,
44258 /^[0-4]*$/,
44259 /^[0-5]*$/,
44260 /^[0-6]*$/,
44261 /^[0-7]*$/,
44262 /^[0-8]*$/,
44263 /^[0-9]*$/,
44264 /^[0-9aA]*$/,
44265 /^[0-9abAB]*$/,
44266 /^[0-9abcABC]*$/,
44267 /^[0-9a-dA-D]*$/,
44268 /^[0-9a-eA-E]*$/,
44269 /^[0-9a-fA-F]*$/,
44270 /^[0-9a-gA-G]*$/,
44271 /^[0-9a-hA-H]*$/,
44272 /^[0-9a-iA-I]*$/,
44273 /^[0-9a-jA-J]*$/,
44274 /^[0-9a-kA-K]*$/,
44275 /^[0-9a-lA-L]*$/,
44276 /^[0-9a-mA-M]*$/,
44277 /^[0-9a-nA-N]*$/,
44278 /^[0-9a-oA-O]*$/,
44279 /^[0-9a-pA-P]*$/,
44280 /^[0-9a-qA-Q]*$/,
44281 /^[0-9a-rA-R]*$/,
44282 /^[0-9a-sA-S]*$/,
44283 /^[0-9a-tA-T]*$/,
44284 /^[0-9a-uA-U]*$/,
44285 /^[0-9a-vA-V]*$/,
44286 /^[0-9a-wA-W]*$/,
44287 /^[0-9a-xA-X]*$/,
44288 /^[0-9a-yA-Y]*$/,
44289 /^[0-9a-zA-Z]*$/
44290];
44291
44292/*
44293 Function: parse
44294 Parse a string into a <BigInteger>.
44295
44296 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
44297 *base* is not provided, it will be guessed based on the leading characters
44298 of *s* as follows:
44299
44300 - "0x" or "0X": *base* = 16
44301 - "0c" or "0C": *base* = 8
44302 - "0b" or "0B": *base* = 2
44303 - else: *base* = 10
44304
44305 If no base is provided, or *base* is 10, the number can be in exponential
44306 form. For example, these are all valid:
44307
44308 > BigInteger.parse("1e9"); // Same as "1000000000"
44309 > BigInteger.parse("1.234*10^3"); // Same as 1234
44310 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
44311
44312 If any characters fall outside the range defined by the radix, an exception
44313 will be thrown.
44314
44315 Parameters:
44316
44317 s - The string to parse.
44318 base - Optional radix (default is to guess based on *s*).
44319
44320 Returns:
44321
44322 a <BigInteger> instance.
44323*/
44324BigInteger.parse = function(s, base) {
44325 // Expands a number in exponential form to decimal form.
44326 // expandExponential("-13.441*10^5") === "1344100";
44327 // expandExponential("1.12300e-1") === "0.112300";
44328 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
44329 function expandExponential(str) {
44330 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
44331
44332 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
44333 c = +c;
44334 var l = c < 0;
44335 var i = n.length + c;
44336 x = (l ? n : f).length;
44337 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
44338 var z = (new Array(c + 1)).join("0");
44339 var r = n + f;
44340 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
44341 });
44342 }
44343
44344 s = s.toString();
44345 if (typeof base === "undefined" || +base === 10) {
44346 s = expandExponential(s);
44347 }
44348
44349 var prefixRE;
44350 if (typeof base === "undefined") {
44351 prefixRE = '0[xcb]';
44352 }
44353 else if (base == 16) {
44354 prefixRE = '0x';
44355 }
44356 else if (base == 8) {
44357 prefixRE = '0c';
44358 }
44359 else if (base == 2) {
44360 prefixRE = '0b';
44361 }
44362 else {
44363 prefixRE = '';
44364 }
44365 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
44366 if (parts) {
44367 var sign = parts[1] || "+";
44368 var baseSection = parts[2] || "";
44369 var digits = parts[3] || "";
44370
44371 if (typeof base === "undefined") {
44372 // Guess base
44373 if (baseSection === "0x" || baseSection === "0X") { // Hex
44374 base = 16;
44375 }
44376 else if (baseSection === "0c" || baseSection === "0C") { // Octal
44377 base = 8;
44378 }
44379 else if (baseSection === "0b" || baseSection === "0B") { // Binary
44380 base = 2;
44381 }
44382 else {
44383 base = 10;
44384 }
44385 }
44386 else if (base < 2 || base > 36) {
44387 throw new Error("Illegal radix " + base + ".");
44388 }
44389
44390 base = +base;
44391
44392 // Check for digits outside the range
44393 if (!(BigInteger.radixRegex[base].test(digits))) {
44394 throw new Error("Bad digit for radix " + base);
44395 }
44396
44397 // Strip leading zeros, and convert to array
44398 digits = digits.replace(/^0+/, "").split("");
44399 if (digits.length === 0) {
44400 return ZERO;
44401 }
44402
44403 // Get the sign (we know it's not zero)
44404 sign = (sign === "-") ? -1 : 1;
44405
44406 // Optimize 10
44407 if (base == 10) {
44408 var d = [];
44409 while (digits.length >= BigInteger_base_log10) {
44410 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
44411 }
44412 d.push(parseInt(digits.join(''), 10));
44413 return new BigInteger(d, sign, CONSTRUCT);
44414 }
44415
44416 // Do the conversion
44417 var d = ZERO;
44418 base = BigInteger.small[base];
44419 var small = BigInteger.small;
44420 for (var i = 0; i < digits.length; i++) {
44421 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
44422 }
44423 return new BigInteger(d._d, sign, CONSTRUCT);
44424 }
44425 else {
44426 throw new Error("Invalid BigInteger format: " + s);
44427 }
44428};
44429
44430/*
44431 Function: add
44432 Add two <BigIntegers>.
44433
44434 Parameters:
44435
44436 n - The number to add to *this*. Will be converted to a <BigInteger>.
44437
44438 Returns:
44439
44440 The numbers added together.
44441
44442 See Also:
44443
44444 <subtract>, <multiply>, <quotient>, <next>
44445*/
44446BigInteger.prototype.add = function(n) {
44447 if (this._s === 0) {
44448 return BigInteger(n);
44449 }
44450
44451 n = BigInteger(n);
44452 if (n._s === 0) {
44453 return this;
44454 }
44455 if (this._s !== n._s) {
44456 n = n.negate();
44457 return this.subtract(n);
44458 }
44459
44460 var a = this._d;
44461 var b = n._d;
44462 var al = a.length;
44463 var bl = b.length;
44464 var sum = new Array(Math.max(al, bl) + 1);
44465 var size = Math.min(al, bl);
44466 var carry = 0;
44467 var digit;
44468
44469 for (var i = 0; i < size; i++) {
44470 digit = a[i] + b[i] + carry;
44471 sum[i] = digit % BigInteger_base;
44472 carry = (digit / BigInteger_base) | 0;
44473 }
44474 if (bl > al) {
44475 a = b;
44476 al = bl;
44477 }
44478 for (i = size; carry && i < al; i++) {
44479 digit = a[i] + carry;
44480 sum[i] = digit % BigInteger_base;
44481 carry = (digit / BigInteger_base) | 0;
44482 }
44483 if (carry) {
44484 sum[i] = carry;
44485 }
44486
44487 for ( ; i < al; i++) {
44488 sum[i] = a[i];
44489 }
44490
44491 return new BigInteger(sum, this._s, CONSTRUCT);
44492};
44493
44494/*
44495 Function: negate
44496 Get the additive inverse of a <BigInteger>.
44497
44498 Returns:
44499
44500 A <BigInteger> with the same magnatude, but with the opposite sign.
44501
44502 See Also:
44503
44504 <abs>
44505*/
44506BigInteger.prototype.negate = function() {
44507 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
44508};
44509
44510/*
44511 Function: abs
44512 Get the absolute value of a <BigInteger>.
44513
44514 Returns:
44515
44516 A <BigInteger> with the same magnatude, but always positive (or zero).
44517
44518 See Also:
44519
44520 <negate>
44521*/
44522BigInteger.prototype.abs = function() {
44523 return (this._s < 0) ? this.negate() : this;
44524};
44525
44526/*
44527 Function: subtract
44528 Subtract two <BigIntegers>.
44529
44530 Parameters:
44531
44532 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
44533
44534 Returns:
44535
44536 The *n* subtracted from *this*.
44537
44538 See Also:
44539
44540 <add>, <multiply>, <quotient>, <prev>
44541*/
44542BigInteger.prototype.subtract = function(n) {
44543 if (this._s === 0) {
44544 return BigInteger(n).negate();
44545 }
44546
44547 n = BigInteger(n);
44548 if (n._s === 0) {
44549 return this;
44550 }
44551 if (this._s !== n._s) {
44552 n = n.negate();
44553 return this.add(n);
44554 }
44555
44556 var m = this;
44557 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
44558 if (this._s < 0) {
44559 m = new BigInteger(n._d, 1, CONSTRUCT);
44560 n = new BigInteger(this._d, 1, CONSTRUCT);
44561 }
44562
44563 // Both are positive => a - b
44564 var sign = m.compareAbs(n);
44565 if (sign === 0) {
44566 return ZERO;
44567 }
44568 else if (sign < 0) {
44569 // swap m and n
44570 var t = n;
44571 n = m;
44572 m = t;
44573 }
44574
44575 // a > b
44576 var a = m._d;
44577 var b = n._d;
44578 var al = a.length;
44579 var bl = b.length;
44580 var diff = new Array(al); // al >= bl since a > b
44581 var borrow = 0;
44582 var i;
44583 var digit;
44584
44585 for (i = 0; i < bl; i++) {
44586 digit = a[i] - borrow - b[i];
44587 if (digit < 0) {
44588 digit += BigInteger_base;
44589 borrow = 1;
44590 }
44591 else {
44592 borrow = 0;
44593 }
44594 diff[i] = digit;
44595 }
44596 for (i = bl; i < al; i++) {
44597 digit = a[i] - borrow;
44598 if (digit < 0) {
44599 digit += BigInteger_base;
44600 }
44601 else {
44602 diff[i++] = digit;
44603 break;
44604 }
44605 diff[i] = digit;
44606 }
44607 for ( ; i < al; i++) {
44608 diff[i] = a[i];
44609 }
44610
44611 return new BigInteger(diff, sign, CONSTRUCT);
44612};
44613
44614(function() {
44615 function addOne(n, sign) {
44616 var a = n._d;
44617 var sum = a.slice();
44618 var carry = true;
44619 var i = 0;
44620
44621 while (true) {
44622 var digit = (a[i] || 0) + 1;
44623 sum[i] = digit % BigInteger_base;
44624 if (digit <= BigInteger_base - 1) {
44625 break;
44626 }
44627 ++i;
44628 }
44629
44630 return new BigInteger(sum, sign, CONSTRUCT);
44631 }
44632
44633 function subtractOne(n, sign) {
44634 var a = n._d;
44635 var sum = a.slice();
44636 var borrow = true;
44637 var i = 0;
44638
44639 while (true) {
44640 var digit = (a[i] || 0) - 1;
44641 if (digit < 0) {
44642 sum[i] = digit + BigInteger_base;
44643 }
44644 else {
44645 sum[i] = digit;
44646 break;
44647 }
44648 ++i;
44649 }
44650
44651 return new BigInteger(sum, sign, CONSTRUCT);
44652 }
44653
44654 /*
44655 Function: next
44656 Get the next <BigInteger> (add one).
44657
44658 Returns:
44659
44660 *this* + 1.
44661
44662 See Also:
44663
44664 <add>, <prev>
44665 */
44666 BigInteger.prototype.next = function() {
44667 switch (this._s) {
44668 case 0:
44669 return ONE;
44670 case -1:
44671 return subtractOne(this, -1);
44672 // case 1:
44673 default:
44674 return addOne(this, 1);
44675 }
44676 };
44677
44678 /*
44679 Function: prev
44680 Get the previous <BigInteger> (subtract one).
44681
44682 Returns:
44683
44684 *this* - 1.
44685
44686 See Also:
44687
44688 <next>, <subtract>
44689 */
44690 BigInteger.prototype.prev = function() {
44691 switch (this._s) {
44692 case 0:
44693 return M_ONE;
44694 case -1:
44695 return addOne(this, -1);
44696 // case 1:
44697 default:
44698 return subtractOne(this, 1);
44699 }
44700 };
44701})();
44702
44703/*
44704 Function: compareAbs
44705 Compare the absolute value of two <BigIntegers>.
44706
44707 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
44708
44709 Parameters:
44710
44711 n - The number to compare to *this*. Will be converted to a <BigInteger>.
44712
44713 Returns:
44714
44715 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
44716
44717 See Also:
44718
44719 <compare>, <abs>
44720*/
44721BigInteger.prototype.compareAbs = function(n) {
44722 if (this === n) {
44723 return 0;
44724 }
44725
44726 if (!(n instanceof BigInteger)) {
44727 if (!isFinite(n)) {
44728 return(isNaN(n) ? n : -1);
44729 }
44730 n = BigInteger(n);
44731 }
44732
44733 if (this._s === 0) {
44734 return (n._s !== 0) ? -1 : 0;
44735 }
44736 if (n._s === 0) {
44737 return 1;
44738 }
44739
44740 var l = this._d.length;
44741 var nl = n._d.length;
44742 if (l < nl) {
44743 return -1;
44744 }
44745 else if (l > nl) {
44746 return 1;
44747 }
44748
44749 var a = this._d;
44750 var b = n._d;
44751 for (var i = l-1; i >= 0; i--) {
44752 if (a[i] !== b[i]) {
44753 return a[i] < b[i] ? -1 : 1;
44754 }
44755 }
44756
44757 return 0;
44758};
44759
44760/*
44761 Function: compare
44762 Compare two <BigIntegers>.
44763
44764 Parameters:
44765
44766 n - The number to compare to *this*. Will be converted to a <BigInteger>.
44767
44768 Returns:
44769
44770 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
44771
44772 See Also:
44773
44774 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
44775*/
44776BigInteger.prototype.compare = function(n) {
44777 if (this === n) {
44778 return 0;
44779 }
44780
44781 n = BigInteger(n);
44782
44783 if (this._s === 0) {
44784 return -n._s;
44785 }
44786
44787 if (this._s === n._s) { // both positive or both negative
44788 var cmp = this.compareAbs(n);
44789 return cmp * this._s;
44790 }
44791 else {
44792 return this._s;
44793 }
44794};
44795
44796/*
44797 Function: isUnit
44798 Return true iff *this* is either 1 or -1.
44799
44800 Returns:
44801
44802 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
44803
44804 See Also:
44805
44806 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
44807 <BigInteger.ONE>, <BigInteger.M_ONE>
44808*/
44809BigInteger.prototype.isUnit = function() {
44810 return this === ONE ||
44811 this === M_ONE ||
44812 (this._d.length === 1 && this._d[0] === 1);
44813};
44814
44815/*
44816 Function: multiply
44817 Multiply two <BigIntegers>.
44818
44819 Parameters:
44820
44821 n - The number to multiply *this* by. Will be converted to a
44822 <BigInteger>.
44823
44824 Returns:
44825
44826 The numbers multiplied together.
44827
44828 See Also:
44829
44830 <add>, <subtract>, <quotient>, <square>
44831*/
44832BigInteger.prototype.multiply = function(n) {
44833 // TODO: Consider adding Karatsuba multiplication for large numbers
44834 if (this._s === 0) {
44835 return ZERO;
44836 }
44837
44838 n = BigInteger(n);
44839 if (n._s === 0) {
44840 return ZERO;
44841 }
44842 if (this.isUnit()) {
44843 if (this._s < 0) {
44844 return n.negate();
44845 }
44846 return n;
44847 }
44848 if (n.isUnit()) {
44849 if (n._s < 0) {
44850 return this.negate();
44851 }
44852 return this;
44853 }
44854 if (this === n) {
44855 return this.square();
44856 }
44857
44858 var r = (this._d.length >= n._d.length);
44859 var a = (r ? this : n)._d; // a will be longer than b
44860 var b = (r ? n : this)._d;
44861 var al = a.length;
44862 var bl = b.length;
44863
44864 var pl = al + bl;
44865 var partial = new Array(pl);
44866 var i;
44867 for (i = 0; i < pl; i++) {
44868 partial[i] = 0;
44869 }
44870
44871 for (i = 0; i < bl; i++) {
44872 var carry = 0;
44873 var bi = b[i];
44874 var jlimit = al + i;
44875 var digit;
44876 for (var j = i; j < jlimit; j++) {
44877 digit = partial[j] + bi * a[j - i] + carry;
44878 carry = (digit / BigInteger_base) | 0;
44879 partial[j] = (digit % BigInteger_base) | 0;
44880 }
44881 if (carry) {
44882 digit = partial[j] + carry;
44883 carry = (digit / BigInteger_base) | 0;
44884 partial[j] = digit % BigInteger_base;
44885 }
44886 }
44887 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
44888};
44889
44890// Multiply a BigInteger by a single-digit native number
44891// Assumes that this and n are >= 0
44892// This is not really intended to be used outside the library itself
44893BigInteger.prototype.multiplySingleDigit = function(n) {
44894 if (n === 0 || this._s === 0) {
44895 return ZERO;
44896 }
44897 if (n === 1) {
44898 return this;
44899 }
44900
44901 var digit;
44902 if (this._d.length === 1) {
44903 digit = this._d[0] * n;
44904 if (digit >= BigInteger_base) {
44905 return new BigInteger([(digit % BigInteger_base)|0,
44906 (digit / BigInteger_base)|0], 1, CONSTRUCT);
44907 }
44908 return new BigInteger([digit], 1, CONSTRUCT);
44909 }
44910
44911 if (n === 2) {
44912 return this.add(this);
44913 }
44914 if (this.isUnit()) {
44915 return new BigInteger([n], 1, CONSTRUCT);
44916 }
44917
44918 var a = this._d;
44919 var al = a.length;
44920
44921 var pl = al + 1;
44922 var partial = new Array(pl);
44923 for (var i = 0; i < pl; i++) {
44924 partial[i] = 0;
44925 }
44926
44927 var carry = 0;
44928 for (var j = 0; j < al; j++) {
44929 digit = n * a[j] + carry;
44930 carry = (digit / BigInteger_base) | 0;
44931 partial[j] = (digit % BigInteger_base) | 0;
44932 }
44933 if (carry) {
44934 partial[j] = carry;
44935 }
44936
44937 return new BigInteger(partial, 1, CONSTRUCT);
44938};
44939
44940/*
44941 Function: square
44942 Multiply a <BigInteger> by itself.
44943
44944 This is slightly faster than regular multiplication, since it removes the
44945 duplicated multiplcations.
44946
44947 Returns:
44948
44949 > this.multiply(this)
44950
44951 See Also:
44952 <multiply>
44953*/
44954BigInteger.prototype.square = function() {
44955 // Normally, squaring a 10-digit number would take 100 multiplications.
44956 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
44957 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
44958 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
44959
44960 if (this._s === 0) {
44961 return ZERO;
44962 }
44963 if (this.isUnit()) {
44964 return ONE;
44965 }
44966
44967 var digits = this._d;
44968 var length = digits.length;
44969 var imult1 = new Array(length + length + 1);
44970 var product, carry, k;
44971 var i;
44972
44973 // Calculate diagonal
44974 for (i = 0; i < length; i++) {
44975 k = i * 2;
44976 product = digits[i] * digits[i];
44977 carry = (product / BigInteger_base) | 0;
44978 imult1[k] = product % BigInteger_base;
44979 imult1[k + 1] = carry;
44980 }
44981
44982 // Calculate repeating part
44983 for (i = 0; i < length; i++) {
44984 carry = 0;
44985 k = i * 2 + 1;
44986 for (var j = i + 1; j < length; j++, k++) {
44987 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
44988 carry = (product / BigInteger_base) | 0;
44989 imult1[k] = product % BigInteger_base;
44990 }
44991 k = length + i;
44992 var digit = carry + imult1[k];
44993 carry = (digit / BigInteger_base) | 0;
44994 imult1[k] = digit % BigInteger_base;
44995 imult1[k + 1] += carry;
44996 }
44997
44998 return new BigInteger(imult1, 1, CONSTRUCT);
44999};
45000
45001/*
45002 Function: quotient
45003 Divide two <BigIntegers> and truncate towards zero.
45004
45005 <quotient> throws an exception if *n* is zero.
45006
45007 Parameters:
45008
45009 n - The number to divide *this* by. Will be converted to a <BigInteger>.
45010
45011 Returns:
45012
45013 The *this* / *n*, truncated to an integer.
45014
45015 See Also:
45016
45017 <add>, <subtract>, <multiply>, <divRem>, <remainder>
45018*/
45019BigInteger.prototype.quotient = function(n) {
45020 return this.divRem(n)[0];
45021};
45022
45023/*
45024 Function: divide
45025 Deprecated synonym for <quotient>.
45026*/
45027BigInteger.prototype.divide = BigInteger.prototype.quotient;
45028
45029/*
45030 Function: remainder
45031 Calculate the remainder of two <BigIntegers>.
45032
45033 <remainder> throws an exception if *n* is zero.
45034
45035 Parameters:
45036
45037 n - The remainder after *this* is divided *this* by *n*. Will be
45038 converted to a <BigInteger>.
45039
45040 Returns:
45041
45042 *this* % *n*.
45043
45044 See Also:
45045
45046 <divRem>, <quotient>
45047*/
45048BigInteger.prototype.remainder = function(n) {
45049 return this.divRem(n)[1];
45050};
45051
45052/*
45053 Function: divRem
45054 Calculate the integer quotient and remainder of two <BigIntegers>.
45055
45056 <divRem> throws an exception if *n* is zero.
45057
45058 Parameters:
45059
45060 n - The number to divide *this* by. Will be converted to a <BigInteger>.
45061
45062 Returns:
45063
45064 A two-element array containing the quotient and the remainder.
45065
45066 > a.divRem(b)
45067
45068 is exactly equivalent to
45069
45070 > [a.quotient(b), a.remainder(b)]
45071
45072 except it is faster, because they are calculated at the same time.
45073
45074 See Also:
45075
45076 <quotient>, <remainder>
45077*/
45078BigInteger.prototype.divRem = function(n) {
45079 n = BigInteger(n);
45080 if (n._s === 0) {
45081 throw new Error("Divide by zero");
45082 }
45083 if (this._s === 0) {
45084 return [ZERO, ZERO];
45085 }
45086 if (n._d.length === 1) {
45087 return this.divRemSmall(n._s * n._d[0]);
45088 }
45089
45090 // Test for easy cases -- |n1| <= |n2|
45091 switch (this.compareAbs(n)) {
45092 case 0: // n1 == n2
45093 return [this._s === n._s ? ONE : M_ONE, ZERO];
45094 case -1: // |n1| < |n2|
45095 return [ZERO, this];
45096 }
45097
45098 var sign = this._s * n._s;
45099 var a = n.abs();
45100 var b_digits = this._d;
45101 var b_index = b_digits.length;
45102 var digits = n._d.length;
45103 var quot = [];
45104 var guess;
45105
45106 var part = new BigInteger([], 0, CONSTRUCT);
45107
45108 while (b_index) {
45109 part._d.unshift(b_digits[--b_index]);
45110 part = new BigInteger(part._d, 1, CONSTRUCT);
45111
45112 if (part.compareAbs(n) < 0) {
45113 quot.push(0);
45114 continue;
45115 }
45116 if (part._s === 0) {
45117 guess = 0;
45118 }
45119 else {
45120 var xlen = part._d.length, ylen = a._d.length;
45121 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
45122 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
45123 if (part._d.length > a._d.length) {
45124 // The length of part._d can either match a._d length,
45125 // or exceed it by one.
45126 highx = (highx+1)*BigInteger_base;
45127 }
45128 guess = Math.ceil(highx/highy);
45129 }
45130 do {
45131 var check = a.multiplySingleDigit(guess);
45132 if (check.compareAbs(part) <= 0) {
45133 break;
45134 }
45135 guess--;
45136 } while (guess);
45137
45138 quot.push(guess);
45139 if (!guess) {
45140 continue;
45141 }
45142 var diff = part.subtract(check);
45143 part._d = diff._d.slice();
45144 }
45145
45146 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
45147 new BigInteger(part._d, this._s, CONSTRUCT)];
45148};
45149
45150// Throws an exception if n is outside of (-BigInteger.base, -1] or
45151// [1, BigInteger.base). It's not necessary to call this, since the
45152// other division functions will call it if they are able to.
45153BigInteger.prototype.divRemSmall = function(n) {
45154 var r;
45155 n = +n;
45156 if (n === 0) {
45157 throw new Error("Divide by zero");
45158 }
45159
45160 var n_s = n < 0 ? -1 : 1;
45161 var sign = this._s * n_s;
45162 n = Math.abs(n);
45163
45164 if (n < 1 || n >= BigInteger_base) {
45165 throw new Error("Argument out of range");
45166 }
45167
45168 if (this._s === 0) {
45169 return [ZERO, ZERO];
45170 }
45171
45172 if (n === 1 || n === -1) {
45173 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
45174 }
45175
45176 // 2 <= n < BigInteger_base
45177
45178 // divide a single digit by a single digit
45179 if (this._d.length === 1) {
45180 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
45181 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
45182 if (sign < 0) {
45183 q = q.negate();
45184 }
45185 if (this._s < 0) {
45186 r = r.negate();
45187 }
45188 return [q, r];
45189 }
45190
45191 var digits = this._d.slice();
45192 var quot = new Array(digits.length);
45193 var part = 0;
45194 var diff = 0;
45195 var i = 0;
45196 var guess;
45197
45198 while (digits.length) {
45199 part = part * BigInteger_base + digits[digits.length - 1];
45200 if (part < n) {
45201 quot[i++] = 0;
45202 digits.pop();
45203 diff = BigInteger_base * diff + part;
45204 continue;
45205 }
45206 if (part === 0) {
45207 guess = 0;
45208 }
45209 else {
45210 guess = (part / n) | 0;
45211 }
45212
45213 var check = n * guess;
45214 diff = part - check;
45215 quot[i++] = guess;
45216 if (!guess) {
45217 digits.pop();
45218 continue;
45219 }
45220
45221 digits.pop();
45222 part = diff;
45223 }
45224
45225 r = new BigInteger([diff], 1, CONSTRUCT);
45226 if (this._s < 0) {
45227 r = r.negate();
45228 }
45229 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
45230};
45231
45232/*
45233 Function: isEven
45234 Return true iff *this* is divisible by two.
45235
45236 Note that <BigInteger.ZERO> is even.
45237
45238 Returns:
45239
45240 true if *this* is even, false otherwise.
45241
45242 See Also:
45243
45244 <isOdd>
45245*/
45246BigInteger.prototype.isEven = function() {
45247 var digits = this._d;
45248 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
45249};
45250
45251/*
45252 Function: isOdd
45253 Return true iff *this* is not divisible by two.
45254
45255 Returns:
45256
45257 true if *this* is odd, false otherwise.
45258
45259 See Also:
45260
45261 <isEven>
45262*/
45263BigInteger.prototype.isOdd = function() {
45264 return !this.isEven();
45265};
45266
45267/*
45268 Function: sign
45269 Get the sign of a <BigInteger>.
45270
45271 Returns:
45272
45273 * -1 if *this* < 0
45274 * 0 if *this* == 0
45275 * +1 if *this* > 0
45276
45277 See Also:
45278
45279 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
45280*/
45281BigInteger.prototype.sign = function() {
45282 return this._s;
45283};
45284
45285/*
45286 Function: isPositive
45287 Return true iff *this* > 0.
45288
45289 Returns:
45290
45291 true if *this*.compare(<BigInteger.ZERO>) == 1.
45292
45293 See Also:
45294
45295 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
45296*/
45297BigInteger.prototype.isPositive = function() {
45298 return this._s > 0;
45299};
45300
45301/*
45302 Function: isNegative
45303 Return true iff *this* < 0.
45304
45305 Returns:
45306
45307 true if *this*.compare(<BigInteger.ZERO>) == -1.
45308
45309 See Also:
45310
45311 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
45312*/
45313BigInteger.prototype.isNegative = function() {
45314 return this._s < 0;
45315};
45316
45317/*
45318 Function: isZero
45319 Return true iff *this* == 0.
45320
45321 Returns:
45322
45323 true if *this*.compare(<BigInteger.ZERO>) == 0.
45324
45325 See Also:
45326
45327 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
45328*/
45329BigInteger.prototype.isZero = function() {
45330 return this._s === 0;
45331};
45332
45333/*
45334 Function: exp10
45335 Multiply a <BigInteger> by a power of 10.
45336
45337 This is equivalent to, but faster than
45338
45339 > if (n >= 0) {
45340 > return this.multiply(BigInteger("1e" + n));
45341 > }
45342 > else { // n <= 0
45343 > return this.quotient(BigInteger("1e" + -n));
45344 > }
45345
45346 Parameters:
45347
45348 n - The power of 10 to multiply *this* by. *n* is converted to a
45349 javascipt number and must be no greater than <BigInteger.MAX_EXP>
45350 (0x7FFFFFFF), or an exception will be thrown.
45351
45352 Returns:
45353
45354 *this* * (10 ** *n*), truncated to an integer if necessary.
45355
45356 See Also:
45357
45358 <pow>, <multiply>
45359*/
45360BigInteger.prototype.exp10 = function(n) {
45361 n = +n;
45362 if (n === 0) {
45363 return this;
45364 }
45365 if (Math.abs(n) > Number(MAX_EXP)) {
45366 throw new Error("exponent too large in BigInteger.exp10");
45367 }
45368 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
45369 if (this._s === 0) {
45370 return ZERO;
45371 }
45372 if (n > 0) {
45373 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
45374
45375 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
45376 k._d.unshift(0);
45377 }
45378 if (n == 0)
45379 return k;
45380 k._s = 1;
45381 k = k.multiplySingleDigit(Math.pow(10, n));
45382 return (this._s < 0 ? k.negate() : k);
45383 } else if (-n >= this._d.length*BigInteger_base_log10) {
45384 return ZERO;
45385 } else {
45386 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
45387
45388 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
45389 k._d.shift();
45390 }
45391 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
45392 }
45393};
45394
45395/*
45396 Function: pow
45397 Raise a <BigInteger> to a power.
45398
45399 In this implementation, 0**0 is 1.
45400
45401 Parameters:
45402
45403 n - The exponent to raise *this* by. *n* must be no greater than
45404 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
45405
45406 Returns:
45407
45408 *this* raised to the *nth* power.
45409
45410 See Also:
45411
45412 <modPow>
45413*/
45414BigInteger.prototype.pow = function(n) {
45415 if (this.isUnit()) {
45416 if (this._s > 0) {
45417 return this;
45418 }
45419 else {
45420 return BigInteger(n).isOdd() ? this : this.negate();
45421 }
45422 }
45423
45424 n = BigInteger(n);
45425 if (n._s === 0) {
45426 return ONE;
45427 }
45428 else if (n._s < 0) {
45429 if (this._s === 0) {
45430 throw new Error("Divide by zero");
45431 }
45432 else {
45433 return ZERO;
45434 }
45435 }
45436 if (this._s === 0) {
45437 return ZERO;
45438 }
45439 if (n.isUnit()) {
45440 return this;
45441 }
45442
45443 if (n.compareAbs(MAX_EXP) > 0) {
45444 throw new Error("exponent too large in BigInteger.pow");
45445 }
45446 var x = this;
45447 var aux = ONE;
45448 var two = BigInteger.small[2];
45449
45450 while (n.isPositive()) {
45451 if (n.isOdd()) {
45452 aux = aux.multiply(x);
45453 if (n.isUnit()) {
45454 return aux;
45455 }
45456 }
45457 x = x.square();
45458 n = n.quotient(two);
45459 }
45460
45461 return aux;
45462};
45463
45464/*
45465 Function: modPow
45466 Raise a <BigInteger> to a power (mod m).
45467
45468 Because it is reduced by a modulus, <modPow> is not limited by
45469 <BigInteger.MAX_EXP> like <pow>.
45470
45471 Parameters:
45472
45473 exponent - The exponent to raise *this* by. Must be positive.
45474 modulus - The modulus.
45475
45476 Returns:
45477
45478 *this* ^ *exponent* (mod *modulus*).
45479
45480 See Also:
45481
45482 <pow>, <mod>
45483*/
45484BigInteger.prototype.modPow = function(exponent, modulus) {
45485 var result = ONE;
45486 var base = this;
45487
45488 while (exponent.isPositive()) {
45489 if (exponent.isOdd()) {
45490 result = result.multiply(base).remainder(modulus);
45491 }
45492
45493 exponent = exponent.quotient(BigInteger.small[2]);
45494 if (exponent.isPositive()) {
45495 base = base.square().remainder(modulus);
45496 }
45497 }
45498
45499 return result;
45500};
45501
45502/*
45503 Function: log
45504 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
45505
45506 This is equivalent to
45507
45508 > Math.log(this.toJSValue())
45509
45510 but handles values outside of the native number range.
45511
45512 Returns:
45513
45514 log( *this* )
45515
45516 See Also:
45517
45518 <toJSValue>
45519*/
45520BigInteger.prototype.log = function() {
45521 switch (this._s) {
45522 case 0: return -Infinity;
45523 case -1: return NaN;
45524 default: // Fall through.
45525 }
45526
45527 var l = this._d.length;
45528
45529 if (l*BigInteger_base_log10 < 30) {
45530 return Math.log(this.valueOf());
45531 }
45532
45533 var N = Math.ceil(30/BigInteger_base_log10);
45534 var firstNdigits = this._d.slice(l - N);
45535 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
45536};
45537
45538/*
45539 Function: valueOf
45540 Convert a <BigInteger> to a native JavaScript integer.
45541
45542 This is called automatically by JavaScipt to convert a <BigInteger> to a
45543 native value.
45544
45545 Returns:
45546
45547 > parseInt(this.toString(), 10)
45548
45549 See Also:
45550
45551 <toString>, <toJSValue>
45552*/
45553BigInteger.prototype.valueOf = function() {
45554 return parseInt(this.toString(), 10);
45555};
45556
45557/*
45558 Function: toJSValue
45559 Convert a <BigInteger> to a native JavaScript integer.
45560
45561 This is the same as valueOf, but more explicitly named.
45562
45563 Returns:
45564
45565 > parseInt(this.toString(), 10)
45566
45567 See Also:
45568
45569 <toString>, <valueOf>
45570*/
45571BigInteger.prototype.toJSValue = function() {
45572 return parseInt(this.toString(), 10);
45573};
45574
45575var MAX_EXP = BigInteger(0x7FFFFFFF);
45576// Constant: MAX_EXP
45577// The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
45578BigInteger.MAX_EXP = MAX_EXP;
45579
45580(function() {
45581 function makeUnary(fn) {
45582 return function(a) {
45583 return fn.call(BigInteger(a));
45584 };
45585 }
45586
45587 function makeBinary(fn) {
45588 return function(a, b) {
45589 return fn.call(BigInteger(a), BigInteger(b));
45590 };
45591 }
45592
45593 function makeTrinary(fn) {
45594 return function(a, b, c) {
45595 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
45596 };
45597 }
45598
45599 (function() {
45600 var i, fn;
45601 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
45602 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
45603 var trinary = ["modPow"];
45604
45605 for (i = 0; i < unary.length; i++) {
45606 fn = unary[i];
45607 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
45608 }
45609
45610 for (i = 0; i < binary.length; i++) {
45611 fn = binary[i];
45612 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
45613 }
45614
45615 for (i = 0; i < trinary.length; i++) {
45616 fn = trinary[i];
45617 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
45618 }
45619
45620 BigInteger.exp10 = function(x, n) {
45621 return BigInteger(x).exp10(n);
45622 };
45623 })();
45624})();
45625
45626exports.BigInteger = BigInteger;
45627})(typeof exports !== 'undefined' ? exports : this);
95f04905
IC
45628</script>
45629 <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.zxcvbn = 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){
45630var adjacency_graphs;adjacency_graphs={qwerty:{"!":["`~",null,null,"2@","qQ",null],'"':[";:","[{","]}",null,null,"/?"],"#":["2@",null,null,"4$","eE","wW"],$:["3#",null,null,"5%","rR","eE"],"%":["4$",null,null,"6^","tT","rR"],"&":["6^",null,null,"8*","uU","yY"],"'":[";:","[{","]}",null,null,"/?"],"(":["8*",null,null,"0)","oO","iI"],")":["9(",null,null,"-_","pP","oO"],"*":["7&",null,null,"9(","iI","uU"],"+":["-_",null,null,null,"]}","[{"],",":["mM","kK","lL",".>",null,null],"-":["0)",null,null,"=+","[{","pP"],".":[",<","lL",";:","/?",null,null],"/":[".>",";:","'\"",null,null,null],0:["9(",null,null,"-_","pP","oO"],1:["`~",null,null,"2@","qQ",null],2:["1!",null,null,"3#","wW","qQ"],3:["2@",null,null,"4$","eE","wW"],4:["3#",null,null,"5%","rR","eE"],5:["4$",null,null,"6^","tT","rR"],6:["5%",null,null,"7&","yY","tT"],7:["6^",null,null,"8*","uU","yY"],8:["7&",null,null,"9(","iI","uU"],9:["8*",null,null,"0)","oO","iI"],":":["lL","pP","[{","'\"","/?",".>"],";":["lL","pP","[{","'\"","/?",".>"],"<":["mM","kK","lL",".>",null,null],"=":["-_",null,null,null,"]}","[{"],">":[",<","lL",";:","/?",null,null],"?":[".>",";:","'\"",null,null,null],"@":["1!",null,null,"3#","wW","qQ"],A:[null,"qQ","wW","sS","zZ",null],B:["vV","gG","hH","nN",null,null],C:["xX","dD","fF","vV",null,null],D:["sS","eE","rR","fF","cC","xX"],E:["wW","3#","4$","rR","dD","sS"],F:["dD","rR","tT","gG","vV","cC"],G:["fF","tT","yY","hH","bB","vV"],H:["gG","yY","uU","jJ","nN","bB"],I:["uU","8*","9(","oO","kK","jJ"],J:["hH","uU","iI","kK","mM","nN"],K:["jJ","iI","oO","lL",",<","mM"],L:["kK","oO","pP",";:",".>",",<"],M:["nN","jJ","kK",",<",null,null],N:["bB","hH","jJ","mM",null,null],O:["iI","9(","0)","pP","lL","kK"],P:["oO","0)","-_","[{",";:","lL"],Q:[null,"1!","2@","wW","aA",null],R:["eE","4$","5%","tT","fF","dD"],S:["aA","wW","eE","dD","xX","zZ"],T:["rR","5%","6^","yY","gG","fF"],U:["yY","7&","8*","iI","jJ","hH"],V:["cC","fF","gG","bB",null,null],W:["qQ","2@","3#","eE","sS","aA"],X:["zZ","sS","dD","cC",null,null],Y:["tT","6^","7&","uU","hH","gG"],Z:[null,"aA","sS","xX",null,null],"[":["pP","-_","=+","]}","'\"",";:"],"\\":["]}",null,null,null,null,null],"]":["[{","=+",null,"\\|",null,"'\""],"^":["5%",null,null,"7&","yY","tT"],_:["0)",null,null,"=+","[{","pP"],"`":[null,null,null,"1!",null,null],a:[null,"qQ","wW","sS","zZ",null],b:["vV","gG","hH","nN",null,null],c:["xX","dD","fF","vV",null,null],d:["sS","eE","rR","fF","cC","xX"],e:["wW","3#","4$","rR","dD","sS"],f:["dD","rR","tT","gG","vV","cC"],g:["fF","tT","yY","hH","bB","vV"],h:["gG","yY","uU","jJ","nN","bB"],i:["uU","8*","9(","oO","kK","jJ"],j:["hH","uU","iI","kK","mM","nN"],k:["jJ","iI","oO","lL",",<","mM"],l:["kK","oO","pP",";:",".>",",<"],m:["nN","jJ","kK",",<",null,null],n:["bB","hH","jJ","mM",null,null],o:["iI","9(","0)","pP","lL","kK"],p:["oO","0)","-_","[{",";:","lL"],q:[null,"1!","2@","wW","aA",null],r:["eE","4$","5%","tT","fF","dD"],s:["aA","wW","eE","dD","xX","zZ"],t:["rR","5%","6^","yY","gG","fF"],u:["yY","7&","8*","iI","jJ","hH"],v:["cC","fF","gG","bB",null,null],w:["qQ","2@","3#","eE","sS","aA"],x:["zZ","sS","dD","cC",null,null],y:["tT","6^","7&","uU","hH","gG"],z:[null,"aA","sS","xX",null,null],"{":["pP","-_","=+","]}","'\"",";:"],"|":["]}",null,null,null,null,null],"}":["[{","=+",null,"\\|",null,"'\""],"~":[null,null,null,"1!",null,null]},dvorak:{"!":["`~",null,null,"2@","'\"",null],'"':[null,"1!","2@",",<","aA",null],"#":["2@",null,null,"4$",".>",",<"],$:["3#",null,null,"5%","pP",".>"],"%":["4$",null,null,"6^","yY","pP"],"&":["6^",null,null,"8*","gG","fF"],"'":[null,"1!","2@",",<","aA",null],"(":["8*",null,null,"0)","rR","cC"],")":["9(",null,null,"[{","lL","rR"],"*":["7&",null,null,"9(","cC","gG"],"+":["/?","]}",null,"\\|",null,"-_"],",":["'\"","2@","3#",".>","oO","aA"],"-":["sS","/?","=+",null,null,"zZ"],".":[",<","3#","4$","pP","eE","oO"],"/":["lL","[{","]}","=+","-_","sS"],0:["9(",null,null,"[{","lL","rR"],1:["`~",null,null,"2@","'\"",null],2:["1!",null,null,"3#",",<","'\""],3:["2@",null,null,"4$",".>",",<"],4:["3#",null,null,"5%","pP",".>"],5:["4$",null,null,"6^","yY","pP"],6:["5%",null,null,"7&","fF","yY"],7:["6^",null,null,"8*","gG","fF"],8:["7&",null,null,"9(","cC","gG"],9:["8*",null,null,"0)","rR","cC"],":":[null,"aA","oO","qQ",null,null],";":[null,"aA","oO","qQ",null,null],"<":["'\"","2@","3#",".>","oO","aA"],"=":["/?","]}",null,"\\|",null,"-_"],">":[",<","3#","4$","pP","eE","oO"],"?":["lL","[{","]}","=+","-_","sS"],"@":["1!",null,null,"3#",",<","'\""],A:[null,"'\"",",<","oO",";:",null],B:["xX","dD","hH","mM",null,null],C:["gG","8*","9(","rR","tT","hH"],D:["iI","fF","gG","hH","bB","xX"],E:["oO",".>","pP","uU","jJ","qQ"],F:["yY","6^","7&","gG","dD","iI"],G:["fF","7&","8*","cC","hH","dD"],H:["dD","gG","cC","tT","mM","bB"],I:["uU","yY","fF","dD","xX","kK"],J:["qQ","eE","uU","kK",null,null],K:["jJ","uU","iI","xX",null,null],L:["rR","0)","[{","/?","sS","nN"],M:["bB","hH","tT","wW",null,null],N:["tT","rR","lL","sS","vV","wW"],O:["aA",",<",".>","eE","qQ",";:"],P:[".>","4$","5%","yY","uU","eE"],Q:[";:","oO","eE","jJ",null,null],R:["cC","9(","0)","lL","nN","tT"],S:["nN","lL","/?","-_","zZ","vV"],T:["hH","cC","rR","nN","wW","mM"],U:["eE","pP","yY","iI","kK","jJ"],V:["wW","nN","sS","zZ",null,null],W:["mM","tT","nN","vV",null,null],X:["kK","iI","dD","bB",null,null],Y:["pP","5%","6^","fF","iI","uU"],Z:["vV","sS","-_",null,null,null],"[":["0)",null,null,"]}","/?","lL"],"\\":["=+",null,null,null,null,null],"]":["[{",null,null,null,"=+","/?"],"^":["5%",null,null,"7&","fF","yY"],_:["sS","/?","=+",null,null,"zZ"],"`":[null,null,null,"1!",null,null],a:[null,"'\"",",<","oO",";:",null],b:["xX","dD","hH","mM",null,null],c:["gG","8*","9(","rR","tT","hH"],d:["iI","fF","gG","hH","bB","xX"],e:["oO",".>","pP","uU","jJ","qQ"],f:["yY","6^","7&","gG","dD","iI"],g:["fF","7&","8*","cC","hH","dD"],h:["dD","gG","cC","tT","mM","bB"],i:["uU","yY","fF","dD","xX","kK"],j:["qQ","eE","uU","kK",null,null],k:["jJ","uU","iI","xX",null,null],l:["rR","0)","[{","/?","sS","nN"],m:["bB","hH","tT","wW",null,null],n:["tT","rR","lL","sS","vV","wW"],o:["aA",",<",".>","eE","qQ",";:"],p:[".>","4$","5%","yY","uU","eE"],q:[";:","oO","eE","jJ",null,null],r:["cC","9(","0)","lL","nN","tT"],s:["nN","lL","/?","-_","zZ","vV"],t:["hH","cC","rR","nN","wW","mM"],u:["eE","pP","yY","iI","kK","jJ"],v:["wW","nN","sS","zZ",null,null],w:["mM","tT","nN","vV",null,null],x:["kK","iI","dD","bB",null,null],y:["pP","5%","6^","fF","iI","uU"],z:["vV","sS","-_",null,null,null],"{":["0)",null,null,"]}","/?","lL"],"|":["=+",null,null,null,null,null],"}":["[{",null,null,null,"=+","/?"],"~":[null,null,null,"1!",null,null]},keypad:{"*":["/",null,null,null,"-","+","9","8"],"+":["9","*","-",null,null,null,null,"6"],"-":["*",null,null,null,null,null,"+","9"],".":["0","2","3",null,null,null,null,null],"/":[null,null,null,null,"*","9","8","7"],0:[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6",null,null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:["4","7","8","9","6","3","2","1"],6:["5","8","9","+",null,null,"3","2"],7:[null,null,null,"/","8","5","4",null],8:["7",null,"/","*","9","6","5","4"],9:["8","/","*","-","+",null,"6","5"]},mac_keypad:{"*":["/",null,null,null,null,null,"-","9"],"+":["6","9","-",null,null,null,null,"3"],"-":["9","/","*",null,null,null,"+","6"],".":["0","2","3",null,null,null,null,null],"/":["=",null,null,null,"*","-","9","8"],0:[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6","+",null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:["4","7","8","9","6","3","2","1"],6:["5","8","9","-","+",null,"3","2"],7:[null,null,null,"=","8","5","4",null],8:["7",null,"=","/","9","6","5","4"],9:["8","=","/","*","-","+","6","5"],"=":[null,null,null,null,"/","9","8","7"]}},module.exports=adjacency_graphs;
45631
45632},{}],2:[function(require,module,exports){
45633var feedback,scoring;scoring=require("./scoring"),feedback={default_feedback:{warning:"",suggestions:["Use a few words, avoid common phrases","No need for symbols, digits, or uppercase letters"]},get_feedback:function(e,s){var a,t,r,n,o,i;if(0===s.length)return this.default_feedback;if(e>2)return{warning:"",suggestions:[]};for(n=s[0],i=s.slice(1),t=0,r=i.length;t<r;t++)o=i[t],o.token.length>n.token.length&&(n=o);return feedback=this.get_match_feedback(n,1===s.length),a="Add another word or two. Uncommon words are better.",null!=feedback?(feedback.suggestions.unshift(a),null==feedback.warning&&(feedback.warning="")):feedback={warning:"",suggestions:[a]},feedback},get_match_feedback:function(e,s){var a,t;switch(e.pattern){case"dictionary":return this.get_dictionary_match_feedback(e,s);case"spatial":return a=e.graph.toUpperCase(),t=1===e.turns?"Straight rows of keys are easy to guess":"Short keyboard patterns are easy to guess",{warning:t,suggestions:["Use a longer keyboard pattern with more turns"]};case"repeat":return t=1===e.base_token.length?'Repeats like "aaa" are easy to guess':'Repeats like "abcabcabc" are only slightly harder to guess than "abc"',{warning:t,suggestions:["Avoid repeated words and characters"]};case"sequence":return{warning:"Sequences like abc or 6543 are easy to guess",suggestions:["Avoid sequences"]};case"regex":if("recent_year"===e.regex_name)return{warning:"Recent years are easy to guess",suggestions:["Avoid recent years","Avoid years that are associated with you"]};break;case"date":return{warning:"Dates are often easy to guess",suggestions:["Avoid dates and years that are associated with you"]}}},get_dictionary_match_feedback:function(e,s){var a,t,r,n,o;return n="passwords"===e.dictionary_name?!s||e.l33t||e.reversed?e.guesses_log10<=4?"This is similar to a commonly used password":void 0:e.rank<=10?"This is a top-10 common password":e.rank<=100?"This is a top-100 common password":"This is a very common password":"english"===e.dictionary_name?s?"A word by itself is easy to guess":void 0:"surnames"===(a=e.dictionary_name)||"male_names"===a||"female_names"===a?s?"Names and surnames by themselves are easy to guess":"Common names and surnames are easy to guess":"",r=[],o=e.token,o.match(scoring.START_UPPER)?r.push("Capitalization doesn't help very much"):o.match(scoring.ALL_UPPER)&&o.toLowerCase()!==o&&r.push("All-uppercase is almost as easy to guess as all-lowercase"),e.reversed&&e.token.length>=4&&r.push("Reversed words aren't much harder to guess"),e.l33t&&r.push("Predictable substitutions like '@' instead of 'a' don't help very much"),t={warning:n,suggestions:r}}},module.exports=feedback;
45634
45635},{"./scoring":6}],3:[function(require,module,exports){
45636var frequency_lists;frequency_lists={passwords:"123456,password,12345678,qwerty,123456789,12345,1234,111111,1234567,dragon,123123,baseball,abc123,football,monkey,letmein,shadow,master,696969,mustang,666666,qwertyuiop,123321,1234567890,pussy,superman,654321,1qaz2wsx,7777777,fuckyou,qazwsx,jordan,123qwe,000000,killer,trustno1,hunter,harley,zxcvbnm,asdfgh,buster,batman,soccer,tigger,charlie,sunshine,iloveyou,fuckme,ranger,hockey,computer,starwars,asshole,pepper,klaster,112233,zxcvbn,freedom,princess,maggie,pass,ginger,11111111,131313,fuck,love,cheese,159753,summer,chelsea,dallas,biteme,matrix,yankees,6969,corvette,austin,access,thunder,merlin,secret,diamond,hello,hammer,fucker,1234qwer,silver,gfhjkm,internet,samantha,golfer,scooter,test,orange,cookie,q1w2e3r4t5,maverick,sparky,phoenix,mickey,bigdog,snoopy,guitar,whatever,chicken,camaro,mercedes,peanut,ferrari,falcon,cowboy,welcome,sexy,samsung,steelers,smokey,dakota,arsenal,boomer,eagles,tigers,marina,nascar,booboo,gateway,yellow,porsche,monster,spider,diablo,hannah,bulldog,junior,london,purple,compaq,lakers,iceman,qwer1234,hardcore,cowboys,money,banana,ncc1701,boston,tennis,q1w2e3r4,coffee,scooby,123654,nikita,yamaha,mother,barney,brandy,chester,fuckoff,oliver,player,forever,rangers,midnight,chicago,bigdaddy,redsox,angel,badboy,fender,jasper,slayer,rabbit,natasha,marine,bigdick,wizard,marlboro,raiders,prince,casper,fishing,flower,jasmine,iwantu,panties,adidas,winter,winner,gandalf,password1,enter,ghbdtn,1q2w3e4r,golden,cocacola,jordan23,winston,madison,angels,panther,blowme,sexsex,bigtits,spanky,bitch,sophie,asdfasdf,horny,thx1138,toyota,tiger,dick,canada,12344321,blowjob,8675309,muffin,liverpoo,apples,qwerty123,passw0rd,abcd1234,pokemon,123abc,slipknot,qazxsw,123456a,scorpion,qwaszx,butter,startrek,rainbow,asdfghjkl,razz,newyork,redskins,gemini,cameron,qazwsxedc,florida,liverpool,turtle,sierra,viking,booger,butthead,doctor,rocket,159357,dolphins,captain,bandit,jaguar,packers,pookie,peaches,789456,asdf,dolphin,helpme,blue,theman,maxwell,qwertyui,shithead,lovers,maddog,giants,nirvana,metallic,hotdog,rosebud,mountain,warrior,stupid,elephant,suckit,success,bond007,jackass,alexis,porn,lucky,scorpio,samson,q1w2e3,azerty,rush2112,driver,freddy,1q2w3e4r5t,sydney,gators,dexter,red123,123456q,12345a,bubba,creative,voodoo,golf,trouble,america,nissan,gunner,garfield,bullshit,asdfghjk,5150,fucking,apollo,1qazxsw2,2112,eminem,legend,airborne,bear,beavis,apple,brooklyn,godzilla,skippy,4815162342,buddy,qwert,kitten,magic,shelby,beaver,phantom,asdasd,xavier,braves,darkness,blink182,copper,platinum,qweqwe,tomcat,01012011,girls,bigboy,102030,animal,police,online,11223344,voyager,lifehack,12qwaszx,fish,sniper,315475,trinity,blazer,heaven,lover,snowball,playboy,loveme,bubbles,hooters,cricket,willow,donkey,topgun,nintendo,saturn,destiny,pakistan,pumpkin,digital,sergey,redwings,explorer,tits,private,runner,therock,guinness,lasvegas,beatles,789456123,fire,cassie,christin,qwerty1,celtic,asdf1234,andrey,broncos,007007,babygirl,eclipse,fluffy,cartman,michigan,carolina,testing,alexande,birdie,pantera,cherry,vampire,mexico,dickhead,buffalo,genius,montana,beer,minecraft,maximus,flyers,lovely,stalker,metallica,doggie,snickers,speedy,bronco,lol123,paradise,yankee,horses,magnum,dreams,147258369,lacrosse,ou812,goober,enigma,qwertyu,scotty,pimpin,bollocks,surfer,cock,poohbear,genesis,star,asd123,qweasdzxc,racing,hello1,hawaii,eagle1,viper,poopoo,einstein,boobies,12345q,bitches,drowssap,simple,badger,alaska,action,jester,drummer,111222,spitfire,forest,maryjane,champion,diesel,svetlana,friday,hotrod,147258,chevy,lucky1,westside,security,google,badass,tester,shorty,thumper,hitman,mozart,zaq12wsx,boobs,reddog,010203,lizard,a123456,123456789a,ruslan,eagle,1232323q,scarface,qwerty12,147852,a12345,buddha,porno,420420,spirit,money1,stargate,qwe123,naruto,mercury,liberty,12345qwert,semperfi,suzuki,popcorn,spooky,marley,scotland,kitty,cherokee,vikings,simpsons,rascal,qweasd,hummer,loveyou,michael1,patches,russia,jupiter,penguin,passion,cumshot,vfhbyf,honda,vladimir,sandman,passport,raider,bastard,123789,infinity,assman,bulldogs,fantasy,sucker,1234554321,horney,domino,budlight,disney,ironman,usuckballz1,softball,brutus,redrum,bigred,mnbvcxz,fktrcfylh,karina,marines,digger,kawasaki,cougar,fireman,oksana,monday,cunt,justice,nigger,super,wildcats,tinker,logitech,dancer,swordfis,avalon,everton,alexandr,motorola,patriots,hentai,madonna,pussy1,ducati,colorado,connor,juventus,galore,smooth,freeuser,warcraft,boogie,titanic,wolverin,elizabet,arizona,valentin,saints,asdfg,accord,test123,password123,christ,yfnfif,stinky,slut,spiderma,naughty,chopper,hello123,ncc1701d,extreme,skyline,poop,zombie,pearljam,123qweasd,froggy,awesome,vision,pirate,fylhtq,dreamer,bullet,predator,empire,123123a,kirill,charlie1,panthers,penis,skipper,nemesis,rasdzv3,peekaboo,rolltide,cardinal,psycho,danger,mookie,happy1,wanker,chevelle,manutd,goblue,9379992,hobbes,vegeta,fyfcnfcbz,852456,picard,159951,windows,loverboy,victory,vfrcbv,bambam,serega,123654789,turkey,tweety,galina,hiphop,rooster,changeme,berlin,taurus,suckme,polina,electric,avatar,134679,maksim,raptor,alpha1,hendrix,newport,bigcock,brazil,spring,a1b2c3,madmax,alpha,britney,sublime,darkside,bigman,wolfpack,classic,hercules,ronaldo,letmein1,1q2w3e,741852963,spiderman,blizzard,123456789q,cheyenne,cjkysirj,tiger1,wombat,bubba1,pandora,zxc123,holiday,wildcat,devils,horse,alabama,147852369,caesar,12312,buddy1,bondage,pussycat,pickle,shaggy,catch22,leather,chronic,a1b2c3d4,admin,qqq111,qaz123,airplane,kodiak,freepass,billybob,sunset,katana,phpbb,chocolat,snowman,angel1,stingray,firebird,wolves,zeppelin,detroit,pontiac,gundam,panzer,vagina,outlaw,redhead,tarheels,greenday,nastya,01011980,hardon,engineer,dragon1,hellfire,serenity,cobra,fireball,lickme,darkstar,1029384756,01011,mustang1,flash,124578,strike,beauty,pavilion,01012000,bobafett,dbrnjhbz,bigmac,bowling,chris1,ytrewq,natali,pyramid,rulez,welcome1,dodgers,apache,swimming,whynot,teens,trooper,fuckit,defender,precious,135790,packard,weasel,popeye,lucifer,cancer,icecream,142536,raven,swordfish,presario,viktor,rockstar,blonde,james1,wutang,spike,pimp,atlanta,airforce,thailand,casino,lennon,mouse,741852,hacker,bluebird,hawkeye,456123,theone,catfish,sailor,goldfish,nfnmzyf,tattoo,pervert,barbie,maxima,nipples,machine,trucks,wrangler,rocks,tornado,lights,cadillac,bubble,pegasus,madman,longhorn,browns,target,666999,eatme,qazwsx123,microsoft,dilbert,christia,baller,lesbian,shooter,xfiles,seattle,qazqaz,cthutq,amateur,prelude,corona,freaky,malibu,123qweasdzxc,assassin,246810,atlantis,integra,pussies,iloveu,lonewolf,dragons,monkey1,unicorn,software,bobcat,stealth,peewee,openup,753951,srinivas,zaqwsx,valentina,shotgun,trigger,veronika,bruins,coyote,babydoll,joker,dollar,lestat,rocky1,hottie,random,butterfly,wordpass,smiley,sweety,snake,chipper,woody,samurai,devildog,gizmo,maddie,soso123aljg,mistress,freedom1,flipper,express,hjvfirf,moose,cessna,piglet,polaris,teacher,montreal,cookies,wolfgang,scully,fatboy,wicked,balls,tickle,bunny,dfvgbh,foobar,transam,pepsi,fetish,oicu812,basketba,toshiba,hotstuff,sunday,booty,gambit,31415926,impala,stephani,jessica1,hooker,lancer,knicks,shamrock,fuckyou2,stinger,314159,redneck,deftones,squirt,siemens,blaster,trucker,subaru,renegade,ibanez,manson,swinger,reaper,blondie,mylove,galaxy,blahblah,enterpri,travel,1234abcd,babylon5,indiana,skeeter,master1,sugar,ficken,smoke,bigone,sweetpea,fucked,trfnthbyf,marino,escort,smitty,bigfoot,babes,larisa,trumpet,spartan,valera,babylon,asdfghj,yankees1,bigboobs,stormy,mister,hamlet,aardvark,butterfl,marathon,paladin,cavalier,manchester,skater,indigo,hornet,buckeyes,01011990,indians,karate,hesoyam,toronto,diamonds,chiefs,buckeye,1qaz2wsx3edc,highland,hotsex,charger,redman,passwor,maiden,drpepper,storm,pornstar,garden,12345678910,pencil,sherlock,timber,thuglife,insane,pizza,jungle,jesus1,aragorn,1a2b3c,hamster,david1,triumph,techno,lollol,pioneer,catdog,321654,fktrctq,morpheus,141627,pascal,shadow1,hobbit,wetpussy,erotic,consumer,blabla,justme,stones,chrissy,spartak,goforit,burger,pitbull,adgjmptw,italia,barcelona,hunting,colors,kissme,virgin,overlord,pebbles,sundance,emerald,doggy,racecar,irina,element,1478963,zipper,alpine,basket,goddess,poison,nipple,sakura,chichi,huskers,13579,pussys,q12345,ultimate,ncc1701e,blackie,nicola,rommel,matthew1,caserta,omega,geronimo,sammy1,trojan,123qwe123,philips,nugget,tarzan,chicks,aleksandr,bassman,trixie,portugal,anakin,dodger,bomber,superfly,madness,q1w2e3r4t5y6,loser,123asd,fatcat,ybrbnf,soldier,warlock,wrinkle1,desire,sexual,babe,seminole,alejandr,951753,11235813,westham,andrei,concrete,access14,weed,letmein2,ladybug,naked,christop,trombone,tintin,bluesky,rhbcnbyf,qazxswedc,onelove,cdtnkfyf,whore,vfvjxrf,titans,stallion,truck,hansolo,blue22,smiles,beagle,panama,kingkong,flatron,inferno,mongoose,connect,poiuyt,snatch,qawsed,juice,blessed,rocker,snakes,turbo,bluemoon,sex4me,finger,jamaica,a1234567,mulder,beetle,fuckyou1,passat,immortal,plastic,123454321,anthony1,whiskey,dietcoke,suck,spunky,magic1,monitor,cactus,exigen,planet,ripper,teen,spyder,apple1,nolimit,hollywoo,sluts,sticky,trunks,1234321,14789632,pickles,sailing,bonehead,ghbdtnbr,delta,charlott,rubber,911911,112358,molly1,yomama,hongkong,jumper,william1,ilovesex,faster,unreal,cumming,memphis,1123581321,nylons,legion,sebastia,shalom,pentium,geheim,werewolf,funtime,ferret,orion,curious,555666,niners,cantona,sprite,philly,pirates,abgrtyu,lollipop,eternity,boeing,super123,sweets,cooldude,tottenha,green1,jackoff,stocking,7895123,moomoo,martini,biscuit,drizzt,colt45,fossil,makaveli,snapper,satan666,maniac,salmon,patriot,verbatim,nasty,shasta,asdzxc,shaved,blackcat,raistlin,qwerty12345,punkrock,cjkywt,01012010,4128,waterloo,crimson,twister,oxford,musicman,seinfeld,biggie,condor,ravens,megadeth,wolfman,cosmos,sharks,banshee,keeper,foxtrot,gn56gn56,skywalke,velvet,black1,sesame,dogs,squirrel,privet,sunrise,wolverine,sucks,legolas,grendel,ghost,cats,carrot,frosty,lvbnhbq,blades,stardust,frog,qazwsxed,121314,coolio,brownie,groovy,twilight,daytona,vanhalen,pikachu,peanuts,licker,hershey,jericho,intrepid,ninja,1234567a,zaq123,lobster,goblin,punisher,strider,shogun,kansas,amadeus,seven7,jason1,neptune,showtime,muscle,oldman,ekaterina,rfrfirf,getsome,showme,111222333,obiwan,skittles,danni,tanker,maestro,tarheel,anubis,hannibal,anal,newlife,gothic,shark,fighter,blue123,blues,123456z,princes,slick,chaos,thunder1,sabine,1q2w3e4r5t6y,python,test1,mirage,devil,clover,tequila,chelsea1,surfing,delete,potato,chubby,panasonic,sandiego,portland,baggins,fusion,sooners,blackdog,buttons,californ,moscow,playtime,mature,1a2b3c4d,dagger,dima,stimpy,asdf123,gangster,warriors,iverson,chargers,byteme,swallow,liquid,lucky7,dingdong,nymets,cracker,mushroom,456852,crusader,bigguy,miami,dkflbvbh,bugger,nimrod,tazman,stranger,newpass,doodle,powder,gotcha,guardian,dublin,slapshot,septembe,147896325,pepsi1,milano,grizzly,woody1,knights,photos,2468,nookie,charly,rammstein,brasil,123321123,scruffy,munchkin,poopie,123098,kittycat,latino,walnut,1701,thegame,viper1,1passwor,kolobok,picasso,robert1,barcelon,bananas,trance,auburn,coltrane,eatshit,goodluck,starcraft,wheels,parrot,postal,blade,wisdom,pink,gorilla,katerina,pass123,andrew1,shaney14,dumbass,osiris,fuck_inside,oakland,discover,ranger1,spanking,lonestar,bingo,meridian,ping,heather1,dookie,stonecol,megaman,192837465,rjntyjr,ledzep,lowrider,25802580,richard1,firefly,griffey,racerx,paradox,ghjcnj,gangsta,zaq1xsw2,tacobell,weezer,sirius,halflife,buffett,shiloh,123698745,vertigo,sergei,aliens,sobaka,keyboard,kangaroo,sinner,soccer1,0.0.000,bonjour,socrates,chucky,hotboy,sprint,0007,sarah1,scarlet,celica,shazam,formula1,sommer,trebor,qwerasdf,jeep,mailcreated5240,bollox,asshole1,fuckface,honda1,rebels,vacation,lexmark,penguins,12369874,ragnarok,formula,258456,tempest,vfhecz,tacoma,qwertz,colombia,flames,rockon,duck,prodigy,wookie,dodgeram,mustangs,123qaz,sithlord,smoker,server,bang,incubus,scoobydo,oblivion,molson,kitkat,titleist,rescue,zxcv1234,carpet,1122,bigballs,tardis,jimbob,xanadu,blueeyes,shaman,mersedes,pooper,pussy69,golfing,hearts,mallard,12312312,kenwood,patrick1,dogg,cowboys1,oracle,123zxc,nuttertools,102938,topper,1122334455,shemale,sleepy,gremlin,yourmom,123987,gateway1,printer,monkeys,peterpan,mikey,kingston,cooler,analsex,jimbo,pa55word,asterix,freckles,birdman,frank1,defiant,aussie,stud,blondes,tatyana,445566,aspirine,mariners,jackal,deadhead,katrin,anime,rootbeer,frogger,polo,scooter1,hallo,noodles,thomas1,parola,shaolin,celine,11112222,plymouth,creampie,justdoit,ohyeah,fatass,assfuck,amazon,1234567q,kisses,magnus,camel,nopass,bosco,987456,6751520,harley1,putter,champs,massive,spidey,lightnin,camelot,letsgo,gizmodo,aezakmi,bones,caliente,12121,goodtime,thankyou,raiders1,brucelee,redalert,aquarius,456654,catherin,smokin,pooh,mypass,astros,roller,porkchop,sapphire,qwert123,kevin1,a1s2d3f4,beckham,atomic,rusty1,vanilla,qazwsxedcrfv,hunter1,kaktus,cxfcnmt,blacky,753159,elvis1,aggies,blackjac,bangkok,scream,123321q,iforgot,power1,kasper,abc12,buster1,slappy,shitty,veritas,chevrole,amber1,01012001,vader,amsterdam,jammer,primus,spectrum,eduard,granny,horny1,sasha1,clancy,usa123,satan,diamond1,hitler,avenger,1221,spankme,123456qwerty,simba,smudge,scrappy,labrador,john316,syracuse,front242,falcons,husker,candyman,commando,gator,pacman,delta1,pancho,krishna,fatman,clitoris,pineappl,lesbians,8j4ye3uz,barkley,vulcan,punkin,boner,celtics,monopoly,flyboy,romashka,hamburg,123456aa,lick,gangbang,223344,area51,spartans,aaa111,tricky,snuggles,drago,homerun,vectra,homer1,hermes,topcat,cuddles,infiniti,1234567890q,cosworth,goose,phoenix1,killer1,ivanov,bossman,qawsedrf,peugeot,exigent,doberman,durango,brandon1,plumber,telefon,horndog,laguna,rbhbkk,dawg,webmaster,breeze,beast,porsche9,beefcake,leopard,redbull,oscar1,topdog,godsmack,theking,pics,omega1,speaker,viktoria,fuckers,bowler,starbuck,gjkbyf,valhalla,anarchy,blacks,herbie,kingpin,starfish,nokia,loveit,achilles,906090,labtec,ncc1701a,fitness,jordan1,brando,arsenal1,bull,kicker,napass,desert,sailboat,bohica,tractor,hidden,muppet,jackson1,jimmy1,terminator,phillies,pa55w0rd,terror,farside,swingers,legacy,frontier,butthole,doughboy,jrcfyf,tuesday,sabbath,daniel1,nebraska,homers,qwertyuio,azamat,fallen,agent007,striker,camels,iguana,looker,pinkfloy,moloko,qwerty123456,dannyboy,luckydog,789654,pistol,whocares,charmed,skiing,select,franky,puppy,daniil,vladik,vette,vfrcbvrf,ihateyou,nevada,moneys,vkontakte,mandingo,puppies,666777,mystic,zidane,kotenok,dilligaf,budman,bunghole,zvezda,123457,triton,golfball,technics,trojans,panda,laptop,rookie,01011991,15426378,aberdeen,gustav,jethro,enterprise,igor,stripper,filter,hurrican,rfnthbyf,lespaul,gizmo1,butch,132435,dthjybrf,1366613,excalibu,963852,nofear,momoney,possum,cutter,oilers,moocow,cupcake,gbpltw,batman1,splash,svetik,super1,soleil,bogdan,melissa1,vipers,babyboy,tdutybq,lancelot,ccbill,keystone,passwort,flamingo,firefox,dogman,vortex,rebel,noodle,raven1,zaphod,killme,pokemon1,coolman,danila,designer,skinny,kamikaze,deadman,gopher,doobie,warhammer,deeznuts,freaks,engage,chevy1,steve1,apollo13,poncho,hammers,azsxdc,dracula,000007,sassy,bitch1,boots,deskjet,12332,macdaddy,mighty,rangers1,manchest,sterlin,casey1,meatball,mailman,sinatra,cthulhu,summer1,bubbas,cartoon,bicycle,eatpussy,truelove,sentinel,tolkien,breast,capone,lickit,summit,123456k,peter1,daisy1,kitty1,123456789z,crazy1,jamesbon,texas1,sexygirl,362436,sonic,billyboy,redhot,microsof,microlab,daddy1,rockets,iloveyo,fernand,gordon24,danie,cutlass,polska,star69,titties,pantyhos,01011985,thekid,aikido,gofish,mayday,1234qwe,coke,anfield,sony,lansing,smut,scotch,sexx,catman,73501505,hustler,saun,dfkthbz,passwor1,jenny1,azsxdcfv,cheers,irish1,gabrie,tinman,orioles,1225,charlton,fortuna,01011970,airbus,rustam,xtreme,bigmoney,zxcasd,retard,grumpy,huskies,boxing,4runner,kelly1,ultima,warlord,fordf150,oranges,rotten,asdfjkl,superstar,denali,sultan,bikini,saratoga,thor,figaro,sixers,wildfire,vladislav,128500,sparta,mayhem,greenbay,chewie,music1,number1,cancun,fabie,mellon,poiuytrewq,cloud9,crunch,bigtime,chicken1,piccolo,bigbird,321654987,billy1,mojo,01011981,maradona,sandro,chester1,bizkit,rjirfrgbde,789123,rightnow,jasmine1,hyperion,treasure,meatloaf,armani,rovers,jarhead,01011986,cruise,coconut,dragoon,utopia,davids,cosmo,rfhbyf,reebok,1066,charli,giorgi,sticks,sayang,pass1234,exodus,anaconda,zaqxsw,illini,woofwoof,emily1,sandy1,packer,poontang,govols,jedi,tomato,beaner,cooter,creamy,lionking,happy123,albatros,poodle,kenworth,dinosaur,greens,goku,happyday,eeyore,tsunami,cabbage,holyshit,turkey50,memorex,chaser,bogart,orgasm,tommy1,volley,whisper,knopka,ericsson,walleye,321123,pepper1,katie1,chickens,tyler1,corrado,twisted,100000,zorro,clemson,zxcasdqwe,tootsie,milana,zenith,fktrcfylhf,shania,frisco,polniypizdec0211,crazybab,junebug,fugazi,rereirf,vfvekz,1001,sausage,vfczyz,koshka,clapton,justin1,anhyeuem,condom,fubar,hardrock,skywalker,tundra,cocks,gringo,150781,canon,vitalik,aspire,stocks,samsung1,applepie,abc12345,arjay,gandalf1,boob,pillow,sparkle,gmoney,rockhard,lucky13,samiam,everest,hellyeah,bigsexy,skorpion,rfrnec,hedgehog,australi,candle,slacker,dicks,voyeur,jazzman,america1,bobby1,br0d3r,wolfie,vfksirf,1qa2ws3ed,13243546,fright,yosemite,temp,karolina,fart,barsik,surf,cheetah,baddog,deniska,starship,bootie,milena,hithere,kume,greatone,dildo,50cent,0.0.0.000,albion,amanda1,midget,lion,maxell,football1,cyclone,freeporn,nikola,bonsai,kenshin,slider,balloon,roadkill,killbill,222333,jerkoff,78945612,dinamo,tekken,rambler,goliath,cinnamon,malaka,backdoor,fiesta,packers1,rastaman,fletch,sojdlg123aljg,stefano,artemis,calico,nyjets,damnit,robotech,duchess,rctybz,hooter,keywest,18436572,hal9000,mechanic,pingpong,operator,presto,sword,rasputin,spank,bristol,faggot,shado,963852741,amsterda,321456,wibble,carrera,alibaba,majestic,ramses,duster,route66,trident,clipper,steeler,wrestlin,divine,kipper,gotohell,kingfish,snake1,passwords,buttman,pompey,viagra,zxcvbnm1,spurs,332211,slutty,lineage2,oleg,macross,pooter,brian1,qwert1,charles1,slave,jokers,yzerman,swimmer,ne1469,nwo4life,solnce,seamus,lolipop,pupsik,moose1,ivanova,secret1,matador,love69,420247,ktyjxrf,subway,cinder,vermont,pussie,chico,florian,magick,guiness,allsop,ghetto,flash1,a123456789,typhoon,dfkthf,depeche,skydive,dammit,seeker,fuckthis,crysis,kcj9wx5n,umbrella,r2d2c3po,123123q,snoopdog,critter,theboss,ding,162534,splinter,kinky,cyclops,jayhawk,456321,caramel,qwer123,underdog,caveman,onlyme,grapes,feather,hotshot,fuckher,renault,george1,sex123,pippen,000001,789987,floppy,cunts,megapass,1000,pornos,usmc,kickass,great1,quattro,135246,wassup,helloo,p0015123,nicole1,chivas,shannon1,bullseye,java,fishes,blackhaw,jamesbond,tunafish,juggalo,dkflbckfd,123789456,dallas1,translator,122333,beanie,alucard,gfhjkm123,supersta,magicman,ashley1,cohiba,xbox360,caligula,12131415,facial,7753191,dfktynbyf,cobra1,cigars,fang,klingon,bob123,safari,looser,10203,deepthroat,malina,200000,tazmania,gonzo,goalie,jacob1,monaco,cruiser,misfit,vh5150,tommyboy,marino13,yousuck,sharky,vfhufhbnf,horizon,absolut,brighton,123456r,death1,kungfu,maxx,forfun,mamapapa,enter1,budweise,banker,getmoney,kostya,qazwsx12,bigbear,vector,fallout,nudist,gunners,royals,chainsaw,scania,trader,blueboy,walrus,eastside,kahuna,qwerty1234,love123,steph,01011989,cypress,champ,undertaker,ybrjkfq,europa,snowboar,sabres,moneyman,chrisbln,minime,nipper,groucho,whitey,viewsonic,penthous,wolf359,fabric,flounder,coolguy,whitesox,passme,smegma,skidoo,thanatos,fucku2,snapple,dalejr,mondeo,thesims,mybaby,panasoni,sinbad,thecat,topher,frodo,sneakers,q123456,z1x2c3,alfa,chicago1,taylor1,ghjcnjnfr,cat123,olivier,cyber,titanium,0420,madison1,jabroni,dang,hambone,intruder,holly1,gargoyle,sadie1,static,poseidon,studly,newcastl,sexxxx,poppy,johannes,danzig,beastie,musica,buckshot,sunnyday,adonis,bluedog,bonkers,2128506,chrono,compute,spawn,01011988,turbo1,smelly,wapbbs,goldstar,ferrari1,778899,quantum,pisces,boomboom,gunnar,1024,test1234,florida1,nike,superman1,multiplelo,custom,motherlode,1qwerty,westwood,usnavy,apple123,daewoo,korn,stereo,sasuke,sunflowe,watcher,dharma,555777,mouse1,assholes,babyblue,123qwerty,marius,walmart,snoop,starfire,tigger1,paintbal,knickers,aaliyah,lokomotiv,theend,winston1,sapper,rover,erotica,scanner,racer,zeus,sexy69,doogie,bayern,joshua1,newbie,scott1,losers,droopy,outkast,martin1,dodge1,wasser,ufkbyf,rjycnfynby,thirteen,12345z,112211,hotred,deejay,hotpussy,192837,jessic,philippe,scout,panther1,cubbies,havefun,magpie,fghtkm,avalanch,newyork1,pudding,leonid,harry1,cbr600,audia4,bimmer,fucku,01011984,idontknow,vfvfgfgf,1357,aleksey,builder,01011987,zerocool,godfather,mylife,donuts,allmine,redfish,777888,sascha,nitram,bounce,333666,smokes,1x2zkg8w,rodman,stunner,zxasqw12,hoosier,hairy,beretta,insert,123456s,rtyuehe,francesc,tights,cheese1,micron,quartz,hockey1,gegcbr,searay,jewels,bogey,paintball,celeron,padres,bing,syncmaster,ziggy,simon1,beaches,prissy,diehard,orange1,mittens,aleksandra,queens,02071986,biggles,thongs,southpark,artur,twinkle,gretzky,rabota,cambiami,monalisa,gollum,chuckles,spike1,gladiator,whisky,spongebob,sexy1,03082006,mazafaka,meathead,4121,ou8122,barefoot,12345678q,cfitymrf,bigass,a1s2d3,kosmos,blessing,titty,clevelan,terrapin,ginger1,johnboy,maggot,clarinet,deeznutz,336699,stumpy,stoney,footbal,traveler,volvo,bucket,snapon,pianoman,hawkeyes,futbol,casanova,tango,goodboy,scuba,honey1,sexyman,warthog,mustard,abc1234,nickel,10203040,meowmeow,1012,boricua,prophet,sauron,12qwas,reefer,andromeda,crystal1,joker1,90210,goofy,loco,lovesex,triangle,whatsup,mellow,bengals,monster1,maste,01011910,lover1,love1,123aaa,sunshin,smeghead,hokies,sting,welder,rambo,cerberus,bunny1,rockford,monke,1q2w3e4r5,goldwing,gabriell,buzzard,crjhgbjy,james007,rainman,groove,tiberius,purdue,nokia6300,hayabusa,shou,jagger,diver,zigzag,poochie,usarmy,phish,redwood,redwing,12345679,salamander,silver1,abcd123,sputnik,boobie,ripple,eternal,12qw34er,thegreat,allstar,slinky,gesperrt,mishka,whiskers,pinhead,overkill,sweet1,rhfcjnrf,montgom240,sersolution,jamie1,starman,proxy,swords,nikolay,bacardi,rasta,badgirl,rebecca1,wildman,penny1,spaceman,1007,10101,logan1,hacked,bulldog1,helmet,windsor,buffy1,runescape,trapper,123451,banane,dbrnjh,ripken,12345qwe,frisky,shun,fester,oasis,lightning,ib6ub9,cicero,kool,pony,thedog,784512,01011992,megatron,illusion,edward1,napster,11223,squash,roadking,woohoo,19411945,hoosiers,01091989,tracker,bagira,midway,leavemealone,br549,14725836,235689,menace,rachel1,feng,laser,stoned,realmadrid,787898,balloons,tinkerbell,5551212,maria1,pobeda,heineken,sonics,moonlight,optimus,comet,orchid,02071982,jaybird,kashmir,12345678a,chuang,chunky,peach,mortgage,rulezzz,saleen,chuckie,zippy,fishing1,gsxr750,doghouse,maxim,reader,shai,buddah,benfica,chou,salomon,meister,eraser,blackbir,bigmike,starter,pissing,angus,deluxe,eagles1,hardcock,135792468,mian,seahawks,godfathe,bookworm,gregor,intel,talisman,blackjack,babyface,hawaiian,dogfood,zhong,01011975,sancho,ludmila,medusa,mortimer,123456654321,roadrunn,just4me,stalin,01011993,handyman,alphabet,pizzas,calgary,clouds,password2,cgfhnfr,f**k,cubswin,gong,lexus,max123,xxx123,digital1,gfhjkm1,7779311,missy1,michae,beautifu,gator1,1005,pacers,buddie,chinook,heckfy,dutchess,sally1,breasts,beowulf,darkman,jenn,tiffany1,zhei,quan,qazwsx1,satana,shang,idontkno,smiths,puddin,nasty1,teddybea,valkyrie,passwd,chao,boxster,killers,yoda,cheater,inuyasha,beast1,wareagle,foryou,dragonball,mermaid,bhbirf,teddy1,dolphin1,misty1,delphi,gromit,sponge,qazzaq,fytxrf,gameover,diao,sergi,beamer,beemer,kittykat,rancid,manowar,adam12,diggler,assword,austin1,wishbone,gonavy,sparky1,fisting,thedude,sinister,1213,venera,novell,salsero,jayden,fuckoff1,linda1,vedder,02021987,1pussy,redline,lust,jktymrf,02011985,dfcbkbq,dragon12,chrome,gamecube,titten,cong,bella1,leng,02081988,eureka,bitchass,147369,banner,lakota,123321a,mustafa,preacher,hotbox,02041986,z1x2c3v4,playstation,01011977,claymore,electra,checkers,zheng,qing,armagedon,02051986,wrestle,svoboda,bulls,nimbus,alenka,madina,newpass6,onetime,aa123456,bartman,02091987,silverad,electron,12345t,devil666,oliver1,skylar,rhtdtlrj,gobucks,johann,12011987,milkman,02101985,camper,thunderb,bigbutt,jammin,davide,cheeks,goaway,lighter,claudi,thumbs,pissoff,ghostrider,cocaine,teng,squall,lotus,hootie,blackout,doitnow,subzero,02031986,marine1,02021988,pothead,123456qw,skate,1369,peng,antoni,neng,miao,bcfields,1492,marika,794613,musashi,tulips,nong,piao,chai,ruan,southpar,02061985,nude,mandarin,654123,ninjas,cannabis,jetski,xerxes,zhuang,kleopatra,dickie,bilbo,pinky,morgan1,1020,1017,dieter,baseball1,tottenham,quest,yfnfkmz,dirtbike,1234567890a,mango,jackson5,ipswich,iamgod,02011987,tdutybz,modena,qiao,slippery,qweasd123,bluefish,samtron,toon,111333,iscool,02091986,petrov,fuzzy,zhou,1357924680,mollydog,deng,02021986,1236987,pheonix,zhun,ghblehjr,othello,starcraf,000111,sanfran,a11111,cameltoe,badman,vasilisa,jiang,1qaz2ws,luan,sveta,12qw12,akira,chuai,369963,cheech,beatle,pickup,paloma,01011983,caravan,elizaveta,gawker,banzai,pussey,mullet,seng,bingo1,bearcat,flexible,farscape,borussia,zhuai,templar,guitar1,toolman,yfcntymrf,chloe1,xiang,slave1,guai,nuggets,02081984,mantis,slim,scorpio1,fyutkbyf,thedoors,02081987,02061986,123qq123,zappa,fergie,7ugd5hip2j,huai,asdfzxcv,sunflower,pussyman,deadpool,bigtit,01011982,love12,lassie,skyler,gatorade,carpedie,jockey,mancity,spectre,02021984,cameron1,artemka,reng,02031984,iomega,jing,moritz,spice,rhino,spinner,heater,zhai,hover,talon,grease,qiong,corleone,ltybcrf,tian,cowboy1,hippie,chimera,ting,alex123,02021985,mickey1,corsair,sonoma,aaron1,xxxpass,bacchus,webmaste,chuo,xyz123,chrysler,spurs1,artem,shei,cosmic,01020304,deutsch,gabriel1,123455,oceans,987456321,binladen,latinas,a12345678,speedo,buttercu,02081989,21031988,merlot,millwall,ceng,kotaku,jiong,dragonba,2580,stonecold,snuffy,01011999,02011986,hellos,blaze,maggie1,slapper,istanbul,bonjovi,babylove,mazda,bullfrog,phoeni,meng,porsche1,nomore,02061989,bobdylan,capslock,orion1,zaraza,teddybear,ntktajy,myname,rong,wraith,mets,niao,02041984,smokie,chevrolet,dialog,gfhjkmgfhjkm,dotcom,vadim,monarch,athlon,mikey1,hamish,pian,liang,coolness,chui,thoma,ramones,ciccio,chippy,eddie1,house1,ning,marker,cougars,jackpot,barbados,reds,pdtplf,knockers,cobalt,amateurs,dipshit,napoli,kilroy,pulsar,jayhawks,daemon,alexey,weng,shuang,9293709b13,shiner,eldorado,soulmate,mclaren,golfer1,andromed,duan,50spanks,sexyboy,dogshit,02021983,shuo,kakashka,syzygy,111111a,yeahbaby,qiang,netscape,fulham,120676,gooner,zhui,rainbow6,laurent,dog123,halifax,freeway,carlitos,147963,eastwood,microphone,monkey12,1123,persik,coldbeer,geng,nuan,danny1,fgtkmcby,entropy,gadget,just4fun,sophi,baggio,carlito,1234567891,02021989,02041983,specialk,piramida,suan,bigblue,salasana,hopeful,mephisto,bailey1,hack,annie1,generic,violetta,spencer1,arcadia,02051983,hondas,9562876,trainer,jones1,smashing,liao,159632,iceberg,rebel1,snooker,temp123,zang,matteo,fastball,q2w3e4r5,bamboo,fuckyo,shutup,astro,buddyboy,nikitos,redbird,maxxxx,shitface,02031987,kuai,kissmyass,sahara,radiohea,1234asdf,wildcard,maxwell1,patric,plasma,heynow,bruno1,shao,bigfish,misfits,sassy1,sheng,02011988,02081986,testpass,nanook,cygnus,licking,slavik,pringles,xing,1022,ninja1,submit,dundee,tiburon,pinkfloyd,yummy,shuai,guang,chopin,obelix,insomnia,stroker,1a2s3d4f,1223,playboy1,lazarus,jorda,spider1,homerj,sleeper,02041982,darklord,cang,02041988,02041987,tripod,magician,jelly,telephon,15975,vsjasnel12,pasword,iverson3,pavlov,homeboy,gamecock,amigo,brodie,budapest,yjdsqgfhjkm,reckless,02011980,pang,tiger123,2469,mason1,orient,01011979,zong,cdtnbr,maksimka,1011,bushido,taxman,giorgio,sphinx,kazantip,02101984,concorde,verizon,lovebug,georg,sam123,seadoo,qazwsxedc123,jiao,jezebel,pharmacy,abnormal,jellybea,maxime,puffy,islander,bunnies,jiggaman,drakon,010180,pluto,zhjckfd,12365,classics,crusher,mordor,hooligan,strawberry,02081985,scrabble,hawaii50,1224,wg8e3wjf,cthtuf,premium,arrow,123456qwe,mazda626,ramrod,tootie,rhjrjlbk,ghost1,1211,bounty,niang,02071984,goat,killer12,sweetnes,porno1,masamune,426hemi,corolla,mariposa,hjccbz,doomsday,bummer,blue12,zhao,bird33,excalibur,samsun,kirsty,buttfuck,kfhbcf,zhuo,marcello,ozzy,02021982,dynamite,655321,master12,123465,lollypop,stepan,1qa2ws,spiker,goirish,callum,michael2,moonbeam,attila,henry1,lindros,andrea1,sporty,lantern,12365478,nextel,violin,volcom,998877,water1,imation,inspiron,dynamo,citadel,placebo,clowns,tiao,02061988,tripper,dabears,haggis,merlin1,02031985,anthrax,amerika,iloveme,vsegda,burrito,bombers,snowboard,forsaken,katarina,a1a2a3,woofer,tigger2,fullmoon,tiger2,spock,hannah1,snoopy1,sexxxy,sausages,stanislav,cobain,robotics,exotic,green123,mobydick,senators,pumpkins,fergus,asddsa,147741,258852,windsurf,reddevil,vfitymrf,nevermind,nang,woodland,4417,mick,shui,q1q2q3,wingman,69696,superb,zuan,ganesh,pecker,zephyr,anastasiya,icu812,larry1,02081982,broker,zalupa,mihail,vfibyf,dogger,7007,paddle,varvara,schalke,1z2x3c,presiden,yankees2,tuning,poopy,02051982,concord,vanguard,stiffy,rjhjktdf,felix1,wrench,firewall,boxer,bubba69,popper,02011984,temppass,gobears,cuan,tipper,fuckme1,kamila,thong,puss,bigcat,drummer1,02031982,sowhat,digimon,tigers1,rang,jingle,bian,uranus,soprano,mandy1,dusty1,fandango,aloha,pumpkin1,postman,02061980,dogcat,bombay,pussy123,onetwo,highheel,pippo,julie1,laura1,pepito,beng,smokey1,stylus,stratus,reload,duckie,karen1,jimbo1,225588,369258,krusty,snappy,asdf12,electro,111qqq,kuang,fishin,clit,abstr,christma,qqqqq1,1234560,carnage,guyver,boxers,kittens,zeng,1000000,qwerty11,toaster,cramps,yugioh,02061987,icehouse,zxcvbnm123,pineapple,namaste,harrypotter,mygirl,falcon1,earnhard,fender1,spikes,nutmeg,01081989,dogboy,02091983,369852,softail,mypassword,prowler,bigboss,1112,harvest,heng,jubilee,killjoy,basset,keng,zaqxswcde,redsox1,biao,titan,misfit99,robot,wifey,kidrock,02101987,gameboy,enrico,1z2x3c4v,broncos1,arrows,havana,banger,cookie1,chriss,123qw,platypus,cindy1,lumber,pinball,foxy,london1,1023,05051987,02041985,password12,superma,longbow,radiohead,nigga,12051988,spongebo,qwert12345,abrakadabra,dodgers1,02101989,chillin,niceguy,pistons,hookup,santafe,bigben,jets,1013,vikings1,mankind,viktoriya,beardog,hammer1,02071980,reddwarf,magelan,longjohn,jennife,gilles,carmex2,02071987,stasik,bumper,doofus,slamdunk,pixies,garion,steffi,alessandro,beerman,niceass,warrior1,honolulu,134679852,visa,johndeer,mother1,windmill,boozer,oatmeal,aptiva,busty,delight,tasty,slick1,bergkamp,badgers,guitars,puffin,02091981,nikki1,irishman,miller1,zildjian,123000,airwolf,magnet,anai,install,02041981,02061983,astra,romans,megan1,mudvayne,freebird,muscles,dogbert,02091980,02091984,snowflak,01011900,mang,joseph1,nygiants,playstat,junior1,vjcrdf,qwer12,webhompas,giraffe,pelican,jefferso,comanche,bruiser,monkeybo,kjkszpj,123456l,micro,albany,02051987,angel123,epsilon,aladin,death666,hounddog,josephin,altima,chilly,02071988,78945,ultra,02041979,gasman,thisisit,pavel,idunno,kimmie,05051985,paulie,ballin,medion,moondog,manolo,pallmall,climber,fishbone,genesis1,153624,toffee,tbone,clippers,krypton,jerry1,picturs,compass,111111q,02051988,1121,02081977,sairam,getout,333777,cobras,22041987,bigblock,severin,booster,norwich,whiteout,ctrhtn,123456m,02061984,hewlett,shocker,fuckinside,02031981,chase1,white1,versace,123456789s,basebal,iloveyou2,bluebell,08031986,anthon,stubby,foreve,undertak,werder,saiyan,mama123,medic,chipmunk,mike123,mazdarx7,qwe123qwe,bowwow,kjrjvjnbd,celeb,choochoo,demo,lovelife,02051984,colnago,lithium,02051989,15051981,zzzxxx,welcom,anastasi,fidelio,franc,26061987,roadster,stone55,drifter,hookem,hellboy,1234qw,cbr900rr,sinned,good123654,storm1,gypsy,zebra,zachary1,toejam,buceta,02021979,testing1,redfox,lineage,mike1,highbury,koroleva,nathan1,washingt,02061982,02091985,vintage,redbaron,dalshe,mykids,11051987,macbeth,julien,james123,krasotka,111000,10011986,987123,pipeline,tatarin,sensei,codered,komodo,frogman,7894561230,nascar24,juicy,01031988,redrose,mydick,pigeon,tkbpfdtnf,smirnoff,1215,spam,winner1,flyfish,moskva,81fukkc,21031987,olesya,starligh,summer99,13041988,fishhead,freesex,super12,06061986,azazel,scoobydoo,02021981,cabron,yogibear,sheba1,konstantin,tranny,chilli,terminat,ghbywtccf,slowhand,soccer12,cricket1,fuckhead,1002,seagull,achtung,blam,bigbob,bdsm,nostromo,survivor,cnfybckfd,lemonade,boomer1,rainbow1,rober,irinka,cocksuck,peaches1,itsme,sugar1,zodiac,upyours,dinara,135791,sunny1,chiara,johnson1,02041989,solitude,habibi,sushi,markiz,smoke1,rockies,catwoman,johnny1,qwerty7,bearcats,username,01011978,wanderer,ohshit,02101986,sigma,stephen1,paradigm,02011989,flanker,sanity,jsbach,spotty,bologna,fantasia,chevys,borabora,cocker,74108520,123ewq,12021988,01061990,gtnhjdbx,02071981,01011960,sundevil,3000gt,mustang6,gagging,maggi,armstron,yfnfkb,13041987,revolver,02021976,trouble1,madcat,jeremy1,jackass1,volkswag,30051985,corndog,pool6123,marines1,03041991,pizza1,piggy,sissy,02031979,sunfire,angelus,undead,24061986,14061991,wildbill,shinobi,45m2do5bs,123qwer,21011989,cleopatr,lasvega,hornets,amorcit,11081989,coventry,nirvana1,destin,sidekick,20061988,02081983,gbhfvblf,sneaky,bmw325,22021989,nfytxrf,sekret,kalina,zanzibar,hotone,qazws,wasabi,heidi1,highlander,blues1,hitachi,paolo,23041987,slayer1,simba1,02011981,tinkerbe,kieran,01121986,172839,boiler,1125,bluesman,waffle,asdfgh01,threesom,conan,1102,reflex,18011987,nautilus,everlast,fatty,vader1,01071986,cyborg,ghbdtn123,birddog,rubble,02071983,suckers,02021973,skyhawk,12qw12qw,dakota1,joebob,nokia6233,woodie,longdong,lamer,troll,ghjcnjgfhjkm,420000,boating,nitro,armada,messiah,1031,penguin1,02091989,americ,02071989,redeye,asdqwe123,07071987,monty1,goten,spikey,sonata,635241,tokiohotel,sonyericsson,citroen,compaq1,1812,umpire,belmont,jonny,pantera1,nudes,palmtree,14111986,fenway,bighead,razor,gryphon,andyod22,aaaaa1,taco,10031988,enterme,malachi,dogface,reptile,01041985,dindom,handball,marseille,candy1,19101987,torino,tigge,matthias,viewsoni,13031987,stinker,evangelion,24011985,123456123,rampage,sandrine,02081980,thecrow,astral,28041987,sprinter,private1,seabee,shibby,02101988,25081988,fearless,junkie,01091987,aramis,antelope,draven,fuck1,mazda6,eggman,02021990,barselona,buddy123,19061987,fyfnjkbq,nancy1,12121990,10071987,sluggo,kille,hotties,irishka,zxcasdqwe123,shamus,fairlane,honeybee,soccer10,13061986,fantomas,17051988,10051987,20111986,gladiato,karachi,gambler,gordo,01011995,biatch,matthe,25800852,papito,excite,buffalo1,bobdole,cheshire,player1,28021992,thewho,10101986,pinky1,mentor,tomahawk,brown1,03041986,bismillah,bigpoppa,ijrjkfl,01121988,runaway,08121986,skibum,studman,helper,squeak,holycow,manfred,harlem,glock,gideon,987321,14021985,yellow1,wizard1,margarit,success1,medved,sf49ers,lambda,pasadena,johngalt,quasar,1776,02031980,coldplay,amand,playa,bigpimp,04041991,capricorn,elefant,sweetness,bruce1,luca,dominik,10011990,biker,09051945,datsun,elcamino,trinitro,malice,audi,voyager1,02101983,joe123,carpente,spartan1,mario1,glamour,diaper,12121985,22011988,winter1,asimov,callisto,nikolai,pebble,02101981,vendetta,david123,boytoy,11061985,02031989,iloveyou1,stupid1,cayman,casper1,zippo,yamahar1,wildwood,foxylady,calibra,02041980,27061988,dungeon,leedsutd,30041986,11051990,bestbuy,antares,dominion,24680,01061986,skillet,enforcer,derparol,01041988,196969,29071983,f00tball,purple1,mingus,25031987,21031990,remingto,giggles,klaste,3x7pxr,01011994,coolcat,29051989,megane,20031987,02051980,04041988,synergy,0000007,macman,iforget,adgjmp,vjqgfhjkm,28011987,rfvfcenhf,16051989,25121987,16051987,rogue,mamamia,08051990,20091991,1210,carnival,bolitas,paris1,dmitriy,dimas,05051989,papillon,knuckles,29011985,hola,tophat,28021990,100500,cutiepie,devo,415263,ducks,ghjuhfvvf,asdqwe,22021986,freefall,parol,02011983,zarina,buste,vitamin,warez,bigones,17061988,baritone,jamess,twiggy,mischief,bitchy,hetfield,1003,dontknow,grinch,sasha_007,18061990,12031985,12031987,calimero,224466,letmei,15011987,acmilan,alexandre,02031977,08081988,whiteboy,21051991,barney1,02071978,money123,18091985,bigdawg,02031988,cygnusx1,zoloto,31011987,firefigh,blowfish,screamer,lfybbk,20051988,chelse,11121986,01031989,harddick,sexylady,30031988,02041974,auditt,pizdec,kojak,kfgjxrf,20091988,123456ru,wp2003wp,1204,15051990,slugger,kordell1,03031986,swinging,01011974,02071979,rockie,dimples,1234123,1dragon,trucking,rusty2,roger1,marijuana,kerouac,02051978,08031985,paco,thecure,keepout,kernel,noname123,13121985,francisc,bozo,02011982,22071986,02101979,obsidian,12345qw,spud,tabasco,02051985,jaguars,dfktynby,kokomo,popova,notused,sevens,4200,magneto,02051976,roswell,15101986,21101986,lakeside,bigbang,aspen,little1,14021986,loki,suckmydick,strawber,carlos1,nokian73,dirty1,joshu,25091987,16121987,02041975,advent,17011987,slimshady,whistler,10101990,stryker,22031984,15021985,01031985,blueball,26031988,ksusha,bahamut,robocop,w_pass,chris123,impreza,prozac,bookie,bricks,13021990,alice1,cassandr,11111q,john123,4ever,korova,02051973,142857,25041988,paramedi,eclipse1,salope,07091990,1124,darkangel,23021986,999666,nomad,02051981,smackdow,01021990,yoyoma,argentin,moonligh,57chevy,bootys,hardone,capricor,galant,spanker,dkflbr,24111989,magpies,krolik,21051988,cevthrb,cheddar,22041988,bigbooty,scuba1,qwedsa,duffman,bukkake,acura,johncena,sexxy,p@ssw0rd,258369,cherries,12345s,asgard,leopold,fuck123,mopar,lalakers,dogpound,matrix1,crusty,spanner,kestrel,fenris,universa,peachy,assasin,lemmein,eggplant,hejsan,canucks,wendy1,doggy1,aikman,tupac,turnip,godlike,fussball,golden1,19283746,april1,django,petrova,captain1,vincent1,ratman,taekwondo,chocha,serpent,perfect1,capetown,vampir,amore,gymnast,timeout,nbvjatq,blue32,ksenia,k.lvbkf,nazgul,budweiser,clutch,mariya,sylveste,02051972,beaker,cartman1,q11111,sexxx,forever1,loser1,marseill,magellan,vehpbr,sexgod,jktxrf,hallo123,132456,liverpool1,southpaw,seneca,camden,357159,camero,tenchi,johndoe,145236,roofer,741963,vlad,02041978,fktyrf,zxcv123,wingnut,wolfpac,notebook,pufunga7782,brandy1,biteme1,goodgirl,redhat,02031978,challeng,millenium,hoops,maveric,noname,angus1,gaell,onion,olympus,sabrina1,ricard,sixpack,gratis,gagged,camaross,hotgirls,flasher,02051977,bubba123,goldfing,moonshin,gerrard,volkov,sonyfuck,mandrake,258963,tracer,lakers1,asians,susan1,money12,helmut,boater,diablo2,1234zxcv,dogwood,bubbles1,happy2,randy1,aries,beach1,marcius2,navigator,goodie,hellokitty,fkbyjxrf,earthlink,lookout,jumbo,opendoor,stanley1,marie1,12345m,07071977,ashle,wormix,murzik,02081976,lakewood,bluejays,loveya,commande,gateway2,peppe,01011976,7896321,goth,oreo,slammer,rasmus,faith1,knight1,stone1,redskin,ironmaiden,gotmilk,destiny1,dejavu,1master,midnite,timosha,espresso,delfin,toriamos,oberon,ceasar,markie,1a2s3d,ghhh47hj7649,vjkjrj,daddyo,dougie,disco,auggie,lekker,therock1,ou8123,start1,noway,p4ssw0rd,shadow12,333444,saigon,2fast4u,capecod,23skidoo,qazxcv,beater,bremen,aaasss,roadrunner,peace1,12345qwer,02071975,platon,bordeaux,vbkfirf,135798642,test12,supernov,beatles1,qwert40,optimist,vanessa1,prince1,ilovegod,nightwish,natasha1,alchemy,bimbo,blue99,patches1,gsxr1000,richar,hattrick,hott,solaris,proton,nevets,enternow,beavis1,amigos,159357a,ambers,lenochka,147896,suckdick,shag,intercourse,blue1234,spiral,02061977,tosser,ilove,02031975,cowgirl,canuck,q2w3e4,munch,spoons,waterboy,123567,evgeniy,savior,zasada,redcar,mamacita,terefon,globus,doggies,htubcnhfwbz,1008,cuervo,suslik,azertyui,limewire,houston1,stratfor,steaua,coors,tennis1,12345qwerty,stigmata,derf,klondike,patrici,marijuan,hardball,odyssey,nineinch,boston1,pass1,beezer,sandr,charon,power123,a1234,vauxhall,875421,awesome1,reggae,boulder,funstuff,iriska,krokodil,rfntymrf,sterva,champ1,bball,peeper,m123456,toolbox,cabernet,sheepdog,magic32,pigpen,02041977,holein1,lhfrjy,banan,dabomb,natalie1,jennaj,montana1,joecool,funky,steven1,ringo,junio,sammy123,qqqwww,baltimor,footjob,geezer,357951,mash4077,cashmone,pancake,monic,grandam,bongo,yessir,gocubs,nastia,vancouve,barley,dragon69,watford,ilikepie,02071976,laddie,123456789m,hairball,toonarmy,pimpdadd,cvthnm,hunte,davinci,lback,sophie1,firenze,q1234567,admin1,bonanza,elway7,daman,strap,azert,wxcvbn,afrika,theforce,123456t,idefix,wolfen,houdini,scheisse,default,beech,maserati,02061976,sigmachi,dylan1,bigdicks,eskimo,mizzou,02101976,riccardo,egghead,111777,kronos,ghbrjk,chaos1,jomama,rfhnjirf,rodeo,dolemite,cafc91,nittany,pathfind,mikael,password9,vqsablpzla,purpl,gabber,modelsne,myxworld,hellsing,punker,rocknrol,fishon,fuck69,02041976,lolol,twinkie,tripleh,cirrus,redbone,killer123,biggun,allegro,gthcbr,smith1,wanking,bootsy,barry1,mohawk,koolaid,5329,futurama,samoht,klizma,996633,lobo,honeys,peanut1,556677,zxasqw,joemama,javelin,samm,223322,sandra1,flicks,montag,nataly,3006,tasha1,1235789,dogbone,poker1,p0o9i8u7,goodday,smoothie,toocool,max333,metroid,archange,vagabond,billabon,22061941,tyson1,02031973,darkange,skateboard,evolutio,morrowind,wizards,frodo1,rockin,cumslut,plastics,zaqwsxcde,5201314,doit,outback,bumble,dominiqu,persona,nevermore,alinka,02021971,forgetit,sexo,all4one,c2h5oh,petunia,sheeba,kenny1,elisabet,aolsucks,woodstoc,pumper,02011975,fabio,granada,scrapper,123459,minimoni,q123456789,breaker,1004,02091976,ncc74656,slimshad,friendster,austin31,wiseguy,donner,dilbert1,132465,blackbird,buffet,jellybean,barfly,behappy,01011971,carebear,fireblad,02051975,boxcar,cheeky,kiteboy,hello12,panda1,elvisp,opennow,doktor,alex12,02101977,pornking,flamengo,02091975,snowbird,lonesome,robin1,11111a,weed420,baracuda,bleach,12345abc,nokia1,metall,singapor,mariner,herewego,dingo,tycoon,cubs,blunts,proview,123456789d,kamasutra,lagnaf,vipergts,navyseal,starwar,masterbate,wildone,peterbil,cucumber,butkus,123qwert,climax,deniro,gotribe,cement,scooby1,summer69,harrier,shodan,newyear,02091977,starwars1,romeo1,sedona,harald,doubled,sasha123,bigguns,salami,awnyce,kiwi,homemade,pimping,azzer,bradley1,warhamme,linkin,dudeman,qwe321,pinnacle,maxdog,flipflop,lfitymrf,fucker1,acidburn,esquire,sperma,fellatio,jeepster,thedon,sexybitch,pookey,spliff,widget,vfntvfnbrf,trinity1,mutant,samuel1,meliss,gohome,1q2q3q,mercede,comein,grin,cartoons,paragon,henrik,rainyday,pacino,senna,bigdog1,alleycat,12345qaz,narnia,mustang2,tanya1,gianni,apollo11,wetter,clovis,escalade,rainbows,freddy1,smart1,daisydog,s123456,cocksucker,pushkin,lefty,sambo,fyutkjxtr,hiziad,boyz,whiplash,orchard,newark,adrenalin,1598753,bootsie,chelle,trustme,chewy,golfgti,tuscl,ambrosia,5wr2i7h8,penetration,shonuf,jughead,payday,stickman,gotham,kolokol,johnny5,kolbasa,stang,puppydog,charisma,gators1,mone,jakarta,draco,nightmar,01011973,inlove,laetitia,02091973,tarpon,nautica,meadow,0192837465,luckyone,14881488,chessie,goldeney,tarakan,69camaro,bungle,wordup,interne,fuckme2,515000,dragonfl,sprout,02081974,gerbil,bandit1,02071971,melanie1,phialpha,camber,kathy1,adriano,gonzo1,10293847,bigjohn,bismarck,7777777a,scamper,12348765,rabbits,222777,bynthytn,dima123,alexander1,mallorca,dragster,favorite6,beethove,burner,cooper1,fosters,hello2,normandy,777999,sebring,1michael,lauren1,blake1,killa,02091971,nounours,trumpet1,thumper1,playball,xantia,rugby1,rocknroll,guillaum,angela1,strelok,prosper,buttercup,masterp,dbnfkbr,cambridg,venom,treefrog,lumina,1234566,supra,sexybabe,freee,shen,frogs,driller,pavement,grace1,dicky,checker,smackdown,pandas,cannibal,asdffdsa,blue42,zyjxrf,nthvbyfnjh,melrose,neon,jabber,gamma,369258147,aprilia,atticus,benessere,catcher,skipper1,azertyuiop,sixty9,thierry,treetop,jello,melons,123456789qwe,tantra,buzzer,catnip,bouncer,computer1,sexyone,ananas,young1,olenka,sexman,mooses,kittys,sephiroth,contra,hallowee,skylark,sparkles,777333,1qazxsw23edc,lucas1,q1w2e3r,gofast,hannes,amethyst,ploppy,flower2,hotass,amatory,volleyba,dixie1,bettyboo,ticklish,02061974,frenchy,phish1,murphy1,trustno,02061972,leinad,mynameis,spooge,jupiter1,hyundai,frosch,junkmail,abacab,marbles,32167,casio,sunshine1,wayne1,longhair,caster,snicker,02101973,gannibal,skinhead,hansol,gatsby,segblue2,montecar,plato,gumby,kaboom,matty,bosco1,888999,jazzy,panter,jesus123,charlie2,giulia,candyass,sex69,travis1,farmboy,special1,02041973,letsdoit,password01,allison1,abcdefg1,notredam,ilikeit,789654123,liberty1,rugger,uptown,alcatraz,123456w,airman,007bond,navajo,kenobi,terrier,stayout,grisha,frankie1,fluff,1qazzaq1,1234561,virginie,1234568,tango1,werdna,octopus,fitter,dfcbkbcf,blacklab,115599,montrose,allen1,supernova,frederik,ilovepussy,justice1,radeon,playboy2,blubber,sliver,swoosh,motocros,lockdown,pearls,thebear,istheman,pinetree,biit,1234rewq,rustydog,tampabay,titts,babycake,jehovah,vampire1,streaming,collie,camil,fidelity,calvin1,stitch,gatit,restart,puppy1,budgie,grunt,capitals,hiking,dreamcas,zorro1,321678,riffraff,makaka,playmate,napalm,rollin,amstel,zxcvb123,samanth,rumble,fuckme69,jimmys,951357,pizzaman,1234567899,tralala,delpiero,alexi,yamato,itisme,1million,vfndtq,kahlua,londo,wonderboy,carrots,tazz,ratboy,rfgecnf,02081973,nico,fujitsu,tujhrf,sergbest,blobby,02051970,sonic1,1357911,smirnov,video1,panhead,bucky,02031974,44332211,duffer,cashmoney,left4dead,bagpuss,salman,01011972,titfuck,66613666,england1,malish,dresden,lemans,darina,zapper,123456as,123456qqq,met2002,02041972,redstar,blue23,1234509876,pajero,booyah,please1,tetsuo,semper,finder,hanuman,sunlight,123456n,02061971,treble,cupoi,password99,dimitri,3ip76k2,popcorn1,lol12345,stellar,nympho,shark1,keith1,saskia,bigtruck,revoluti,rambo1,asd222,feelgood,phat,gogators,bismark,cola,puck,furball,burnout,slonik,bowtie,mommy1,icecube,fabienn,mouser,papamama,rolex,giants1,blue11,trooper1,momdad,iklo,morten,rhubarb,gareth,123456d,blitz,canada1,r2d2,brest,tigercat,usmarine,lilbit,benny1,azrael,lebowski,12345r,madagaskar,begemot,loverman,dragonballz,italiano,mazda3,naughty1,onions,diver1,cyrano,capcom,asdfg123,forlife,fisherman,weare138,requiem,mufasa,alpha123,piercing,hellas,abracadabra,duckman,caracas,macintos,02011971,jordan2,crescent,fduecn,hogtied,eatmenow,ramjet,18121812,kicksass,whatthe,discus,rfhfvtkmrf,rufus1,sqdwfe,mantle,vegitto,trek,dan123,paladin1,rudeboy,liliya,lunchbox,riversid,acapulco,libero,dnsadm,maison,toomuch,boobear,hemlock,sextoy,pugsley,misiek,athome,migue,altoids,marcin,123450,rhfcfdbwf,jeter2,rhinos,rjhjkm,mercury1,ronaldinho,shampoo,makayla,kamilla,masterbating,tennesse,holger,john1,matchbox,hores,poptart,parlament,goodyear,asdfgh1,02081970,hardwood,alain,erection,hfytnrb,highlife,implants,benjami,dipper,jeeper,bendover,supersonic,babybear,laserjet,gotenks,bama,natedogg,aol123,pokemo,rabbit1,raduga,sopranos,cashflow,menthol,pharao,hacking,334455,ghjcnbnenrf,lizzy,muffin1,pooky,penis1,flyer,gramma,dipset,becca,ireland1,diana1,donjuan,pong,ziggy1,alterego,simple1,cbr900,logger,111555,claudia1,cantona7,matisse,ljxtymrf,victori,harle,mamas,encore,mangos,iceman1,diamon,alexxx,tiamat,5000,desktop,mafia,smurf,princesa,shojou,blueberr,welkom,maximka,123890,123q123,tammy1,bobmarley,clips,demon666,ismail,termite,laser1,missie,altair,donna1,bauhaus,trinitron,mogwai,flyers88,juniper,nokia5800,boroda,jingles,qwerasdfzxcv,shakur,777666,legos,mallrats,1qazxsw,goldeneye,tamerlan,julia1,backbone,spleen,49ers,shady,darkone,medic1,justi,giggle,cloudy,aisan,douche,parkour,bluejay,huskers1,redwine,1qw23er4,satchmo,1231234,nineball,stewart1,ballsack,probes,kappa,amiga,flipper1,dortmund,963258,trigun,1237895,homepage,blinky,screwy,gizzmo,belkin,chemist,coolhand,chachi,braves1,thebest,greedisgood,pro100,banana1,101091m,123456g,wonderfu,barefeet,8inches,1111qqqq,kcchiefs,qweasdzxc123,metal1,jennifer1,xian,asdasd123,pollux,cheerleaers,fruity,mustang5,turbos,shopper,photon,espana,hillbill,oyster,macaroni,gigabyte,jesper,motown,tuxedo,buster12,triplex,cyclones,estrell,mortis,holla,456987,fiddle,sapphic,jurassic,thebeast,ghjcnjq,baura,spock1,metallica1,karaoke,nemrac58,love1234,02031970,flvbybcnhfnjh,frisbee,diva,ajax,feathers,flower1,soccer11,allday,mierda,pearl1,amature,marauder,333555,redheads,womans,egorka,godbless,159263,nimitz,aaaa1111,sashka,madcow,socce,greywolf,baboon,pimpdaddy,123456789r,reloaded,lancia,rfhfylfi,dicker,placid,grimace,22446688,olemiss,whores,culinary,wannabe,maxi,1234567aa,amelie,riley1,trample,phantom1,baberuth,bramble,asdfqwer,vides,4you,abc123456,taichi,aztnm,smother,outsider,hakr,blackhawk,bigblack,girlie,spook,valeriya,gianluca,freedo,1q2q3q4q,handbag,lavalamp,cumm,pertinant,whatup,nokia123,redlight,patrik,111aaa,poppy1,dfytxrf,aviator,sweeps,kristin1,cypher,elway,yinyang,access1,poophead,tucson,noles1,monterey,waterfal,dank,dougal,918273,suede,minnesot,legman,bukowski,ganja,mammoth,riverrat,asswipe,daredevi,lian,arizona1,kamikadze,alex1234,smile1,angel2,55bgates,bellagio,0001,wanrltw,stiletto,lipton,arsena,biohazard,bbking,chappy,tetris,as123456,darthvad,lilwayne,nopassword,7412369,123456789987654321,natchez,glitter,14785236,mytime,rubicon,moto,pyon,wazzup,tbird,shane1,nightowl,getoff,beckham7,trueblue,hotgirl,nevermin,deathnote,13131,taffy,bigal,copenhag,apricot,gallaries,dtkjcbgtl,totoro,onlyone,civicsi,jesse1,baby123,sierra1,festus,abacus,sickboy,fishtank,fungus,charle,golfpro,teensex,mario66,seaside,aleksei,rosewood,blackberry,1020304050,bedlam,schumi,deerhunt,contour,darkelf,surveyor,deltas,pitchers,741258963,dipstick,funny1,lizzard,112233445566,jupiter2,softtail,titman,greenman,z1x2c3v4b5,smartass,12345677,notnow,myworld,nascar1,chewbacc,nosferatu,downhill,dallas22,kuan,blazers,whales,soldat,craving,powerman,yfcntyf,hotrats,cfvceyu,qweasdzx,princess1,feline,qqwwee,chitown,1234qaz,mastermind,114477,dingbat,care1839,standby,kismet,atreides,dogmeat,icarus,monkeyboy,alex1,mouses,nicetits,sealteam,chopper1,crispy,winter99,rrpass1,myporn,myspace1,corazo,topolino,ass123,lawman,muffy,orgy,1love,passord,hooyah,ekmzyf,pretzel,amonra,nestle,01011950,jimbeam,happyman,z12345,stonewal,helios,manunited,harcore,dick1,gaymen,2hot4u,light1,qwerty13,kakashi,pjkjnj,alcatel,taylo,allah,buddydog,ltkmaby,mongo,blonds,start123,audia6,123456v,civilwar,bellaco,turtles,mustan,deadspin,aaa123,fynjirf,lucky123,tortoise,amor,summe,waterski,zulu,drag0n,dtxyjcnm,gizmos,strife,interacial,pusyy,goose1,bear1,equinox,matri,jaguar1,tobydog,sammys,nachos,traktor,bryan1,morgoth,444555,dasani,miami1,mashka,xxxxxx1,ownage,nightwin,hotlips,passmast,cool123,skolko,eldiablo,manu,1357908642,screwyou,badabing,foreplay,hydro,kubrick,seductive,demon1,comeon,galileo,aladdin,metoo,happines,902100,mizuno,caddy,bizzare,girls1,redone,ohmygod,sable,bonovox,girlies,hamper,opus,gizmodo1,aaabbb,pizzahut,999888,rocky2,anton1,kikimora,peavey,ocelot,a1a2a3a4,2wsx3edc,jackie1,solace,sprocket,galary,chuck1,volvo1,shurik,poop123,locutus,virago,wdtnjxtr,tequier,bisexual,doodles,makeitso,fishy,789632145,nothing1,fishcake,sentry,libertad,oaktree,fivestar,adidas1,vegitta,mississi,spiffy,carme,neutron,vantage,agassi,boners,123456789v,hilltop,taipan,barrage,kenneth1,fister,martian,willem,lfybkf,bluestar,moonman,ntktdbpjh,paperino,bikers,daffy,benji,quake,dragonfly,suckcock,danilka,lapochka,belinea,calypso,asshol,camero1,abraxas,mike1234,womam,q1q2q3q4q5,youknow,maxpower,pic's,audi80,sonora,raymond1,tickler,tadpole,belair,crazyman,finalfantasy,999000,jonatha,paisley,kissmyas,morgana,monste,mantra,spunk,magic123,jonesy,mark1,alessand,741258,baddest,ghbdtnrfrltkf,zxccxz,tictac,augustin,racers,7grout,foxfire,99762000,openit,nathanie,1z2x3c4v5b,seadog,gangbanged,lovehate,hondacbr,harpoon,mamochka,fisherma,bismilla,locust,wally1,spiderman1,saffron,utjhubq,123456987,20spanks,safeway,pisser,bdfyjd,kristen1,bigdick1,magenta,vfhujif,anfisa,friday13,qaz123wsx,0987654321q,tyrant,guan,meggie,kontol,nurlan,ayanami,rocket1,yaroslav,websol76,mutley,hugoboss,websolutions,elpaso,gagarin,badboys,sephirot,918273645,newuser,qian,edcrfv,booger1,852258,lockout,timoxa94,mazda323,firedog,sokolova,skydiver,jesus777,1234567890z,soulfly,canary,malinka,guillerm,hookers,dogfart,surfer1,osprey,india123,rhjkbr,stoppedby,nokia5530,123456789o,blue1,werter,divers,3000,123456f,alpina,cali,whoknows,godspeed,986532,foreskin,fuzzy1,heyyou,didier,slapnuts,fresno,rosebud1,sandman1,bears1,blade1,honeybun,queen1,baronn,pakista,philipp,9111961,topsecret,sniper1,214365,slipper,letsfuck,pippen33,godawgs,mousey,qw123456,scrotum,loveis,lighthou,bp2002,nancy123,jeffrey1,susieq,buddy2,ralphie,trout1,willi,antonov,sluttey,rehbwf,marty1,darian,losangeles,letme1n,12345d,pusssy,godiva,ender,golfnut,leonidas,a1b2c3d4e5,puffer,general1,wizzard,lehjxrf,racer1,bigbucks,cool12,buddys,zinger,esprit,vbienrf,josep,tickling,froggie,987654321a,895623,daddys,crumbs,gucci,mikkel,opiate,tracy1,christophe,came11,777555,petrovich,humbug,dirtydog,allstate,horatio,wachtwoord,creepers,squirts,rotary,bigd,georgia1,fujifilm,2sweet,dasha,yorkie,slimjim,wiccan,kenzie,system1,skunk,b12345,getit,pommes,daredevil,sugars,bucker,piston,lionheart,1bitch,515051,catfight,recon,icecold,fantom,vodafone,kontakt,boris1,vfcnth,canine,01011961,valleywa,faraon,chickenwing101,qq123456,livewire,livelife,roosters,jeepers,ilya1234,coochie,pavlik,dewalt,dfhdfhf,architec,blackops,1qaz2wsx3edc4rfv,rhfcjnf,wsxedc,teaser,sebora,25252,rhino1,ankara,swifty,decimal,redleg,shanno,nermal,candies,smirnova,dragon01,photo1,ranetki,a1s2d3f4g5,axio,wertzu,maurizio,6uldv8,zxcvasdf,punkass,flowe,graywolf,peddler,3rjs1la7qe,mpegs,seawolf,ladyboy,pianos,piggies,vixen,alexus,orpheus,gdtrfb,z123456,macgyver,hugetits,ralph1,flathead,maurici,mailru,goofball,nissan1,nikon,stopit,odin,big1,smooch,reboot,famil,bullit,anthony7,gerhard,methos,124038,morena,eagle2,jessica2,zebras,getlost,gfynthf,123581321,sarajevo,indon,comets,tatjana,rfgbnjirf,joystick,batman12,123456c,sabre,beerme,victory1,kitties,1475369,badboy1,booboo1,comcast,slava,squid,saxophon,lionhear,qaywsx,bustle,nastena,roadway,loader,hillside,starlight,24681012,niggers,access99,bazooka,molly123,blackice,bandi,cocacol,nfhfrfy,timur,muschi,horse1,quant4307s,squerting,oscars,mygirls,flashman,tangerin,goofy1,p0o9i8,housewifes,newness,monkey69,escorpio,password11,hippo,warcraft3,qazxsw123,qpalzm,ribbit,ghbdtndctv,bogota,star123,258000,lincoln1,bigjim,lacoste,firestorm,legenda,indain,ludacris,milamber,1009,evangeli,letmesee,a111111,hooters1,bigred1,shaker,husky,a4tech,cnfkrth,argyle,rjhjdf,nataha,0o9i8u7y,gibson1,sooners1,glendale,archery,hoochie,stooge,aaaaaa1,scorpions,school1,vegas1,rapier,mike23,bassoon,groupd2013,macaco,baker1,labia,freewill,santiag,silverado,butch1,vflfufcrfh,monica1,rugrat,cornhole,aerosmit,bionicle,gfgfvfvf,daniel12,virgo,fmale,favorite2,detroit1,pokey,shredder,baggies,wednesda,cosmo1,mimosa,sparhawk,firehawk,romario,911turbo,funtimes,fhntvrf,nexus6,159753456,timothy1,bajingan,terry1,frenchie,raiden,1mustang,babemagnet,74123698,nadejda,truffles,rapture,douglas1,lamborghini,motocross,rjcvjc,748596,skeeter1,dante1,angel666,telecom,carsten,pietro,bmw318,astro1,carpediem,samir,orang,helium,scirocco,fuzzball,rushmore,rebelz,hotspur,lacrimosa,chevys10,madonna1,domenico,yfnfirf,jachin,shelby1,bloke,dawgs,dunhill,atlanta1,service1,mikado,devilman,angelit,reznor,euphoria,lesbain,checkmat,browndog,phreak,blaze1,crash1,farida,mutter,luckyme,horsemen,vgirl,jediknig,asdas,cesare,allnight,rockey,starlite,truck1,passfan,close-up,samue,cazzo,wrinkles,homely,eatme1,sexpot,snapshot,dima1995,asthma,thetruth,ducky,blender,priyanka,gaucho,dutchman,sizzle,kakarot,651550,passcode,justinbieber,666333,elodie,sanjay,110442,alex01,lotus1,2300mj,lakshmi,zoomer,quake3,12349876,teapot,12345687,ramada,pennywis,striper,pilot1,chingon,optima,nudity,ethan1,euclid,beeline,loyola,biguns,zaq12345,bravo1,disney1,buffa,assmunch,vivid,6661313,wellingt,aqwzsx,madala11,9874123,sigmar,pictere,tiptop,bettyboop,dinero,tahiti,gregory1,bionic,speed1,fubar1,lexus1,denis1,hawthorn,saxman,suntzu,bernhard,dominika,camaro1,hunter12,balboa,bmw2002,seville,diablo1,vfhbyjxrf,1234abc,carling,lockerroom,punani,darth,baron1,vaness,1password,libido,picher,232425,karamba,futyn007,daydream,11001001,dragon123,friends1,bopper,rocky123,chooch,asslover,shimmer,riddler,openme,tugboat,sexy123,midori,gulnara,christo,swatch,laker,offroad,puddles,hackers,mannheim,manager1,horseman,roman1,dancer1,komputer,pictuers,nokia5130,ejaculation,lioness,123456y,evilone,nastenka,pushok,javie,lilman,3141592,mjolnir,toulouse,pussy2,bigworm,smoke420,fullback,extensa,dreamcast,belize,delboy,willie1,casablanca,csyjxtr,ricky1,bonghit,salvator,basher,pussylover,rosie1,963258741,vivitron,cobra427,meonly,armageddon,myfriend,zardoz,qwedsazxc,kraken,fzappa,starfox,333999,illmatic,capoeira,weenie,ramzes,freedom2,toasty,pupkin,shinigami,fhvfutljy,nocturne,churchil,thumbnils,tailgate,neworder,sexymama,goarmy,cerebus,michelle1,vbifyz,surfsup,earthlin,dabulls,basketbal,aligator,mojojojo,saibaba,welcome2,wifes,wdtnjr,12345w,slasher,papabear,terran,footman,hocke,153759,texans,tom123,sfgiants,billabong,aassdd,monolith,xxx777,l3tm31n,ticktock,newone,hellno,japanees,contortionist,admin123,scout1,alabama1,divx1,rochard,privat,radar1,bigdad,fhctybq,tortuga,citrus,avanti,fantasy1,woodstock,s12345,fireman1,embalmer,woodwork,bonzai,konyor,newstart,jigga,panorama,goats,smithy,rugrats,hotmama,daedalus,nonstop,fruitbat,lisenok,quaker,violator,12345123,my3sons,cajun,fraggle,gayboy,oldfart,vulva,knickerless,orgasms,undertow,binky,litle,kfcnjxrf,masturbation,bunnie,alexis1,planner,transexual,sparty,leeloo,monies,fozzie,stinger1,landrove,anakonda,scoobie,yamaha1,henti,star12,rfhlbyfk,beyonce,catfood,cjytxrf,zealots,strat,fordtruc,archangel,silvi,sativa,boogers,miles1,bigjoe,tulip,petite,greentea,shitter,jonboy,voltron,morticia,evanescence,3edc4rfv,longshot,windows1,serge,aabbcc,starbucks,sinful,drywall,prelude1,www123,camel1,homebrew,marlins,123412,letmeinn,domini,swampy,plokij,fordf350,webcam,michele1,bolivi,27731828,wingzero,qawsedrftg,shinji,sverige,jasper1,piper1,cummer,iiyama,gocats,amour,alfarome,jumanji,mike69,fantasti,1monkey,w00t88,shawn1,lorien,1a2s3d4f5g,koleso,murph,natascha,sunkist,kennwort,emine,grinder,m12345,q1q2q3q4,cheeba,money2,qazwsxedc1,diamante,prosto,pdiddy,stinky1,gabby1,luckys,franci,pornographic,moochie,gfhjdjp,samdog,empire1,comicbookdb,emili,motdepasse,iphone,braveheart,reeses,nebula,sanjose,bubba2,kickflip,arcangel,superbow,porsche911,xyzzy,nigger1,dagobert,devil1,alatam,monkey2,barbara1,12345v,vfpfafrf,alessio,babemagn,aceman,arrakis,kavkaz,987789,jasons,berserk,sublime1,rogue1,myspace,buckwhea,csyekz,pussy4me,vette1,boots1,boingo,arnaud,budlite,redstorm,paramore,becky1,imtheman,chango,marley1,milkyway,666555,giveme,mahalo,lux2000,lucian,paddy,praxis,shimano,bigpenis,creeper,newproject2004,rammstei,j3qq4h7h2v,hfljcnm,lambchop,anthony2,bugman,gfhjkm12,dreamer1,stooges,cybersex,diamant,cowboyup,maximus1,sentra,615243,goethe,manhatta,fastcar,selmer,1213141516,yfnfitymrf,denni,chewey,yankee1,elektra,123456789p,trousers,fishface,topspin,orwell,vorona,sodapop,motherfu,ibilltes,forall,kookie,ronald1,balrog,maximilian,mypasswo,sonny1,zzxxcc,tkfkdg,magoo,mdogg,heeled,gitara,lesbos,marajade,tippy,morozova,enter123,lesbean,pounded,asd456,fialka,scarab,sharpie,spanky1,gstring,sachin,12345asd,princeto,hellohel,ursitesux,billows,1234kekc,kombat,cashew,duracell,kseniya,sevenof9,kostik,arthur1,corvet07,rdfhnbhf,songoku,tiberian,needforspeed,1qwert,dropkick,kevin123,panache,libra,a123456a,kjiflm,vfhnsirf,cntgfy,iamcool,narut,buffer,sk8ordie,urlaub,fireblade,blanked,marishka,gemini1,altec,gorillaz,chief1,revival47,ironman1,space1,ramstein,doorknob,devilmaycry,nemesis1,sosiska,pennstat,monday1,pioner,shevchenko,detectiv,evildead,blessed1,aggie,coffees,tical,scotts,bullwink,marsel,krypto,adrock,rjitxrf,asmodeus,rapunzel,theboys,hotdogs,deepthro,maxpayne,veronic,fyyeirf,otter,cheste,abbey1,thanos,bedrock,bartok,google1,xxxzzz,rodent,montecarlo,hernande,mikayla,123456789l,bravehea,12locked,ltymub,pegasus1,ameteur,saltydog,faisal,milfnew,momsuck,everques,ytngfhjkz,m0nkey,businessbabe,cooki,custard,123456ab,lbvjxrf,outlaws,753357,qwerty78,udacha,insider,chees,fuckmehard,shotokan,katya,seahorse,vtldtlm,turtle1,mike12,beebop,heathe,everton1,darknes,barnie,rbcekz,alisher,toohot,theduke,555222,reddog1,breezy,bulldawg,monkeyman,baylee,losangel,mastermi,apollo1,aurelie,zxcvb12345,cayenne,bastet,wsxzaq,geibcnbr,yello,fucmy69,redwall,ladybird,bitchs,cccccc1,rktjgfnhf,ghjdthrf,quest1,oedipus,linus,impalass,fartman,12345k,fokker,159753a,optiplex,bbbbbb1,realtor,slipkno,santacru,rowdy,jelena,smeller,3984240,ddddd1,sexyme,janet1,3698741,eatme69,cazzone,today1,poobear,ignatius,master123,newpass1,heather2,snoopdogg,blondinka,pass12,honeydew,fuckthat,890098890,lovem,goldrush,gecko,biker1,llama,pendejo,avalanche,fremont,snowman1,gandolf,chowder,1a2b3c4d5e,flyguy,magadan,1fuck,pingvin,nokia5230,ab1234,lothar,lasers,bignuts,renee1,royboy,skynet,12340987,1122334,dragrace,lovely1,22334455,booter,12345612,corvett,123456qq,capital1,videoes,funtik,wyvern,flange,sammydog,hulkster,13245768,not4you,vorlon,omegared,l58jkdjp!,filippo,123mudar,samadams,petrus,chris12,charlie123,123456789123,icetea,sunderla,adrian1,123qweas,kazanova,aslan,monkey123,fktyeirf,goodsex,123ab,lbtest,banaan,bluenose,837519,asd12345,waffenss,whateve,1a2a3a4a,trailers,vfhbirf,bhbcrf,klaatu,turk182,monsoon,beachbum,sunbeam,succes,clyde1,viking1,rawhide,bubblegum,princ,mackenzi,hershey1,222555,dima55,niggaz,manatee,aquila,anechka,pamel,bugsbunn,lovel,sestra,newport1,althor,hornyman,wakeup,zzz111,phishy,cerber,torrent,thething,solnishko,babel,buckeye1,peanu,ethernet,uncencored,baraka,665544,chris2,rb26dett,willy1,choppers,texaco,biggirl,123456b,anna2614,sukebe,caralho,callofduty,rt6ytere,jesus7,angel12,1money,timelord,allblack,pavlova,romanov,tequiero,yitbos,lookup,bulls23,snowflake,dickweed,barks,lever,irisha,firestar,fred1234,ghjnjnbg,danman,gatito,betty1,milhouse,kbctyjr,masterbaiting,delsol,papit,doggys,123698741,bdfyjdf,invictus,bloods,kayla1,yourmama,apple2,angelok,bigboy1,pontiac1,verygood,yeshua,twins2,porn4me,141516,rasta69,james2,bosshog,candys,adventur,stripe,djkjlz,dokken,austin316,skins,hogwarts,vbhevbh,navigato,desperado,xxx666,cneltyn,vasiliy,hazmat,daytek,eightbal,fred1,four20,74227422,fabia,aerosmith,manue,wingchun,boohoo,hombre,sanity72,goatboy,fuckm,partizan,avrora,utahjazz,submarin,pussyeat,heinlein,control1,costaric,smarty,chuan,triplets,snowy,snafu,teacher1,vangogh,vandal,evergree,cochise,qwerty99,pyramid1,saab900,sniffer,qaz741,lebron23,mark123,wolvie,blackbelt,yoshi,feeder,janeway,nutella,fuking,asscock,deepak,poppie,bigshow,housewife,grils,tonto,cynthia1,temptress,irakli,belle1,russell1,manders,frank123,seabass,gforce,songbird,zippy1,naught,brenda1,chewy1,hotshit,topaz,43046721,girfriend,marinka,jakester,thatsme,planeta,falstaff,patrizia,reborn,riptide,cherry1,shuan,nogard,chino,oasis1,qwaszx12,goodlife,davis1,1911a1,harrys,shitfuck,12345678900,russian7,007700,bulls1,porshe,danil,dolphi,river1,sabaka,gobigred,deborah1,volkswagen,miamo,alkaline,muffdive,1letmein,fkbyrf,goodguy,hallo1,nirvan,ozzie,cannonda,cvbhyjdf,marmite,germany1,joeblow,radio1,love11,raindrop,159852,jacko,newday,fathead,elvis123,caspe,citibank,sports1,deuce,boxter,fakepass,golfman,snowdog,birthday4,nonmembe,niklas,parsifal,krasota,theshit,1235813,maganda,nikita1,omicron,cassie1,columbo,buick,sigma1,thistle,bassin,rickster,apteka,sienna,skulls,miamor,coolgirl,gravis,1qazxc,virgini,hunter2,akasha,batma,motorcyc,bambino,tenerife,fordf250,zhuan,iloveporn,markiza,hotbabes,becool,fynjybyf,wapapapa,forme,mamont,pizda,dragonz,sharon1,scrooge,mrbill,pfloyd,leeroy,natedog,ishmael,777111,tecumseh,carajo,nfy.irf,0000000000o,blackcock,fedorov,antigone,feanor,novikova,bobert,peregrin,spartan117,pumkin,rayman,manuals,tooltime,555333,bonethug,marina1,bonnie1,tonyhawk,laracroft,mahalkita,18273645,terriers,gamer,hoser,littlema,molotok,glennwei,lemon1,caboose,tater,12345654321,brians,fritz1,mistral,jigsaw,fuckshit,hornyguy,southside,edthom,antonio1,bobmarle,pitures,ilikesex,crafty,nexus,boarder,fulcrum,astonvil,yanks1,yngwie,account1,zooropa,hotlegs,sammi,gumbo,rover1,perkele,maurolarastefy,lampard,357753,barracud,dmband,abcxyz,pathfinder,335577,yuliya,micky,jayman,asdfg12345,1596321,halcyon,rerfhtre,feniks,zaxscd,gotyoass,jaycee,samson1,jamesb,vibrate,grandpri,camino,colossus,davidb,mamo4ka,nicky1,homer123,pinguin,watermelon,shadow01,lasttime,glider,823762,helen1,pyramids,tulane,osama,rostov,john12,scoote,bhbyrf,gohan,galeries,joyful,bigpussy,tonka,mowgli,astalavista,zzz123,leafs,dalejr8,unicorn1,777000,primal,bigmama,okmijn,killzone,qaz12345,snookie,zxcvvcxz,davidc,epson,rockman,ceaser,beanbag,katten,3151020,duckhunt,segreto,matros,ragnar,699669,sexsexse,123123z,fuckyeah,bigbutts,gbcmrf,element1,marketin,saratov,elbereth,blaster1,yamahar6,grime,masha,juneau,1230123,pappy,lindsay1,mooner,seattle1,katzen,lucent,polly1,lagwagon,pixie,misiaczek,666666a,smokedog,lakers24,eyeball,ironhors,ametuer,volkodav,vepsrf,kimmy,gumby1,poi098,ovation,1q2w3,drinker,penetrating,summertime,1dallas,prima,modles,takamine,hardwork,macintosh,tahoe,passthie,chiks,sundown,flowers1,boromir,music123,phaedrus,albert1,joung,malakas,gulliver,parker1,balder,sonne,jessie1,domainlock2005,express1,vfkbyf,youandme,raketa,koala,dhjnvytyjub,nhfrnjh,testibil,ybrbnjc,987654321q,axeman,pintail,pokemon123,dogggg,shandy,thesaint,11122233,x72jhhu3z,theclash,raptors,zappa1,djdjxrf,hell666,friday1,vivaldi,pluto1,lance1,guesswho,jeadmi,corgan,skillz,skippy1,mango1,gymnastic,satori,362514,theedge,cxfcnkbdfz,sparkey,deicide,bagels,lololol,lemmings,r4e3w2q1,silve,staind,schnuffi,dazzle,basebal1,leroy1,bilbo1,luckie,qwerty2,goodfell,hermione,peaceout,davidoff,yesterda,killah,flippy,chrisb,zelda1,headless,muttley,fuckof,tittys,catdaddy,photog,beeker,reaver,ram1500,yorktown,bolero,tryagain,arman,chicco,learjet,alexei,jenna1,go2hell,12s3t4p55,momsanaladventure,mustang9,protoss,rooter,ginola,dingo1,mojave,erica1,1qazse4,marvin1,redwolf,sunbird,dangerou,maciek,girsl,hawks1,packard1,excellen,dashka,soleda,toonces,acetate,nacked,jbond007,alligator,debbie1,wellhung,monkeyma,supers,rigger,larsson,vaseline,rjnzhf,maripos,123456asd,cbr600rr,doggydog,cronic,jason123,trekker,flipmode,druid,sonyvaio,dodges,mayfair,mystuff,fun4me,samanta,sofiya,magics,1ranger,arcane,sixtynin,222444,omerta,luscious,gbyudby,bobcats,envision,chance1,seaweed,holdem,tomate,mensch,slicer,acura1,goochi,qweewq,punter,repoman,tomboy,never1,cortina,gomets,147896321,369852147,dogma,bhjxrf,loglatin,eragon,strato,gazelle,growler,885522,klaudia,payton34,fuckem,butchie,scorpi,lugano,123456789k,nichola,chipper1,spide,uhbujhbq,rsalinas,vfylfhby,longhorns,bugatti,everquest,!qaz2wsx,blackass,999111,snakeman,p455w0rd,fanatic,family1,pfqxbr,777vlad,mysecret,marat,phoenix2,october1,genghis,panties1,cooker,citron,ace123,1234569,gramps,blackcoc,kodiak1,hickory,ivanhoe,blackboy,escher,sincity,beaks,meandyou,spaniel,canon1,timmy1,lancaste,polaroid,edinburg,fuckedup,hotman,cueball,golfclub,gopack,bookcase,worldcup,dkflbvbhjdbx,twostep,17171717aa,letsplay,zolushka,stella1,pfkegf,kingtut,67camaro,barracuda,wiggles,gjhjkm,prancer,patata,kjifhf,theman1,romanova,sexyass,copper1,dobber,sokolov,pomidor,algernon,cadman,amoremio,william2,silly1,bobbys,hercule,hd764nw5d7e1vb1,defcon,deutschland,robinhood,alfalfa,machoman,lesbens,pandora1,easypay,tomservo,nadezhda,goonies,saab9000,jordyn,f15eagle,dbrecz,12qwerty,greatsex,thrawn,blunted,baywatch,doggystyle,loloxx,chevy2,january1,kodak,bushel,78963214,ub6ib9,zz8807zpl,briefs,hawker,224488,first1,bonzo,brent1,erasure,69213124,sidewind,soccer13,622521,mentos,kolibri,onepiece,united1,ponyboy,keksa12,wayer,mypussy,andrej,mischa,mille,bruno123,garter,bigpun,talgat,familia,jazzy1,mustang8,newjob,747400,bobber,blackbel,hatteras,ginge,asdfjkl;,camelot1,blue44,rebbyt34,ebony1,vegas123,myboys,aleksander,ijrjkflrf,lopata,pilsner,lotus123,m0nk3y,andreev,freiheit,balls1,drjynfrnt,mazda1,waterpolo,shibumi,852963,123bbb,cezer121,blondie1,volkova,rattler,kleenex,ben123,sanane,happydog,satellit,qazplm,qazwsxedcrfvtgb,meowmix,badguy,facefuck,spice1,blondy,major1,25000,anna123,654321a,sober1,deathrow,patterso,china1,naruto1,hawkeye1,waldo1,butchy,crayon,5tgb6yhn,klopik,crocodil,mothra,imhorny,pookie1,splatter,slippy,lizard1,router,buratino,yahweh,123698,dragon11,123qwe456,peepers,trucker1,ganjaman,1hxboqg2,cheyanne,storys,sebastie,zztop,maddison,4rfv3edc,darthvader,jeffro,iloveit,victor1,hotty,delphin,lifeisgood,gooseman,shifty,insertions,dude123,abrupt,123masha,boogaloo,chronos,stamford,pimpster,kthjxrf,getmein,amidala,flubber,fettish,grapeape,dantes,oralsex,jack1,foxcg33,winchest,francis1,getin,archon,cliffy,blueman,1basebal,sport1,emmitt22,porn123,bignasty,morga,123hfjdk147,ferrar,juanito,fabiol,caseydog,steveo,peternorth,paroll,kimchi,bootleg,gaijin,secre,acacia,eatme2,amarillo,monkey11,rfhfgep,tylers,a1a2a3a4a5,sweetass,blower,rodina,babushka,camilo,cimbom,tiffan,vfnbkmlf,ohbaby,gotigers,lindsey1,dragon13,romulus,qazxsw12,zxcvbn1,dropdead,hitman47,snuggle,eleven11,bloopers,357mag,avangard,bmw320,ginscoot,dshade,masterkey,voodoo1,rootedit,caramba,leahcim,hannover,8phrowz622,tim123,cassius,000000a,angelito,zzzzz1,badkarma,star1,malaga,glenwood,footlove,golf1,summer12,helpme1,fastcars,titan1,police1,polinka,k.jdm,marusya,augusto,shiraz,pantyhose,donald1,blaise,arabella,brigada,c3por2d2,peter01,marco1,hellow,dillweed,uzumymw,geraldin,loveyou2,toyota1,088011,gophers,indy500,slainte,5hsu75kpot,teejay,renat,racoon,sabrin,angie1,shiznit,harpua,sexyred,latex,tucker1,alexandru,wahoo,teamwork,deepblue,goodison,rundmc,r2d2c3p0,puppys,samba,ayrton,boobed,999777,topsecre,blowme1,123321z,loudog,random1,pantie,drevil,mandolin,121212q,hottub,brother1,failsafe,spade1,matvey,open1234,carmen1,priscill,schatzi,kajak,gooddog,trojans1,gordon1,kayak,calamity,argent,ufhvjybz,seviyi,penfold,assface,dildos,hawkwind,crowbar,yanks,ruffles,rastus,luv2epus,open123,aquafina,dawns,jared1,teufel,12345c,vwgolf,pepsi123,amores,passwerd,01478520,boliva,smutty,headshot,password3,davidd,zydfhm,gbgbcmrf,pornpass,insertion,ceckbr,test2,car123,checkit,dbnfkbq,niggas,nyyankee,muskrat,nbuhtyjr,gunner1,ocean1,fabienne,chrissy1,wendys,loveme89,batgirl,cerveza,igorek,steel1,ragman,boris123,novifarm,sexy12,qwerty777,mike01,giveitup,123456abc,fuckall,crevice,hackerz,gspot,eight8,assassins,texass,swallows,123458,baldur,moonshine,labatt,modem,sydney1,voland,dbnfkz,hotchick,jacker,princessa,dawgs1,holiday1,booper,reliant,miranda1,jamaica1,andre1,badnaamhere,barnaby,tiger7,david12,margaux,corsica,085tzzqi,universi,thewall,nevermor,martin6,qwerty77,cipher,apples1,0102030405,seraphim,black123,imzadi,gandon,ducati99,1shadow,dkflbvbhjdyf,44magnum,bigbad,feedme,samantha1,ultraman,redneck1,jackdog,usmc0311,fresh1,monique1,tigre,alphaman,cool1,greyhoun,indycar,crunchy,55chevy,carefree,willow1,063dyjuy,xrated,assclown,federica,hilfiger,trivia,bronco1,mamita,100200300,simcity,lexingky,akatsuki,retsam,johndeere,abudfv,raster,elgato,businka,satanas,mattingl,redwing1,shamil,patate,mannn,moonstar,evil666,b123456,bowl300,tanechka,34523452,carthage,babygir,santino,bondarenko,jesuss,chico1,numlock,shyguy,sound1,kirby1,needit,mostwanted,427900,funky1,steve123,passions,anduril,kermit1,prospero,lusty,barakuda,dream1,broodwar,porky,christy1,mahal,yyyyyy1,allan1,1sexy,flintsto,capri,cumeater,heretic,robert2,hippos,blindax,marykay,collecti,kasumi,1qaz!qaz,112233q,123258,chemistr,coolboy,0o9i8u,kabuki,righton,tigress,nessie,sergej,andrew12,yfafyz,ytrhjvfyn,angel7,victo,mobbdeep,lemming,transfor,1725782,myhouse,aeynbr,muskie,leno4ka,westham1,cvbhyjd,daffodil,pussylicker,pamela1,stuffer,warehous,tinker1,2w3e4r,pluton,louise1,polarbea,253634,prime1,anatoliy,januar,wysiwyg,cobraya,ralphy,whaler,xterra,cableguy,112233a,porn69,jamesd,aqualung,jimmy123,lumpy,luckyman,kingsize,golfing1,alpha7,leeds1,marigold,lol1234,teabag,alex11,10sne1,saopaulo,shanny,roland1,basser,3216732167,carol1,year2005,morozov,saturn1,joseluis,bushed,redrock,memnoch,lalaland,indiana1,lovegod,gulnaz,buffalos,loveyou1,anteater,pattaya,jaydee,redshift,bartek,summerti,coffee1,ricochet,incest,schastie,rakkaus,h2opolo,suikoden,perro,dance1,loveme1,whoopass,vladvlad,boober,flyers1,alessia,gfcgjhn,pipers,papaya,gunsling,coolone,blackie1,gonads,gfhjkzytn,foxhound,qwert12,gangrel,ghjvtntq,bluedevi,mywife,summer01,hangman,licorice,patter,vfr750,thorsten,515253,ninguna,dakine,strange1,mexic,vergeten,12345432,8phrowz624,stampede,floyd1,sailfish,raziel,ananda,giacomo,freeme,crfprf,74185296,allstars,master01,solrac,gfnhbjn,bayliner,bmw525,3465xxx,catter,single1,michael3,pentium4,nitrox,mapet123456,halibut,killroy,xxxxx1,phillip1,poopsie,arsenalfc,buffys,kosova,all4me,32165498,arslan,opensesame,brutis,charles2,pochta,nadegda,backspac,mustang0,invis,gogeta,654321q,adam25,niceday,truckin,gfdkbr,biceps,sceptre,bigdave,lauras,user345,sandys,shabba,ratdog,cristiano,natha,march13,gumball,getsdown,wasdwasd,redhead1,dddddd1,longlegs,13572468,starsky,ducksoup,bunnys,omsairam,whoami,fred123,danmark,flapper,swanky,lakings,yfhenj,asterios,rainier,searcher,dapper,ltdjxrf,horsey,seahawk,shroom,tkfkdgo,aquaman,tashkent,number9,messi10,1asshole,milenium,illumina,vegita,jodeci,buster01,bareback,goldfinger,fire1,33rjhjds,sabian,thinkpad,smooth1,sully,bonghits,sushi1,magnavox,colombi,voiture,limpone,oldone,aruba,rooster1,zhenya,nomar5,touchdow,limpbizkit,rhfcfdxbr,baphomet,afrodita,bball1,madiso,ladles,lovefeet,matthew2,theworld,thunderbird,dolly1,123rrr,forklift,alfons,berkut,speedy1,saphire,oilman,creatine,pussylov,bastard1,456258,wicked1,filimon,skyline1,fucing,yfnfkbz,hot123,abdulla,nippon,nolimits,billiard,booty1,buttplug,westlife,coolbean,aloha1,lopas,asasin,1212121,october2,whodat,good4u,d12345,kostas,ilya1992,regal,pioneer1,volodya,focus1,bastos,nbvjif,fenix,anita1,vadimka,nickle,jesusc,123321456,teste,christ1,essendon,evgenii,celticfc,adam1,forumwp,lovesme,26exkp,chillout,burly,thelast1,marcus1,metalgear,test11,ronaldo7,socrate,world1,franki,mommie,vicecity,postov1000,charlie3,oldschool,333221,legoland,antoshka,counterstrike,buggy,mustang3,123454,qwertzui,toons,chesty,bigtoe,tigger12,limpopo,rerehepf,diddle,nokia3250,solidsnake,conan1,rockroll,963369,titanic1,qwezxc,cloggy,prashant,katharin,maxfli,takashi,cumonme,michael9,mymother,pennstate,khalid,48151623,fightclub,showboat,mateusz,elrond,teenie,arrow1,mammamia,dustydog,dominator,erasmus,zxcvb1,1a2a3a,bones1,dennis1,galaxie,pleaseme,whatever1,junkyard,galadriel,charlies,2wsxzaq1,crimson1,behemoth,teres,master11,fairway,shady1,pass99,1batman,joshua12,baraban,apelsin,mousepad,melon,twodogs,123321qwe,metalica,ryjgrf,pipiska,rerfhfxf,lugnut,cretin,iloveu2,powerade,aaaaaaa1,omanko,kovalenko,isabe,chobits,151nxjmt,shadow11,zcxfcnkbdf,gy3yt2rgls,vfhbyrf,159753123,bladerunner,goodone,wonton,doodie,333666999,fuckyou123,kitty123,chisox,orlando1,skateboa,red12345,destroye,snoogans,satan1,juancarlo,goheels,jetson,scottt,fuckup,aleksa,gfhfljrc,passfind,oscar123,derrick1,hateme,viper123,pieman,audi100,tuffy,andover,shooter1,10000,makarov,grant1,nighthaw,13576479,browneye,batigol,nfvfhf,chocolate1,7hrdnw23,petter,bantam,morlii,jediknight,brenden,argonaut,goodstuf,wisconsi,315920,abigail1,dirtbag,splurge,k123456,lucky777,valdepen,gsxr600,322223,ghjnjrjk,zaq1xsw2cde3,schwanz,walter1,letmein22,nomads,124356,codeblue,nokian70,fucke,footbal1,agyvorc,aztecs,passw0r,smuggles,femmes,ballgag,krasnodar,tamuna,schule,sixtynine,empires,erfolg,dvader,ladygaga,elite1,venezuel,nitrous,kochamcie,olivia1,trustn01,arioch,sting1,131415,tristar,555000,maroon,135799,marsik,555556,fomoco,natalka,cwoui,tartan,davecole,nosferat,hotsauce,dmitry,horus,dimasik,skazka,boss302,bluebear,vesper,ultras,tarantul,asd123asd,azteca,theflash,8ball,1footbal,titlover,lucas123,number6,sampson1,789852,party1,dragon99,adonai,carwash,metropol,psychnau,vthctltc,hounds,firework,blink18,145632,wildcat1,satchel,rice80,ghtktcnm,sailor1,cubano,anderso,rocks1,mike11,famili,dfghjc,besiktas,roygbiv,nikko,bethan,minotaur,rakesh,orange12,hfleuf,jackel,myangel,favorite7,1478520,asssss,agnieszka,haley1,raisin,htubyf,1buster,cfiekz,derevo,1a2a3a4a5a,baltika,raffles,scruffy1,clitlick,louis1,buddha1,fy.nrf,walker1,makoto,shadow2,redbeard,vfvfvskfhfve,mycock,sandydog,lineman,network1,favorite8,longdick,mustangg,mavericks,indica,1killer,cisco1,angelofwar,blue69,brianna1,bubbaa,slayer666,level42,baldrick,brutus1,lowdown,haribo,lovesexy,500000,thissuck,picker,stephy,1fuckme,characte,telecast,1bigdog,repytwjdf,thematrix,hammerhe,chucha,ganesha,gunsmoke,georgi,sheltie,1harley,knulla,sallas,westie,dragon7,conker,crappie,margosha,lisboa,3e2w1q,shrike,grifter,ghjcnjghjcnj,asdfg1,mnbvcxz1,myszka,posture,boggie,rocketman,flhtyfkby,twiztid,vostok,pi314159,force1,televizor,gtkmvtym,samhain,imcool,jadzia,dreamers,strannik,k2trix,steelhea,nikitin,commodor,brian123,chocobo,whopper,ibilljpf,megafon,ararat,thomas12,ghbrjkbcn,q1234567890,hibernia,kings1,jim123,redfive,68camaro,iawgk2,xavier1,1234567u,d123456,ndirish,airborn,halfmoon,fluffy1,ranchero,sneaker,soccer2,passion1,cowman,birthday1,johnn,razzle,glock17,wsxqaz,nubian,lucky2,jelly1,henderso,eric1,123123e,boscoe01,fuck0ff,simpson1,sassie,rjyjgkz,nascar3,watashi,loredana,janus,wilso,conman,david2,mothe,iloveher,snikers,davidj,fkmnthyfnbdf,mettss,ratfink,123456h,lostsoul,sweet16,brabus,wobble,petra1,fuckfest,otters,sable1,svetka,spartacu,bigstick,milashka,1lover,pasport,champagn,papichul,hrvatska,hondacivic,kevins,tacit,moneybag,gohogs,rasta1,246813579,ytyfdbcnm,gubber,darkmoon,vitaliy,233223,playboys,tristan1,joyce1,oriflame,mugwump,access2,autocad,thematri,qweqwe123,lolwut,ibill01,multisyn,1233211,pelikan,rob123,chacal,1234432,griffon,pooch,dagestan,geisha,satriani,anjali,rocketma,gixxer,pendrago,vincen,hellokit,killyou,ruger,doodah,bumblebe,badlands,galactic,emachines,foghorn,jackso,jerem,avgust,frontera,123369,daisymae,hornyboy,welcome123,tigger01,diabl,angel13,interex,iwantsex,rockydog,kukolka,sawdust,online1,3234412,bigpapa,jewboy,3263827,dave123,riches,333222,tony1,toggle,farter,124816,tities,balle,brasilia,southsid,micke,ghbdtn12,patit,ctdfcnjgjkm,olds442,zzzzzz1,nelso,gremlins,gypsy1,carter1,slut69,farcry,7415963,michael8,birdie1,charl,123456789abc,100001,aztec,sinjin,bigpimpi,closeup,atlas1,nvidia,doggone,classic1,manana,malcolm1,rfkbyf,hotbabe,rajesh,dimebag,ganjubas,rodion,jagr68,seren,syrinx,funnyman,karapuz,123456789n,bloomin,admin18533362,biggdogg,ocarina,poopy1,hellome,internet1,booties,blowjobs,matt1,donkey1,swede,1jennife,evgeniya,lfhbyf,coach1,444777,green12,patryk,pinewood,justin12,271828,89600506779,notredame,tuborg,lemond,sk8ter,million1,wowser,pablo1,st0n3,jeeves,funhouse,hiroshi,gobucs,angeleye,bereza,winter12,catalin,qazedc,andros,ramazan,vampyre,sweethea,imperium,murat,jamest,flossy,sandeep,morgen,salamandra,bigdogg,stroller,njdevils,nutsack,vittorio,%%passwo,playful,rjyatnrf,tookie,ubnfhf,michi,777444,shadow13,devils1,radiance,toshiba1,beluga,amormi,dandfa,trust1,killemall,smallville,polgara,billyb,landscap,steves,exploite,zamboni,damage11,dzxtckfd,trader12,pokey1,kobe08,damager,egorov,dragon88,ckfdbr,lisa69,blade2,audis4,nelson1,nibbles,23176djivanfros,mutabor,artofwar,matvei,metal666,hrfzlz,schwinn,poohbea,seven77,thinker,123456789qwerty,sobriety,jakers,karamelka,vbkfyf,volodin,iddqd,dale03,roberto1,lizaveta,qqqqqq1,cathy1,08154711,davidm,quixote,bluenote,tazdevil,katrina1,bigfoot1,bublik,marma,olechka,fatpussy,marduk,arina,nonrev67,qqqq1111,camill,wtpfhm,truffle,fairview,mashina,voltaire,qazxswedcvfr,dickface,grassy,lapdance,bosstone,crazy8,yackwin,mobil,danielit,mounta1n,player69,bluegill,mewtwo,reverb,cnthdf,pablito,a123321,elena1,warcraft1,orland,ilovemyself,rfntyjr,joyride,schoo,dthjxrf,thetachi,goodtimes,blacksun,humpty,chewbacca,guyute,123xyz,lexicon,blue45,qwe789,galatasaray,centrino,hendrix1,deimos,saturn5,craig1,vlad1996,sarah123,tupelo,ljrnjh,hotwife,bingos,1231231,nicholas1,flamer,pusher,1233210,heart1,hun999,jiggy,giddyup,oktober,123456zxc,budda,galahad,glamur,samwise,oneton,bugsbunny,dominic1,scooby2,freetime,internat,159753852,sc00ter,wantit,mazinger,inflames,laracrof,greedo,014789,godofwar,repytwjd,water123,fishnet,venus1,wallace1,tenpin,paula1,1475963,mania,novikov,qwertyasdfgh,goldmine,homies,777888999,8balls,holeinon,paper1,samael,013579,mansur,nikit,ak1234,blueline,polska1,hotcock,laredo,windstar,vbkbwbz,raider1,newworld,lfybkrf,catfish1,shorty1,piranha,treacle,royale,2234562,smurfs,minion,cadence,flapjack,123456p,sydne,135531,robinhoo,nasdaq,decatur,cyberonline,newage,gemstone,jabba,touchme,hooch,pigdog,indahous,fonzie,zebra1,juggle,patrick2,nihongo,hitomi,oldnavy,qwerfdsa,ukraina,shakti,allure,kingrich,diane1,canad,piramide,hottie1,clarion,college1,5641110,connect1,therion,clubber,velcro,dave1,astra1,13579-,astroboy,skittle,isgreat,photoes,cvzefh1gkc,001100,2cool4u,7555545,ginger12,2wsxcde3,camaro69,invader,domenow,asd1234,colgate,qwertasdfg,jack123,pass01,maxman,bronte,whkzyc,peter123,bogie,yecgaa,abc321,1qay2wsx,enfield,camaroz2,trashman,bonefish,system32,azsxdcfvgb,peterose,iwantyou,dick69,temp1234,blastoff,capa200,connie1,blazin,12233445,sexybaby,123456j,brentfor,pheasant,hommer,jerryg,thunders,august1,lager,kapusta,boobs1,nokia5300,rocco1,xytfu7,stars1,tugger,123sas,blingbling,1bubba,0wnsyo0,1george,baile,richard2,habana,1diamond,sensatio,1golfer,maverick1,1chris,clinton1,michael7,dragons1,sunrise1,pissant,fatim,mopar1,levani,rostik,pizzapie,987412365,oceans11,748159263,cum4me,palmetto,4r3e2w1q,paige1,muncher,arsehole,kratos,gaffer,banderas,billys,prakash,crabby,bungie,silver12,caddis,spawn1,xboxlive,sylvania,littlebi,524645,futura,valdemar,isacs155,prettygirl,big123,555444,slimer,chicke,newstyle,skypilot,sailormoon,fatluvr69,jetaime,sitruc,jesuschrist,sameer,bear12,hellion,yendor,country1,etnies,conejo,jedimast,darkknight,toobad,yxcvbn,snooks,porn4life,calvary,alfaromeo,ghostman,yannick,fnkfynblf,vatoloco,homebase,5550666,barret,1111111111zz,odysseus,edwardss,favre4,jerrys,crybaby,xsw21qaz,firestor,spanks,indians1,squish,kingair,babycakes,haters,sarahs,212223,teddyb,xfactor,cumload,rhapsody,death123,three3,raccoon,thomas2,slayer66,1q2q3q4q5q,thebes,mysterio,thirdeye,orkiox.,nodoubt,bugsy,schweiz,dima1996,angels1,darkwing,jeronimo,moonpie,ronaldo9,peaches2,mack10,manish,denise1,fellowes,carioca,taylor12,epaulson,makemoney,oc247ngucz,kochanie,3edcvfr4,vulture,1qw23e,1234567z,munchie,picard1,xthtgfirf,sportste,psycho1,tahoe1,creativ,perils,slurred,hermit,scoob,diesel1,cards1,wipeout,weeble,integra1,out3xf,powerpc,chrism,kalle,ariadne,kailua,phatty,dexter1,fordman,bungalow,paul123,compa,train1,thejoker,jys6wz,pussyeater,eatmee,sludge,dominus,denisa,tagheuer,yxcvbnm,bill1,ghfdlf,300zx,nikita123,carcass,semaj,ramone,muenchen,animal1,greeny,annemari,dbrf134,jeepcj7,mollys,garten,sashok,ironmaid,coyotes,astoria,george12,westcoast,primetim,123456o,panchito,rafae,japan1,framer,auralo,tooshort,egorova,qwerty22,callme,medicina,warhawk,w1w2w3w4,cristia,merli,alex22,kawaii,chatte,wargames,utvols,muaddib,trinket,andreas1,jjjjj1,cleric,scooters,cuntlick,gggggg1,slipknot1,235711,handcuff,stussy,guess1,leiceste,ppppp1,passe,lovegun,chevyman,hugecock,driver1,buttsex,psychnaut1,cyber1,black2,alpha12,melbourn,man123,metalman,yjdsqujl,blondi,bungee,freak1,stomper,caitlin1,nikitina,flyaway,prikol,begood,desperad,aurelius,john1234,whosyourdaddy,slimed123,bretagne,den123,hotwheel,king123,roodypoo,izzicam,save13tx,warpten,nokia3310,samolet,ready1,coopers,scott123,bonito,1aaaaa,yomomma,dawg1,rache,itworks,asecret,fencer,451236,polka,olivetti,sysadmin,zepplin,sanjuan,479373,lickem,hondacrx,pulamea,future1,naked1,sexyguy,w4g8at,lollol1,declan,runner1,rumple,daddy123,4snz9g,grandprix,calcio,whatthefuck,nagrom,asslick,pennst,negrit,squiggy,1223334444,police22,giovann,toronto1,tweet,yardbird,seagate,truckers,554455,scimitar,pescator,slydog,gaysex,dogfish,fuck777,12332112,qazxswed,morkovka,daniela1,imback,horny69,789123456,123456789w,jimmy2,bagger,ilove69,nikolaus,atdhfkm,rebirth,1111aaaa,pervasive,gjgeufq,dte4uw,gfhnbpfy,skeletor,whitney1,walkman,delorean,disco1,555888,as1234,ishikawa,fuck12,reaper1,dmitrii,bigshot,morrisse,purgen,qwer4321,itachi,willys,123123qwe,kisska,roma123,trafford,sk84life,326159487,pedros,idiom,plover,bebop,159875321,jailbird,arrowhea,qwaszx123,zaxscdvf,catlover,bakers,13579246,bones69,vermont1,helloyou,simeon,chevyz71,funguy,stargaze,parolparol,steph1,bubby,apathy,poppet,laxman,kelly123,goodnews,741236,boner1,gaetano,astonvilla,virtua,luckyboy,rocheste,hello2u,elohim,trigger1,cstrike,pepsicola,miroslav,96385274,fistfuck,cheval,magyar,svetlanka,lbfyjxrf,mamedov,123123123q,ronaldo1,scotty1,1nicole,pittbull,fredd,bbbbb1,dagwood,gfhkfvtyn,ghblehrb,logan5,1jordan,sexbomb,omega2,montauk,258741,dtythf,gibbon,winamp,thebomb,millerli,852654,gemin,baldy,halflife2,dragon22,mulberry,morrigan,hotel6,zorglub,surfin,951159,excell,arhangel,emachine,moses1,968574,reklama,bulldog2,cuties,barca,twingo,saber,elite11,redtruck,casablan,ashish,moneyy,pepper12,cnhtktw,rjcnbr,arschloch,phenix,cachorro,sunita,madoka,joselui,adams1,mymoney,hemicuda,fyutkjr,jake12,chicas,eeeee1,sonnyboy,smarties,birdy,kitten1,cnfcbr,island1,kurosaki,taekwond,konfetka,bennett1,omega3,jackson2,fresca,minako,octavian,kban667,feyenoord,muaythai,jakedog,fktrcfylhjdyf,1357911q,phuket,sexslave,fktrcfylhjdbx,asdfjk,89015173454,qwerty00,kindbud,eltoro,sex6969,nyknicks,12344321q,caballo,evenflow,hoddle,love22,metro1,mahalko,lawdog,tightass,manitou,buckie,whiskey1,anton123,335533,password4,primo,ramair,timbo,brayden,stewie,pedro1,yorkshir,ganster,hellothe,tippy1,direwolf,genesi,rodrig,enkeli,vaz21099,sorcerer,winky,oneshot,boggle,serebro,badger1,japanes,comicbook,kamehame,alcat,denis123,echo45,sexboy,gr8ful,hondo,voetbal,blue33,2112rush,geneviev,danni1,moosey,polkmn,matthew7,ironhead,hot2trot,ashley12,sweeper,imogen,blue21,retep,stealth1,guitarra,bernard1,tatian,frankfur,vfnhbwf,slacking,haha123,963741,asdasdas,katenok,airforce1,123456789qaz,shotgun1,12qwasz,reggie1,sharo,976431,pacifica,dhip6a,neptun,kardon,spooky1,beaut,555555a,toosweet,tiedup,11121314,startac,lover69,rediska,pirata,vfhrbp,1234qwerty,energize,hansolo1,playbo,larry123,oemdlg,cnjvfnjkju,a123123,alexan,gohawks,antonius,fcbayern,mambo,yummy1,kremlin,ellen1,tremere,vfiekz,bellevue,charlie9,izabella,malishka,fermat,rotterda,dawggy,becket,chasey,kramer1,21125150,lolit,cabrio,schlong,arisha,verity,3some,favorit,maricon,travelle,hotpants,red1234,garrett1,home123,knarf,seven777,figment,asdewq,canseco,good2go,warhol,thomas01,pionee,al9agd,panacea,chevy454,brazzers,oriole,azerty123,finalfan,patricio,northsta,rebelde,bulldo,stallone,boogie1,7uftyx,cfhfnjd,compusa,cornholi,config,deere,hoopster,sepultura,grasshop,babygurl,lesbo,diceman,proverbs,reddragon,nurbek,tigerwoo,superdup,buzzsaw,kakaroto,golgo13,edwar,123qaz123,butter1,sssss1,texas2,respekt,ou812ic,123456qaz,55555a,doctor1,mcgwire,maria123,aol999,cinders,aa1234,joness,ghbrjkmyj,makemone,sammyboy,567765,380zliki,theraven,testme,mylene,elvira26,indiglo,tiramisu,shannara,baby1,123666,gfhreh,papercut,johnmish,orange8,bogey1,mustang7,bagpipes,dimarik,vsijyjr,4637324,ravage,cogito,seven11,natashka,warzone,hr3ytm,4free,bigdee,000006,243462536,bigboi,123333,trouts,sandy123,szevasz,monica2,guderian,newlife1,ratchet,r12345,razorbac,12345i,piazza31,oddjob,beauty1,fffff1,anklet,nodrog,pepit,olivi,puravida,robert12,transam1,portman,bubbadog,steelers1,wilson1,eightball,mexico1,superboy,4rfv5tgb,mzepab,samurai1,fuckslut,colleen1,girdle,vfrcbvec,q1w2e3r4t,soldier1,19844891,alyssa1,a12345a,fidelis,skelter,nolove,mickeymouse,frehley,password69,watermel,aliska,soccer15,12345e,ladybug1,abulafia,adagio,tigerlil,takehana,hecate,bootneck,junfan,arigato,wonkette,bobby123,trustnoone,phantasm,132465798,brianjo,w12345,t34vfrc1991,deadeye,1robert,1daddy,adida,check1,grimlock,muffi,airwalk,prizrak,onclick,longbeac,ernie1,eadgbe,moore1,geniu,shadow123,bugaga,jonathan1,cjrjkjdf,orlova,buldog,talon1,westport,aenima,541233432442,barsuk,chicago2,kellys,hellbent,toughguy,iskander,skoal,whatisit,jake123,scooter2,fgjrfkbgcbc,ghandi,love13,adelphia,vjhrjdrf,adrenali,niunia,jemoeder,rainbo,all4u8,anime1,freedom7,seraph,789321,tommys,antman,firetruc,neogeo,natas,bmwm3,froggy1,paul1,mamit,bayview,gateways,kusanagi,ihateu,frederi,rock1,centurion,grizli,biggin,fish1,stalker1,3girls,ilovepor,klootzak,lollo,redsox04,kirill123,jake1,pampers,vasya,hammers1,teacup,towing,celtic1,ishtar,yingyang,4904s677075,dahc1,patriot1,patrick9,redbirds,doremi,rebecc,yoohoo,makarova,epiphone,rfgbnfy,milesd,blister,chelseafc,katana1,blackrose,1james,primrose,shock5,hard1,scooby12,c6h12o6,dustoff,boing,chisel,kamil,1william,defiant1,tyvugq,mp8o6d,aaa340,nafets,sonnet,flyhigh,242526,crewcom,love23,strike1,stairway,katusha,salamand,cupcake1,password0,007james,sunnie,multisync,harley01,tequila1,fred12,driver8,q8zo8wzq,hunter01,mozzer,temporar,eatmeraw,mrbrownxx,kailey,sycamore,flogger,tincup,rahasia,ganymede,bandera,slinger,1111122222,vander,woodys,1cowboy,khaled,jamies,london12,babyboo,tzpvaw,diogenes,budice,mavrick,135797531,cheeta,macros,squonk,blackber,topfuel,apache1,falcon16,darkjedi,cheeze,vfhvtkfl,sparco,change1,gfhfif,freestyl,kukuruza,loveme2,12345f,kozlov,sherpa,marbella,44445555,bocephus,1winner,alvar,hollydog,gonefish,iwantin,barman,godislove,amanda18,rfpfynbg,eugen,abcdef1,redhawk,thelema,spoonman,baller1,harry123,475869,tigerman,cdtnjxrf,marillio,scribble,elnino,carguy,hardhead,l2g7k3,troopers,selen,dragon76,antigua,ewtosi,ulysse,astana,paroli,cristo,carmex,marjan,bassfish,letitbe,kasparov,jay123,19933991,blue13,eyecandy,scribe,mylord,ukflbjkec,ellie1,beaver1,destro,neuken,halfpint,ameli,lilly1,satanic,xngwoj,12345trewq,asdf1,bulldogg,asakura,jesucrist,flipside,packers4,biggy,kadett,biteme69,bobdog,silverfo,saint1,bobbo,packman,knowledg,foolio,fussbal,12345g,kozerog,westcoas,minidisc,nbvcxw,martini1,alastair,rasengan,superbee,memento,porker,lena123,florenc,kakadu,bmw123,getalife,bigsky,monkee,people1,schlampe,red321,memyself,0147896325,12345678900987654321,soccer14,realdeal,gfgjxrf,bella123,juggs,doritos,celtics1,peterbilt,ghbdtnbrb,gnusmas,xcountry,ghbdtn1,batman99,deusex,gtnhjdf,blablabl,juster,marimba,love2,rerjkrf,alhambra,micros,siemens1,assmaste,moonie,dashadasha,atybrc,eeeeee1,wildrose,blue55,davidl,xrp23q,skyblue,leo123,ggggg1,bestfriend,franny,1234rmvb,fun123,rules1,sebastien,chester2,hakeem,winston2,fartripper,atlant,07831505,iluvsex,q1a2z3,larrys,009900,ghjkju,capitan,rider1,qazxsw21,belochka,andy123,hellya,chicca,maximal,juergen,password1234,howard1,quetzal,daniel123,qpwoeiruty,123555,bharat,ferrari3,numbnuts,savant,ladydog,phipsi,lovepussy,etoile,power2,mitten,britneys,chilidog,08522580,2fchbg,kinky1,bluerose,loulo,ricardo1,doqvq3,kswbdu,013cpfza,timoha,ghbdtnghbdtn,3stooges,gearhead,browns1,g00ber,super7,greenbud,kitty2,pootie,toolshed,gamers,coffe,ibill123,freelove,anasazi,sister1,jigger,natash,stacy1,weronika,luzern,soccer7,hoopla,dmoney,valerie1,canes,razdvatri,washere,greenwoo,rfhjkbyf,anselm,pkxe62,maribe,daniel2,maxim1,faceoff,carbine,xtkjdtr,buddy12,stratos,jumpman,buttocks,aqswdefr,pepsis,sonechka,steeler1,lanman,nietzsch,ballz,biscuit1,wrxsti,goodfood,juventu,federic,mattman,vika123,strelec,jledfyxbr,sideshow,4life,fredderf,bigwilly,12347890,12345671,sharik,bmw325i,fylhtqrf,dannon4,marky,mrhappy,drdoom,maddog1,pompier,cerbera,goobers,howler,jenny69,evely,letitrid,cthuttdyf,felip,shizzle,golf12,t123456,yamah,bluearmy,squishy,roxan,10inches,dollface,babygirl1,blacksta,kaneda,lexingto,canadien,222888,kukushka,sistema,224422,shadow69,ppspankp,mellons,barbie1,free4all,alfa156,lostone,2w3e4r5t,painkiller,robbie1,binger,8dihc6,jaspe,rellik,quark,sogood,hoopstar,number2,snowy1,dad2ownu,cresta,qwe123asd,hjvfyjdf,gibsonsg,qbg26i,dockers,grunge,duckling,lfiekz,cuntsoup,kasia1,1tigger,woaini,reksio,tmoney,firefighter,neuron,audia3,woogie,powerboo,powermac,fatcock,12345666,upnfmc,lustful,porn1,gotlove,amylee,kbytqrf,11924704,25251325,sarasota,sexme,ozzie1,berliner,nigga1,guatemal,seagulls,iloveyou!,chicken2,qwerty21,010203040506,1pillow,libby1,vodoley,backlash,piglets,teiubesc,019283,vonnegut,perico,thunde,buckey,gtxtymrf,manunite,iiiii1,lost4815162342,madonn,270873_,britney1,kevlar,piano1,boondock,colt1911,salamat,doma77ns,anuradha,cnhjqrf,rottweil,newmoon,topgun1,mauser,fightclu,birthday21,reviewpa,herons,aassddff,lakers32,melissa2,vredina,jiujitsu,mgoblue,shakey,moss84,12345zxcvb,funsex,benji1,garci,113322,chipie,windex,nokia5310,pwxd5x,bluemax,cosita,chalupa,trotsky,new123,g3ujwg,newguy,canabis,gnaget,happydays,felixx,1patrick,cumface,sparkie,kozlova,123234,newports,broncos7,golf18,recycle,hahah,harrypot,cachondo,open4me,miria,guessit,pepsione,knocker,usmc1775,countach,playe,wiking,landrover,cracksevi,drumline,a7777777,smile123,manzana,panty,liberta,pimp69,dolfan,quality1,schnee,superson,elaine22,webhompass,mrbrownx,deepsea,4wheel,mamasita,rockport,rollie,myhome,jordan12,kfvgjxrf,hockey12,seagrave,ford1,chelsea2,samsara,marissa1,lamesa,mobil1,piotrek,tommygun,yyyyy1,wesley1,billy123,homersim,julies,amanda12,shaka,maldini,suzenet,springst,iiiiii1,yakuza,111111aa,westwind,helpdesk,annamari,bringit,hopefull,hhhhhhh1,saywhat,mazdarx8,bulova,jennife1,baikal,gfhjkmxbr,victoria1,gizmo123,alex99,defjam,2girls,sandrock,positivo,shingo,syncmast,opensesa,silicone,fuckina,senna1,karlos,duffbeer,montagne,gehrig,thetick,pepino,hamburge,paramedic,scamp,smokeweed,fabregas,phantoms,venom121293,2583458,badone,porno69,manwhore,vfvf123,notagain,vbktyf,rfnthbyrf,wildblue,kelly001,dragon66,camell,curtis1,frolova,1212123,dothedew,tyler123,reddrago,planetx,promethe,gigolo,1001001,thisone,eugeni,blackshe,cruzazul,incognito,puller,joonas,quick1,spirit1,gazza,zealot,gordito,hotrod1,mitch1,pollito,hellcat,mythos,duluth,383pdjvl,easy123,hermos,binkie,its420,lovecraf,darien,romina,doraemon,19877891,syclone,hadoken,transpor,ichiro,intell,gargamel,dragon2,wavpzt,557744,rjw7x4,jennys,kickit,rjynfrn,likeit,555111,corvus,nec3520,133113,mookie1,bochum,samsung2,locoman0,154ugeiu,vfvfbgfgf,135792,[start],tenni,20001,vestax,hufmqw,neveragain,wizkid,kjgfnf,nokia6303,tristen,saltanat,louie1,gandalf2,sinfonia,alpha3,tolstoy,ford150,f00bar,1hello,alici,lol12,riker1,hellou,333888,1hunter,qw1234,vibrator,mets86,43211234,gonzale,cookies1,sissy1,john11,bubber,blue01,cup2006,gtkmvtyb,nazareth,heybaby,suresh,teddie,mozilla,rodeo1,madhouse,gamera,123123321,naresh,dominos,foxtrot1,taras,powerup,kipling,jasonb,fidget,galena,meatman,alpacino,bookmark,farting,humper,titsnass,gorgon,castaway,dianka,anutka,gecko1,fucklove,connery,wings1,erika1,peoria,moneymaker,ichabod,heaven1,paperboy,phaser,breakers,nurse1,westbrom,alex13,brendan1,123asd123,almera,grubber,clarkie,thisisme,welkom01,51051051051,crypto,freenet,pflybwf,black12,testme2,changeit,autobahn,attica,chaoss,denver1,tercel,gnasher23,master2,vasilii,sherman1,gomer,bigbuck,derek1,qwerzxcv,jumble,dragon23,art131313,numark,beasty,cxfcnmttcnm,updown,starion,glist,sxhq65,ranger99,monkey7,shifter,wolves1,4r5t6y,phone1,favorite5,skytommy,abracada,1martin,102030405060,gatech,giulio,blacktop,cheer1,africa1,grizzly1,inkjet,shemales,durango1,booner,11223344q,supergirl,vanyarespekt,dickless,srilanka,weaponx,6string,nashvill,spicey,boxer1,fabien,2sexy2ho,bowhunt,jerrylee,acrobat,tawnee,ulisse,nolimit8,l8g3bkde,pershing,gordo1,allover,gobrowns,123432,123444,321456987,spoon1,hhhhh1,sailing1,gardenia,teache,sexmachine,tratata,pirate1,niceone,jimbos,314159265,qsdfgh,bobbyy,ccccc1,carla1,vjkjltw,savana,biotech,frigid,123456789g,dragon10,yesiam,alpha06,oakwood,tooter,winsto,radioman,vavilon,asnaeb,google123,nariman,kellyb,dthyjcnm,password6,parol1,golf72,skate1,lthtdj,1234567890s,kennet,rossia,lindas,nataliya,perfecto,eminem1,kitana,aragorn1,rexona,arsenalf,planot,coope,testing123,timex,blackbox,bullhead,barbarian,dreamon,polaris1,cfvjktn,frdfhbev,gametime,slipknot666,nomad1,hfgcjlbz,happy69,fiddler,brazil1,joeboy,indianali,113355,obelisk,telemark,ghostrid,preston1,anonim,wellcome,verizon1,sayangku,censor,timeport,dummies,adult1,nbnfybr,donger,thales,iamgay,sexy1234,deadlift,pidaras,doroga,123qwe321,portuga,asdfgh12,happys,cadr14nu,pi3141,maksik,dribble,cortland,darken,stepanova,bommel,tropic,sochi2014,bluegras,shahid,merhaba,nacho,2580456,orange44,kongen,3cudjz,78girl,my3kids,marcopol,deadmeat,gabbie,saruman,jeepman,freddie1,katie123,master99,ronal,ballbag,centauri,killer7,xqgann,pinecone,jdeere,geirby,aceshigh,55832811,pepsimax,rayden,razor1,tallyho,ewelina,coldfire,florid,glotest,999333,sevenup,bluefin,limaperu,apostol,bobbins,charmed1,michelin,sundin,centaur,alphaone,christof,trial1,lions1,45645,just4you,starflee,vicki1,cougar1,green2,jellyfis,batman69,games1,hihje863,crazyzil,w0rm1,oklick,dogbite,yssup,sunstar,paprika,postov10,124578963,x24ik3,kanada,buckster,iloveamy,bear123,smiler,nx74205,ohiostat,spacey,bigbill,doudo,nikolaeva,hcleeb,sex666,mindy1,buster11,deacons,boness,njkcnsq,candy2,cracker1,turkey1,qwertyu1,gogreen,tazzzz,edgewise,ranger01,qwerty6,blazer1,arian,letmeinnow,cigar1,jjjjjj1,grigio,frien,tenchu,f9lmwd,imissyou,filipp,heathers,coolie,salem1,woodduck,scubadiv,123kat,raffaele,nikolaev,dapzu455,skooter,9inches,lthgfhjkm,gr8one,ffffff1,zujlrf,amanda69,gldmeo,m5wkqf,rfrltkf,televisi,bonjou,paleale,stuff1,cumalot,fuckmenow,climb7,mark1234,t26gn4,oneeye,george2,utyyflbq,hunting1,tracy71,ready2go,hotguy,accessno,charger1,rudedog,kmfdm,goober1,sweetie1,wtpmjgda,dimensio,ollie1,pickles1,hellraiser,mustdie,123zzz,99887766,stepanov,verdun,tokenbad,anatol,bartende,cidkid86,onkelz,timmie,mooseman,patch1,12345678c,marta1,dummy1,bethany1,myfamily,history1,178500,lsutiger,phydeaux,moren,dbrnjhjdbx,gnbxrf,uniden,drummers,abpbrf,godboy,daisy123,hogan1,ratpack,irland,tangerine,greddy,flore,sqrunch,billyjoe,q55555,clemson1,98745632,marios,ishot,angelin,access12,naruto12,lolly,scxakv,austin12,sallad,cool99,rockit,mongo1,mark22,ghbynth,ariadna,senha,docto,tyler2,mobius,hammarby,192168,anna12,claire1,pxx3eftp,secreto,greeneye,stjabn,baguvix,satana666,rhbcnbyjxrf,dallastx,garfiel,michaelj,1summer,montan,1234ab,filbert,squids,fastback,lyudmila,chucho,eagleone,kimberle,ar3yuk3,jake01,nokids,soccer22,1066ad,ballon,cheeto,review69,madeira,taylor2,sunny123,chubbs,lakeland,striker1,porche,qwertyu8,digiview,go1234,ferari,lovetits,aditya,minnow,green3,matman,cellphon,fortytwo,minni,pucara,69a20a,roman123,fuente,12e3e456,paul12,jacky,demian,littleman,jadakiss,vlad1997,franca,282860,midian,nunzio,xaccess2,colibri,jessica0,revilo,654456,harvey1,wolf1,macarena,corey1,husky1,arsen,milleniu,852147,crowes,redcat,combat123654,hugger,psalms,quixtar,ilovemom,toyot,ballss,ilovekim,serdar,james23,avenger1,serendip,malamute,nalgas,teflon,shagger,letmein6,vyjujnjxbt,assa1234,student1,dixiedog,gznybwf13,fuckass,aq1sw2de3,robroy,hosehead,sosa21,123345,ias100,teddy123,poppin,dgl70460,zanoza,farhan,quicksilver,1701d,tajmahal,depechemode,paulchen,angler,tommy2,recoil,megamanx,scarecro,nicole2,152535,rfvtgb,skunky,fatty1,saturno,wormwood,milwauke,udbwsk,sexlover,stefa,7bgiqk,gfnhbr,omar10,bratan,lbyfvj,slyfox,forest1,jambo,william3,tempus,solitari,lucydog,murzilka,qweasdzxc1,vehpbkrf,12312345,fixit,woobie,andre123,123456789x,lifter,zinaida,soccer17,andone,foxbat,torsten,apple12,teleport,123456i,leglover,bigcocks,vologda,dodger1,martyn,d6o8pm,naciona,eagleeye,maria6,rimshot,bentley1,octagon,barbos,masaki,gremio,siemen,s1107d,mujeres,bigtits1,cherr,saints1,mrpink,simran,ghzybr,ferrari2,secret12,tornado1,kocham,picolo,deneme,onelove1,rolan,fenster,1fuckyou,cabbie,pegaso,nastyboy,password5,aidana,mine2306,mike13,wetone,tigger69,ytreza,bondage1,myass,golova,tolik,happyboy,poilkj,nimda2k,rammer,rubies,hardcore1,jetset,hoops1,jlaudio,misskitt,1charlie,google12,theone1,phred,porsch,aalborg,luft4,charlie5,password7,gnosis,djgabbab,1daniel,vinny,borris,cumulus,member1,trogdor,darthmau,andrew2,ktjybl,relisys,kriste,rasta220,chgobndg,weener,qwerty66,fritter,followme,freeman1,ballen,blood1,peache,mariso,trevor1,biotch,gtfullam,chamonix,friendste,alligato,misha1,1soccer,18821221,venkat,superd,molotov,bongos,mpower,acun3t1x,dfcmrf,h4x3d,rfhfufylf,tigran,booyaa,plastic1,monstr,rfnhby,lookatme,anabolic,tiesto,simon123,soulman,canes1,skyking,tomcat1,madona,bassline,dasha123,tarheel1,dutch1,xsw23edc,qwerty123456789,imperator,slaveboy,bateau,paypal,house123,pentax,wolf666,drgonzo,perros,digger1,juninho,hellomoto,bladerun,zzzzzzz1,keebler,take8422,fffffff1,ginuwine,israe,caesar1,crack1,precious1,garand,magda1,zigazaga,321ewq,johnpaul,mama1234,iceman69,sanjeev,treeman,elric,rebell,1thunder,cochon,deamon,zoltan,straycat,uhbyuj,luvfur,mugsy,primer,wonder1,teetime,candycan,pfchfytw,fromage,gitler,salvatio,piggy1,23049307,zafira,chicky,sergeev,katze,bangers,andriy,jailbait,vaz2107,ghbhjlf,dbjktnnf,aqswde,zaratustra,asroma,1pepper,alyss,kkkkk1,ryan1,radish,cozumel,waterpol,pentium1,rosebowl,farmall,steinway,dbrekz,baranov,jkmuf,another1,chinacat,qqqqqqq1,hadrian,devilmaycry4,ratbag,teddy2,love21,pullings,packrat,robyn1,boobo,qw12er34,tribe1,rosey,celestia,nikkie,fortune12,olga123,danthema,gameon,vfrfhjys,dilshod,henry14,jenova,redblue,chimaera,pennywise,sokrates,danimal,qqaazz,fuaqz4,killer2,198200,tbone1,kolyan,wabbit,lewis1,maxtor,egoist,asdfas,spyglass,omegas,jack12,nikitka,esperanz,doozer,matematika,wwwww1,ssssss1,poiu0987,suchka,courtney1,gungho,alpha2,fktyjxrf,summer06,bud420,devildriver,heavyd,saracen,foucault,choclate,rjdfktyrj,goblue1,monaro,jmoney,dcpugh,efbcapa201,qqh92r,pepsicol,bbb747,ch5nmk,honeyb,beszoptad,tweeter,intheass,iseedeadpeople,123dan,89231243658s,farside1,findme,smiley1,55556666,sartre,ytcnjh,kacper,costarica,134679258,mikeys,nolimit9,vova123,withyou,5rxypn,love143,freebie,rescue1,203040,michael6,12monkey,redgreen,steff,itstime,naveen,good12345,acidrain,1dawg,miramar,playas,daddio,orion2,852741,studmuff,kobe24,senha123,stephe,mehmet,allalone,scarface1,helloworld,smith123,blueyes,vitali,memphis1,mybitch,colin1,159874,1dick,podaria,d6wnro,brahms,f3gh65,dfcbkmtd,xxxman,corran,ugejvp,qcfmtz,marusia,totem,arachnid,matrix2,antonell,fgntrf,zemfira,christos,surfing1,naruto123,plato1,56qhxs,madzia,vanille,043aaa,asq321,mutton,ohiostate,golde,cdznjckfd,rhfcysq,green5,elephan,superdog,jacqueli,bollock,lolitas,nick12,1orange,maplelea,july23,argento,waldorf,wolfer,pokemon12,zxcvbnmm,flicka,drexel,outlawz,harrie,atrain,juice2,falcons1,charlie6,19391945,tower1,dragon21,hotdamn,dirtyboy,love4ever,1ginger,thunder2,virgo1,alien1,bubblegu,4wwvte,123456789qqq,realtime,studio54,passss,vasilek,awsome,giorgia,bigbass,2002tii,sunghile,mosdef,simbas,count0,uwrl7c,summer05,lhepmz,ranger21,sugarbea,principe,5550123,tatanka,9638v,cheerios,majere,nomercy,jamesbond007,bh90210,7550055,jobber,karaganda,pongo,trickle,defamer,6chid8,1q2a3z,tuscan,nick123,.adgjm,loveyo,hobbes1,note1234,shootme,171819,loveporn,9788960,monty123,fabrice,macduff,monkey13,shadowfa,tweeker,hanna1,madball,telnet,loveu2,qwedcxzas,thatsit,vfhcbr,ptfe3xxp,gblfhfcs,ddddddd1,hakkinen,liverune,deathsta,misty123,suka123,recon1,inferno1,232629,polecat,sanibel,grouch,hitech,hamradio,rkfdbfnehf,vandam,nadin,fastlane,shlong,iddqdidkfa,ledzeppelin,sexyfeet,098123,stacey1,negras,roofing,lucifer1,ikarus,tgbyhn,melnik,barbaria,montego,twisted1,bigal1,jiggle,darkwolf,acerview,silvio,treetops,bishop1,iwanna,pornsite,happyme,gfccdjhl,114411,veritech,batterse,casey123,yhntgb,mailto,milli,guster,q12345678,coronet,sleuth,fuckmeha,armadill,kroshka,geordie,lastochka,pynchon,killall,tommy123,sasha1996,godslove,hikaru,clticic,cornbrea,vfkmdbyf,passmaster,123123123a,souris,nailer,diabolo,skipjack,martin12,hinata,mof6681,brookie,dogfight,johnso,karpov,326598,rfvbrflpt,travesti,caballer,galaxy1,wotan,antoha,art123,xakep1234,ricflair,pervert1,p00kie,ambulanc,santosh,berserker,larry33,bitch123,a987654321,dogstar,angel22,cjcbcrf,redhouse,toodles,gold123,hotspot,kennedy1,glock21,chosen1,schneide,mainman,taffy1,3ki42x,4zqauf,ranger2,4meonly,year2000,121212a,kfylsi,netzwerk,diese,picasso1,rerecz,225522,dastan,swimmer1,brooke1,blackbea,oneway,ruslana,dont4get,phidelt,chrisp,gjyxbr,xwing,kickme,shimmy,kimmy1,4815162342lost,qwerty5,fcporto,jazzbo,mierd,252627,basses,sr20det,00133,florin,howdy1,kryten,goshen,koufax,cichlid,imhotep,andyman,wrest666,saveme,dutchy,anonymou,semprini,siempre,mocha1,forest11,wildroid,aspen1,sesam,kfgekz,cbhbec,a55555,sigmanu,slash1,giggs11,vatech,marias,candy123,jericho1,kingme,123a123,drakula,cdjkjxm,mercur,oneman,hoseman,plumper,ilovehim,lancers,sergey1,takeshi,goodtogo,cranberr,ghjcnj123,harvick,qazxs,1972chev,horsesho,freedom3,letmein7,saitek,anguss,vfvfgfgfz,300000,elektro,toonporn,999111999q,mamuka,q9umoz,edelweis,subwoofer,bayside,disturbe,volition,lucky3,12345678z,3mpz4r,march1,atlantida,strekoza,seagrams,090909t,yy5rbfsc,jack1234,sammy12,sampras,mark12,eintrach,chaucer,lllll1,nochance,whitepower,197000,lbvekz,passer,torana,12345as,pallas,koolio,12qw34,nokia8800,findout,1thomas,mmmmm1,654987,mihaela,chinaman,superduper,donnas,ringo1,jeroen,gfdkjdf,professo,cdtnrf,tranmere,tanstaaf,himera,ukflbfnjh,667788,alex32,joschi,w123456,okidoki,flatline,papercli,super8,doris1,2good4u,4z34l0ts,pedigree,freeride,gsxr1100,wulfgar,benjie,ferdinan,king1,charlie7,djdxbr,fhntvbq,ripcurl,2wsx1qaz,kingsx,desade,sn00py,loveboat,rottie,evgesha,4money,dolittle,adgjmpt,buzzers,brett1,makita,123123qweqwe,rusalka,sluts1,123456e,jameson1,bigbaby,1z2z3z,ckjybr,love4u,fucker69,erhfbyf,jeanluc,farhad,fishfood,merkin,giant1,golf69,rfnfcnhjaf,camera1,stromb,smoothy,774411,nylon,juice1,rfn.irf,newyor,123456789t,marmot,star11,jennyff,jester1,hisashi,kumquat,alex777,helicopt,merkur,dehpye,cummin,zsmj2v,kristjan,april12,englan,honeypot,badgirls,uzumaki,keines,p12345,guita,quake1,duncan1,juicer,milkbone,hurtme,123456789b,qq123456789,schwein,p3wqaw,54132442,qwertyytrewq,andreeva,ruffryde,punkie,abfkrf,kristinka,anna1987,ooooo1,335533aa,umberto,amber123,456123789,456789123,beelch,manta,peeker,1112131415,3141592654,gipper,wrinkle5,katies,asd123456,james11,78n3s5af,michael0,daboss,jimmyb,hotdog1,david69,852123,blazed,sickan,eljefe,2n6wvq,gobills,rfhfcm,squeaker,cabowabo,luebri,karups,test01,melkor,angel777,smallvil,modano,olorin,4rkpkt,leslie1,koffie,shadows1,littleon,amiga1,topeka,summer20,asterix1,pitstop,aloysius,k12345,magazin,joker69,panocha,pass1word,1233214,ironpony,368ejhih,88keys,pizza123,sonali,57np39,quake2,1234567890qw,1020304,sword1,fynjif,abcde123,dfktyjr,rockys,grendel1,harley12,kokakola,super2,azathoth,lisa123,shelley1,girlss,ibragim,seven1,jeff24,1bigdick,dragan,autobot,t4nvp7,omega123,900000,hecnfv,889988,nitro1,doggie1,fatjoe,811pahc,tommyt,savage1,pallino,smitty1,jg3h4hfn,jamielee,1qazwsx,zx123456,machine1,asdfgh123,guinnes,789520,sharkman,jochen,legend1,sonic2,extreme1,dima12,photoman,123459876,nokian95,775533,vaz2109,april10,becks,repmvf,pooker,qwer12345,themaster,nabeel,monkey10,gogetit,hockey99,bbbbbbb1,zinedine,dolphin2,anelka,1superma,winter01,muggsy,horny2,669966,kuleshov,jesusis,calavera,bullet1,87t5hdf,sleepers,winkie,vespa,lightsab,carine,magister,1spider,shitbird,salavat,becca1,wc18c2,shirak,galactus,zaskar,barkley1,reshma,dogbreat,fullsail,asasa,boeder,12345ta,zxcvbnm12,lepton,elfquest,tony123,vkaxcs,savatage,sevilia1,badkitty,munkey,pebbles1,diciembr,qapmoc,gabriel2,1qa2ws3e,cbcmrb,welldone,nfyufh,kaizen,jack11,manisha,grommit,g12345,maverik,chessman,heythere,mixail,jjjjjjj1,sylvia1,fairmont,harve,skully,global1,youwish,pikachu1,badcat,zombie1,49527843,ultra1,redrider,offsprin,lovebird,153426,stymie,aq1sw2,sorrento,0000001,r3ady41t,webster1,95175,adam123,coonass,159487,slut1,gerasim,monkey99,slutwife,159963,1pass1page,hobiecat,bigtymer,all4you,maggie2,olamide,comcast1,infinit,bailee,vasileva,.ktxrf,asdfghjkl1,12345678912,setter,fuckyou7,nnagqx,lifesuck,draken,austi,feb2000,cable1,1234qwerasdf,hax0red,zxcv12,vlad7788,nosaj,lenovo,underpar,huskies1,lovegirl,feynman,suerte,babaloo,alskdjfhg,oldsmobi,bomber1,redrover,pupuce,methodman,phenom,cutegirl,countyli,gretsch,godisgood,bysunsu,hardhat,mironova,123qwe456rty,rusty123,salut,187211,555666777,11111z,mahesh,rjntyjxtr,br00klyn,dunce1,timebomb,bovine,makelove,littlee,shaven,rizwan,patrick7,42042042,bobbijo,rustem,buttmunc,dongle,tiger69,bluecat,blackhol,shirin,peaces,cherub,cubase,longwood,lotus7,gwju3g,bruin,pzaiu8,green11,uyxnyd,seventee,dragon5,tinkerbel,bluess,bomba,fedorova,joshua2,bodyshop,peluche,gbpacker,shelly1,d1i2m3a4,ghtpbltyn,talons,sergeevna,misato,chrisc,sexmeup,brend,olddog,davros,hazelnut,bridget1,hzze929b,readme,brethart,wild1,ghbdtnbr1,nortel,kinger,royal1,bucky1,allah1,drakkar,emyeuanh,gallaghe,hardtime,jocker,tanman,flavio,abcdef123,leviatha,squid1,skeet,sexse,123456x,mom4u4mm,lilred,djljktq,ocean11,cadaver,baxter1,808state,fighton,primavera,1andrew,moogle,limabean,goddess1,vitalya,blue56,258025,bullride,cicci,1234567d,connor1,gsxr11,oliveoil,leonard1,legsex,gavrik,rjnjgtc,mexicano,2bad4u,goodfellas,ornw6d,mancheste,hawkmoon,zlzfrh,schorsch,g9zns4,bashful,rossi46,stephie,rfhfntkm,sellout,123fuck,stewar1,solnze,00007,thor5200,compaq12,didit,bigdeal,hjlbyf,zebulon,wpf8eu,kamran,emanuele,197500,carvin,ozlq6qwm,3syqo15hil,pennys,epvjb6,asdfghjkl123,198000,nfbcbz,jazzer,asfnhg66,zoloft,albundy,aeiou,getlaid,planet1,gjkbyjxrf,alex2000,brianb,moveon,maggie11,eieio,vcradq,shaggy1,novartis,cocoloco,dunamis,554uzpad,sundrop,1qwertyu,alfie,feliks,briand,123www,red456,addams,fhntv1998,goodhead,theway,javaman,angel01,stratoca,lonsdale,15987532,bigpimpin,skater1,issue43,muffie,yasmina,slowride,crm114,sanity729,himmel,carolcox,bustanut,parabola,masterlo,computador,crackhea,dynastar,rockbott,doggysty,wantsome,bigten,gaelle,juicy1,alaska1,etower,sixnine,suntan,froggies,nokia7610,hunter11,njnets,alicante,buttons1,diosesamo,elizabeth1,chiron,trustnoo,amatuers,tinytim,mechta,sammy2,cthulu,trs8f7,poonam,m6cjy69u35,cookie12,blue25,jordans,santa1,kalinka,mikey123,lebedeva,12345689,kissss,queenbee,vjybnjh,ghostdog,cuckold,bearshare,rjcntyrj,alinochka,ghjcnjrdfibyj,aggie1,teens1,3qvqod,dauren,tonino,hpk2qc,iqzzt580,bears85,nascar88,theboy,njqcw4,masyanya,pn5jvw,intranet,lollone,shadow99,00096462,techie,cvtifhbrb,redeemed,gocanes,62717315,topman,intj3a,cobrajet,antivirus,whyme,berserke,ikilz083,airedale,brandon2,hopkig,johanna1,danil8098,gojira,arthu,vision1,pendragon,milen,chrissie,vampiro,mudder,chris22,blowme69,omega7,surfers,goterps,italy1,baseba11,diego1,gnatsum,birdies,semenov,joker123,zenit2011,wojtek,cab4ma99,watchmen,damia,forgotte,fdm7ed,strummer,freelanc,cingular,orange77,mcdonalds,vjhjpjdf,kariya,tombston,starlet,hawaii1,dantheman,megabyte,nbvjirf,anjing,ybrjkftdbx,hotmom,kazbek,pacific1,sashimi,asd12,coorslig,yvtte545,kitte,elysium,klimenko,cobblers,kamehameha,only4me,redriver,triforce,sidorov,vittoria,fredi,dank420,m1234567,fallout2,989244342a,crazy123,crapola,servus,volvos,1scooter,griffin1,autopass,ownzyou,deviant,george01,2kgwai,boeing74,simhrq,hermosa,hardcor,griffy,rolex1,hackme,cuddles1,master3,bujhtr,aaron123,popolo,blader,1sexyred,gerry1,cronos,ffvdj474,yeehaw,bob1234,carlos2,mike77,buckwheat,ramesh,acls2h,monster2,montess,11qq22ww,lazer,zx123456789,chimpy,masterch,sargon,lochness,archana,1234qwert,hbxfhl,sarahb,altoid,zxcvbn12,dakot,caterham,dolomite,chazz,r29hqq,longone,pericles,grand1,sherbert,eagle3,pudge,irontree,synapse,boome,nogood,summer2,pooki,gangsta1,mahalkit,elenka,lbhtrnjh,dukedog,19922991,hopkins1,evgenia,domino1,x123456,manny1,tabbycat,drake1,jerico,drahcir,kelly2,708090a,facesit,11c645df,mac123,boodog,kalani,hiphop1,critters,hellothere,tbirds,valerka,551scasi,love777,paloalto,mrbrown,duke3d,killa1,arcturus,spider12,dizzy1,smudger,goddog,75395,spammy,1357997531,78678,datalife,zxcvbn123,1122112211,london22,23dp4x,rxmtkp,biggirls,ownsu,lzbs2twz,sharps,geryfe,237081a,golakers,nemesi,sasha1995,pretty1,mittens1,d1lakiss,speedrac,gfhjkmm,sabbat,hellrais,159753258,qwertyuiop123,playgirl,crippler,salma,strat1,celest,hello5,omega5,cheese12,ndeyl5,edward12,soccer3,cheerio,davido,vfrcbr,gjhjctyjr,boscoe,inessa,shithole,ibill,qwepoi,201jedlz,asdlkj,davidk,spawn2,ariel1,michael4,jamie123,romantik,micro1,pittsbur,canibus,katja,muhtar,thomas123,studboy,masahiro,rebrov,patrick8,hotboys,sarge1,1hammer,nnnnn1,eistee,datalore,jackdani,sasha2010,mwq6qlzo,cmfnpu,klausi,cnhjbntkm,andrzej,ilovejen,lindaa,hunter123,vvvvv1,novembe,hamster1,x35v8l,lacey1,1silver,iluvporn,valter,herson,alexsandr,cojones,backhoe,womens,777angel,beatit,klingon1,ta8g4w,luisito,benedikt,maxwel,inspecto,zaq12ws,wladimir,bobbyd,peterj,asdfg12,hellspawn,bitch69,nick1234,golfer23,sony123,jello1,killie,chubby1,kodaira52,yanochka,buckfast,morris1,roaddogg,snakeeye,sex1234,mike22,mmouse,fucker11,dantist,brittan,vfrfhjdf,doc123,plokijuh,emerald1,batman01,serafim,elementa,soccer9,footlong,cthuttdbx,hapkido,eagle123,getsmart,getiton,batman2,masons,mastiff,098890,cfvfhf,james7,azalea,sherif,saun24865709,123red,cnhtrjpf,martina1,pupper,michael5,alan12,shakir,devin1,ha8fyp,palom,mamulya,trippy,deerhunter,happyone,monkey77,3mta3,123456789f,crownvic,teodor,natusik,0137485,vovchik,strutter,triumph1,cvetok,moremone,sonnen,screwbal,akira1,sexnow,pernille,independ,poopies,samapi,kbcbxrf,master22,swetlana,urchin,viper2,magica,slurpee,postit,gilgames,kissarmy,clubpenguin,limpbizk,timber1,celin,lilkim,fuckhard,lonely1,mom123,goodwood,extasy,sdsadee23,foxglove,malibog,clark1,casey2,shell1,odense,balefire,dcunited,cubbie,pierr,solei,161718,bowling1,areyukesc,batboy,r123456,1pionee,marmelad,maynard1,cn42qj,cfvehfq,heathrow,qazxcvbn,connecti,secret123,newfie,xzsawq21,tubitzen,nikusha,enigma1,yfcnz123,1austin,michaelc,splunge,wanger,phantom2,jason2,pain4me,primetime21,babes1,liberte,sugarray,undergro,zonker,labatts,djhjyf,watch1,eagle5,madison2,cntgfirf,sasha2,masterca,fiction7,slick50,bruins1,sagitari,12481632,peniss,insuranc,2b8riedt,12346789,mrclean,ssptx452,tissot,q1w2e3r4t5y6u7,avatar1,comet1,spacer,vbrjkf,pass11,wanker1,14vbqk9p,noshit,money4me,sayana,fish1234,seaways,pipper,romeo123,karens,wardog,ab123456,gorilla1,andrey123,lifesucks,jamesr,4wcqjn,bearman,glock22,matt11,dflbvrf,barbi,maine1,dima1997,sunnyboy,6bjvpe,bangkok1,666666q,rafiki,letmein0,0raziel0,dalla,london99,wildthin,patrycja,skydog,qcactw,tmjxn151,yqlgr667,jimmyd,stripclub,deadwood,863abgsg,horses1,qn632o,scatman,sonia1,subrosa,woland,kolya,charlie4,moleman,j12345,summer11,angel11,blasen,sandal,mynewpas,retlaw,cambria,mustang4,nohack04,kimber45,fatdog,maiden1,bigload,necron,dupont24,ghost123,turbo2,.ktymrf,radagast,balzac,vsevolod,pankaj,argentum,2bigtits,mamabear,bumblebee,mercury7,maddie1,chomper,jq24nc,snooky,pussylic,1lovers,taltos,warchild,diablo66,jojo12,sumerki,aventura,gagger,annelies,drumset,cumshots,azimut,123580,clambake,bmw540,birthday54,psswrd,paganini,wildwest,filibert,teaseme,1test,scampi,thunder5,antosha,purple12,supersex,hhhhhh1,brujah,111222333a,13579a,bvgthfnjh,4506802a,killians,choco,qqqwwweee,raygun,1grand,koetsu13,sharp1,mimi92139,fastfood,idontcare,bluered,chochoz,4z3al0ts,target1,sheffiel,labrat,stalingrad,147123,cubfan,corvett1,holden1,snapper1,4071505,amadeo,pollo,desperados,lovestory,marcopolo,mumbles,familyguy,kimchee,marcio,support1,tekila,shygirl1,trekkie,submissi,ilaria,salam,loveu,wildstar,master69,sales1,netware,homer2,arseniy,gerrity1,raspberr,atreyu,stick1,aldric,tennis12,matahari,alohomora,dicanio,michae1,michaeld,666111,luvbug,boyscout,esmerald,mjordan,admiral1,steamboa,616913,ybhdfyf,557711,555999,sunray,apokalipsis,theroc,bmw330,buzzy,chicos,lenusik,shadowma,eagles05,444222,peartree,qqq123,sandmann,spring1,430799,phatass,andi03,binky1,arsch,bamba,kenny123,fabolous,loser123,poop12,maman,phobos,tecate,myxworld4,metros,cocorico,nokia6120,johnny69,hater,spanked,313233,markos,love2011,mozart1,viktoriy,reccos,331234,hornyone,vitesse,1um83z,55555q,proline,v12345,skaven,alizee,bimini,fenerbahce,543216,zaqqaz,poi123,stabilo,brownie1,1qwerty1,dinesh,baggins1,1234567t,davidkin,friend1,lietuva,octopuss,spooks,12345qq,myshit,buttface,paradoxx,pop123,golfin,sweet69,rfghbp,sambuca,kayak1,bogus1,girlz,dallas12,millers,123456zx,operatio,pravda,eternal1,chase123,moroni,proust,blueduck,harris1,redbarch,996699,1010101,mouche,millenni,1123456,score1,1234565,1234576,eae21157,dave12,pussyy,gfif1991,1598741,hoppy,darrian,snoogins,fartface,ichbins,vfkbyrf,rusrap,2741001,fyfrjylf,aprils,favre,thisis,bannana,serval,wiggum,satsuma,matt123,ivan123,gulmira,123zxc123,oscar2,acces,annie2,dragon0,emiliano,allthat,pajaro,amandine,rawiswar,sinead,tassie,karma1,piggys,nokias,orions,origami,type40,mondo,ferrets,monker,biteme2,gauntlet,arkham,ascona,ingram01,klem1,quicksil,bingo123,blue66,plazma,onfire,shortie,spjfet,123963,thered,fire777,lobito,vball,1chicken,moosehea,elefante,babe23,jesus12,parallax,elfstone,number5,shrooms,freya,hacker1,roxette,snoops,number7,fellini,dtlmvf,chigger,mission1,mitsubis,kannan,whitedog,james01,ghjgecr,rfnfgekmnf,everythi,getnaked,prettybo,sylvan,chiller,carrera4,cowbo,biochem,azbuka,qwertyuiop1,midnight1,informat,audio1,alfred1,0range,sucker1,scott2,russland,1eagle,torben,djkrjlfd,rocky6,maddy1,bonobo,portos,chrissi,xjznq5,dexte,vdlxuc,teardrop,pktmxr,iamtheone,danijela,eyphed,suzuki1,etvww4,redtail,ranger11,mowerman,asshole2,coolkid,adriana1,bootcamp,longcut,evets,npyxr5,bighurt,bassman1,stryder,giblet,nastja,blackadd,topflite,wizar,cumnow,technolo,bassboat,bullitt,kugm7b,maksimus,wankers,mine12,sunfish,pimpin1,shearer9,user1,vjzgjxnf,tycobb,80070633pc,stanly,vitaly,shirley1,cinzia,carolyn1,angeliqu,teamo,qdarcv,aa123321,ragdoll,bonit,ladyluck,wiggly,vitara,jetbalance,12345600,ozzman,dima12345,mybuddy,shilo,satan66,erebus,warrio,090808qwe,stupi,bigdan,paul1234,chiapet,brooks1,philly1,dually,gowest,farmer1,1qa2ws3ed4rf,alberto1,beachboy,barne,aa12345,aliyah,radman,benson1,dfkthbq,highball,bonou2,i81u812,workit,darter,redhook,csfbr5yy,buttlove,episode1,ewyuza,porthos,lalal,abcd12,papero,toosexy,keeper1,silver7,jujitsu,corset,pilot123,simonsay,pinggolf,katerinka,kender,drunk1,fylhjvtlf,rashmi,nighthawk,maggy,juggernaut,larryb,cabibble,fyabcf,247365,gangstar,jaybee,verycool,123456789qw,forbidde,prufrock,12345zxc,malaika,blackbur,docker,filipe,koshechka,gemma1,djamaal,dfcbkmtdf,gangst,9988aa,ducks1,pthrfkj,puertorico,muppets,griffins,whippet,sauber,timofey,larinso,123456789zxc,quicken,qsefth,liteon,headcase,bigdadd,zxc321,maniak,jamesc,bassmast,bigdogs,1girls,123xxx,trajan,lerochka,noggin,mtndew,04975756,domin,wer123,fumanchu,lambada,thankgod,june22,kayaking,patchy,summer10,timepass,poiu1234,kondor,kakka,lament,zidane10,686xqxfg,l8v53x,caveman1,nfvthkfy,holymoly,pepita,alex1996,mifune,fighter1,asslicker,jack22,abc123abc,zaxxon,midnigh,winni,psalm23,punky,monkey22,password13,mymusic,justyna,annushka,lucky5,briann,495rus19,withlove,almaz,supergir,miata,bingbong,bradpitt,kamasutr,yfgjktjy,vanman,pegleg,amsterdam1,123a321,letmein9,shivan,korona,bmw520,annette1,scotsman,gandal,welcome12,sc00by,qpwoei,fred69,m1sf1t,hamburg1,1access,dfkmrbhbz,excalibe,boobies1,fuckhole,karamel,starfuck,star99,breakfas,georgiy,ywvxpz,smasher,fatcat1,allanon,12345n,coondog,whacko,avalon1,scythe,saab93,timon,khorne,atlast,nemisis,brady12,blenheim,52678677,mick7278,9skw5g,fleetwoo,ruger1,kissass,pussy7,scruff,12345l,bigfun,vpmfsz,yxkck878,evgeny,55667788,lickher,foothill,alesis,poppies,77777778,californi,mannie,bartjek,qhxbij,thehulk,xirt2k,angelo4ek,rfkmrekznjh,tinhorse,1david,sparky12,night1,luojianhua,bobble,nederland,rosemari,travi,minou,ciscokid,beehive,565hlgqo,alpine1,samsung123,trainman,xpress,logistic,vw198m2n,hanter,zaqwsx123,qwasz,mariachi,paska,kmg365,kaulitz,sasha12,north1,polarbear,mighty1,makeksa11,123456781,one4all,gladston,notoriou,polniypizdec110211,gosia,grandad,xholes,timofei,invalidp,speaker1,zaharov,maggiema,loislane,gonoles,br5499,discgolf,kaskad,snooper,newman1,belial,demigod,vicky1,pridurok,alex1990,tardis1,cruzer,hornie,sacramen,babycat,burunduk,mark69,oakland1,me1234,gmctruck,extacy,sexdog,putang,poppen,billyd,1qaz2w,loveable,gimlet,azwebitalia,ragtop,198500,qweas,mirela,rock123,11bravo,sprewell,tigrenok,jaredleto,vfhbif,blue2,rimjob,catwalk,sigsauer,loqse,doromich,jack01,lasombra,jonny5,newpassword,profesor,garcia1,123as123,croucher,demeter,4_life,rfhfvtkm,superman2,rogues,assword1,russia1,jeff1,mydream,z123456789,rascal1,darre,kimberl,pickle1,ztmfcq,ponchik,lovesporn,hikari,gsgba368,pornoman,chbjun,choppy,diggity,nightwolf,viktori,camar,vfhecmrf,alisa1,minstrel,wishmaster,mulder1,aleks,gogirl,gracelan,8womys,highwind,solstice,dbrnjhjdyf,nightman,pimmel,beertje,ms6nud,wwfwcw,fx3tuo,poopface,asshat,dirtyd,jiminy,luv2fuck,ptybnxtvgbjy,dragnet,pornogra,10inch,scarlet1,guido1,raintree,v123456,1aaaaaaa,maxim1935,hotwater,gadzooks,playaz,harri,brando1,defcon1,ivanna,123654a,arsenal2,candela,nt5d27,jaime1,duke1,burton1,allstar1,dragos,newpoint,albacore,1236987z,verygoodbot,1wildcat,fishy1,ptktysq,chris11,puschel,itdxtyrj,7kbe9d,serpico,jazzie,1zzzzz,kindbuds,wenef45313,1compute,tatung,sardor,gfyfcjybr,test99,toucan,meteora,lysander,asscrack,jowgnx,hevnm4,suckthis,masha123,karinka,marit,oqglh565,dragon00,vvvbbb,cheburashka,vfrfrf,downlow,unforgiven,p3e85tr,kim123,sillyboy,gold1,golfvr6,quicksan,irochka,froglegs,shortsto,caleb1,tishka,bigtitts,smurfy,bosto,dropzone,nocode,jazzbass,digdug,green7,saltlake,therat,dmitriev,lunita,deaddog,summer0,1212qq,bobbyg,mty3rh,isaac1,gusher,helloman,sugarbear,corvair,extrem,teatime,tujazopi,titanik,efyreg,jo9k2jw2,counchac,tivoli,utjvtnhbz,bebit,jacob6,clayton1,incubus1,flash123,squirter,dima2010,cock1,rawks,komatsu,forty2,98741236,cajun1,madelein,mudhoney,magomed,q111111,qaswed,consense,12345b,bakayaro,silencer,zoinks,bigdic,werwolf,pinkpuss,96321478,alfie1,ali123,sarit,minette,musics,chato,iaapptfcor,cobaka,strumpf,datnigga,sonic123,yfnecbr,vjzctvmz,pasta1,tribbles,crasher,htlbcrf,1tiger,shock123,bearshar,syphon,a654321,cubbies1,jlhanes,eyespy,fucktheworld,carrie1,bmw325is,suzuk,mander,dorina,mithril,hondo1,vfhnbyb,sachem,newton1,12345x,7777755102q,230857z,xxxsex,scubapro,hayastan,spankit,delasoul,searock6,fallout3,nilrem,24681357,pashka,voluntee,pharoh,willo,india1,badboy69,roflmao,gunslinger,lovergir,mama12,melange,640xwfkv,chaton,darkknig,bigman1,aabbccdd,harleyd,birdhouse,giggsy,hiawatha,tiberium,joker7,hello1234,sloopy,tm371855,greendog,solar1,bignose,djohn11,espanol,oswego,iridium,kavitha,pavell,mirjam,cyjdsvujljv,alpha5,deluge,hamme,luntik,turismo,stasya,kjkbnf,caeser,schnecke,tweety1,tralfaz,lambrett,prodigy1,trstno1,pimpshit,werty1,karman,bigboob,pastel,blackmen,matthew8,moomin,q1w2e,gilly,primaver,jimmyg,house2,elviss,15975321,1jessica,monaliza,salt55,vfylfhbyrf,harley11,tickleme,murder1,nurgle,kickass1,theresa1,fordtruck,pargolf,managua,inkognito,sherry1,gotit,friedric,metro2033,slk230,freeport,cigarett,492529,vfhctkm,thebeach,twocats,bakugan,yzerman1,charlieb,motoko,skiman,1234567w,pussy3,love77,asenna,buffie,260zntpc,kinkos,access20,mallard1,fuckyou69,monami,rrrrr1,bigdog69,mikola,1boomer,godzila,ginger2,dima2000,skorpion39,dima1234,hawkdog79,warrior2,ltleirf,supra1,jerusale,monkey01,333z333,666888,kelsey1,w8gkz2x1,fdfnfh,msnxbi,qwe123rty,mach1,monkey3,123456789qq,c123456,nezabudka,barclays,nisse,dasha1,12345678987654321,dima1993,oldspice,frank2,rabbitt,prettyboy,ov3ajy,iamthema,kawasak,banjo1,gtivr6,collants,gondor,hibees,cowboys2,codfish,buster2,purzel,rubyred,kayaker,bikerboy,qguvyt,masher,sseexx,kenshiro,moonglow,semenova,rosari,eduard1,deltaforce,grouper,bongo1,tempgod,1taylor,goldsink,qazxsw1,1jesus,m69fg2w,maximili,marysia,husker1,kokanee,sideout,googl,south1,plumber1,trillian,00001,1357900,farkle,1xxxxx,pascha,emanuela,bagheera,hound1,mylov,newjersey,swampfox,sakic19,torey,geforce,wu4etd,conrail,pigman,martin2,ber02,nascar2,angel69,barty,kitsune,cornet,yes90125,goomba,daking,anthea,sivart,weather1,ndaswf,scoubidou,masterchief,rectum,3364068,oranges1,copter,1samanth,eddies,mimoza,ahfywbz,celtic88,86mets,applemac,amanda11,taliesin,1angel,imhere,london11,bandit12,killer666,beer1,06225930,psylocke,james69,schumach,24pnz6kc,endymion,wookie1,poiu123,birdland,smoochie,lastone,rclaki,olive1,pirat,thunder7,chris69,rocko,151617,djg4bb4b,lapper,ajcuivd289,colole57,shadow7,dallas21,ajtdmw,executiv,dickies,omegaman,jason12,newhaven,aaaaaas,pmdmscts,s456123789,beatri,applesauce,levelone,strapon,benladen,creaven,ttttt1,saab95,f123456,pitbul,54321a,sex12345,robert3,atilla,mevefalkcakk,1johnny,veedub,lilleke,nitsuj,5t6y7u8i,teddys,bluefox,nascar20,vwjetta,buffy123,playstation3,loverr,qweasd12,lover2,telekom,benjamin1,alemania,neutrino,rockz,valjean,testicle,trinity3,realty,firestarter,794613852,ardvark,guadalup,philmont,arnold1,holas,zw6syj,birthday299,dover1,sexxy1,gojets,741236985,cance,blue77,xzibit,qwerty88,komarova,qweszxc,footer,rainger,silverst,ghjcnb,catmando,tatooine,31217221027711,amalgam,69dude,qwerty321,roscoe1,74185,cubby,alfa147,perry1,darock,katmandu,darknight,knicks1,freestuff,45454,kidman,4tlved,axlrose,cutie1,quantum1,joseph10,ichigo,pentium3,rfhectkm,rowdy1,woodsink,justforfun,sveta123,pornografia,mrbean,bigpig,tujheirf,delta9,portsmou,hotbod,kartal,10111213,fkbyf001,pavel1,pistons1,necromancer,verga,c7lrwu,doober,thegame1,hatesyou,sexisfun,1melissa,tuczno18,bowhunte,gobama,scorch,campeon,bruce2,fudge1,herpderp,bacon1,redsky,blackeye,19966991,19992000,ripken8,masturba,34524815,primax,paulina1,vp6y38,427cobra,4dwvjj,dracon,fkg7h4f3v6,longview,arakis,panama1,honda2,lkjhgfdsaz,razors,steels,fqkw5m,dionysus,mariajos,soroka,enriqu,nissa,barolo,king1234,hshfd4n279,holland1,flyer1,tbones,343104ky,modems,tk421,ybrbnrf,pikapp,sureshot,wooddoor,florida2,mrbungle,vecmrf,catsdogs,axolotl,nowayout,francoi,chris21,toenail,hartland,asdjkl,nikkii,onlyyou,buckskin,fnord,flutie,holen1,rincewind,lefty1,ducky1,199000,fvthbrf,redskin1,ryno23,lostlove,19mtpgam19,abercrom,benhur,jordan11,roflcopter,ranma,phillesh,avondale,igromania,p4ssword,jenny123,tttttt1,spycams,cardigan,2112yyz,sleepy1,paris123,mopars,lakers34,hustler1,james99,matrix3,popimp,12pack,eggbert,medvedev,testit,performa,logitec,marija,sexybeast,supermanboy,iwantit,rjktcj,jeffer,svarog,halo123,whdbtp,nokia3230,heyjoe,marilyn1,speeder,ibxnsm,prostock,bennyboy,charmin,codydog,parol999,ford9402,jimmer,crayola,159357258,alex77,joey1,cayuga,phish420,poligon,specops,tarasova,caramelo,draconis,dimon,cyzkhw,june29,getbent,1guitar,jimjam,dictiona,shammy,flotsam,0okm9ijn,crapper,technic,fwsadn,rhfdxtyrj,zaq11qaz,anfield1,159753q,curious1,hip-hop,1iiiii,gfhjkm2,cocteau,liveevil,friskie,crackhead,b1afra,elektrik,lancer1,b0ll0cks,jasond,z1234567,tempest1,alakazam,asdfasd,duffy1,oneday,dinkle,qazedctgb,kasimir,happy7,salama,hondaciv,nadezda,andretti,cannondale,sparticu,znbvjd,blueice,money01,finster,eldar,moosie,pappa,delta123,neruda,bmw330ci,jeanpaul,malibu1,alevtina,sobeit,travolta,fullmetal,enamorad,mausi,boston12,greggy,smurf1,ratrace,ichiban,ilovepus,davidg,wolf69,villa1,cocopuff,football12,starfury,zxc12345,forfree,fairfiel,dreams1,tayson,mike2,dogday,hej123,oldtimer,sanpedro,clicker,mollycat,roadstar,golfe,lvbnhbq1,topdevice,a1b2c,sevastopol,calli,milosc,fire911,pink123,team3x,nolimit5,snickers1,annies,09877890,jewel1,steve69,justin11,autechre,killerbe,browncow,slava1,christer,fantomen,redcloud,elenberg,beautiful1,passw0rd1,nazira,advantag,cockring,chaka,rjpzdrf,99941,az123456,biohazar,energie,bubble1,bmw323,tellme,printer1,glavine,1starwar,coolbeans,april17,carly1,quagmire,admin2,djkujuhfl,pontoon,texmex,carlos12,thermo,vaz2106,nougat,bob666,1hockey,1john,cricke,qwerty10,twinz,totalwar,underwoo,tijger,lildevil,123q321,germania,freddd,1scott,beefy,5t4r3e2w1q,fishbait,nobby,hogger,dnstuff,jimmyc,redknapp,flame1,tinfloor,balla,nfnfhby,yukon1,vixens,batata,danny123,1zxcvbnm,gaetan,homewood,greats,tester1,green99,1fucker,sc0tland,starss,glori,arnhem,goatman,1234asd,supertra,bill123,elguapo,sexylegs,jackryan,usmc69,innow,roaddog,alukard,winter11,crawler,gogiants,rvd420,alessandr,homegrow,gobbler,esteba,valeriy,happy12,1joshua,hawking,sicnarf,waynes,iamhappy,bayadera,august2,sashas,gotti,dragonfire,pencil1,halogen,borisov,bassingw,15975346,zachar,sweetp,soccer99,sky123,flipyou,spots3,xakepy,cyclops1,dragon77,rattolo58,motorhea,piligrim,helloween,dmb2010,supermen,shad0w,eatcum,sandokan,pinga,ufkfrnbrf,roksana,amista,pusser,sony1234,azerty1,1qasw2,ghbdt,q1w2e3r4t5y6u7i8,ktutylf,brehznev,zaebali,shitass,creosote,gjrtvjy,14938685,naughtyboy,pedro123,21crack,maurice1,joesakic,nicolas1,matthew9,lbyfhf,elocin,hfcgbplzq,pepper123,tiktak,mycroft,ryan11,firefly1,arriva,cyecvevhbr,loreal,peedee,jessica8,lisa01,anamari,pionex,ipanema,airbag,frfltvbz,123456789aa,epwr49,casper12,sweethear,sanandreas,wuschel,cocodog,france1,119911,redroses,erevan,xtvgbjy,bigfella,geneve,volvo850,evermore,amy123,moxie,celebs,geeman,underwor,haslo1,joy123,hallow,chelsea0,12435687,abarth,12332145,tazman1,roshan,yummie,genius1,chrisd,ilovelife,seventy7,qaz1wsx2,rocket88,gaurav,bobbyboy,tauchen,roberts1,locksmit,masterof,www111,d9ungl,volvos40,asdasd1,golfers,jillian1,7xm5rq,arwpls4u,gbhcf2,elloco,football2,muerte,bob101,sabbath1,strider1,killer66,notyou,lawnboy,de7mdf,johnnyb,voodoo2,sashaa,homedepo,bravos,nihao123,braindea,weedhead,rajeev,artem1,camille1,rockss,bobbyb,aniston,frnhbcf,oakridge,biscayne,cxfcnm,dressage,jesus3,kellyann,king69,juillet,holliste,h00ters,ripoff,123645,1999ar,eric12,123777,tommi,dick12,bilder,chris99,rulezz,getpaid,chicubs,ender1,byajhvfnbrf,milkshak,sk8board,freakshow,antonella,monolit,shelb,hannah01,masters1,pitbull1,1matthew,luvpussy,agbdlcid,panther2,alphas,euskadi,8318131,ronnie1,7558795,sweetgirl,cookie59,sequoia,5552555,ktyxbr,4500455,money7,severus,shinobu,dbityrf,phisig,rogue2,fractal,redfred,sebastian1,nelli,b00mer,cyberman,zqjphsyf6ctifgu,oldsmobile,redeemer,pimpi,lovehurts,1slayer,black13,rtynfdh,airmax,g00gle,1panther,artemon,nopasswo,fuck1234,luke1,trinit,666000,ziadma,oscardog,davex,hazel1,isgood,demond,james5,construc,555551,january2,m1911a1,flameboy,merda,nathan12,nicklaus,dukester,hello99,scorpio7,leviathan,dfcbktr,pourquoi,vfrcbv123,shlomo,rfcgth,rocky3,ignatz,ajhneyf,roger123,squeek,4815162342a,biskit,mossimo,soccer21,gridlock,lunker,popstar,ghhh47hj764,chutney,nitehawk,vortec,gamma1,codeman,dragula,kappasig,rainbow2,milehigh,blueballs,ou8124me,rulesyou,collingw,mystere,aster,astrovan,firetruck,fische,crawfish,hornydog,morebeer,tigerpaw,radost,144000,1chance,1234567890qwe,gracie1,myopia,oxnard,seminoles,evgeni,edvard,partytim,domani,tuffy1,jaimatadi,blackmag,kzueirf,peternor,mathew1,maggie12,henrys,k1234567,fasted,pozitiv,cfdtkbq,jessica7,goleafs,bandito,girl78,sharingan,skyhigh,bigrob,zorros,poopers,oldschoo,pentium2,gripper,norcal,kimba,artiller,moneymak,00197400,272829,shadow1212,thebull,handbags,all4u2c,bigman2,civics,godisgoo,section8,bandaid,suzanne1,zorba,159123,racecars,i62gbq,rambo123,ironroad,johnson2,knobby,twinboys,sausage1,kelly69,enter2,rhjirf,yessss,james12,anguilla,boutit,iggypop,vovochka,06060,budwiser,romuald,meditate,good1,sandrin,herkules,lakers8,honeybea,11111111a,miche,rangers9,lobster1,seiko,belova,midcon,mackdadd,bigdaddy1,daddie,sepultur,freddy12,damon1,stormy1,hockey2,bailey12,hedimaptfcor,dcowboys,sadiedog,thuggin,horny123,josie1,nikki2,beaver69,peewee1,mateus,viktorija,barrys,cubswin1,matt1234,timoxa,rileydog,sicilia,luckycat,candybar,julian1,abc456,pussylip,phase1,acadia,catty,246800,evertonf,bojangle,qzwxec,nikolaj,fabrizi,kagome,noncapa0,marle,popol,hahaha1,cossie,carla10,diggers,spankey,sangeeta,cucciolo,breezer,starwar1,cornholio,rastafari,spring99,yyyyyyy1,webstar,72d5tn,sasha1234,inhouse,gobuffs,civic1,redstone,234523,minnie1,rivaldo,angel5,sti2000,xenocide,11qq11,1phoenix,herman1,holly123,tallguy,sharks1,madri,superbad,ronin,jalal123,hardbody,1234567r,assman1,vivahate,buddylee,38972091,bonds25,40028922,qrhmis,wp2005,ceejay,pepper01,51842543,redrum1,renton,varadero,tvxtjk7r,vetteman,djhvbrc,curly1,fruitcak,jessicas,maduro,popmart,acuari,dirkpitt,buick1,bergerac,golfcart,pdtpljxrf,hooch1,dudelove,d9ebk7,123452000,afdjhbn,greener,123455432,parachut,mookie12,123456780,jeepcj5,potatoe,sanya,qwerty2010,waqw3p,gotika,freaky1,chihuahu,buccanee,ecstacy,crazyboy,slickric,blue88,fktdnbyf,2004rj,delta4,333222111,calient,ptbdhw,1bailey,blitz1,sheila1,master23,hoagie,pyf8ah,orbita,daveyboy,prono1,delta2,heman,1horny,tyrik123,ostrov,md2020,herve,rockfish,el546218,rfhbyjxrf,chessmaster,redmoon,lenny1,215487,tomat,guppy,amekpass,amoeba,my3girls,nottingh,kavita,natalia1,puccini,fabiana,8letters,romeos,netgear,casper2,taters,gowings,iforgot1,pokesmot,pollit,lawrun,petey1,rosebuds,007jr,gthtcnhjqrf,k9dls02a,neener,azertyu,duke11,manyak,tiger01,petros,supermar,mangas,twisty,spotter,takagi,dlanod,qcmfd454,tusymo,zz123456,chach,navyblue,gilbert1,2kash6zq,avemaria,1hxboqg2s,viviane,lhbjkjubz2957704,nowwowtg,1a2b3c4,m0rn3,kqigb7,superpuper,juehtw,gethigh,theclown,makeme,pradeep,sergik,deion21,nurik,devo2706,nbvibt,roman222,kalima,nevaeh,martin7,anathema,florian1,tamwsn3sja,dinmamma,133159,123654q,slicks,pnp0c08,yojimbo,skipp,kiran,pussyfuck,teengirl,apples12,myballs,angeli,1234a,125678,opelastra,blind1,armagedd,fish123,pitufo,chelseaf,thedevil,nugget1,cunt69,beetle1,carter15,apolon,collant,password00,fishboy,djkrjdf,deftone,celti,three11,cyrus1,lefthand,skoal1,ferndale,aries1,fred01,roberta1,chucks,cornbread,lloyd1,icecrea,cisco123,newjerse,vfhrbpf,passio,volcom1,rikimaru,yeah11,djembe,facile,a1l2e3x4,batman7,nurbol,lorenzo1,monica69,blowjob1,998899,spank1,233391,n123456,1bear,bellsout,999998,celtic67,sabre1,putas,y9enkj,alfabeta,heatwave,honey123,hard4u,insane1,xthysq,magnum1,lightsaber,123qweqwe,fisher1,pixie1,precios,benfic,thegirls,bootsman,4321rewq,nabokov,hightime,djghjc,1chelsea,junglist,august16,t3fkvkmj,1232123,lsdlsd12,chuckie1,pescado,granit,toogood,cathouse,natedawg,bmw530,123kid,hajime,198400,engine1,wessonnn,kingdom1,novembre,1rocks,kingfisher,qwerty89,jordan22,zasranec,megat,sucess,installutil,fetish01,yanshi1982,1313666,1314520,clemence,wargod,time1,newzealand,snaker,13324124,cfrehf,hepcat,mazahaka,bigjay,denisov,eastwest,1yellow,mistydog,cheetos,1596357,ginger11,mavrik,bubby1,bhbyf,pyramide,giusepp,luthien,honda250,andrewjackie,kentavr,lampoon,zaq123wsx,sonicx,davidh,1ccccc,gorodok,windsong,programm,blunt420,vlad1995,zxcvfdsa,tarasov,mrskin,sachas,mercedes1,koteczek,rawdog,honeybear,stuart1,kaktys,richard7,55555n,azalia,hockey10,scouter,francy,1xxxxxx,julie456,tequilla,penis123,schmoe,tigerwoods,1ferrari,popov,snowdrop,matthieu,smolensk,cornflak,jordan01,love2000,23wesdxc,kswiss,anna2000,geniusnet,baby2000,33ds5x,waverly,onlyone4,networkingpe,raven123,blesse,gocards,wow123,pjflkork,juicey,poorboy,freeee,billybo,shaheen,zxcvbnm.,berlit,truth1,gepard,ludovic,gunther1,bobby2,bob12345,sunmoon,septembr,bigmac1,bcnjhbz,seaking,all4u,12qw34er56ty,bassie,nokia5228,7355608,sylwia,charvel,billgate,davion,chablis,catsmeow,kjiflrf,amylynn,rfvbkkf,mizredhe,handjob,jasper12,erbol,solara,bagpipe,biffer,notime,erlan,8543852,sugaree,oshkosh,fedora,bangbus,5lyedn,longball,teresa1,bootyman,aleksand,qazwsxedc12,nujbhc,tifosi,zpxvwy,lights1,slowpoke,tiger12,kstate,password10,alex69,collins1,9632147,doglover,baseball2,security1,grunts,orange2,godloves,213qwe879,julieb,1qazxsw23edcvfr4,noidea,8uiazp,betsy1,junior2,parol123,123456zz,piehonkii,kanker,bunky,hingis,reese1,qaz123456,sidewinder,tonedup,footsie,blackpoo,jalapeno,mummy1,always1,josh1,rockyboy,plucky,chicag,nadroj,blarney,blood123,wheaties,packer1,ravens1,mrjones,gfhjkm007,anna2010,awatar,guitar12,hashish,scale1,tomwaits,amrita,fantasma,rfpfym,pass2,tigris,bigair,slicker,sylvi,shilpa,cindylou,archie1,bitches1,poppys,ontime,horney1,camaroz28,alladin,bujhm,cq2kph,alina1,wvj5np,1211123a,tetons,scorelan,concordi,morgan2,awacs,shanty,tomcat14,andrew123,bear69,vitae,fred99,chingy,octane,belgario,fatdaddy,rhodan,password23,sexxes,boomtown,joshua01,war3demo,my2kids,buck1,hot4you,monamour,12345aa,yumiko,parool,carlton1,neverland,rose12,right1,sociald,grouse,brandon0,cat222,alex00,civicex,bintang,malkav,arschloc,dodgeviper,qwerty666,goduke,dante123,boss1,ontheroc,corpsman,love14,uiegu451,hardtail,irondoor,ghjrehfnehf,36460341,konijn,h2slca,kondom25,123456ss,cfytxrf,btnjey,nando,freemail,comander,natas666,siouxsie,hummer1,biomed,dimsum,yankees0,diablo666,lesbian1,pot420,jasonm,glock23,jennyb,itsmine,lena2010,whattheh,beandip,abaddon,kishore,signup,apogee,biteme12,suzieq,vgfun4,iseeyou,rifleman,qwerta,4pussy,hawkman,guest1,june17,dicksuck,bootay,cash12,bassale,ktybyuhfl,leetch,nescafe,7ovtgimc,clapton1,auror,boonie,tracker1,john69,bellas,cabinboy,yonkers,silky1,ladyffesta,drache,kamil1,davidp,bad123,snoopy12,sanche,werthvfy,achille,nefertiti,gerald1,slage33,warszawa,macsan26,mason123,kotopes,welcome8,nascar99,kiril,77778888,hairy1,monito,comicsans,81726354,killabee,arclight,yuo67,feelme,86753099,nnssnn,monday12,88351132,88889999,websters,subito,asdf12345,vaz2108,zvbxrpl,159753456852,rezeda,multimed,noaccess,henrique,tascam,captiva,zadrot,hateyou,sophie12,123123456,snoop1,charlie8,birmingh,hardline,libert,azsxdcf,89172735872,rjpthju,bondar,philips1,olegnaruto,myword,yakman,stardog,banana12,1234567890w,farout,annick,duke01,rfj422,billard,glock19,shaolin1,master10,cinderel,deltaone,manning1,biggreen,sidney1,patty1,goforit1,766rglqy,sevendus,aristotl,armagedo,blumen,gfhfyjz,kazakov,lekbyxxx,accord1,idiota,soccer16,texas123,victoire,ololo,chris01,bobbbb,299792458,eeeeeee1,confiden,07070,clarks,techno1,kayley,stang1,wwwwww1,uuuuu1,neverdie,jasonr,cavscout,481516234,mylove1,shaitan,1qazxcvb,barbaros,123456782000,123wer,thissucks,7seven,227722,faerie,hayduke,dbacks,snorkel,zmxncbv,tiger99,unknown1,melmac,polo1234,sssssss1,1fire,369147,bandung,bluejean,nivram,stanle,ctcnhf,soccer20,blingbli,dirtball,alex2112,183461,skylin,boobman,geronto,brittany1,yyz2112,gizmo69,ktrcec,dakota12,chiken,sexy11,vg08k714,bernadet,1bulldog,beachs,hollyb,maryjoy,margo1,danielle1,chakra,alexand,hullcity,matrix12,sarenna,pablos,antler,supercar,chomsky,german1,airjordan,545ettvy,camaron,flight1,netvideo,tootall,valheru,481516,1234as,skimmer,redcross,inuyash,uthvfy,1012nw,edoardo,bjhgfi,golf11,9379992a,lagarto,socball,boopie,krazy,.adgjmptw,gaydar,kovalev,geddylee,firstone,turbodog,loveee,135711,badbo,trapdoor,opopop11,danny2,max2000,526452,kerry1,leapfrog,daisy2,134kzbip,1andrea,playa1,peekab00,heskey,pirrello,gsewfmck,dimon4ik,puppie,chelios,554433,hypnodanny,fantik,yhwnqc,ghbdtngjrf,anchorag,buffett1,fanta,sappho,024680,vialli,chiva,lucylu,hashem,exbntkm,thema,23jordan,jake11,wildside,smartie,emerica,2wj2k9oj,ventrue,timoth,lamers,baerchen,suspende,boobis,denman85,1adam12,otello,king12,dzakuni,qsawbbs,isgay,porno123,jam123,daytona1,tazzie,bunny123,amaterasu,jeffre,crocus,mastercard,bitchedup,chicago7,aynrand,intel1,tamila,alianza,mulch,merlin12,rose123,alcapone,mircea,loveher,joseph12,chelsea6,dorothy1,wolfgar,unlimite,arturik,qwerty3,paddy1,piramid,linda123,cooool,millie1,warlock1,forgotit,tort02,ilikeyou,avensis,loveislife,dumbass1,clint1,2110se,drlove,olesia,kalinina,sergey123,123423,alicia1,markova,tri5a3,media1,willia1,xxxxxxx1,beercan,smk7366,jesusislord,motherfuck,smacker,birthday5,jbaby,harley2,hyper1,a9387670a,honey2,corvet,gjmptw,rjhjkmbien,apollon,madhuri,3a5irt,cessna17,saluki,digweed,tamia1,yja3vo,cfvlehfr,1111111q,martyna,stimpy1,anjana,yankeemp,jupiler,idkfa,1blue,fromv,afric,3xbobobo,liverp00l,nikon1,amadeus1,acer123,napoleo,david7,vbhjckfdf,mojo69,percy1,pirates1,grunt1,alenushka,finbar,zsxdcf,mandy123,1fred,timewarp,747bbb,druids,julia123,123321qq,spacebar,dreads,fcbarcelona,angela12,anima,christopher1,stargazer,123123s,hockey11,brewski,marlbor,blinker,motorhead,damngood,werthrf,letmein3,moremoney,killer99,anneke,eatit,pilatus,andrew01,fiona1,maitai,blucher,zxgdqn,e5pftu,nagual,panic1,andron,openwide,alphabeta,alison1,chelsea8,fende,mmm666,1shot2,a19l1980,123456@,1black,m1chael,vagner,realgood,maxxx,vekmnbr,stifler,2509mmh,tarkan,sherzod,1234567b,gunners1,artem2010,shooby,sammie1,p123456,piggie,abcde12345,nokia6230,moldir,piter,1qaz3edc,frequenc,acuransx,1star,nikeair,alex21,dapimp,ranjan,ilovegirls,anastasiy,berbatov,manso,21436587,leafs1,106666,angelochek,ingodwetrust,123456aaa,deano,korsar,pipetka,thunder9,minka,himura,installdevic,1qqqqq,digitalprodu,suckmeoff,plonker,headers,vlasov,ktr1996,windsor1,mishanya,garfield1,korvin,littlebit,azaz09,vandamme,scripto,s4114d,passward,britt1,r1chard,ferrari5,running1,7xswzaq,falcon2,pepper76,trademan,ea53g5,graham1,volvos80,reanimator,micasa,1234554321q,kairat,escorpion,sanek94,karolina1,kolovrat,karen2,1qaz@wsx,racing1,splooge,sarah2,deadman1,creed1,nooner,minicoop,oceane,room112,charme,12345ab,summer00,wetcunt,drewman,nastyman,redfire,appels,merlin69,dolfin,bornfree,diskette,ohwell,12345678qwe,jasont,madcap,cobra2,dolemit1,whatthehell,juanit,voldemar,rocke,bianc,elendil,vtufgjkbc,hotwheels,spanis,sukram,pokerface,k1ller,freakout,dontae,realmadri,drumss,gorams,258789,snakey,jasonn,whitewolf,befree,johnny99,pooka,theghost,kennys,vfvektxrf,toby1,jumpman23,deadlock,barbwire,stellina,alexa1,dalamar,mustanggt,northwes,tesoro,chameleo,sigtau,satoshi,george11,hotcum,cornell1,golfer12,geek01d,trololo,kellym,megapolis,pepsi2,hea666,monkfish,blue52,sarajane,bowler1,skeets,ddgirls,hfccbz,bailey01,isabella1,dreday,moose123,baobab,crushme,000009,veryhot,roadie,meanone,mike18,henriett,dohcvtec,moulin,gulnur,adastra,angel9,western1,natura,sweetpe,dtnfkm,marsbar,daisys,frogger1,virus1,redwood1,streetball,fridolin,d78unhxq,midas,michelob,cantik,sk2000,kikker,macanudo,rambone,fizzle,20000,peanuts1,cowpie,stone32,astaroth,dakota01,redso,mustard1,sexylove,giantess,teaparty,bobbin,beerbong,monet1,charles3,anniedog,anna1988,cameleon,longbeach,tamere,qpful542,mesquite,waldemar,12345zx,iamhere,lowboy,canard,granp,daisymay,love33,moosejaw,nivek,ninjaman,shrike01,aaa777,88002000600,vodolei,bambush,falcor,harley69,alphaomega,severine,grappler,bosox,twogirls,gatorman,vettes,buttmunch,chyna,excelsio,crayfish,birillo,megumi,lsia9dnb9y,littlebo,stevek,hiroyuki,firehous,master5,briley2,gangste,chrisk,camaleon,bulle,troyboy,froinlaven,mybutt,sandhya,rapala,jagged,crazycat,lucky12,jetman,wavmanuk,1heather,beegee,negril,mario123,funtime1,conehead,abigai,mhorgan,patagoni,travel1,backspace,frenchfr,mudcat,dashenka,baseball3,rustys,741852kk,dickme,baller23,griffey1,suckmycock,fuhrfzgc,jenny2,spuds,berlin1,justfun,icewind,bumerang,pavlusha,minecraft123,shasta1,ranger12,123400,twisters,buthead,miked,finance1,dignity7,hello9,lvjdp383,jgthfnjh,dalmatio,paparoach,miller31,2bornot2b,fathe,monterre,theblues,satans,schaap,jasmine2,sibelius,manon,heslo,jcnhjd,shane123,natasha2,pierrot,bluecar,iloveass,harriso,red12,london20,job314,beholder,reddawg,fuckyou!,pussylick,bologna1,austintx,ole4ka,blotto,onering,jearly,balbes,lightbul,bighorn,crossfir,lee123,prapor,1ashley,gfhjkm22,wwe123,09090,sexsite,marina123,jagua,witch1,schmoo,parkview,dragon3,chilango,ultimo,abramova,nautique,2bornot2,duende,1arthur,nightwing,surfboar,quant4307,15s9pu03,karina1,shitball,walleye1,wildman1,whytesha,1morgan,my2girls,polic,baranova,berezuckiy,kkkkkk1,forzima,fornow,qwerty02,gokart,suckit69,davidlee,whatnow,edgard,tits1,bayshore,36987412,ghbphfr,daddyy,explore1,zoidberg,5qnzjx,morgane,danilov,blacksex,mickey12,balsam,83y6pv,sarahc,slaye,all4u2,slayer69,nadia1,rlzwp503,4cranker,kaylie,numberon,teremok,wolf12,deeppurple,goodbeer,aaa555,66669999,whatif,harmony1,ue8fpw,3tmnej,254xtpss,dusty197,wcksdypk,zerkalo,dfnheirf,motorol,digita,whoareyou,darksoul,manics,rounders,killer11,d2000lb,cegthgfhjkm,catdog1,beograd,pepsico,julius1,123654987,softbal,killer23,weasel1,lifeson,q123456q,444555666,bunches,andy1,darby1,service01,bear11,jordan123,amega,duncan21,yensid,lerxst,rassvet,bronco2,fortis,pornlove,paiste,198900,asdflkjh,1236547890,futur,eugene1,winnipeg261,fk8bhydb,seanjohn,brimston,matthe1,bitchedu,crisco,302731,roxydog,woodlawn,volgograd,ace1210,boy4u2ownnyc,laura123,pronger,parker12,z123456z,andrew13,longlife,sarang,drogba,gobruins,soccer4,holida,espace,almira,murmansk,green22,safina,wm00022,1chevy,schlumpf,doroth,ulises,golf99,hellyes,detlef,mydog,erkina,bastardo,mashenka,sucram,wehttam,generic1,195000,spaceboy,lopas123,scammer,skynyrd,daddy2,titani,ficker,cr250r,kbnthfnehf,takedown,sticky1,davidruiz,desant,nremtp,painter1,bogies,agamemno,kansas1,smallfry,archi,2b4dnvsx,1player,saddie,peapod,6458zn7a,qvw6n2,gfxqx686,twice2,sh4d0w3d,mayfly,375125,phitau,yqmbevgk,89211375759,kumar1,pfhfpf,toyboy,way2go,7pvn4t,pass69,chipster,spoony,buddycat,diamond3,rincewin,hobie,david01,billbo,hxp4life,matild,pokemon2,dimochka,clown1,148888,jenmt3,cuxldv,cqnwhy,cde34rfv,simone1,verynice,toobig,pasha123,mike00,maria2,lolpop,firewire,dragon9,martesana,a1234567890,birthday3,providen,kiska,pitbulls,556655,misawa,damned69,martin11,goldorak,gunship,glory1,winxclub,sixgun,splodge,agent1,splitter,dome69,ifghjb,eliza1,snaiper,wutang36,phoenix7,666425,arshavin,paulaner,namron,m69fg1w,qwert1234,terrys,zesyrmvu,joeman,scoots,dwml9f,625vrobg,sally123,gostoso,symow8,pelota,c43qpul5rz,majinbuu,lithium1,bigstuff,horndog1,kipelov,kringle,1beavis,loshara,octobe,jmzacf,12342000,qw12qw,runescape1,chargers1,krokus,piknik,jessy,778811,gjvbljh,474jdvff,pleaser,misskitty,breaker1,7f4df451,dayan,twinky,yakumo,chippers,matia,tanith,len2ski1,manni,nichol1,f00b4r,nokia3110,standart,123456789i,shami,steffie,larrywn,chucker,john99,chamois,jjjkkk,penmouse,ktnj2010,gooners,hemmelig,rodney1,merlin01,bearcat1,1yyyyy,159753z,1fffff,1ddddd,thomas11,gjkbyrf,ivanka,f1f2f3,petrovna,phunky,conair,brian2,creative1,klipsch,vbitymrf,freek,breitlin,cecili,westwing,gohabsgo,tippmann,1steve,quattro6,fatbob,sp00ky,rastas,1123581,redsea,rfnmrf,jerky1,1aaaaaa,spk666,simba123,qwert54321,123abcd,beavis69,fyfyfc,starr1,1236547,peanutbutter,sintra,12345abcde,1357246,abcde1,climbon,755dfx,mermaids,monte1,serkan,geilesau,777win,jasonc,parkside,imagine1,rockhead,producti,playhard,principa,spammer,gagher,escada,tsv1860,dbyjuhfl,cruiser1,kennyg,montgome,2481632,pompano,cum123,angel6,sooty,bear01,april6,bodyhamm,pugsly,getrich,mikes,pelusa,fosgate,jasonp,rostislav,kimberly1,128mo,dallas11,gooner1,manuel1,cocacola1,imesh,5782790,password8,daboys,1jones,intheend,e3w2q1,whisper1,madone,pjcgujrat,1p2o3i,jamesp,felicida,nemrac,phikap,firecat,jrcfyjxrf,matt12,bigfan,doedel,005500,jasonx,1234567k,badfish,goosey,utjuhfabz,wilco,artem123,igor123,spike123,jor23dan,dga9la,v2jmsz,morgan12,avery1,dogstyle,natasa,221195ws,twopac,oktober7,karthik,poop1,mightymo,davidr,zermatt,jehova,aezakmi1,dimwit,monkey5,serega123,qwerty111,blabl,casey22,boy123,1clutch,asdfjkl1,hariom,bruce10,jeep95,1smith,sm9934,karishma,bazzzz,aristo,669e53e1,nesterov,kill666,fihdfv,1abc2,anna1,silver11,mojoman,telefono,goeagles,sd3lpgdr,rfhfynby,melinda1,llcoolj,idteul,bigchief,rocky13,timberwo,ballers,gatekeep,kashif,hardass,anastasija,max777,vfuyjkbz,riesling,agent99,kappas,dalglish,tincan,orange3,turtoise,abkbvjy,mike24,hugedick,alabala,geolog,aziza,devilboy,habanero,waheguru,funboy,freedom5,natwest,seashore,impaler,qwaszx1,pastas,bmw535,tecktonik,mika00,jobsearc,pinche,puntang,aw96b6,1corvett,skorpio,foundati,zzr1100,gembird,vfnhjcrby,soccer18,vaz2110,peterp,archer1,cross1,samedi,dima1992,hunter99,lipper,hotbody,zhjckfdf,ducati1,trailer1,04325956,cheryl1,benetton,kononenko,sloneczko,rfgtkmrf,nashua,balalaika,ampere,eliston,dorsai,digge,flyrod,oxymoron,minolta,ironmike,majortom,karimov,fortun,putaria,an83546921an13,blade123,franchis,mxaigtg5,dynxyu,devlt4,brasi,terces,wqmfuh,nqdgxz,dale88,minchia,seeyou,housepen,1apple,1buddy,mariusz,bighouse,tango2,flimflam,nicola1,qwertyasd,tomek1,shumaher,kartoshka,bassss,canaries,redman1,123456789as,preciosa,allblacks,navidad,tommaso,beaudog,forrest1,green23,ryjgjxrf,go4it,ironman2,badnews,butterba,1grizzly,isaeva,rembrand,toront,1richard,bigjon,yfltymrf,1kitty,4ng62t,littlejo,wolfdog,ctvtyjd,spain1,megryan,tatertot,raven69,4809594q,tapout,stuntman,a131313,lagers,hotstuf,lfdbl11,stanley2,advokat,boloto,7894561,dooker,adxel187,cleodog,4play,0p9o8i,masterb,bimota,charlee,toystory,6820055,6666667,crevette,6031769,corsa,bingoo,dima1990,tennis11,samuri,avocado,melissa6,unicor,habari,metart,needsex,cockman,hernan,3891576,3334444,amigo1,gobuffs2,mike21,allianz,2835493,179355,midgard,joey123,oneluv,ellis1,towncar,shonuff,scouse,tool69,thomas19,chorizo,jblaze,lisa1,dima1999,sophia1,anna1989,vfvekbxrf,krasavica,redlegs,jason25,tbontb,katrine,eumesmo,vfhufhbnrf,1654321,asdfghj1,motdepas,booga,doogle,1453145,byron1,158272,kardinal,tanne,fallen1,abcd12345,ufyljy,n12345,kucing,burberry,bodger,1234578,februar,1234512,nekkid,prober,harrison1,idlewild,rfnz90,foiegras,pussy21,bigstud,denzel,tiffany2,bigwill,1234567890zzz,hello69,compute1,viper9,hellspaw,trythis,gococks,dogballs,delfi,lupine,millenia,newdelhi,charlest,basspro,1mike,joeblack,975310,1rosebud,batman11,misterio,fucknut,charlie0,august11,juancho,ilonka,jigei743ks,adam1234,889900,goonie,alicat,ggggggg1,1zzzzzzz,sexywife,northstar,chris23,888111,containe,trojan1,jason5,graikos,1ggggg,1eeeee,tigers01,indigo1,hotmale,jacob123,mishima,richard3,cjxb2014,coco123,meagain,thaman,wallst,edgewood,bundas,1power,matilda1,maradon,hookedup,jemima,r3vi3wpass,2004-10-,mudman,taz123,xswzaq,emerson1,anna21,warlord1,toering,pelle,tgwdvu,masterb8,wallstre,moppel,priora,ghjcnjrdfif,yoland,12332100,1j9e7f6f,jazzzz,yesman,brianm,42qwerty42,12345698,darkmanx,nirmal,john31,bb123456,neuspeed,billgates,moguls,fj1200,hbhlair,shaun1,ghbdfn,305pwzlr,nbu3cd,susanb,pimpdad,mangust6403,joedog,dawidek,gigante,708090,703751,700007,ikalcr,tbivbn,697769,marvi,iyaayas,karen123,jimmyboy,dozer1,e6z8jh,bigtime1,getdown,kevin12,brookly,zjduc3,nolan1,cobber,yr8wdxcq,liebe,m1garand,blah123,616879,action1,600000,sumitomo,albcaz,asian1,557799,dave69,556699,sasa123,streaker,michel1,karate1,buddy7,daulet,koks888,roadtrip,wapiti,oldguy,illini1,1234qq,mrspock,kwiatek,buterfly,august31,jibxhq,jackin,taxicab,tristram,talisker,446655,444666,chrisa,freespace,vfhbfyyf,chevell,444333,notyours,442244,christian1,seemore,sniper12,marlin1,joker666,multik,devilish,crf450,cdfoli,eastern1,asshead,duhast,voyager2,cyberia,1wizard,cybernet,iloveme1,veterok,karandash,392781,looksee,diddy,diabolic,foofight,missey,herbert1,bmw318i,premier1,zsfmpv,eric1234,dun6sm,fuck11,345543,spudman,lurker,bitem,lizzy1,ironsink,minami,339311,s7fhs127,sterne,332233,plankton,galax,azuywe,changepa,august25,mouse123,sikici,killer69,xswqaz,quovadis,gnomik,033028pw,777777a,barrakuda,spawn666,goodgod,slurp,morbius,yelnats,cujo31,norman1,fastone,earwig,aureli,wordlife,bnfkbz,yasmi,austin123,timberla,missy2,legalize,netcom,liljon,takeit,georgin,987654321z,warbird,vitalina,all4u3,mmmmmm1,bichon,ellobo,wahoos,fcazmj,aksarben,lodoss,satnam,vasili,197800,maarten,sam138989,0u812,ankita,walte,prince12,anvils,bestia,hoschi,198300,univer,jack10,ktyecbr,gr00vy,hokie,wolfman1,fuckwit,geyser,emmanue,ybrjkftd,qwerty33,karat,dblock,avocat,bobbym,womersle,1please,nostra,dayana,billyray,alternat,iloveu1,qwerty69,rammstein1,mystikal,winne,drawde,executor,craxxxs,ghjcnjnf,999888777,welshman,access123,963214785,951753852,babe69,fvcnthlfv,****me,666999666,testing2,199200,nintendo64,oscarr,guido8,zhanna,gumshoe,jbird,159357456,pasca,123452345,satan6,mithrand,fhbirf,aa1111aa,viggen,ficktjuv,radial9,davids1,rainbow7,futuro,hipho,platin,poppy123,rhenjq,fulle,rosit,chicano,scrumpy,lumpy1,seifer,uvmrysez,autumn1,xenon,susie1,7u8i9o0p,gamer1,sirene,muffy1,monkeys1,kalinin,olcrackmaster,hotmove,uconn,gshock,merson,lthtdyz,pizzaboy,peggy1,pistache,pinto1,fishka,ladydi,pandor,baileys,hungwell,redboy,rookie1,amanda01,passwrd,clean1,matty1,tarkus,jabba1,bobster,beer30,solomon1,moneymon,sesamo,fred11,sunnysid,jasmine5,thebears,putamadre,workhard,flashbac,counter1,liefde,magnat,corky1,green6,abramov,lordik,univers,shortys,david3,vip123,gnarly,1234567s,billy2,honkey,deathstar,grimmy,govinda,direktor,12345678s,linus1,shoppin,rekbrjdf,santeria,prett,berty75,mohican,daftpunk,uekmyfhf,chupa,strats,ironbird,giants56,salisbur,koldun,summer04,pondscum,jimmyj,miata1,george3,redshoes,weezie,bartman1,0p9o8i7u,s1lver,dorkus,125478,omega9,sexisgood,mancow,patric1,jetta1,074401,ghjuhtcc,gfhjk,bibble,terry2,123213,medicin,rebel2,hen3ry,4freedom,aldrin,lovesyou,browny,renwod,winnie1,belladon,1house,tyghbn,blessme,rfhfrfnbwf,haylee,deepdive,booya,phantasy,gansta,cock69,4mnveh,gazza1,redapple,structur,anakin1,manolito,steve01,poolman,chloe123,vlad1998,qazwsxe,pushit,random123,ontherocks,o236nq,brain1,dimedrol,agape,rovnogod,1balls,knigh,alliso,love01,wolf01,flintstone,beernuts,tuffguy,isengard,highfive,alex23,casper99,rubina,getreal,chinita,italian1,airsoft,qwerty23,muffdiver,willi1,grace123,orioles1,redbull1,chino1,ziggy123,breadman,estefan,ljcneg,gotoit,logan123,wideglid,mancity1,treess,qwe123456,kazumi,qweasdqwe,oddworld,naveed,protos,towson,a801016,godislov,at_asp,bambam1,soccer5,dark123,67vette,carlos123,hoser1,scouser,wesdxc,pelus,dragon25,pflhjn,abdula,1freedom,policema,tarkin,eduardo1,mackdad,gfhjkm11,lfplhfgthvf,adilet,zzzzxxxx,childre,samarkand,cegthgegth,shama,fresher,silvestr,greaser,allout,plmokn,sexdrive,nintendo1,fantasy7,oleander,fe126fd,crumpet,pingzing,dionis,hipster,yfcnz,requin,calliope,jerome1,housecat,abc123456789,doghot,snake123,augus,brillig,chronic1,gfhjkbot,expediti,noisette,master7,caliban,whitetai,favorite3,lisamari,educatio,ghjhjr,saber1,zcegth,1958proman,vtkrbq,milkdud,imajica,thehip,bailey10,hockey19,dkflbdjcnjr,j123456,bernar,aeiouy,gamlet,deltachi,endzone,conni,bcgfybz,brandi1,auckland2010,7653ajl1,mardigra,testuser,bunko18,camaro67,36936,greenie,454dfmcq,6xe8j2z4,mrgreen,ranger5,headhunt,banshee1,moonunit,zyltrc,hello3,pussyboy,stoopid,tigger11,yellow12,drums1,blue02,kils123,junkman,banyan,jimmyjam,tbbucs,sportster,badass1,joshie,braves10,lajolla,1amanda,antani,78787,antero,19216801,chich,rhett32,sarahm,beloit,sucker69,corkey,nicosnn,rccola,caracol,daffyduc,bunny2,mantas,monkies,hedonist,cacapipi,ashton1,sid123,19899891,patche,greekgod,cbr1000,leader1,19977991,ettore,chongo,113311,picass,cfif123,rhtfnbd,frances1,andy12,minnette,bigboy12,green69,alices,babcia,partyboy,javabean,freehand,qawsed123,xxx111,harold1,passwo,jonny1,kappa1,w2dlww3v5p,1merlin,222999,tomjones,jakeman,franken,markhegarty,john01,carole1,daveman,caseys,apeman,mookey,moon123,claret,titans1,residentevil,campari,curitiba,dovetail,aerostar,jackdaniels,basenji,zaq12w,glencoe,biglove,goober12,ncc170,far7766,monkey21,eclipse9,1234567v,vanechka,aristote,grumble,belgorod,abhishek,neworleans,pazzword,dummie,sashadog,diablo11,mst3000,koala1,maureen1,jake99,isaiah1,funkster,gillian1,ekaterina20,chibears,astra123,4me2no,winte,skippe,necro,windows9,vinograd,demolay,vika2010,quiksilver,19371ayj,dollar1,shecky,qzwxecrv,butterfly1,merrill1,scoreland,1crazy,megastar,mandragora,track1,dedhed,jacob2,newhope,qawsedrftgyh,shack1,samvel,gatita,shyster,clara1,telstar,office1,crickett,truls,nirmala,joselito,chrisl,lesnik,aaaabbbb,austin01,leto2010,bubbie,aaa12345,widder,234432,salinger,mrsmith,qazsedcft,newshoes,skunks,yt1300,bmw316,arbeit,smoove,123321qweewq,123qazwsx,22221111,seesaw,0987654321a,peach1,1029384756q,sereda,gerrard8,shit123,batcave,energy1,peterb,mytruck,peter12,alesya,tomato1,spirou,laputaxx,magoo1,omgkremidia,knight12,norton1,vladislava,shaddy,austin11,jlbyjxrf,kbdthgekm,punheta,fetish69,exploiter,roger2,manstein,gtnhjd,32615948worms,dogbreath,ujkjdjkjvrf,vodka1,ripcord,fatrat,kotek1,tiziana,larrybir,thunder3,nbvfnb,9kyq6fge,remembe,likemike,gavin1,shinigam,yfcnfcmz,13245678,jabbar,vampyr,ane4ka,lollipo,ashwin,scuderia,limpdick,deagle,3247562,vishenka,fdhjhf,alex02,volvov70,mandys,bioshock,caraca,tombraider,matrix69,jeff123,13579135,parazit,black3,noway1,diablos,hitmen,garden1,aminor,decembe,august12,b00ger,006900,452073t,schach,hitman1,mariner1,vbnmrf,paint1,742617000027,bitchboy,pfqxjyjr,5681392,marryher,sinnet,malik1,muffin12,aninha,piolin,lady12,traffic1,cbvjyf,6345789,june21,ivan2010,ryan123,honda99,gunny,coorslight,asd321,hunter69,7224763,sonofgod,dolphins1,1dolphin,pavlenko,woodwind,lovelov,pinkpant,gblfhfcbyf,hotel1,justinbiebe,vinter,jeff1234,mydogs,1pizza,boats1,parrothe,shawshan,brooklyn1,cbrown,1rocky,hemi426,dragon64,redwings1,porsches,ghostly,hubbahub,buttnut,b929ezzh,sorokina,flashg,fritos,b7mguk,metatron,treehous,vorpal,8902792,marcu,free123,labamba,chiefs1,zxc123zxc,keli_14,hotti,1steeler,money4,rakker,foxwoods,free1,ahjkjd,sidorova,snowwhit,neptune1,mrlover,trader1,nudelamb,baloo,power7,deltasig,bills1,trevo,7gorwell,nokia6630,nokia5320,madhatte,1cowboys,manga1,namtab,sanjar,fanny1,birdman1,adv12775,carlo1,dude1998,babyhuey,nicole11,madmike,ubvyfpbz,qawsedr,lifetec,skyhook,stalker123,toolong,robertso,ripazha,zippy123,1111111a,manol,dirtyman,analslut,jason3,dutches,minhasenha,cerise,fenrir,jayjay1,flatbush,franka,bhbyjxrf,26429vadim,lawntrax,198700,fritzy,nikhil,ripper1,harami,truckman,nemvxyheqdd5oqxyxyzi,gkfytnf,bugaboo,cableman,hairpie,xplorer,movado,hotsex69,mordred,ohyeah1,patrick3,frolov,katieh,4311111q,mochaj,presari,bigdo,753951852,freedom4,kapitan,tomas1,135795,sweet123,pokers,shagme,tane4ka,sentinal,ufgyndmv,jonnyb,skate123,123456798,123456788,very1,gerrit,damocles,dollarbi,caroline1,lloyds,pizdets,flatland,92702689,dave13,meoff,ajnjuhfabz,achmed,madison9,744744z,amonte,avrillavigne,elaine1,norma1,asseater,everlong,buddy23,cmgang1,trash1,mitsu,flyman,ulugbek,june27,magistr,fittan,sebora64,dingos,sleipnir,caterpil,cindys,212121qaz,partys,dialer,gjytltkmybr,qweqaz,janvier,rocawear,lostboy,aileron,sweety1,everest1,pornman,boombox,potter1,blackdic,44448888,eric123,112233aa,2502557i,novass,nanotech,yourname,x12345,indian1,15975300,1234567l,carla51,chicago0,coleta,cxzdsaewq,qqwweerr,marwan,deltic,hollys,qwerasd,pon32029,rainmake,nathan0,matveeva,legioner,kevink,riven,tombraid,blitzen,a54321,jackyl,chinese1,shalimar,oleg1995,beaches1,tommylee,eknock,berli,monkey23,badbob,pugwash,likewhoa,jesus2,yujyd360,belmar,shadow22,utfp5e,angelo1,minimax,pooder,cocoa1,moresex,tortue,lesbia,panthe,snoopy2,drumnbass,alway,gmcz71,6jhwmqku,leppard,dinsdale,blair1,boriqua,money111,virtuagirl,267605,rattlesn,1sunshin,monica12,veritas1,newmexic,millertime,turandot,rfvxfnrf,jaydog,kakawka,bowhunter,booboo12,deerpark,erreway,taylorma,rfkbybyf,wooglin,weegee,rexdog,iamhorny,cazzo1,vhou812,bacardi1,dctktyyfz,godpasi,peanut12,bertha1,fuckyoubitch,ghosty,altavista,jertoot,smokeit,ghjcnbvtyz,fhnehxbr,rolsen,qazxcdews,maddmaxx,redrocke,qazokm,spencer2,thekiller,asdf11,123sex,tupac1,p1234567,dbrown,1biteme,tgo4466,316769,sunghi,shakespe,frosty1,gucci1,arcana,bandit01,lyubov,poochy,dartmout,magpies1,sunnyd,mouseman,summer07,chester7,shalini,danbury,pigboy,dave99,deniss,harryb,ashley11,pppppp1,01081988m,balloon1,tkachenko,bucks1,master77,pussyca,tricky1,zzxxccvv,zoulou,doomer,mukesh,iluv69,supermax,todays,thefox,don123,dontask,diplom,piglett,shiney,fahbrf,qaz12wsx,temitope,reggin,project1,buffy2,inside1,lbpfqyth,vanilla1,lovecock,u4slpwra,fylh.irf,123211,7ertu3ds,necroman,chalky,artist1,simpso,4x7wjr,chaos666,lazyacres,harley99,ch33s3,marusa,eagle7,dilligas,computadora,lucky69,denwer,nissan350z,unforgiv,oddball,schalke0,aztec1,borisova,branden1,parkave,marie123,germa,lafayett,878kckxy,405060,cheeseca,bigwave,fred22,andreea,poulet,mercutio,psycholo,andrew88,o4izdmxu,sanctuar,newhome,milion,suckmydi,rjvgm.nth,warior,goodgame,1qwertyuiop,6339cndh,scorpio2,macker,southbay,crabcake,toadie,paperclip,fatkid,maddo,cliff1,rastafar,maries,twins1,geujdrf,anjela,wc4fun,dolina,mpetroff,rollout,zydeco,shadow3,pumpki,steeda,volvo240,terras,blowjo,blue2000,incognit,badmojo,gambit1,zhukov,station1,aaronb,graci,duke123,clipper1,qazxsw2,ledzeppe,kukareku,sexkitte,cinco,007008,lakers12,a1234b,acmilan1,afhfjy,starrr,slutty3,phoneman,kostyan,bonzo1,sintesi07,ersatz,cloud1,nephilim,nascar03,rey619,kairos,123456789e,hardon1,boeing1,juliya,hfccdtn,vgfun8,polizei,456838,keithb,minouche,ariston,savag,213141,clarkken,microwav,london2,santacla,campeo,qr5mx7,464811,mynuts,bombo,1mickey,lucky8,danger1,ironside,carter12,wyatt1,borntorun,iloveyou123,jose1,pancake1,tadmichaels,monsta,jugger,hunnie,triste,heat7777,ilovejesus,queeny,luckycharm,lieben,gordolee85,jtkirk,forever21,jetlag,skylane,taucher,neworlea,holera,000005,anhnhoem,melissa7,mumdad,massimiliano,dima1994,nigel1,madison3,slicky,shokolad,serenit,jmh1978,soccer123,chris3,drwho,rfpzdrf,1qasw23ed,free4me,wonka,sasquatc,sanan,maytag,verochka,bankone,molly12,monopoli,xfqybr,lamborgini,gondolin,candycane,needsome,jb007,scottie1,brigit,0147258369,kalamazo,lololyo123,bill1234,ilovejes,lol123123,popkorn,april13,567rntvm,downunde,charle1,angelbab,guildwars,homeworld,qazxcvbnm,superma1,dupa123,kryptoni,happyy,artyom,stormie,cool11,calvin69,saphir,konovalov,jansport,october8,liebling,druuna,susans,megans,tujhjdf,wmegrfux,jumbo1,ljb4dt7n,012345678910,kolesnik,speculum,at4gftlw,kurgan,93pn75,cahek0980,dallas01,godswill,fhifdby,chelsea4,jump23,barsoom,catinhat,urlacher,angel99,vidadi1,678910,lickme69,topaz1,westend,loveone,c12345,gold12,alex1959,mamon,barney12,1maggie,alex12345,lp2568cskt,s1234567,gjikbdctyf,anthony0,browns99,chips1,sunking,widespre,lalala1,tdutif,fucklife,master00,alino4ka,stakan,blonde1,phoebus,tenore,bvgthbz,brunos,suzjv8,uvdwgt,revenant,1banana,veroniqu,sexfun,sp1der,4g3izhox,isakov,shiva1,scooba,bluefire,wizard12,dimitris,funbags,perseus,hoodoo,keving,malboro,157953,a32tv8ls,latics,animate,mossad,yejntb,karting,qmpq39zr,busdrive,jtuac3my,jkne9y,sr20dett,4gxrzemq,keylargo,741147,rfktylfhm,toast1,skins1,xcalibur,gattone,seether,kameron,glock9mm,julio1,delenn,gameday,tommyd,str8edge,bulls123,66699,carlsberg,woodbird,adnama,45auto,codyman,truck2,1w2w3w4w,pvjegu,method1,luetdi,41d8cd98f00b,bankai,5432112345,94rwpe,reneee,chrisx,melvins,775577,sam2000,scrappy1,rachid,grizzley,margare,morgan01,winstons,gevorg,gonzal,crawdad,gfhfdjp,babilon,noneya,pussy11,barbell,easyride,c00li0,777771,311music,karla1,golions,19866891,peejay,leadfoot,hfvbkm,kr9z40sy,cobra123,isotwe,grizz,sallys,****you,aaa123a,dembel,foxs14,hillcres,webman,mudshark,alfredo1,weeded,lester1,hovepark,ratface,000777fffa,huskie,wildthing,elbarto,waikiki,masami,call911,goose2,regin,dovajb,agricola,cjytxrj,andy11,penny123,family01,a121212,1braves,upupa68,happy100,824655,cjlove,firsttim,kalel,redhair,dfhtymt,sliders,bananna,loverbo,fifa2008,crouton,chevy350,panties2,kolya1,alyona,hagrid,spagetti,q2w3e4r,867530,narkoman,nhfdvfnjkju123,1ccccccc,napolean,0072563,allay,w8sted,wigwam,jamesk,state1,parovoz,beach69,kevinb,rossella,logitech1,celula,gnocca,canucks1,loginova,marlboro1,aaaa1,kalleanka,mester,mishutka,milenko,alibek,jersey1,peterc,1mouse,nedved,blackone,ghfplybr,682regkh,beejay,newburgh,ruffian,clarets,noreaga,xenophon,hummerh2,tenshi,smeagol,soloyo,vfhnby,ereiamjh,ewq321,goomie,sportin,cellphone,sonnie,jetblack,saudan,gblfhfc,matheus,uhfvjnf,alicja,jayman1,devon1,hexagon,bailey2,vtufajy,yankees7,salty1,908070,killemal,gammas,eurocard,sydney12,tuesday1,antietam,wayfarer,beast666,19952009sa,aq12ws,eveli,hockey21,haloreach,dontcare,xxxx1,andrea11,karlmarx,jelszo,tylerb,protools,timberwolf,ruffneck,pololo,1bbbbb,waleed,sasami,twinss,fairlady,illuminati,alex007,sucks1,homerjay,scooter7,tarbaby,barmaley,amistad,vanes,randers,tigers12,dreamer2,goleafsg,googie,bernie1,as12345,godeep,james3,phanto,gwbush,cumlover,2196dc,studioworks,995511,golf56,titova,kaleka,itali,socks1,kurwamac,daisuke,hevonen,woody123,daisie,wouter,henry123,gostosa,guppie,porpoise,iamsexy,276115,paula123,1020315,38gjgeuftd,rjrfrjkf,knotty,idiot1,sasha12345,matrix13,securit,radical1,ag764ks,jsmith,coolguy1,secretar,juanas,sasha1988,itout,00000001,tiger11,1butthea,putain,cavalo,basia1,kobebryant,1232323,12345asdfg,sunsh1ne,cyfqgth,tomkat,dorota,dashit,pelmen,5t6y7u,whipit,smokeone,helloall,bonjour1,snowshoe,nilknarf,x1x2x3,lammas,1234599,lol123456,atombomb,ironchef,noclue,alekseev,gwbush1,silver2,12345678m,yesican,fahjlbnf,chapstic,alex95,open1,tiger200,lisichka,pogiako,cbr929,searchin,tanya123,alex1973,phil413,alex1991,dominati,geckos,freddi,silenthill,egroeg,vorobey,antoxa,dark666,shkola,apple22,rebellio,shamanking,7f8srt,cumsucker,partagas,bill99,22223333,arnster55,fucknuts,proxima,silversi,goblues,parcells,vfrcbvjdf,piloto,avocet,emily2,1597530,miniskir,himitsu,pepper2,juiceman,venom1,bogdana,jujube,quatro,botafogo,mama2010,junior12,derrickh,asdfrewq,miller2,chitarra,silverfox,napol,prestigio,devil123,mm111qm,ara123,max33484,sex2000,primo1,sephan,anyuta,alena2010,viborg,verysexy,hibiscus,terps,josefin,oxcart,spooker,speciali,raffaello,partyon,vfhvtkflrf,strela,a123456z,worksuck,glasss,lomonosov,dusty123,dukeblue,1winter,sergeeva,lala123,john22,cmc09,sobolev,bettylou,dannyb,gjkrjdybr,hagakure,iecnhbr,awsedr,pmdmsctsk,costco,alekseeva,fktrcttd,bazuka,flyingv,garuda,buffy16,gutierre,beer12,stomatolog,ernies,palmeiras,golf123,love269,n.kmgfy,gjkysqgbpltw,youare,joeboo,baksik,lifeguar,111a111,nascar8,mindgame,dude1,neopets,frdfkfyu,june24,phoenix8,penelopa,merlin99,mercenar,badluck,mishel,bookert,deadsexy,power9,chinchil,1234567m,alex10,skunk1,rfhkcjy,sammycat,wright1,randy2,marakesh,temppassword,elmer251,mooki,patrick0,bonoedge,1tits,chiar,kylie1,graffix,milkman1,cornel,mrkitty,nicole12,ticketmaster,beatles4,number20,ffff1,terps1,superfre,yfdbufnjh,jake1234,flblfc,1111qq,zanuda,jmol01,wpoolejr,polopol,nicolett,omega13,cannonba,123456789.,sandy69,ribeye,bo243ns,marilena,bogdan123,milla,redskins1,19733791,alias1,movie1,ducat,marzena,shadowru,56565,coolman1,pornlover,teepee,spiff,nafanya,gateway3,fuckyou0,hasher,34778,booboo69,staticx,hang10,qq12345,garnier,bosco123,1234567qw,carson1,samso,1xrg4kcq,cbr929rr,allan123,motorbik,andrew22,pussy101,miroslava,cytujdbr,camp0017,cobweb,snusmumrik,salmon1,cindy2,aliya,serendipity,co437at,tincouch,timmy123,hunter22,st1100,vvvvvv1,blanka,krondor,sweeti,nenit,kuzmich,gustavo1,bmw320i,alex2010,trees1,kyliem,essayons,april26,kumari,sprin,fajita,appletre,fghbjhb,1green,katieb,steven2,corrado1,satelite,1michell,123456789c,cfkfvfylhf,acurarsx,slut543,inhere,bob2000,pouncer,k123456789,fishie,aliso,audia8,bluetick,soccer69,jordan99,fromhell,mammoth1,fighting54,mike25,pepper11,extra1,worldwid,chaise,vfr800,sordfish,almat,nofate,listopad,hellgate,dctvghbdf,jeremia,qantas,lokiju,honker,sprint1,maral,triniti,compaq3,sixsix6,married1,loveman,juggalo1,repvtyrj,zxcasdqw,123445,whore1,123678,monkey6,west123,warcraf,pwnage,mystery1,creamyou,ant123,rehjgfnrf,corona1,coleman1,steve121,alderaan,barnaul,celeste1,junebug1,bombshel,gretzky9,tankist,targa,cachou,vaz2101,playgolf,boneyard,strateg,romawka,iforgotit,pullup,garbage1,irock,archmage,shaft1,oceano,sadies,alvin1,135135ab,psalm69,lmfao,ranger02,zaharova,33334444,perkman,realman,salguod,cmoney,astonmartin,glock1,greyfox,viper99,helpm,blackdick,46775575,family5,shazbot,dewey1,qwertyas,shivani,black22,mailman1,greenday1,57392632,red007,stanky,sanchez1,tysons,daruma,altosax,krayzie,85852008,1forever,98798798,irock.,123456654,142536789,ford22,brick1,michela,preciou,crazy4u,01telemike01,nolife,concac,safety1,annie123,brunswic,destini,123456qwer,madison0,snowball1,137946,1133557799,jarule,scout2,songohan,thedead,00009999,murphy01,spycam,hirsute,aurinko,associat,1miller,baklan,hermes1,2183rm,martie,kangoo,shweta,yvonne1,westsid,jackpot1,rotciv,maratik,fabrika,claude1,nursultan,noentry,ytnhjufnm,electra1,ghjcnjnfr1,puneet,smokey01,integrit,bugeye,trouble2,14071789,paul01,omgwtf,dmh415,ekilpool,yourmom1,moimeme,sparky11,boludo,ruslan123,kissme1,demetrio,appelsin,asshole3,raiders2,bunns,fynjybj,billygoa,p030710p$e4o,macdonal,248ujnfk,acorns,schmidt1,sparrow1,vinbylrj,weasle,jerom,ycwvrxxh,skywalk,gerlinde,solidus,postal1,poochie1,1charles,rhianna,terorist,rehnrf,omgwtfbbq,assfucke,deadend,zidan,jimboy,vengence,maroon5,7452tr,dalejr88,sombra,anatole,elodi,amazonas,147789,q12345q,gawker1,juanma,kassidy,greek1,bruces,bilbob,mike44,0o9i8u7y6t,kaligula,agentx,familie,anders1,pimpjuice,0128um,birthday10,lawncare,hownow,grandorgue,juggerna,scarfac,kensai,swatteam,123four,motorbike,repytxbr,other1,celicagt,pleomax,gen0303,godisgreat,icepick,lucifer666,heavy1,tea4two,forsure,02020,shortdog,webhead,chris13,palenque,3techsrl,knights1,orenburg,prong,nomarg,wutang1,80637852730,laika,iamfree,12345670,pillow1,12343412,bigears,peterg,stunna,rocky5,12123434,damir,feuerwehr,7418529630,danone,yanina,valenci,andy69,111222q,silvia1,1jjjjj,loveforever,passwo1,stratocaster,8928190a,motorolla,lateralu,ujujkm,chubba,ujkjdf,signon,123456789zx,serdce,stevo,wifey200,ololo123,popeye1,1pass,central1,melena,luxor,nemezida,poker123,ilovemusic,qaz1234,noodles1,lakeshow,amarill,ginseng,billiam,trento,321cba,fatback,soccer33,master13,marie2,newcar,bigtop,dark1,camron,nosgoth,155555,biglou,redbud,jordan7,159789,diversio,actros,dazed,drizzit,hjcnjd,wiktoria,justic,gooses,luzifer,darren1,chynna,tanuki,11335577,icculus,boobss,biggi,firstson,ceisi123,gatewa,hrothgar,jarhead1,happyjoy,felipe1,bebop1,medman,athena1,boneman,keiths,djljgfl,dicklick,russ120,mylady,zxcdsa,rock12,bluesea,kayaks,provista,luckies,smile4me,bootycal,enduro,123123f,heartbre,ern3sto,apple13,bigpappa,fy.njxrf,bigtom,cool69,perrito,quiet1,puszek,cious,cruella,temp1,david26,alemap,aa123123,teddies,tricolor,smokey12,kikiriki,mickey01,robert01,super5,ranman,stevenso,deliciou,money777,degauss,mozar,susanne1,asdasd12,shitbag,mommy123,wrestle1,imfree,fuckyou12,barbaris,florent,ujhijr,f8yruxoj,tefjps,anemone,toltec,2gether,left4dead2,ximen,gfkmvf,dunca,emilys,diana123,16473a,mark01,bigbro,annarbor,nikita2000,11aa11,tigres,llllll1,loser2,fbi11213,jupite,qwaszxqw,macabre,123ert,rev2000,mooooo,klapaucius,bagel1,chiquit,iyaoyas,bear101,irocz28,vfktymrfz,smokey2,love99,rfhnbyf,dracul,keith123,slicko,peacock1,orgasmic,thesnake,solder,wetass,doofer,david5,rhfcyjlfh,swanny,tammys,turkiye,tubaman,estefani,firehose,funnyguy,servo,grace17,pippa1,arbiter,jimmy69,nfymrf,asdf67nm,rjcnzy,demon123,thicknes,sexysex,kristall,michail,encarta,banderos,minty,marchenko,de1987ma,mo5kva,aircav,naomi1,bonni,tatoo,cronaldo,49ers1,mama1963,1truck,telecaster,punksnotdead,erotik,1eagles,1fender,luv269,acdeehan,tanner1,freema,1q3e5t7u,linksys,tiger6,megaman1,neophyte,australia1,mydaddy,1jeffrey,fgdfgdfg,gfgekz,1986irachka,keyman,m0b1l3,dfcz123,mikeyg,playstation2,abc125,slacker1,110491g,lordsoth,bhavani,ssecca,dctvghbdtn,niblick,hondacar,baby01,worldcom,4034407,51094didi,3657549,3630000,3578951,sweetpussy,majick,supercoo,robert11,abacabb,panda123,gfhjkm13,ford4x4,zippo1,lapin,1726354,lovesong,dude11,moebius,paravoz,1357642,matkhau,solnyshko,daniel4,multiplelog,starik,martusia,iamtheman,greentre,jetblue,motorrad,vfrcbvev,redoak,dogma1,gnorman,komlos,tonka1,1010220,666satan,losenord,lateralus,absinthe,command1,jigga1,iiiiiii1,pants1,jungfrau,926337,ufhhbgjnnth,yamakasi,888555,sunny7,gemini69,alone1,zxcvbnmz,cabezon,skyblues,zxc1234,456123a,zero00,caseih,azzurra,legolas1,menudo,murcielago,785612,779977,benidorm,viperman,dima1985,piglet1,hemligt,hotfeet,7elephants,hardup,gamess,a000000,267ksyjf,kaitlynn,sharkie,sisyphus,yellow22,667766,redvette,666420,mets69,ac2zxdty,hxxrvwcy,cdavis,alan1,noddy,579300,druss,eatshit1,555123,appleseed,simpleplan,kazak,526282,fynfyfyfhbde,birthday6,dragon6,1pookie,bluedevils,omg123,hj8z6e,x5dxwp,455445,batman23,termin,chrisbrown,animals1,lucky9,443322,kzktxrf,takayuki,fermer,assembler,zomu9q,sissyboy,sergant,felina,nokia6230i,eminem12,croco,hunt4red,festina,darknigh,cptnz062,ndshnx4s,twizzler,wnmaz7sd,aamaax,gfhfcjkmrf,alabama123,barrynov,happy5,punt0it,durandal,8xuuobe4,cmu9ggzh,bruno12,316497,crazyfrog,vfvfktyf,apple3,kasey1,mackdaddy,anthon1,sunnys,angel3,cribbage,moon1,donal,bryce1,pandabear,mwss474,whitesta,freaker,197100,bitche,p2ssw0rd,turnb,tiktonik,moonlite,ferret1,jackas,ferrum,bearclaw,liberty2,1diablo,caribe,snakeeyes,janbam,azonic,rainmaker,vetalik,bigeasy,baby1234,sureno13,blink1,kluivert,calbears,lavanda,198600,dhtlbyf,medvedeva,fox123,whirling,bonscott,freedom9,october3,manoman,segredo,cerulean,robinso,bsmith,flatus,dannon,password21,rrrrrr1,callista,romai,rainman1,trantor,mickeymo,bulldog7,g123456,pavlin,pass22,snowie,hookah,7ofnine,bubba22,cabible,nicerack,moomoo1,summer98,yoyo123,milan1,lieve27,mustang69,jackster,exocet,nadege,qaz12,bahama,watson1,libras,eclipse2,bahram,bapezm,up9x8rww,ghjcnjz,themaste,deflep27,ghost16,gattaca,fotograf,junior123,gilber,gbjyth,8vjzus,rosco1,begonia,aldebara,flower12,novastar,buzzman,manchild,lopez1,mama11,william7,yfcnz1,blackstar,spurs123,moom4242,1amber,iownyou,tightend,07931505,paquito,1johnson,smokepot,pi31415,snowmass,ayacdc,jessicam,giuliana,5tgbnhy6,harlee,giuli,bigwig,tentacle,scoubidou2,benelli,vasilina,nimda,284655,jaihind,lero4ka,1tommy,reggi,ididit,jlbyjxtcndj,mike26,qbert,wweraw,lukasz,loosee123,palantir,flint1,mapper,baldie,saturne,virgin1,meeeee,elkcit,iloveme2,blue15,themoon,radmir,number3,shyanne,missle,hannelor,jasmina,karin1,lewie622,ghjcnjqgfhjkm,blasters,oiseau,sheela,grinders,panget,rapido,positiv,twink,fltkbyf,kzsfj874,daniel01,enjoyit,nofags,doodad,rustler,squealer,fortunat,peace123,khushi,devils2,7inches,candlebo,topdawg,armen,soundman,zxcqweasd,april7,gazeta,netman,hoppers,bear99,ghbjhbntn,mantle7,bigbo,harpo,jgordon,bullshi,vinny1,krishn,star22,thunderc,galinka,phish123,tintable,nightcrawler,tigerboy,rbhgbx,messi,basilisk,masha1998,nina123,yomamma,kayla123,geemoney,0000000000d,motoman,a3jtni,ser123,owen10,italien,vintelok,12345rewq,nightime,jeepin,ch1tt1ck,mxyzptlk,bandido,ohboy,doctorj,hussar,superted,parfilev,grundle,1jack,livestrong,chrisj,matthew3,access22,moikka,fatone,miguelit,trivium,glenn1,smooches,heiko,dezember,spaghett,stason,molokai,bossdog,guitarma,waderh,boriska,photosho,path13,hfrtnf,audre,junior24,monkey24,silke,vaz21093,bigblue1,trident1,candide,arcanum,klinker,orange99,bengals1,rosebu,mjujuj,nallepuh,mtwapa1a,ranger69,level1,bissjop,leica,1tiffany,rutabega,elvis77,kellie1,sameas,barada,karabas,frank12,queenb,toutoune,surfcity,samanth1,monitor1,littledo,kazakova,fodase,mistral1,april22,carlit,shakal,batman123,fuckoff2,alpha01,5544332211,buddy3,towtruck,kenwood1,vfiekmrf,jkl123,pypsik,ranger75,sitges,toyman,bartek1,ladygirl,booman,boeing77,installsqlst,222666,gosling,bigmack,223311,bogos,kevin2,gomez1,xohzi3g4,kfnju842,klubnika,cubalibr,123456789101,kenpo,0147852369,raptor1,tallulah,boobys,jjones,1q2s3c,moogie,vid2600,almas,wombat1,extra300,xfiles1,green77,sexsex1,heyjude,sammyy,missy123,maiyeuem,nccpl25282,thicluv,sissie,raven3,fldjrfn,buster22,broncos2,laurab,letmein4,harrydog,solovey,fishlips,asdf4321,ford123,superjet,norwegen,movieman,psw333333,intoit,postbank,deepwate,ola123,geolog323,murphys,eshort,a3eilm2s2y,kimota,belous,saurus,123321qaz,i81b4u,aaa12,monkey20,buckwild,byabybnb,mapleleafs,yfcnzyfcnz,baby69,summer03,twista,246890,246824,ltcnhjth,z1z2z3,monika1,sad123,uto29321,bathory,villan,funkey,poptarts,spam967888,705499fh,sebast,porn1234,earn381,1porsche,whatthef,123456789y,polo12,brillo,soreilly,waters1,eudora,allochka,is_a_bot,winter00,bassplay,531879fiz,onemore,bjarne,red911,kot123,artur1,qazxdr,c0rvette,diamond7,matematica,klesko,beaver12,2enter,seashell,panam,chaching,edward2,browni,xenogear,cornfed,aniram,chicco22,darwin1,ancella2,sophie2,vika1998,anneli,shawn41,babie,resolute,pandora2,william8,twoone,coors1,jesusis1,teh012,cheerlea,renfield,tessa1,anna1986,madness1,bkmlfh,19719870,liebherr,ck6znp42,gary123,123654z,alsscan,eyedoc,matrix7,metalgea,chinito,4iter,falcon11,7jokx7b9du,bigfeet,tassadar,retnuh,muscle1,klimova,darion,batistuta,bigsur,1herbier,noonie,ghjrehjh,karimova,faustus,snowwhite,1manager,dasboot,michael12,analfuck,inbed,dwdrums,jaysoncj,maranell,bsheep75,164379,rolodex,166666,rrrrrrr1,almaz666,167943,russel1,negrito,alianz,goodpussy,veronik,1w2q3r4e,efremov,emb377,sdpass,william6,alanfahy,nastya1995,panther5,automag,123qwe12,vfvf2011,fishe,1peanut,speedie,qazwsx1234,pass999,171204j,ketamine,sheena1,energizer,usethis1,123abc123,buster21,thechamp,flvbhfk,frank69,chane,hopeful1,claybird,pander,anusha,bigmaxxx,faktor,housebed,dimidrol,bigball,shashi,derby1,fredy,dervish,bootycall,80988218126,killerb,cheese2,pariss,mymail,dell123,catbert,christa1,chevytru,gjgjdf,00998877,overdriv,ratten,golf01,nyyanks,dinamite,bloembol,gismo,magnus1,march2,twinkles,ryan22,duckey,118a105b,kitcat,brielle,poussin,lanzarot,youngone,ssvegeta,hero63,battle1,kiler,fktrcfylh1,newera,vika1996,dynomite,oooppp,beer4me,foodie,ljhjuf,sonshine,godess,doug1,constanc,thinkbig,steve2,damnyou,autogod,www333,kyle1,ranger7,roller1,harry2,dustin1,hopalong,tkachuk,b00bies,bill2,deep111,stuffit,fire69,redfish1,andrei123,graphix,1fishing,kimbo1,mlesp31,ifufkbyf,gurkan,44556,emily123,busman,and123,8546404,paladine,1world,bulgakov,4294967296,bball23,1wwwww,mycats,elain,delta6,36363,emilyb,color1,6060842,cdtnkfyrf,hedonism,gfgfrfhkj,5551298,scubad,gostate,sillyme,hdbiker,beardown,fishers,sektor,00000007,newbaby,rapid1,braves95,gator2,nigge,anthony3,sammmy,oou812,heffer,phishin,roxanne1,yourass,hornet1,albator,2521659,underwat,tanusha,dianas,3f3fpht7op,dragon20,bilbobag,cheroke,radiatio,dwarf1,majik,33st33,dochka,garibald,robinh,sham69,temp01,wakeboar,violet1,1w2w3w,registr,tonite,maranello,1593570,parolamea,galatasara,loranthos,1472583,asmodean,1362840,scylla,doneit,jokerr,porkypig,kungen,mercator,koolhaas,come2me,debbie69,calbear,liverpoolfc,yankees4,12344321a,kennyb,madma,85200258,dustin23,thomas13,tooling,mikasa,mistic,crfnbyf,112233445,sofia1,heinz57,colts1,price1,snowey,joakim,mark11,963147,cnhfcnm,kzinti,1bbbbbbb,rubberdu,donthate,rupert1,sasha1992,regis1,nbuhbwf,fanboy,sundial,sooner1,wayout,vjnjhjkf,deskpro,arkangel,willie12,mikeyb,celtic1888,luis1,buddy01,duane1,grandma1,aolcom,weeman,172839456,basshead,hornball,magnu,pagedown,molly2,131517,rfvtgbyhn,astonmar,mistery,madalina,cash1,1happy,shenlong,matrix01,nazarova,369874125,800500,webguy,rse2540,ashley2,briank,789551,786110,chunli,j0nathan,greshnik,courtne,suckmyco,mjollnir,789632147,asdfg1234,754321,odelay,ranma12,zebedee,artem777,bmw318is,butt1,rambler1,yankees9,alabam,5w76rnqp,rosies,mafioso,studio1,babyruth,tranzit,magical123,gfhjkm135,12345$,soboleva,709394,ubique,drizzt1,elmers,teamster,pokemons,1472583690,1597532486,shockers,merckx,melanie2,ttocs,clarisse,earth1,dennys,slobber,flagman,farfalla,troika,4fa82hyx,hakan,x4ww5qdr,cumsuck,leather1,forum1,july20,barbel,zodiak,samuel12,ford01,rushfan,bugsy1,invest1,tumadre,screwme,a666666,money5,henry8,tiddles,sailaway,starburs,100years,killer01,comando,hiromi,ranetka,thordog,blackhole,palmeira,verboten,solidsna,q1w1e1,humme,kevinc,gbrfxe,gevaudan,hannah11,peter2,vangar,sharky7,talktome,jesse123,chuchi,pammy,!qazxsw2,siesta,twenty1,wetwilly,477041,natural1,sun123,daniel3,intersta,shithead1,hellyea,bonethugs,solitair,bubbles2,father1,nick01,444000,adidas12,dripik,cameron2,442200,a7nz8546,respublika,fkojn6gb,428054,snoppy,rulez1,haslo,rachael1,purple01,zldej102,ab12cd34,cytuehjxrf,madhu,astroman,preteen,handsoff,mrblonde,biggio,testin,vfdhif,twolves,unclesam,asmara,kpydskcw,lg2wmgvr,grolsch,biarritz,feather1,williamm,s62i93,bone1,penske,337733,336633,taurus1,334433,billet,diamondd,333000,nukem,fishhook,godogs,thehun,lena1982,blue00,smelly1,unb4g9ty,65pjv22,applegat,mikehunt,giancarlo,krillin,felix123,december1,soapy,46doris,nicole23,bigsexy1,justin10,pingu,bambou,falcon12,dgthtl,1surfer,qwerty01,estrellit,nfqcjy,easygo,konica,qazqwe,1234567890m,stingers,nonrev,3e4r5t,champio,bbbbbb99,196400,allen123,seppel,simba2,rockme,zebra3,tekken3,endgame,sandy2,197300,fitte,monkey00,eldritch,littleone,rfyfgkz,1member,66chevy,oohrah,cormac,hpmrbm41,197600,grayfox,elvis69,celebrit,maxwell7,rodders,krist,1camaro,broken1,kendall1,silkcut,katenka,angrick,maruni,17071994a,tktyf,kruemel,snuffles,iro4ka,baby12,alexis01,marryme,vlad1994,forward1,culero,badaboom,malvin,hardtoon,hatelove,molley,knopo4ka,duchess1,mensuck,cba321,kickbutt,zastava,wayner,fuckyou6,eddie123,cjkysir,john33,dragonfi,cody1,jabell,cjhjrf,badseed,sweden1,marihuana,brownlov,elland,nike1234,kwiettie,jonnyboy,togepi,billyk,robert123,bb334,florenci,ssgoku,198910,bristol1,bob007,allister,yjdujhjl,gauloise,198920,bellaboo,9lives,aguilas,wltfg4ta,foxyroxy,rocket69,fifty50,babalu,master21,malinois,kaluga,gogosox,obsessio,yeahrigh,panthers1,capstan,liza2000,leigh1,paintball1,blueskie,cbr600f3,bagdad,jose98,mandreki,shark01,wonderbo,muledeer,xsvnd4b2,hangten,200001,grenden,anaell,apa195,model1,245lufpq,zip100,ghjcgtrn,wert1234,misty2,charro,juanjose,fkbcrf,frostbit,badminto,buddyy,1doctor,vanya,archibal,parviz,spunky1,footboy,dm6tzsgp,legola,samadhi,poopee,ytdxz2ca,hallowboy,dposton,gautie,theworm,guilherme,dopehead,iluvtits,bobbob1,ranger6,worldwar,lowkey,chewbaca,oooooo99,ducttape,dedalus,celular,8i9o0p,borisenko,taylor01,111111z,arlingto,p3nnywiz,rdgpl3ds,boobless,kcmfwesg,blacksab,mother2,markus1,leachim,secret2,s123456789,1derful,espero,russell2,tazzer,marykate,freakme,mollyb,lindros8,james00,gofaster,stokrotka,kilbosik,aquamann,pawel1,shedevil,mousie,slot2009,october6,146969,mm259up,brewcrew,choucho,uliana,sexfiend,fktirf,pantss,vladimi,starz,sheeps,12341234q,bigun,tiggers,crjhjcnm,libtech,pudge1,home12,zircon,klaus1,jerry2,pink1,lingus,monkey66,dumass,polopolo09,feuerweh,rjyatnf,chessy,beefer,shamen,poohbear1,4jjcho,bennevis,fatgirls,ujnbrf,cdexswzaq,9noize9,rich123,nomoney,racecar1,hacke,clahay,acuario,getsum,hondacrv,william0,cheyenn,techdeck,atljhjdf,wtcacq,suger,fallenangel,bammer,tranquil,carla123,relayer,lespaul1,portvale,idontno,bycnbnen,trooper2,gennadiy,pompon,billbob,amazonka,akitas,chinatow,atkbrc,busters,fitness1,cateye,selfok2013,1murphy,fullhous,mucker,bajskorv,nectarin,littlebitch,love24,feyenoor,bigal37,lambo1,pussybitch,icecube1,biged,kyocera,ltybcjdf,boodle,theking1,gotrice,sunset1,abm1224,fromme,sexsells,inheat,kenya1,swinger1,aphrodit,kurtcobain,rhind101,poidog,poiulkjh,kuzmina,beantown,tony88,stuttgar,drumer,joaqui,messenge,motorman,amber2,nicegirl,rachel69,andreia,faith123,studmuffin,jaiden,red111,vtkmybr,gamecocks,gumper,bosshogg,4me2know,tokyo1,kleaner,roadhog,fuckmeno,phoenix3,seeme,buttnutt,boner69,andreyka,myheart,katerin,rugburn,jvtuepip,dc3ubn,chile1,ashley69,happy99,swissair,balls2,fylhttdf,jimboo,55555d,mickey11,voronin,m7hsqstm,stufff,merete,weihnachte,dowjones,baloo1,freeones,bears34,auburn1,beverl,timberland,1elvis,guinness1,bombadil,flatron1,logging7,telefoon,merl1n,masha1,andrei1,cowabung,yousuck1,1matrix,peopl,asd123qwe,sweett,mirror1,torrente,joker12,diamond6,jackaroo,00000a,millerlite,ironhorse,2twins,stryke,gggg1,zzzxxxccc,roosevel,8363eddy,angel21,depeche1,d0ct0r,blue14,areyou,veloce,grendal,frederiksberg,cbcntvf,cb207sl,sasha2000,was.here,fritzz,rosedale,spinoza,cokeisit,gandalf3,skidmark,ashley01,12345j,1234567890qaz,sexxxxxx,beagles,lennart,12345789,pass10,politic,max007,gcheckou,12345611,tiffy,lightman,mushin,velosiped,brucewayne,gauthie,elena123,greenegg,h2oski,clocker,nitemare,123321s,megiddo,cassidy1,david13,boywonde,flori,peggy12,pgszt6md,batterie,redlands,scooter6,bckhere,trueno,bailey11,maxwell2,bandana,timoth1,startnow,ducati74,tiern,maxine1,blackmetal,suzyq,balla007,phatfarm,kirsten1,titmouse,benhogan,culito,forbin,chess1,warren1,panman,mickey7,24lover,dascha,speed2,redlion,andrew10,johnwayn,nike23,chacha1,bendog,bullyboy,goldtree,spookie,tigger99,1cookie,poutine,cyclone1,woodpony,camaleun,bluesky1,dfadan,eagles20,lovergirl,peepshow,mine1,dima1989,rjdfkmxer,11111aaaaa,machina,august17,1hhhhh,0773417k,1monster,freaksho,jazzmin,davidw,kurupt,chumly,huggies,sashenka,ccccccc1,bridge1,giggalo,cincinna,pistol1,hello22,david77,lightfoo,lucky6,jimmy12,261397,lisa12,tabaluga,mysite,belo4ka,greenn,eagle99,punkrawk,salvado,slick123,wichsen,knight99,dummys,fefolico,contrera,kalle1,anna1984,delray,robert99,garena,pretende,racefan,alons,serenada,ludmilla,cnhtkjr,l0swf9gx,hankster,dfktynbyrf,sheep1,john23,cv141ab,kalyani,944turbo,crystal2,blackfly,zrjdktdf,eus1sue1,mario5,riverplate,harddriv,melissa3,elliott1,sexybitc,cnhfyybr,jimdavis,bollix,beta1,amberlee,skywalk1,natala,1blood,brattax,shitty1,gb15kv99,ronjon,rothmans,thedoc,joey21,hotboi,firedawg,bimbo38,jibber,aftermat,nomar,01478963,phishing,domodo,anna13,materia,martha1,budman1,gunblade,exclusiv,sasha1997,anastas,rebecca2,fackyou,kallisti,fuckmyass,norseman,ipswich1,151500,1edward,intelinside,darcy1,bcrich,yjdjcnbf,failte,buzzzz,cream1,tatiana1,7eleven,green8,153351,1a2s3d4f5g6h,154263,milano1,bambi1,bruins77,rugby2,jamal1,bolita,sundaypunch,bubba12,realmadr,vfyxtcnth,iwojima,notlob,black666,valkiria,nexus1,millerti,birthday100,swiss1,appollo,gefest,greeneyes,celebrat,tigerr,slava123,izumrud,bubbabub,legoman,joesmith,katya123,sweetdream,john44,wwwwwww1,oooooo1,socal,lovespor,s5r8ed67s,258147,heidis,cowboy22,wachovia,michaelb,qwe1234567,i12345,255225,goldie1,alfa155,45colt,safeu851,antonova,longtong,1sparky,gfvznm,busen,hjlbjy,whateva,rocky4,cokeman,joshua3,kekskek1,sirocco,jagman,123456qwert,phinupi,thomas10,loller,sakur,vika2011,fullred,mariska,azucar,ncstate,glenn74,halima,aleshka,ilovemylife,verlaat,baggie,scoubidou6,phatboy,jbruton,scoop1,barney11,blindman,def456,maximus2,master55,nestea,11223355,diego123,sexpistols,sniffy,philip1,f12345,prisonbreak,nokia2700,ajnjuhfa,yankees3,colfax,ak470000,mtnman,bdfyeirf,fotball,ichbin,trebla,ilusha,riobravo,beaner1,thoradin,polkaudi,kurosawa,honda123,ladybu,valerik,poltava,saviola,fuckyouguys,754740g0,anallove,microlab1,juris01,ncc1864,garfild,shania1,qagsud,makarenko,cindy69,lebedev,andrew11,johnnybo,groovy1,booster1,sanders1,tommyb,johnson4,kd189nlcih,hondaman,vlasova,chick1,sokada,sevisgur,bear2327,chacho,sexmania,roma1993,hjcnbckfd,valley1,howdie,tuppence,jimandanne,strike3,y4kuz4,nhfnfnf,tsubasa,19955991,scabby,quincunx,dima1998,uuuuuu1,logica,skinner1,pinguino,lisa1234,xpressmusic,getfucked,qqqq1,bbbb1,matulino,ulyana,upsman,johnsmith,123579,co2000,spanner1,todiefor,mangoes,isabel1,123852,negra,snowdon,nikki123,bronx1,booom,ram2500,chuck123,fireboy,creek1,batman13,princesse,az12345,maksat,1knight,28infern,241455,r7112s,muselman,mets1986,katydid,vlad777,playme,kmfdm1,asssex,1prince,iop890,bigbroth,mollymoo,waitron,lizottes,125412,juggler,quinta,0sister0,zanardi,nata123,heckfyxbr,22q04w90e,engine2,nikita95,zamira,hammer22,lutscher,carolina1,zz6319,sanman,vfuflfy,buster99,rossco,kourniko,aggarwal,tattoo1,janice1,finger1,125521,19911992,shdwlnds,rudenko,vfvfgfgf123,galatea,monkeybu,juhani,premiumcash,classact,devilmay,helpme2,knuddel,hardpack,ramil,perrit,basil1,zombie13,stockcar,tos8217,honeypie,nowayman,alphadog,melon1,talula,125689,tiribon12,tornike,haribol,telefone,tiger22,sucka,lfytxrf,chicken123,muggins,a23456,b1234567,lytdybr,otter1,pippa,vasilisk,cooking1,helter,78978,bestboy,viper7,ahmed1,whitewol,mommys,apple5,shazam1,chelsea7,kumiko,masterma,rallye,bushmast,jkz123,entrar,andrew6,nathan01,alaric,tavasz,heimdall,gravy1,jimmy99,cthlwt,powerr,gthtrhtcnjr,canesfan,sasha11,ybrbnf_25,august9,brucie,artichok,arnie1,superdude,tarelka,mickey22,dooper,luners,holeshot,good123,gettysbu,bicho,hammer99,divine5,1zxcvbn,stronzo,q22222,disne,bmw750il,godhead,hallodu,aerith,nastik,differen,cestmoi,amber69,5string,pornosta,dirtygirl,ginger123,formel1,scott12,honda200,hotspurs,johnatha,firstone123,lexmark1,msconfig,karlmasc,l123456,123qweasdzx,baldman,sungod,furka,retsub,9811020,ryder1,tcglyued,astron,lbvfcbr,minddoc,dirt49,baseball12,tbear,simpl,schuey,artimus,bikman,plat1num,quantex,gotyou,hailey1,justin01,ellada,8481068,000002,manimal,dthjybxrf,buck123,dick123,6969696,nospam,strong1,kodeord,bama12,123321w,superman123,gladiolus,nintend,5792076,dreamgirl,spankme1,gautam,arianna1,titti,tetas,cool1234,belladog,importan,4206969,87e5nclizry,teufelo7,doller,yfl.irf,quaresma,3440172,melis,bradle,nnmaster,fast1,iverso,blargh,lucas12,chrisg,iamsam,123321az,tomjerry,kawika,2597174,standrew,billyg,muskan,gizmodo2,rz93qpmq,870621345,sathya,qmezrxg4,januari,marthe,moom4261,cum2me,hkger286,lou1988,suckit1,croaker,klaudia1,753951456,aidan1,fsunoles,romanenko,abbydog,isthebes,akshay,corgi,fuck666,walkman555,ranger98,scorpian,hardwareid,bluedragon,fastman,2305822q,iddqdiddqd,1597532,gopokes,zvfrfcb,w1234567,sputnik1,tr1993,pa$$w0rd,2i5fdruv,havvoc,1357913,1313131,bnm123,cowd00d,flexscan,thesims2,boogiema,bigsexxy,powerstr,ngc4565,joshman,babyboy1,123jlb,funfunfu,qwe456,honor1,puttana,bobbyj,daniel21,pussy12,shmuck,1232580,123578951,maxthedo,hithere1,bond0007,gehenna,nomames,blueone,r1234567,bwana,gatinho,1011111,torrents,cinta,123451234,tiger25,money69,edibey,pointman,mmcm19,wales1,caffreys,phaedra,bloodlus,321ret32,rufuss,tarbit,joanna1,102030405,stickboy,lotrfotr34,jamshid,mclarenf1,ataman,99ford,yarrak,logan2,ironlung,pushistik,dragoon1,unclebob,tigereye,pinokio,tylerj,mermaid1,stevie1,jaylen,888777,ramana,roman777,brandon7,17711771s,thiago,luigi1,edgar1,brucey,videogam,classi,birder,faramir,twiddle,cubalibre,grizzy,fucky,jjvwd4,august15,idinahui,ranita,nikita1998,123342,w1w2w3,78621323,4cancel,789963,(null,vassago,jaydog472,123452,timt42,canada99,123589,rebenok,htyfnf,785001,osipov,maks123,neverwinter,love2010,777222,67390436,eleanor1,bykemo,aquemini,frogg,roboto,thorny,shipmate,logcabin,66005918,nokian,gonzos,louisian,1abcdefg,triathlo,ilovemar,couger,letmeino,supera,runvs,fibonacci,muttly,58565254,5thgbqi,vfnehsv,electr,jose12,artemis1,newlove,thd1shr,hawkey,grigoryan,saisha,tosca,redder,lifesux,temple1,bunnyman,thekids,sabbeth,tarzan1,182838,158uefas,dell50,1super,666222,47ds8x,jackhamm,mineonly,rfnfhbyf,048ro,665259,kristina1,bombero,52545856,secure1,bigloser,peterk,alex2,51525354,anarchy1,superx,teenslut,money23,sigmapi,sanfrancisco,acme34,private5,eclips,qwerttrewq,axelle,kokain,hardguy,peter69,jesuschr,dyanna,dude69,sarah69,toyota91,amberr,45645645,bugmenot,bigted,44556677,556644,wwr8x9pu,alphaome,harley13,kolia123,wejrpfpu,revelati,nairda,sodoff,cityboy,pinkpussy,dkalis,miami305,wow12345,triplet,tannenbau,asdfasdf1,darkhors,527952,retired1,soxfan,nfyz123,37583867,goddes,515069,gxlmxbewym,1warrior,36925814,dmb2011,topten,karpova,89876065093rax,naturals,gateway9,cepseoun,turbot,493949,cock22,italia1,sasafras,gopnik,stalke,1qazxdr5,wm2006,ace1062,alieva,blue28,aracel,sandia,motoguzz,terri1,emmajane,conej,recoba,alex1995,jerkyboy,cowboy12,arenrone,precisio,31415927,scsa316,panzer1,studly1,powerhou,bensam,mashoutq,billee,eeyore1,reape,thebeatl,rul3z,montesa,doodle1,cvzefh1gk,424365,a159753,zimmerma,gumdrop,ashaman,grimreap,icandoit,borodina,branca,dima2009,keywest1,vaders,bubluk,diavolo,assss,goleta,eatass,napster1,382436,369741,5411pimo,lenchik,pikach,gilgamesh,kalimera,singer1,gordon2,rjycnbnewbz,maulwurf,joker13,2much4u,bond00,alice123,robotec,fuckgirl,zgjybz,redhorse,margaret1,brady1,pumpkin2,chinky,fourplay,1booger,roisin,1brandon,sandan,blackheart,cheez,blackfin,cntgfyjdf,mymoney1,09080706,goodboss,sebring1,rose1,kensingt,bigboner,marcus12,ym3cautj,struppi,thestone,lovebugs,stater,silver99,forest99,qazwsx12345,vasile,longboar,mkonji,huligan,rhfcbdfz,airmail,porn11,1ooooo,sofun,snake2,msouthwa,dougla,1iceman,shahrukh,sharona,dragon666,france98,196800,196820,ps253535,zjses9evpa,sniper01,design1,konfeta,jack99,drum66,good4you,station2,brucew,regedit,school12,mvtnr765,pub113,fantas,tiburon1,king99,ghjcnjgbpltw,checkito,308win,1ladybug,corneliu,svetasveta,197430,icicle,imaccess,ou81269,jjjdsl,brandon6,bimbo1,smokee,piccolo1,3611jcmg,children2,cookie2,conor1,darth1,margera,aoi856,paully,ou812345,sklave,eklhigcz,30624700,amazing1,wahooo,seau55,1beer,apples2,chulo,dolphin9,heather6,198206,198207,hergood,miracle1,njhyflj,4real,milka,silverfi,fabfive,spring12,ermine,mammy,jumpjet,adilbek,toscana,caustic,hotlove,sammy69,lolita1,byoung,whipme,barney01,mistys,tree1,buster3,kaylin,gfccgjhn,132333,aishiteru,pangaea,fathead1,smurph,198701,ryslan,gasto,xexeylhf,anisimov,chevyss,saskatoo,brandy12,tweaker,irish123,music2,denny1,palpatin,outlaw1,lovesuck,woman1,mrpibb,diadora,hfnfneq,poulette,harlock,mclaren1,cooper12,newpass3,bobby12,rfgecnfcerf,alskdjfh,mini14,dukers,raffael,199103,cleo123,1234567qwertyu,mossberg,scoopy,dctulf,starline,hjvjxrf,misfits1,rangers2,bilbos,blackhea,pappnase,atwork,purple2,daywalker,summoner,1jjjjjjj,swansong,chris10,laluna,12345qqq,charly1,lionsden,money99,silver33,hoghead,bdaddy,199430,saisg002,nosaints,tirpitz,1gggggg,jason13,kingss,ernest1,0cdh0v99ue,pkunzip,arowana,spiri,deskjet1,armine,lances,magic2,thetaxi,14159265,cacique,14142135,orange10,richard0,backdraf,255ooo,humtum,kohsamui,c43dae874d,wrestling1,cbhtym,sorento,megha,pepsiman,qweqwe12,bliss7,mario64,korolev,balls123,schlange,gordit,optiquest,fatdick,fish99,richy,nottoday,dianne1,armyof1,1234qwerasdfzxcv,bbonds,aekara,lidiya,baddog1,yellow5,funkie,ryan01,greentree,gcheckout,marshal1,liliput,000000z,rfhbyrf,gtogto43,rumpole,tarado,marcelit,aqwzsxedc,kenshin1,sassydog,system12,belly1,zilla,kissfan,tools1,desember,donsdad,nick11,scorpio6,poopoo1,toto99,steph123,dogfuck,rocket21,thx113,dude12,sanek,sommar,smacky,pimpsta,letmego,k1200rs,lytghjgtnhjdcr,abigale,buddog,deles,baseball9,roofus,carlsbad,hamzah,hereiam,genial,schoolgirlie,yfz450,breads,piesek,washear,chimay,apocalyp,nicole18,gfgf1234,gobulls,dnevnik,wonderwall,beer1234,1moose,beer69,maryann1,adpass,mike34,birdcage,hottuna,gigant,penquin,praveen,donna123,123lol123,thesame,fregat,adidas11,selrahc,pandoras,test3,chasmo,111222333000,pecos,daniel11,ingersol,shana1,mama12345,cessna15,myhero,1simpson,nazarenko,cognit,seattle2,irina1,azfpc310,rfycthdf,hardy1,jazmyn,sl1200,hotlanta,jason22,kumar123,sujatha,fsd9shtyu,highjump,changer,entertai,kolding,mrbig,sayuri,eagle21,qwertzu,jorge1,0101dd,bigdong,ou812a,sinatra1,htcnjhfy,oleg123,videoman,pbyfblf,tv612se,bigbird1,kenaidog,gunite,silverma,ardmore,123123qq,hotbot,cascada,cbr600f4,harakiri,chico123,boscos,aaron12,glasgow1,kmn5hc,lanfear,1light,liveoak,fizika,ybrjkftdyf,surfside,intermilan,multipas,redcard,72chevy,balata,coolio1,schroede,kanat,testerer,camion,kierra,hejmeddig,antonio2,tornados,isidor,pinkey,n8skfswa,ginny1,houndog,1bill,chris25,hastur,1marine,greatdan,french1,hatman,123qqq,z1z2z3z4,kicker1,katiedog,usopen,smith22,mrmagoo,1234512i,assa123,7seven7,monster7,june12,bpvtyf,149521,guenter,alex1985,voronina,mbkugegs,zaqwsxcderfv,rusty5,mystic1,master0,abcdef12,jndfkb,r4zpm3,cheesey,skripka,blackwhite,sharon69,dro8smwq,lektor,techman,boognish,deidara,heckfyf,quietkey,authcode,monkey4,jayboy,pinkerto,merengue,chulita,bushwick,turambar,kittykit,joseph2,dad123,kristo,pepote,scheiss,hambone1,bigballa,restaura,tequil,111luzer,euro2000,motox,denhaag,chelsi,flaco1,preeti,lillo,1001sin,passw,august24,beatoff,555555d,willis1,kissthis,qwertyz,rvgmw2gl,iloveboobies,timati,kimbo,msinfo,dewdrop,sdbaker,fcc5nky2,messiah1,catboy,small1,chode,beastie1,star77,hvidovre,short1,xavie,dagobah,alex1987,papageno,dakota2,toonami,fuerte,jesus33,lawina,souppp,dirtybir,chrish,naturist,channel1,peyote,flibble,gutentag,lactate,killem,zucchero,robinho,ditka,grumpy1,avr7000,boxxer,topcop,berry1,mypass1,beverly1,deuce1,9638527410,cthuttdf,kzkmrf,lovethem,band1t,cantona1,purple11,apples123,wonderwo,123a456,fuzzie,lucky99,dancer2,hoddling,rockcity,winner12,spooty,mansfiel,aimee1,287hf71h,rudiger,culebra,god123,agent86,daniel0,bunky1,notmine,9ball,goofus,puffy1,xyh28af4,kulikov,bankshot,vurdf5i2,kevinm,ercole,sexygirls,razvan,october7,goater,lollie,raissa,thefrog,mdmaiwa3,mascha,jesussaves,union1,anthony9,crossroa,brother2,areyuke,rodman91,toonsex,dopeman,gericom,vaz2115,cockgobbler,12356789,12345699,signatur,alexandra1,coolwhip,erwin1,awdrgyjilp,pens66,ghjrjgtyrj,linkinpark,emergenc,psych0,blood666,bootmort,wetworks,piroca,johnd,iamthe1,supermario,homer69,flameon,image1,bebert,fylhtq1,annapoli,apple11,hockey22,10048,indahouse,mykiss,1penguin,markp,misha123,foghat,march11,hank1,santorin,defcon4,tampico,vbnhjafy,robert22,bunkie,athlon64,sex777,nextdoor,koskesh,lolnoob,seemnemaailm,black23,march15,yeehaa,chiqui,teagan,siegheil,monday2,cornhusk,mamusia,chilis,sthgrtst,feldspar,scottm,pugdog,rfghjy,micmac,gtnhjdyf,terminato,1jackson,kakosja,bogomol,123321aa,rkbvtyrj,tresor,tigertig,fuckitall,vbkkbjy,caramon,zxc12,balin,dildo1,soccer09,avata,abby123,cheetah1,marquise,jennyc,hondavfr,tinti,anna1985,dennis2,jorel,mayflowe,icema,hal2000,nikkis,bigmouth,greenery,nurjan,leonov,liberty7,fafnir,larionov,sat321321,byteme1,nausicaa,hjvfynbrf,everto,zebra123,sergio1,titone,wisdom1,kahala,104328q,marcin1,salima,pcitra,1nnnnn,nalini,galvesto,neeraj,rick1,squeeky,agnes1,jitterbu,agshar,maria12,0112358,traxxas,stivone,prophet1,bananza,sommer1,canoneos,hotfun,redsox11,1bigmac,dctdjkjl,legion1,everclea,valenok,black9,danny001,roxie1,1theman,mudslide,july16,lechef,chula,glamis,emilka,canbeef,ioanna,cactus1,rockshox,im2cool,ninja9,thvfrjdf,june28,milo17,missyou,micky1,nbibyf,nokiaa,goldi,mattias,fuckthem,asdzxc123,ironfist,junior01,nesta,crazzy,killswit,hygge,zantac,kazama,melvin1,allston,maandag,hiccup,prototyp,specboot,dwl610,hello6,159456,baldhead,redwhite,calpoly,whitetail,agile1,cousteau,matt01,aust1n,malcolmx,gjlfhjr,semperf1,ferarri,a1b2c3d,vangelis,mkvdari,bettis36,andzia,comand,tazzman,morgaine,pepluv,anna1990,inandout,anetka,anna1997,wallpape,moonrake,huntress,hogtie,cameron7,sammy7,singe11,clownboy,newzeala,wilmar,safrane,rebeld,poopi,granat,hammertime,nermin,11251422,xyzzy1,bogeys,jkmxbr,fktrcfyl,11223311,nfyrbcn,11223300,powerpla,zoedog,ybrbnbyf,zaphod42,tarawa,jxfhjdfirf,dude1234,g5wks9,goobe,czekolada,blackros,amaranth,medical1,thereds,julija,nhecsyfujkjdt,promopas,buddy4,marmalad,weihnachten,tronic,letici,passthief,67mustan,ds7zamnw,morri,w8woord,cheops,pinarell,sonofsam,av473dv,sf161pn,5c92v5h6,purple13,tango123,plant1,1baby,xufrgemw,fitta,1rangers,spawns,kenned,taratata,19944991,11111118,coronas,4ebouux8,roadrash,corvette1,dfyjdf846,marley12,qwaszxerdfcv,68stang,67stang,racin,ellehcim,sofiko,nicetry,seabass1,jazzman1,zaqwsx1,laz2937,uuuuuuu1,vlad123,rafale,j1234567,223366,nnnnnn1,226622,junkfood,asilas,cer980,daddymac,persepho,neelam,00700,shithappens,255555,qwertyy,xbox36,19755791,qweasd1,bearcub,jerryb,a1b1c1,polkaudio,basketball1,456rty,1loveyou,marcus2,mama1961,palace1,transcend,shuriken,sudhakar,teenlove,anabelle,matrix99,pogoda,notme,bartend,jordana,nihaoma,ataris,littlegi,ferraris,redarmy,giallo,fastdraw,accountbloc,peludo,pornostar,pinoyako,cindee,glassjaw,dameon,johnnyd,finnland,saudade,losbravo,slonko,toplay,smalltit,nicksfun,stockhol,penpal,caraj,divedeep,cannibus,poppydog,pass88,viktory,walhalla,arisia,lucozade,goldenbo,tigers11,caball,ownage123,tonna,handy1,johny,capital5,faith2,stillher,brandan,pooky1,antananarivu,hotdick,1justin,lacrimos,goathead,bobrik,cgtwbfkbcn,maywood,kamilek,gbplf123,gulnar,beanhead,vfvjyn,shash,viper69,ttttttt1,hondacr,kanako,muffer,dukies,justin123,agapov58,mushka,bad11bad,muleman,jojo123,andreika,makeit,vanill,boomers,bigals,merlin11,quacker,aurelien,spartak1922,ligeti,diana2,lawnmowe,fortune1,awesom,rockyy,anna1994,oinker,love88,eastbay,ab55484,poker0,ozzy666,papasmurf,antihero,photogra,ktm250,painkill,jegr2d2,p3orion,canman,dextur,qwest123,samboy,yomismo,sierra01,herber,vfrcbvvfrcbv,gloria1,llama1,pie123,bobbyjoe,buzzkill,skidrow,grabber,phili,javier1,9379992q,geroin,oleg1994,sovereig,rollover,zaq12qaz,battery1,killer13,alina123,groucho1,mario12,peter22,butterbean,elise1,lucycat,neo123,ferdi,golfer01,randie,gfhfyjbr,ventura1,chelsea3,pinoy,mtgox,yrrim7,shoeman,mirko,ffggyyo,65mustan,ufdibyjd,john55,suckfuck,greatgoo,fvfnjhb,mmmnnn,love20,1bullshi,sucesso,easy1234,robin123,rockets1,diamondb,wolfee,nothing0,joker777,glasnost,richar1,guille,sayan,koresh,goshawk,alexx,batman21,a123456b,hball,243122,rockandr,coolfool,isaia,mary1,yjdbrjdf,lolopc,cleocat,cimbo,lovehina,8vfhnf,passking,bonapart,diamond2,bigboys,kreator,ctvtyjdf,sassy123,shellac,table54781,nedkelly,philbert,sux2bu,nomis,sparky99,python1,littlebear,numpty,silmaril,sweeet,jamesw,cbufhtnf,peggysue,wodahs,luvsex,wizardry,venom123,love4you,bama1,samat,reviewpass,ned467,cjkjdtq,mamula,gijoe,amersham,devochka,redhill,gisel,preggo,polock,cando,rewster,greenlantern,panasonik,dave1234,mikeee,1carlos,miledi,darkness1,p0o9i8u7y6,kathryn1,happyguy,dcp500,assmaster,sambuka,sailormo,antonio3,logans,18254288,nokiax2,qwertzuiop,zavilov,totti,xenon1,edward11,targa1,something1,tony_t,q1w2e3r4t5y6u7i8o9p0,02551670,vladimir1,monkeybutt,greenda,neel21,craiger,saveliy,dei008,honda450,fylhtq95,spike2,fjnq8915,passwordstandard,vova12345,talonesi,richi,gigemags,pierre1,westin,trevoga,dorothee,bastogne,25563o,brandon3,truegrit,krimml,iamgreat,servis,a112233,paulinka,azimuth,corperfmonsy,358hkyp,homerun1,dogbert1,eatmyass,cottage1,savina,baseball7,bigtex,gimmesum,asdcxz,lennon1,a159357,1bastard,413276191q,pngfilt,pchealth,netsnip,bodiroga,1matt,webtvs,ravers,adapters,siddis,mashamasha,coffee2,myhoney,anna1982,marcia1,fairchil,maniek,iloveluc,batmonh,wildon,bowie1,netnwlnk,fancy1,tom204,olga1976,vfif123,queens1,ajax01,lovess,mockba,icam4usb,triada,odinthor,rstlne,exciter,sundog,anchorat,girls69,nfnmzyrf,soloma,gti16v,shadowman,ottom,rataros,tonchin,vishal,chicken0,pornlo,christiaan,volante,likesit,mariupol,runfast,gbpltw123,missys,villevalo,kbpjxrf,ghibli,calla,cessna172,kinglear,dell11,swift1,walera,1cricket,pussy5,turbo911,tucke,maprchem56458,rosehill,thekiwi1,ygfxbkgt,mandarinka,98xa29,magnit,cjfrf,paswoord,grandam1,shenmue,leedsuni,hatrick,zagadka,angeldog,michaell,dance123,koichi,bballs,29palms,xanth,228822,ppppppp1,1kkkkk,1lllll,mynewbots,spurss,madmax1,224455,city1,mmmmmmm1,nnnnnnn1,biedronka,thebeatles,elessar,f14tomcat,jordan18,bobo123,ayi000,tedbear,86chevyx,user123,bobolink,maktub,elmer1,flyfishi,franco1,gandalf0,traxdata,david21,enlighte,dmitrij,beckys,1giants,flippe,12345678w,jossie,rugbyman,snowcat,rapeme,peanut11,gemeni,udders,techn9ne,armani1,chappie,war123,vakantie,maddawg,sewanee,jake5253,tautt1,anthony5,letterma,jimbo2,kmdtyjr,hextall,jessica6,amiga500,hotcunt,phoenix9,veronda,saqartvelo,scubas,sixer3,williamj,nightfal,shihan,melnikova,kosssss,handily,killer77,jhrl0821,march17,rushman,6gcf636i,metoyou,irina123,mine11,primus1,formatters,matthew5,infotech,gangster1,jordan45,moose69,kompas,motoxxx,greatwhi,cobra12,kirpich,weezer1,hello23,montse,tracy123,connecte,cjymrf,hemingwa,azreal,gundam00,mobila,boxman,slayers1,ravshan,june26,fktrcfylhjd,bermuda1,tylerd,maersk,qazwsx11,eybdthcbntn,ash123,camelo,kat123,backd00r,cheyenne1,1king,jerkin,tnt123,trabant,warhammer40k,rambos,punto,home77,pedrito,1frank,brille,guitarman,george13,rakas,tgbxtcrbq,flute1,bananas1,lovezp1314,thespot,postie,buster69,sexytime,twistys,zacharia,sportage,toccata,denver7,terry123,bogdanova,devil69,higgins1,whatluck,pele10,kkk666,jeffery1,1qayxsw2,riptide1,chevy11,munchy,lazer1,hooker1,ghfgjh,vergesse,playgrou,4077mash,gusev,humpin,oneputt,hydepark,monster9,tiger8,tangsoo,guy123,hesoyam1,uhtqneyu,thanku,lomond,ortezza,kronik,geetha,rabbit66,killas,qazxswe,alabaste,1234567890qwerty,capone1,andrea12,geral,beatbox,slutfuck,booyaka,jasmine7,ostsee,maestro1,beatme,tracey1,buster123,donaldduck,ironfish,happy6,konnichi,gintonic,momoney1,dugan1,today2,enkidu,destiny2,trim7gun,katuha,fractals,morganstanley,polkadot,gotime,prince11,204060,fifa2010,bobbyt,seemee,amanda10,airbrush,bigtitty,heidie,layla1,cotton1,5speed,fyfnjkmtdyf,flynavy,joxury8f,meeko,akuma,dudley1,flyboy1,moondog1,trotters,mariami,signin,chinna,legs11,pussy4,1s1h1e1f1,felici,optimus1,iluvu,marlins1,gavaec,balance1,glock40,london01,kokot,southwes,comfort1,sammy11,rockbottom,brianc,litebeer,homero,chopsuey,greenlan,charit,freecell,hampster,smalldog,viper12,blofeld,1234567890987654321,realsex,romann,cartman2,cjdthitycndj,nelly1,bmw528,zwezda,masterba,jeep99,turtl,america2,sunburst,sanyco,auntjudy,125wm,blue10,qwsazx,cartma,toby12,robbob,red222,ilovecock,losfix16,1explore,helge,vaz2114,whynotme,baba123,mugen,1qazwsxedc,albertjr,0101198,sextime,supras,nicolas2,wantsex,pussy6,checkm8,winam,24gordon,misterme,curlew,gbljhfcs,medtech,franzi,butthea,voivod,blackhat,egoiste,pjkeirf,maddog69,pakalolo,hockey4,igor1234,rouges,snowhite,homefree,sexfreak,acer12,dsmith,blessyou,199410,vfrcbvjd,falco02,belinda1,yaglasph,april21,groundho,jasmin1,nevergiveup,elvir,gborv526,c00kie,emma01,awesome2,larina,mike12345,maximu,anupam,bltynbabrfwbz,tanushka,sukkel,raptor22,josh12,schalke04,cosmodog,fuckyou8,busybee,198800,bijoux,frame1,blackmor,giveit,issmall,bear13,123-123,bladez,littlegirl,ultra123,fletch1,flashnet,loploprock,rkelly,12step,lukas1,littlewhore,cuntfinger,stinkyfinger,laurenc,198020,n7td4bjl,jackie69,camel123,ben1234,1gateway,adelheid,fatmike,thuglove,zzaaqq,chivas1,4815162342q,mamadou,nadano,james22,benwin,andrea99,rjirf,michou,abkbgg,d50gnn,aaazzz,a123654,blankman,booboo11,medicus,bigbone,197200,justine1,bendix,morphius,njhvjp,44mag,zsecyus56,goodbye1,nokiadermo,a333444,waratsea,4rzp8ab7,fevral,brillian,kirbys,minim,erathia,grazia,zxcvb1234,dukey,snaggle,poppi,hymen,1video,dune2000,jpthjdf,cvbn123,zcxfcnkbdfz,astonv,ginnie,316271,engine3,pr1ncess,64chevy,glass1,laotzu,hollyy,comicbooks,assasins,nuaddn9561,scottsda,hfcnfvfy,accobra,7777777z,werty123,metalhead,romanson,redsand,365214,shalo,arsenii,1989cc,sissi,duramax,382563,petera,414243,mamapap,jollymon,field1,fatgirl,janets,trompete,matchbox20,rambo2,nepenthe,441232,qwertyuiop10,bozo123,phezc419hv,romantika,lifestyl,pengui,decembre,demon6,panther6,444888,scanman,ghjcnjabkz,pachanga,buzzword,indianer,spiderman3,tony12,startre,frog1,fyutk,483422,tupacshakur,albert12,1drummer,bmw328i,green17,aerdna,invisibl,summer13,calimer,mustaine,lgnu9d,morefun,hesoyam123,escort1,scrapland,stargat,barabbas,dead13,545645,mexicali,sierr,gfhfpbn,gonchar,moonstafa,searock,counte,foster1,jayhawk1,floren,maremma,nastya2010,softball1,adaptec,halloo,barrabas,zxcasd123,hunny,mariana1,kafedra,freedom0,green420,vlad1234,method7,665566,tooting,hallo12,davinchi,conducto,medias,666444,invernes,madhatter,456asd,12345678i,687887,le33px,spring00,help123,bellybut,billy5,vitalik1,river123,gorila,bendis,power666,747200,footslav,acehigh,qazxswedc123,q1a1z1,richard9,peterburg,tabletop,gavrilov,123qwe1,kolosov,fredrau,run4fun,789056,jkbvgbflf,chitra,87654321q,steve22,wideopen,access88,surfe,tdfyutkbjy,impossib,kevin69,880888,cantina,887766,wxcvb,dontforg,qwer1209,asslicke,mamma123,indig,arkasha,scrapp,morelia,vehxbr,jones2,scratch1,cody11,cassie12,gerbera,dontgotm,underhil,maks2010,hollywood1,hanibal,elena2010,jason11,1010321,stewar,elaman,fireplug,goodby,sacrific,babyphat,bobcat12,bruce123,1233215,tony45,tiburo,love15,bmw750,wallstreet,2h0t4me,1346795,lamerz,munkee,134679q,granvill,1512198,armastus,aiden1,pipeutvj,g1234567,angeleyes,usmc1,102030q,putangina,brandnew,shadowfax,eagles12,1falcon,brianw,lokomoti,2022958,scooper,pegas,jabroni1,2121212,buffal,siffredi,wewiz,twotone,rosebudd,nightwis,carpet1,mickey2,2525252,sleddog,red333,jamesm,2797349,jeff12,onizuka,felixxxx,rf6666,fine1,ohlala,forplay,chicago5,muncho,scooby11,ptichka,johnnn,19851985p,dogphil3650,totenkopf,monitor2,macross7,3816778,dudder,semaj1,bounder,racerx1,5556633,7085506,ofclr278,brody1,7506751,nantucke,hedj2n4q,drew1,aessedai,trekbike,pussykat,samatron,imani,9124852,wiley1,dukenukem,iampurehaha2,9556035,obvious1,mccool24,apache64,kravchenko,justforf,basura,jamese,s0ccer,safado,darksta,surfer69,damian1,gjpbnbd,gunny1,wolley,sananton,zxcvbn123456,odt4p6sv8,sergei1,modem1,mansikka,zzzz1,rifraf,dima777,mary69,looking4,donttell,red100,ninjutsu,uaeuaeman,bigbri,brasco,queenas8151,demetri,angel007,bubbl,kolort,conny,antonia1,avtoritet,kaka22,kailayu,sassy2,wrongway,chevy3,1nascar,patriots1,chrisrey,mike99,sexy22,chkdsk,sd3utre7,padawan,a6pihd,doming,mesohorny,tamada,donatello,emma22,eather,susan69,pinky123,stud69,fatbitch,pilsbury,thc420,lovepuss,1creativ,golf1234,hurryup,1honda,huskerdu,marino1,gowron,girl1,fucktoy,gtnhjpfdjlcr,dkjfghdk,pinkfl,loreli,7777777s,donkeykong,rockytop,staples1,sone4ka,xxxjay,flywheel,toppdogg,bigbubba,aaa123456,2letmein,shavkat,paule,dlanor,adamas,0147852,aassaa,dixon1,bmw328,mother12,ilikepussy,holly2,tsmith,excaliber,fhutynbyf,nicole3,tulipan,emanue,flyvholm,currahee,godsgift,antonioj,torito,dinky1,sanna,yfcnzvjz,june14,anime123,123321456654,hanswurst,bandman,hello101,xxxyyy,chevy69,technica,tagada,arnol,v00d00,lilone,filles,drumandbass,dinamit,a1234a,eatmeat,elway07,inout,james6,dawid1,thewolf,diapason,yodaddy,qscwdv,fuckit1,liljoe,sloeber,simbacat,sascha1,qwe1234,1badger,prisca,angel17,gravedig,jakeyboy,longboard,truskawka,golfer11,pyramid7,highspee,pistola,theriver,hammer69,1packers,dannyd,alfonse,qwertgfdsa,11119999,basket1,ghjtrn,saralee,12inches,paolo1,zse4xdr5,taproot,sophieh6,grizzlie,hockey69,danang,biggums,hotbitch,5alive,beloved1,bluewave,dimon95,koketka,multiscan,littleb,leghorn,poker2,delite,skyfir,bigjake,persona1,amberdog,hannah12,derren,ziffle,1sarah,1assword,sparky01,seymur,tomtom1,123321qw,goskins,soccer19,luvbekki,bumhole,2balls,1muffin,borodin,monkey9,yfeiybrb,1alex,betmen,freder,nigger123,azizbek,gjkzrjdf,lilmike,1bigdadd,1rock,taganrog,snappy1,andrey1,kolonka,bunyan,gomango,vivia,clarkkent,satur,gaudeamus,mantaray,1month,whitehea,fargus,andrew99,ray123,redhawks,liza2009,qw12345,den12345,vfhnsyjdf,147258369a,mazepa,newyorke,1arsenal,hondas2000,demona,fordgt,steve12,birthday2,12457896,dickster,edcwsxqaz,sahalin,pantyman,skinny1,hubertus,cumshot1,chiro,kappaman,mark3434,canada12,lichking,bonkers1,ivan1985,sybase,valmet,doors1,deedlit,kyjelly,bdfysx,ford11,throatfuck,backwood,fylhsq,lalit,boss429,kotova,bricky,steveh,joshua19,kissa,imladris,star1234,lubimka,partyman,crazyd,tobias1,ilike69,imhome,whome,fourstar,scanner1,ujhjl312,anatoli,85bears,jimbo69,5678ytr,potapova,nokia7070,sunday1,kalleank,1996gta,refinnej,july1,molodec,nothanks,enigm,12play,sugardog,nhfkbdfkb,larousse,cannon1,144444,qazxcdew,stimorol,jhereg,spawn7,143000,fearme,hambur,merlin21,dobie,is3yeusc,partner1,dekal,varsha,478jfszk,flavi,hippo1,9hmlpyjd,july21,7imjfstw,lexxus,truelov,nokia5200,carlos6,anais,mudbone,anahit,taylorc,tashas,larkspur,animal2000,nibiru,jan123,miyvarxar,deflep,dolore,communit,ifoptfcor,laura2,anadrol,mamaliga,mitzi1,blue92,april15,matveev,kajlas,wowlook1,1flowers,shadow14,alucard1,1golf,bantha,scotlan,singapur,mark13,manchester1,telus01,superdav,jackoff1,madnes,bullnuts,world123,clitty,palmer1,david10,spider10,sargsyan,rattlers,david4,windows2,sony12,visigoth,qqqaaa,penfloor,cabledog,camilla1,natasha123,eagleman,softcore,bobrov,dietmar,divad,sss123,d1234567,tlbyjhju,1q1q1q1,paraiso,dav123,lfiekmrf,drachen,lzhan16889,tplate,gfghbrf,casio1,123boots1,123test,sys64738,heavymetal,andiamo,meduza,soarer,coco12,negrita,amigas,heavymet,bespin,1asdfghj,wharfrat,wetsex,tight1,janus1,sword123,ladeda,dragon98,austin2,atep1,jungle1,12345abcd,lexus300,pheonix1,alex1974,123qw123,137955,bigtim,shadow88,igor1994,goodjob,arzen,champ123,121ebay,changeme1,brooksie,frogman1,buldozer,morrowin,achim,trish1,lasse,festiva,bubbaman,scottb,kramit,august22,tyson123,passsword,oompah,al123456,fucking1,green45,noodle1,looking1,ashlynn,al1716,stang50,coco11,greese,bob111,brennan1,jasonj,1cherry,1q2345,1xxxxxxx,fifa2011,brondby,zachar1,satyam,easy1,magic7,1rainbow,cheezit,1eeeeeee,ashley123,assass1,amanda123,jerbear,1bbbbbb,azerty12,15975391,654321z,twinturb,onlyone1,denis1988,6846kg3r,jumbos,pennydog,dandelion,haileris,epervier,snoopy69,afrodite,oldpussy,green55,poopypan,verymuch,katyusha,recon7,mine69,tangos,contro,blowme2,jade1,skydive1,fiveiron,dimo4ka,bokser,stargirl,fordfocus,tigers2,platina,baseball11,raque,pimper,jawbreak,buster88,walter34,chucko,penchair,horizon1,thecure1,scc1975,adrianna1,kareta,duke12,krille,dumbfuck,cunt1,aldebaran,laverda,harumi,knopfler,pongo1,pfhbyf,dogman1,rossigno,1hardon,scarlets,nuggets1,ibelieve,akinfeev,xfhkbr,athene,falcon69,happie,billly,nitsua,fiocco,qwerty09,gizmo2,slava2,125690,doggy123,craigs,vader123,silkeborg,124365,peterm,123978,krakatoa,123699,123592,kgvebmqy,pensacol,d1d2d3,snowstor,goldenboy,gfg65h7,ev700,church1,orange11,g0dz1ll4,chester3,acheron,cynthi,hotshot1,jesuschris,motdepass,zymurgy,one2one,fietsbel,harryp,wisper,pookster,nn527hp,dolla,milkmaid,rustyboy,terrell1,epsilon1,lillian1,dale3,crhbgrf,maxsim,selecta,mamada,fatman1,ufkjxrf,shinchan,fuckuall,women1,000008,bossss,greta1,rbhjxrf,mamasboy,purple69,felicidade,sexy21,cathay,hunglow,splatt,kahless,shopping1,1gandalf,themis,delta7,moon69,blue24,parliame,mamma1,miyuki,2500hd,jackmeof,razer,rocker1,juvis123,noremac,boing747,9z5ve9rrcz,icewater,titania,alley1,moparman,christo1,oliver2,vinicius,tigerfan,chevyy,joshua99,doda99,matrixx,ekbnrf,jackfrost,viper01,kasia,cnfhsq,triton1,ssbt8ae2,rugby8,ramman,1lucky,barabash,ghtlfntkm,junaid,apeshit,enfant,kenpo1,shit12,007000,marge1,shadow10,qwerty789,richard8,vbitkm,lostboys,jesus4me,richard4,hifive,kolawole,damilola,prisma,paranoya,prince2,lisaann,happyness,cardss,methodma,supercop,a8kd47v5,gamgee,polly123,irene1,number8,hoyasaxa,1digital,matthew0,dclxvi,lisica,roy123,2468013579,sparda,queball,vaffanculo,pass1wor,repmvbx,999666333,freedom8,botanik,777555333,marcos1,lubimaya,flash2,einstei,08080,123456789j,159951159,159357123,carrot1,alina1995,sanjos,dilara,mustang67,wisteria,jhnjgtl12,98766789,darksun,arxangel,87062134,creativ1,malyshka,fuckthemall,barsic,rocksta,2big4u,5nizza,genesis2,romance1,ofcourse,1horse,latenite,cubana,sactown,789456123a,milliona,61808861,57699434,imperia,bubba11,yellow3,change12,55495746,flappy,jimbo123,19372846,19380018,cutlass1,craig123,klepto,beagle1,solus,51502112,pasha1,19822891,46466452,19855891,petshop,nikolaevna,119966,nokia6131,evenpar,hoosier1,contrasena,jawa350,gonzo123,mouse2,115511,eetfuk,gfhfvgfvgfv,1crystal,sofaking,coyote1,kwiatuszek,fhrflbq,valeria1,anthro,0123654789,alltheway,zoltar,maasikas,wildchil,fredonia,earlgrey,gtnhjczy,matrix123,solid1,slavko,12monkeys,fjdksl,inter1,nokia6500,59382113kevinp,spuddy,cachero,coorslit,password!,kiba1z,karizma,vova1994,chicony,english1,bondra12,1rocket,hunden,jimbob1,zpflhjn1,th0mas,deuce22,meatwad,fatfree,congas,sambora,cooper2,janne,clancy1,stonie,busta,kamaz,speedy2,jasmine3,fahayek,arsenal0,beerss,trixie1,boobs69,luansantana,toadman,control2,ewing33,maxcat,mama1964,diamond4,tabaco,joshua0,piper2,music101,guybrush,reynald,pincher,katiebug,starrs,pimphard,frontosa,alex97,cootie,clockwor,belluno,skyeseth,booty69,chaparra,boochie,green4,bobcat1,havok,saraann,pipeman,aekdb,jumpshot,wintermu,chaika,1chester,rjnjatq,emokid,reset1,regal1,j0shua,134679a,asmodey,sarahh,zapidoo,ciccione,sosexy,beckham23,hornets1,alex1971,delerium,manageme,connor11,1rabbit,sane4ek,caseyboy,cbljhjdf,redsox20,tttttt99,haustool,ander,pantera6,passwd1,journey1,9988776655,blue135,writerspace,xiaoyua123,justice2,niagra,cassis,scorpius,bpgjldsgjldthnf,gamemaster,bloody1,retrac,stabbin,toybox,fight1,ytpyf.,glasha,va2001,taylor11,shameles,ladylove,10078,karmann,rodeos,eintritt,lanesra,tobasco,jnrhjqcz,navyman,pablit,leshka,jessica3,123vika,alena1,platinu,ilford,storm7,undernet,sasha777,1legend,anna2002,kanmax1994,porkpie,thunder0,gundog,pallina,easypass,duck1,supermom,roach1,twincam,14028,tiziano,qwerty32,123654789a,evropa,shampoo1,yfxfkmybr,cubby1,tsunami1,fktrcttdf,yasacrac,17098,happyhap,bullrun,rodder,oaktown,holde,isbest,taylor9,reeper,hammer11,julias,rolltide1,compaq123,fourx4,subzero1,hockey9,7mary3,busines,ybrbnjcbr,wagoneer,danniash,portishead,digitex,alex1981,david11,infidel,1snoopy,free30,jaden,tonto1,redcar27,footie,moskwa,thomas21,hammer12,burzum,cosmo123,50000,burltree,54343,54354,vwpassat,jack5225,cougars1,burlpony,blackhorse,alegna,petert,katemoss,ram123,nels0n,ferrina,angel77,cstock,1christi,dave55,abc123a,alex1975,av626ss,flipoff,folgore,max1998,science1,si711ne,yams7,wifey1,sveiks,cabin1,volodia,ox3ford,cartagen,platini,picture1,sparkle1,tiedomi,service321,wooody,christi1,gnasher,brunob,hammie,iraffert,bot2010,dtcyeirf,1234567890p,cooper11,alcoholi,savchenko,adam01,chelsea5,niewiem,icebear,lllooottt,ilovedick,sweetpus,money8,cookie13,rfnthbyf1988,booboo2,angus123,blockbus,david9,chica1,nazaret,samsung9,smile4u,daystar,skinnass,john10,thegirl,sexybeas,wasdwasd1,sigge1,1qa2ws3ed4rf5tg,czarny,ripley1,chris5,ashley19,anitha,pokerman,prevert,trfnthby,tony69,georgia2,stoppedb,qwertyuiop12345,miniclip,franky1,durdom,cabbages,1234567890o,delta5,liudmila,nhfycajhvths,court1,josiew,abcd1,doghead,diman,masiania,songline,boogle,triston,deepika,sexy4me,grapple,spacebal,ebonee,winter0,smokewee,nargiza,dragonla,sassys,andy2000,menards,yoshio,massive1,suckmy1k,passat99,sexybo,nastya1996,isdead,stratcat,hokuto,infix,pidoras,daffyduck,cumhard,baldeagl,kerberos,yardman,shibainu,guitare,cqub6553,tommyy,bk.irf,bigfoo,hecto,july27,james4,biggus,esbjerg,isgod,1irish,phenmarr,jamaic,roma1990,diamond0,yjdbrjd,girls4me,tampa1,kabuto,vaduz,hanse,spieng,dianochka,csm101,lorna1,ogoshi,plhy6hql,2wsx4rfv,cameron0,adebayo,oleg1996,sharipov,bouboule,hollister1,frogss,yeababy,kablam,adelante,memem,howies,thering,cecilia1,onetwo12,ojp123456,jordan9,msorcloledbr,neveraga,evh5150,redwin,1august,canno,1mercede,moody1,mudbug,chessmas,tiikeri,stickdaddy77,alex15,kvartira,7654321a,lollol123,qwaszxedc,algore,solana,vfhbyfvfhbyf,blue72,misha1111,smoke20,junior13,mogli,threee,shannon2,fuckmylife,kevinh,saransk,karenw,isolde,sekirarr,orion123,thomas0,debra1,laketaho,alondra,curiva,jazz1234,1tigers,jambos,lickme2,suomi,gandalf7,028526,zygote,brett123,br1ttany,supafly,159000,kingrat,luton1,cool-ca,bocman,thomasd,skiller,katter,mama777,chanc,tomass,1rachel,oldno7,rfpfyjdf,bigkev,yelrah,primas,osito,kipper1,msvcr71,bigboy11,thesun,noskcaj,chicc,sonja1,lozinka,mobile1,1vader,ummagumma,waves1,punter12,tubgtn,server1,irina1991,magic69,dak001,pandemonium,dead1,berlingo,cherrypi,1montana,lohotron,chicklet,asdfgh123456,stepside,ikmvw103,icebaby,trillium,1sucks,ukrnet,glock9,ab12345,thepower,robert8,thugstools,hockey13,buffon,livefree,sexpics,dessar,ja0000,rosenrot,james10,1fish,svoloch,mykitty,muffin11,evbukb,shwing,artem1992,andrey1992,sheldon1,passpage,nikita99,fubar123,vannasx,eight888,marial,max2010,express2,violentj,2ykn5ccf,spartan11,brenda69,jackiech,abagail,robin2,grass1,andy76,bell1,taison,superme,vika1995,xtr451,fred20,89032073168,denis1984,2000jeep,weetabix,199020,daxter,tevion,panther8,h9iymxmc,bigrig,kalambur,tsalagi,12213443,racecar02,jeffrey4,nataxa,bigsam,purgator,acuracl,troutbum,potsmoke,jimmyz,manutd1,nytimes,pureevil,bearss,cool22,dragonage,nodnarb,dbrbyu,4seasons,freude,elric1,werule,hockey14,12758698,corkie,yeahright,blademan,tafkap,clave,liziko,hofner,jeffhardy,nurich,runne,stanisla,lucy1,monk3y,forzaroma,eric99,bonaire,blackwoo,fengshui,1qaz0okm,newmoney,pimpin69,07078,anonymer,laptop1,cherry12,ace111,salsa1,wilbur1,doom12,diablo23,jgtxzbhr,under1,honda01,breadfan,megan2,juancarlos,stratus1,ackbar,love5683,happytim,lambert1,cbljhtyrj,komarov,spam69,nfhtkrf,brownn,sarmat,ifiksr,spike69,hoangen,angelz,economia,tanzen,avogadro,1vampire,spanners,mazdarx,queequeg,oriana,hershil,sulaco,joseph11,8seconds,aquariu,cumberla,heather9,anthony8,burton12,crystal0,maria3,qazwsxc,snow123,notgood,198520,raindog,heehaw,consulta,dasein,miller01,cthulhu1,dukenuke,iubire,baytown,hatebree,198505,sistem,lena12,welcome01,maraca,middleto,sindhu,mitsou,phoenix5,vovan,donaldo,dylandog,domovoy,lauren12,byrjuybnj,123llll,stillers,sanchin,tulpan,smallvill,1mmmmm,patti1,folgers,mike31,colts18,123456rrr,njkmrjz,phoenix0,biene,ironcity,kasperok,password22,fitnes,matthew6,spotligh,bujhm123,tommycat,hazel5,guitar11,145678,vfcmrf,compass1,willee,1barney,jack2000,littleminge,shemp,derrek,xxx12345,littlefuck,spuds1,karolinka,camneely,qwertyu123,142500,brandon00,munson15,falcon3,passssap,z3cn2erv,goahead,baggio10,141592,denali1,37kazoo,copernic,123456789asd,orange88,bravada,rush211,197700,pablo123,uptheass,samsam1,demoman,mattylad10,heydude,mister2,werken,13467985,marantz,a22222,f1f2f3f4,fm12mn12,gerasimova,burrito1,sony1,glenny,baldeagle,rmfidd,fenomen,verbati,forgetme,5element,wer138,chanel1,ooicu812,10293847qp,minicooper,chispa,myturn,deisel,vthrehbq,boredboi4u,filatova,anabe,poiuyt1,barmalei,yyyy1,fourkids,naumenko,bangbros,pornclub,okaykk,euclid90,warrior3,kornet,palevo,patatina,gocart,antanta,jed1054,clock1,111111w,dewars,mankind1,peugeot406,liten,tahira,howlin,naumov,rmracing,corone,cunthole,passit,rock69,jaguarxj,bumsen,197101,sweet2,197010,whitecat,sawadee,money100,yfhrjnbrb,andyboy,9085603566,trace1,fagget,robot1,angel20,6yhn7ujm,specialinsta,kareena,newblood,chingada,boobies2,bugger1,squad51,133andre,call06,ashes1,ilovelucy,success2,kotton,cavalla,philou,deebee,theband,nine09,artefact,196100,kkkkkkk1,nikolay9,onelov,basia,emilyann,sadman,fkrjujkbr,teamomuch,david777,padrino,money21,firdaus,orion3,chevy01,albatro,erdfcv,2legit,sarah7,torock,kevinn,holio,soloy,enron714,starfleet,qwer11,neverman,doctorwh,lucy11,dino12,trinity7,seatleon,o123456,pimpman,1asdfgh,snakebit,chancho,prorok,bleacher,ramire,darkseed,warhorse,michael123,1spanky,1hotdog,34erdfcv,n0th1ng,dimanche,repmvbyf,michaeljackson,login1,icequeen,toshiro,sperme,racer2,veget,birthday26,daniel9,lbvekmrf,charlus,bryan123,wspanic,schreibe,1andonly,dgoins,kewell,apollo12,egypt1,fernie,tiger21,aa123456789,blowj,spandau,bisquit,12345678d,deadmau5,fredie,311420,happyface,samant,gruppa,filmstar,andrew17,bakesale,sexy01,justlook,cbarkley,paul11,bloodred,rideme,birdbath,nfkbcvfy,jaxson,sirius1,kristof,virgos,nimrod1,hardc0re,killerbee,1abcdef,pitcher1,justonce,vlada,dakota99,vespucci,wpass,outside1,puertori,rfvbkf,teamlosi,vgfun2,porol777,empire11,20091989q,jasong,webuivalidat,escrima,lakers08,trigger2,addpass,342500,mongini,dfhtybr,horndogg,palermo1,136900,babyblu,alla98,dasha2010,jkelly,kernow,yfnecz,rockhopper,toeman,tlaloc,silver77,dave01,kevinr,1234567887654321,135642,me2you,8096468644q,remmus,spider7,jamesa,jilly,samba1,drongo,770129ji,supercat,juntas,tema1234,esthe,1234567892000,drew11,qazqaz123,beegees,blome,rattrace,howhigh,tallboy,rufus2,sunny2,sou812,miller12,indiana7,irnbru,patch123,letmeon,welcome5,nabisco,9hotpoin,hpvteb,lovinit,stormin,assmonke,trill,atlanti,money1234,cubsfan,mello1,stars2,ueptkm,agate,dannym88,lover123,wordz,worldnet,julemand,chaser1,s12345678,pissword,cinemax,woodchuc,point1,hotchkis,packers2,bananana,kalender,420666,penguin8,awo8rx3wa8t,hoppie,metlife,ilovemyfamily,weihnachtsbau,pudding1,luckystr,scully1,fatboy1,amizade,dedham,jahbless,blaat,surrende,****er,1panties,bigasses,ghjuhfvbcn,asshole123,dfktyrb,likeme,nickers,plastik,hektor,deeman,muchacha,cerebro,santana5,testdrive,dracula1,canalc,l1750sq,savannah1,murena,1inside,pokemon00,1iiiiiii,jordan20,sexual1,mailliw,calipso,014702580369,1zzzzzz,1jjjjjj,break1,15253545,yomama1,katinka,kevin11,1ffffff,martijn,sslazio,daniel5,porno2,nosmas,leolion,jscript,15975312,pundai,kelli1,kkkddd,obafgkm,marmaris,lilmama,london123,rfhfnt,elgordo,talk87,daniel7,thesims3,444111,bishkek,afrika2002,toby22,1speedy,daishi,2children,afroman,qqqqwwww,oldskool,hawai,v55555,syndicat,pukimak,fanatik,tiger5,parker01,bri5kev6,timexx,wartburg,love55,ecosse,yelena03,madinina,highway1,uhfdbwfgf,karuna,buhjvfybz,wallie,46and2,khalif,europ,qaz123wsx456,bobbybob,wolfone,falloutboy,manning18,scuba10,schnuff,ihateyou1,lindam,sara123,popcor,fallengun,divine1,montblanc,qwerty8,rooney10,roadrage,bertie1,latinus,lexusis,rhfvfnjhcr,opelgt,hitme,agatka,1yamaha,dmfxhkju,imaloser,michell1,sb211st,silver22,lockedup,andrew9,monica01,sassycat,dsobwick,tinroof,ctrhtnyj,bultaco,rhfcyjzhcr,aaaassss,14ss88,joanne1,momanddad,ahjkjdf,yelhsa,zipdrive,telescop,500600,1sexsex,facial1,motaro,511647,stoner1,temujin,elephant1,greatman,honey69,kociak,ukqmwhj6,altezza,cumquat,zippos,kontiki,123max,altec1,bibigon,tontos,qazsew,nopasaran,militar,supratt,oglala,kobayash,agathe,yawetag,dogs1,cfiekmrf,megan123,jamesdea,porosenok,tiger23,berger1,hello11,seemann,stunner1,walker2,imissu,jabari,minfd,lollol12,hjvfy,1-oct,stjohns,2278124q,123456789qwer,alex1983,glowworm,chicho,mallards,bluedevil,explorer1,543211,casita,1time,lachesis,alex1982,airborn1,dubesor,changa,lizzie1,captaink,socool,bidule,march23,1861brr,k.ljxrf,watchout,fotze,1brian,keksa2,aaaa1122,matrim,providian,privado,dreame,merry1,aregdone,davidt,nounour,twenty2,play2win,artcast2,zontik,552255,shit1,sluggy,552861,dr8350,brooze,alpha69,thunder6,kamelia2011,caleb123,mmxxmm,jamesh,lfybkjd,125267,125000,124536,bliss1,dddsss,indonesi,bob69,123888,tgkbxfgy,gerar,themack,hijodeputa,good4now,ddd123,clk430,kalash,tolkien1,132forever,blackb,whatis,s1s2s3s4,lolkin09,yamahar,48n25rcc,djtiesto,111222333444555,bigbull,blade55,coolbree,kelse,ichwill,yamaha12,sakic,bebeto,katoom,donke,sahar,wahine,645202,god666,berni,starwood,june15,sonoio,time123,llbean,deadsoul,lazarev,cdtnf,ksyusha,madarchod,technik,jamesy,4speed,tenorsax,legshow,yoshi1,chrisbl,44e3ebda,trafalga,heather7,serafima,favorite4,havefun1,wolve,55555r,james13,nosredna,bodean,jlettier,borracho,mickael,marinus,brutu,sweet666,kiborg,rollrock,jackson6,macross1,ousooner,9085084232,takeme,123qwaszx,firedept,vfrfhjd,jackfros,123456789000,briane,cookie11,baby22,bobby18,gromova,systemofadown,martin01,silver01,pimaou,darthmaul,hijinx,commo,chech,skyman,sunse,2vrd6,vladimirovna,uthvfybz,nicole01,kreker,bobo1,v123456789,erxtgb,meetoo,drakcap,vfvf12,misiek1,butane,network2,flyers99,riogrand,jennyk,e12345,spinne,avalon11,lovejone,studen,maint,porsche2,qwerty100,chamberl,bluedog1,sungam,just4u,andrew23,summer22,ludic,musiclover,aguil,beardog1,libertin,pippo1,joselit,patito,bigberth,digler,sydnee,jockstra,poopo,jas4an,nastya123,profil,fuesse,default1,titan2,mendoz,kpcofgs,anamika,brillo021,bomberman,guitar69,latching,69pussy,blues2,phelge,ninja123,m7n56xo,qwertasd,alex1976,cunningh,estrela,gladbach,marillion,mike2000,258046,bypop,muffinman,kd5396b,zeratul,djkxbwf,john77,sigma2,1linda,selur,reppep,quartz1,teen1,freeclus,spook1,kudos4ever,clitring,sexiness,blumpkin,macbook,tileman,centra,escaflowne,pentable,shant,grappa,zverev,1albert,lommerse,coffee11,777123,polkilo,muppet1,alex74,lkjhgfdsazx,olesica,april14,ba25547,souths,jasmi,arashi,smile2,2401pedro,mybabe,alex111,quintain,pimp1,tdeir8b2,makenna,122333444455555,%e2%82%ac,tootsie1,pass111,zaqxsw123,gkfdfybt,cnfnbcnbrf,usermane,iloveyou12,hard69,osasuna,firegod,arvind,babochka,kiss123,cookie123,julie123,kamakazi,dylan2,223355,tanguy,nbhtqa,tigger13,tubby1,makavel,asdflkj,sambo1,mononoke,mickeys,gayguy,win123,green33,wcrfxtvgbjy,bigsmall,1newlife,clove,babyfac,bigwaves,mama1970,shockwav,1friday,bassey,yarddog,codered1,victory7,bigrick,kracker,gulfstre,chris200,sunbanna,bertuzzi,begemotik,kuolema,pondus,destinee,123456789zz,abiodun,flopsy,amadeusptfcor,geronim,yggdrasi,contex,daniel6,suck1,adonis1,moorea,el345612,f22raptor,moviebuf,raunchy,6043dkf,zxcvbnm123456789,eric11,deadmoin,ratiug,nosliw,fannies,danno,888889,blank1,mikey2,gullit,thor99,mamiya,ollieb,thoth,dagger1,websolutionssu,bonker,prive,1346798520,03038,q1234q,mommy2,contax,zhipo,gwendoli,gothic1,1234562000,lovedick,gibso,digital2,space199,b26354,987654123,golive,serious1,pivkoo,better1,824358553,794613258,nata1980,logout,fishpond,buttss,squidly,good4me,redsox19,jhonny,zse45rdx,matrixxx,honey12,ramina,213546879,motzart,fall99,newspape,killit,gimpy,photowiz,olesja,thebus,marco123,147852963,bedbug,147369258,hellbound,gjgjxrf,123987456,lovehurt,five55,hammer01,1234554321a,alina2011,peppino,ang238,questor,112358132,alina1994,alina1998,money77,bobjones,aigerim,cressida,madalena,420smoke,tinchair,raven13,mooser,mauric,lovebu,adidas69,krypton1,1111112,loveline,divin,voshod,michaelm,cocotte,gbkbuhbv,76689295,kellyj,rhonda1,sweetu70,steamforums,geeque,nothere,124c41,quixotic,steam181,1169900,rfcgthcrbq,rfvbkm,sexstuff,1231230,djctvm,rockstar1,fulhamfc,bhecbr,rfntyf,quiksilv,56836803,jedimaster,pangit,gfhjkm777,tocool,1237654,stella12,55378008,19216811,potte,fender12,mortalkombat,ball1,nudegirl,palace22,rattrap,debeers,lickpussy,jimmy6,not4u2c,wert12,bigjuggs,sadomaso,1357924,312mas,laser123,arminia,branford,coastie,mrmojo,19801982,scott11,banaan123,ingres,300zxtt,hooters6,sweeties,19821983,19831985,19833891,sinnfein,welcome4,winner69,killerman,tachyon,tigre1,nymets1,kangol,martinet,sooty1,19921993,789qwe,harsingh,1597535,thecount,phantom3,36985214,lukas123,117711,pakistan1,madmax11,willow01,19932916,fucker12,flhrci,opelagila,theword,ashley24,tigger3,crazyj,rapide,deadfish,allana,31359092,sasha1993,sanders2,discman,zaq!2wsx,boilerma,mickey69,jamesg,babybo,jackson9,orion7,alina2010,indien,breeze1,atease,warspite,bazongaz,1celtic,asguard,mygal,fitzgera,1secret,duke33,cyklone,dipascuc,potapov,1escobar2,c0l0rad0,kki177hk,1little,macondo,victoriya,peter7,red666,winston6,kl?benhavn,muneca,jackme,jennan,happylife,am4h39d8nh,bodybuil,201980,dutchie,biggame,lapo4ka,rauchen,black10,flaquit,water12,31021364,command2,lainth88,mazdamx5,typhon,colin123,rcfhlfc,qwaszx11,g0away,ramir,diesirae,hacked1,cessna1,woodfish,enigma2,pqnr67w5,odgez8j3,grisou,hiheels,5gtgiaxm,2580258,ohotnik,transits,quackers,serjik,makenzie,mdmgatew,bryana,superman12,melly,lokit,thegod,slickone,fun4all,netpass,penhorse,1cooper,nsync,asdasd22,otherside,honeydog,herbie1,chiphi,proghouse,l0nd0n,shagg,select1,frost1996,casper123,countr,magichat,greatzyo,jyothi,3bears,thefly,nikkita,fgjcnjk,nitros,hornys,san123,lightspe,maslova,kimber1,newyork2,spammm,mikejone,pumpk1n,bruiser1,bacons,prelude9,boodie,dragon4,kenneth2,love98,power5,yodude,pumba,thinline,blue30,sexxybj,2dumb2live,matt21,forsale,1carolin,innova,ilikeporn,rbgtkjd,a1s2d3f,wu9942,ruffus,blackboo,qwerty999,draco1,marcelin,hideki,gendalf,trevon,saraha,cartmen,yjhbkmcr,time2go,fanclub,ladder1,chinni,6942987,united99,lindac,quadra,paolit,mainstre,beano002,lincoln7,bellend,anomie,8520456,bangalor,goodstuff,chernov,stepashka,gulla,mike007,frasse,harley03,omnislash,8538622,maryjan,sasha2011,gineok,8807031,hornier,gopinath,princesit,bdr529,godown,bosslady,hakaone,1qwe2,madman1,joshua11,lovegame,bayamon,jedi01,stupid12,sport123,aaa666,tony44,collect1,charliem,chimaira,cx18ka,trrim777,chuckd,thedream,redsox99,goodmorning,delta88,iloveyou11,newlife2,figvam,chicago3,jasonk,12qwer,9875321,lestat1,satcom,conditio,capri50,sayaka,9933162,trunks1,chinga,snooch,alexand1,findus,poekie,cfdbyf,kevind,mike1969,fire13,leftie,bigtuna,chinnu,silence1,celos1,blackdra,alex24,gfgfif,2boobs,happy8,enolagay,sataniv1993,turner1,dylans,peugeo,sasha1994,hoppel,conno,moonshot,santa234,meister1,008800,hanako,tree123,qweras,gfitymrf,reggie31,august29,supert,joshua10,akademia,gbljhfc,zorro123,nathalia,redsox12,hfpdjl,mishmash,nokiae51,nyyankees,tu190022,strongbo,none1,not4u2no,katie2,popart,harlequi,santan,michal1,1therock,screwu,csyekmrf,olemiss1,tyrese,hoople,sunshin1,cucina,starbase,topshelf,fostex,california1,castle1,symantec,pippolo,babare,turntabl,1angela,moo123,ipvteb,gogolf,alex88,cycle1,maxie1,phase2,selhurst,furnitur,samfox,fromvermine,shaq34,gators96,captain2,delonge,tomatoe,bisous,zxcvbnma,glacius,pineapple1,cannelle,ganibal,mko09ijn,paraklast1974,hobbes12,petty43,artema,junior8,mylover,1234567890d,fatal1ty,prostreet,peruan,10020,nadya,caution1,marocas,chanel5,summer08,metal123,111lox,scrapy,thatguy,eddie666,washingto,yannis,minnesota_hp,lucky4,playboy6,naumova,azzurro,patat,dale33,pa55wd,speedster,zemanova,saraht,newto,tony22,qscesz,arkady,1oliver,death6,vkfwx046,antiflag,stangs,jzf7qf2e,brianp,fozzy,cody123,startrek1,yoda123,murciela,trabajo,lvbnhbtdf,canario,fliper,adroit,henry5,goducks,papirus,alskdj,soccer6,88mike,gogetter,tanelorn,donking,marky1,leedsu,badmofo,al1916,wetdog,akmaral,pallet,april24,killer00,nesterova,rugby123,coffee12,browseui,ralliart,paigow,calgary1,armyman,vtldtltd,frodo2,frxtgb,iambigal,benno,jaytee,2hot4you,askar,bigtee,brentwoo,palladin,eddie2,al1916w,horosho,entrada,ilovetits,venture1,dragon19,jayde,chuvak,jamesl,fzr600,brandon8,vjqvbh,snowbal,snatch1,bg6njokf,pudder,karolin,candoo,pfuflrf,satchel1,manteca,khongbiet,critter1,partridg,skyclad,bigdon,ginger69,brave1,anthony4,spinnake,chinadol,passout,cochino,nipples1,15058,lopesk,sixflags,lloo999,parkhead,breakdance,cia123,fidodido,yuitre12,fooey,artem1995,gayathri,medin,nondriversig,l12345,bravo7,happy13,kazuya,camster,alex1998,luckyy,zipcode,dizzle,boating1,opusone,newpassw,movies23,kamikazi,zapato,bart316,cowboys0,corsair1,kingshit,hotdog12,rolyat,h200svrm,qwerty4,boofer,rhtyltkm,chris999,vaz21074,simferopol,pitboss,love3,britania,tanyshka,brause,123qwerty123,abeille,moscow1,ilkaev,manut,process1,inetcfg,dragon05,fortknox,castill,rynner,mrmike,koalas,jeebus,stockpor,longman,juanpabl,caiman,roleplay,jeremi,26058,prodojo,002200,magical1,black5,bvlgari,doogie1,cbhtqa,mahina,a1s2d3f4g5h6,jblpro,usmc01,bismilah,guitar01,april9,santana1,1234aa,monkey14,sorokin,evan1,doohan,animalsex,pfqxtyjr,dimitry,catchme,chello,silverch,glock45,dogleg,litespee,nirvana9,peyton18,alydar,warhamer,iluvme,sig229,minotavr,lobzik,jack23,bushwack,onlin,football123,joshua5,federov,winter2,bigmax,fufnfrhbcnb,hfpldfnhb,1dakota,f56307,chipmonk,4nick8,praline,vbhjh123,king11,22tango,gemini12,street1,77879,doodlebu,homyak,165432,chuluthu,trixi,karlito,salom,reisen,cdtnkzxjr,pookie11,tremendo,shazaam,welcome0,00000ty,peewee51,pizzle,gilead,bydand,sarvar,upskirt,legends1,freeway1,teenfuck,ranger9,darkfire,dfymrf,hunt0802,justme1,buffy1ma,1harry,671fsa75yt,burrfoot,budster,pa437tu,jimmyp,alina2006,malacon,charlize,elway1,free12,summer02,gadina,manara,gomer1,1cassie,sanja,kisulya,money3,pujols,ford50,midiland,turga,orange6,demetriu,freakboy,orosie1,radio123,open12,vfufpby,mustek,chris33,animes,meiling,nthtvjr,jasmine9,gfdkjd,oligarh,marimar,chicago9,.kzirf,bugssgub,samuraix,jackie01,pimpjuic,macdad,cagiva,vernost,willyboy,fynjyjdf,tabby1,privet123,torres9,retype,blueroom,raven11,q12we3,alex1989,bringiton,ridered,kareltje,ow8jtcs8t,ciccia,goniners,countryb,24688642,covingto,24861793,beyblade,vikin,badboyz,wlafiga,walstib,mirand,needajob,chloes,balaton,kbpfdtnf,freyja,bond9007,gabriel12,stormbri,hollage,love4eve,fenomeno,darknite,dragstar,kyle123,milfhunter,ma123123123,samia,ghislain,enrique1,ferien12,xjy6721,natalie2,reglisse,wilson2,wesker,rosebud7,amazon1,robertr,roykeane,xtcnth,mamatata,crazyc,mikie,savanah,blowjob69,jackie2,forty1,1coffee,fhbyjxrf,bubbah,goteam,hackedit,risky1,logoff,h397pnvr,buck13,robert23,bronc,st123st,godflesh,pornog,iamking,cisco69,septiembr,dale38,zhongguo,tibbar,panther9,buffa1,bigjohn1,mypuppy,vehvfycr,april16,shippo,fire1234,green15,q123123,gungadin,steveg,olivier1,chinaski,magnoli,faithy,storm12,toadfrog,paul99,78791,august20,automati,squirtle,cheezy,positano,burbon,nunya,llebpmac,kimmi,turtle2,alan123,prokuror,violin1,durex,pussygal,visionar,trick1,chicken6,29024,plowboy,rfybreks,imbue,sasha13,wagner1,vitalogy,cfymrf,thepro,26028,gorbunov,dvdcom,letmein5,duder,fastfun,pronin,libra1,conner1,harley20,stinker1,20068,20038,amitech,syoung,dugway,18068,welcome7,jimmypag,anastaci,kafka1,pfhfnecnhf,catsss,campus100,shamal,nacho1,fire12,vikings2,brasil1,rangerover,mohamma,peresvet,14058,cocomo,aliona,14038,qwaser,vikes,cbkmdf,skyblue1,ou81234,goodlove,dfkmltvfh,108888,roamer,pinky2,static1,zxcv4321,barmen,rock22,shelby2,morgans,1junior,pasword1,logjam,fifty5,nhfrnjhbcn,chaddy,philli,nemesis2,ingenier,djkrjd,ranger3,aikman8,knothead,daddy69,love007,vsythb,ford350,tiger00,renrut,owen11,energy12,march14,alena123,robert19,carisma,orange22,murphy11,podarok,prozak,kfgeirf,wolf13,lydia1,shazza,parasha,akimov,tobbie,pilote,heather4,baster,leones,gznfxjr,megama,987654321g,bullgod,boxster1,minkey,wombats,vergil,colegiata,lincol,smoothe,pride1,carwash1,latrell,bowling3,fylhtq123,pickwick,eider,bubblebox,bunnies1,loquit,slipper1,nutsac,purina,xtutdfhf,plokiju,1qazxs,uhjpysq,zxcvbasdfg,enjoy1,1pumpkin,phantom7,mama22,swordsma,wonderbr,dogdays,milker,u23456,silvan,dfkthbr,slagelse,yeahman,twothree,boston11,wolf100,dannyg,troll1,fynjy123,ghbcnfd,bftest,ballsdeep,bobbyorr,alphasig,cccdemo,fire123,norwest,claire2,august10,lth1108,problemas,sapito,alex06,1rusty,maccom,goirish1,ohyes,bxdumb,nabila,boobear1,rabbit69,princip,alexsander,travail,chantal1,dogggy,greenpea,diablo69,alex2009,bergen09,petticoa,classe,ceilidh,vlad2011,kamakiri,lucidity,qaz321,chileno,cexfhf,99ranger,mcitra,estoppel,volvos60,carter80,webpass,temp12,touareg,fcgbhby,bubba8,sunitha,200190ru,bitch2,shadow23,iluvit,nicole0,ruben1,nikki69,butttt,shocker1,souschef,lopotok01,kantot,corsano,cfnfyf,riverat,makalu,swapna,all4u9,cdtnkfy,ntktgepbr,ronaldo99,thomasj,bmw540i,chrisw,boomba,open321,z1x2c3v4b5n6m7,gaviota,iceman44,frosya,chris100,chris24,cosette,clearwat,micael,boogyman,pussy9,camus1,chumpy,heccrbq,konoplya,chester8,scooter5,ghjgfufylf,giotto,koolkat,zero000,bonita1,ckflrbq,j1964,mandog,18n28n24a,renob,head1,shergar,ringo123,tanita,sex4free,johnny12,halberd,reddevils,biolog,dillinge,fatb0y,c00per,hyperlit,wallace2,spears1,vitamine,buheirf,sloboda,alkash,mooman,marion1,arsenal7,sunder,nokia5610,edifier,pippone,fyfnjkmtdbx,fujimo,pepsi12,kulikova,bolat,duetto,daimon,maddog01,timoshka,ezmoney,desdemon,chesters,aiden,hugues,patrick5,aikman08,robert4,roenick,nyranger,writer1,36169544,foxmulder,118801,kutter,shashank,jamjar,118811,119955,aspirina,dinkus,1sailor,nalgene,19891959,snarf,allie1,cracky,resipsa,45678912,kemerovo,19841989,netware1,alhimik,19801984,nicole123,19761977,51501984,malaka1,montella,peachfuz,jethro1,cypress1,henkie,holdon,esmith,55443322,1friend,quique,bandicoot,statistika,great123,death13,ucht36,master4,67899876,bobsmith,nikko1,jr1234,hillary1,78978978,rsturbo,lzlzdfcz,bloodlust,shadow00,skagen,bambina,yummies,88887777,91328378,matthew4,itdoes,98256518,102938475,alina2002,123123789,fubared,dannys,123456321,nikifor,suck69,newmexico,scubaman,rhbcnb,fifnfy,puffdadd,159357852,dtheyxbr,theman22,212009164,prohor,shirle,nji90okm,newmedia,goose5,roma1995,letssee,iceman11,aksana,wirenut,pimpdady,1212312121,tamplier,pelican1,domodedovo,1928374655,fiction6,duckpond,ybrecz,thwack,onetwo34,gunsmith,murphydo,fallout1,spectre1,jabberwo,jgjesq,turbo6,bobo12,redryder,blackpus,elena1971,danilova,antoin,bobo1234,bobob,bobbobbo,dean1,222222a,jesusgod,matt23,musical1,darkmage,loppol,werrew,josepha,rebel12,toshka,gadfly,hawkwood,alina12,dnomyar,sexaddict,dangit,cool23,yocrack,archimed,farouk,nhfkzkz,lindalou,111zzzzz,ghjatccjh,wethepeople,m123456789,wowsers,kbkbxrf,bulldog5,m_roesel,sissinit,yamoon6,123ewqasd,dangel,miruvor79,kaytee,falcon7,bandit11,dotnet,dannii,arsenal9,miatamx5,1trouble,strip4me,dogpile,sexyred1,rjdfktdf,google10,shortman,crystal7,awesome123,cowdog,haruka,birthday28,jitter,diabolik,boomer12,dknight,bluewate,hockey123,crm0624,blueboys,willy123,jumpup,google2,cobra777,llabesab,vicelord,hopper1,gerryber,remmah,j10e5d4,qqqqqqw,agusti,fre_ak8yj,nahlik,redrobin,scott3,epson1,dumpy,bundao,aniolek,hola123,jergens,itsasecret,maxsam,bluelight,mountai1,bongwater,1london,pepper14,freeuse,dereks,qweqw,fordgt40,rfhfdfy,raider12,hunnybun,compac,splicer,megamon,tuffgong,gymnast1,butter11,modaddy,wapbbs_1,dandelio,soccer77,ghjnbdjcnjzybt,123xyi2,fishead,x002tp00,whodaman,555aaa,oussama,brunodog,technici,pmtgjnbl,qcxdw8ry,schweden,redsox3,throbber,collecto,japan10,dbm123dm,hellhoun,tech1,deadzone,kahlan,wolf123,dethklok,xzsawq,bigguy1,cybrthc,chandle,buck01,qq123123,secreta,williams1,c32649135,delta12,flash33,123joker,spacejam,polopo,holycrap,daman1,tummybed,financia,nusrat,euroline,magicone,jimkirk,ameritec,daniel26,sevenn,topazz,kingpins,dima1991,macdog,spencer5,oi812,geoffre,music11,baffle,123569,usagi,cassiope,polla,lilcrowe,thecakeisalie,vbhjndjhtw,vthokies,oldmans,sophie01,ghoster,penny2,129834,locutus1,meesha,magik,jerry69,daddysgirl,irondesk,andrey12,jasmine123,vepsrfyn,likesdick,1accord,jetboat,grafix,tomuch,showit,protozoa,mosias98,taburetka,blaze420,esenin,anal69,zhv84kv,puissant,charles0,aishwarya,babylon6,bitter1,lenina,raleigh1,lechat,access01,kamilka,fynjy,sparkplu,daisy3112,choppe,zootsuit,1234567j,rubyrose,gorilla9,nightshade,alternativa,cghfdjxybr,snuggles1,10121v,vova1992,leonardo1,dave2,matthewd,vfhfnbr,1986mets,nobull,bacall,mexican1,juanjo,mafia1,boomer22,soylent,edwards1,jordan10,blackwid,alex86,gemini13,lunar2,dctvcjcfnm,malaki,plugger,eagles11,snafu2,1shelly,cintaku,hannah22,tbird1,maks5843,irish88,homer22,amarok,fktrcfylhjdf,lincoln2,acess,gre69kik,need4speed,hightech,core2duo,blunt1,ublhjgjybrf,dragon33,1autopas,autopas1,wwww1,15935746,daniel20,2500aa,massim,1ggggggg,96ford,hardcor1,cobra5,blackdragon,vovan_lt,orochimaru,hjlbntkb,qwertyuiop12,tallen,paradoks,frozenfish,ghjuhfvvbcn,gerri1,nuggett,camilit,doright,trans1,serena1,catch2,bkmyeh,fireston,afhvfwtdn,purple3,figure8,fuckya,scamp1,laranja,ontheoutside,louis123,yellow7,moonwalk,mercury2,tolkein,raide,amenra,a13579,dranreb,5150vh,harish,tracksta,sexking,ozzmosis,katiee,alomar,matrix19,headroom,jahlove,ringding,apollo8,132546,132613,12345672000,saretta,135798,136666,thomas7,136913,onetwothree,hockey33,calida,nefertit,bitwise,tailhook,boop4,kfgecbr,bujhmbujhm,metal69,thedark,meteoro,felicia1,house12,tinuviel,istina,vaz2105,pimp13,toolfan,nina1,tuesday2,maxmotives,lgkp500,locksley,treech,darling1,kurama,aminka,ramin,redhed,dazzler,jager1,stpiliot,cardman,rfvtym,cheeser,14314314,paramoun,samcat,plumpy,stiffie,vsajyjr,panatha,qqq777,car12345,098poi,asdzx,keegan1,furelise,kalifornia,vbhjckfd,beast123,zcfvfzkexifz,harry5,1birdie,96328i,escola,extra330,henry12,gfhfyjqz,14u2nv,max1234,templar1,1dave,02588520,catrin,pangolin,marhaba,latin1,amorcito,dave22,escape1,advance1,yasuhiro,grepw,meetme,orange01,ernes,erdna,zsergn,nautica1,justinb,soundwav,miasma,greg78,nadine1,sexmad,lovebaby,promo1,excel1,babys,dragonma,camry1,sonnenschein,farooq,wazzkaprivet,magal,katinas,elvis99,redsox24,rooney1,chiefy,peggys,aliev,pilsung,mudhen,dontdoit,dennis12,supercal,energia,ballsout,funone,claudiu,brown2,amoco,dabl1125,philos,gjdtkbntkm,servette,13571113,whizzer,nollie,13467982,upiter,12string,bluejay1,silkie,william4,kosta1,143333,connor12,sustanon,06068,corporat,ssnake,laurita,king10,tahoes,arsenal123,sapato,charless,jeanmarc,levent,algerie,marine21,jettas,winsome,dctvgbplf,1701ab,xxxp455w0rd5,lllllll1,ooooooo1,monalis,koufax32,anastasya,debugger,sarita2,jason69,ufkxjyjr,gjlcnfdf,1jerry,daniel10,balinor,sexkitten,death2,qwertasdfgzxcvb,s9te949f,vegeta1,sysman,maxxam,dimabilan,mooose,ilovetit,june23,illest,doesit,mamou,abby12,longjump,transalp,moderato,littleguy,magritte,dilnoza,hawaiiguy,winbig,nemiroff,kokaine,admira,myemail,dream2,browneyes,destiny7,dragonss,suckme1,asa123,andranik,suckem,fleshbot,dandie,timmys,scitra,timdog,hasbeen,guesss,smellyfe,arachne,deutschl,harley88,birthday27,nobody1,papasmur,home1,jonass,bunia3,epatb1,embalm,vfvekmrf,apacer,12345656,estreet,weihnachtsbaum,mrwhite,admin12,kristie1,kelebek,yoda69,socken,tima123,bayern1,fktrcfylth,tamiya,99strenght,andy01,denis2011,19delta,stokecit,aotearoa,stalker2,nicnac,conrad1,popey,agusta,bowl36,1bigfish,mossyoak,1stunner,getinnow,jessejames,gkfnjy,drako,1nissan,egor123,hotness,1hawaii,zxc123456,cantstop,1peaches,madlen,west1234,jeter1,markis,judit,attack1,artemi,silver69,153246,crazy2,green9,yoshimi,1vette,chief123,jasper2,1sierra,twentyon,drstrang,aspirant,yannic,jenna123,bongtoke,slurpy,1sugar,civic97,rusty21,shineon,james19,anna12345,wonderwoman,1kevin,karol1,kanabis,wert21,fktif6115,evil1,kakaha,54gv768,826248s,tyrone1,1winston,sugar2,falcon01,adelya,mopar440,zasxcd,leecher,kinkysex,mercede1,travka,11234567,rebon,geekboy".split(","),
45637english_wikipedia:"the,of,and,in,was,is,for,as,on,with,by,he,at,from,his,an,were,are,which,doc,https,also,or,has,had,first,one,their,its,after,new,who,they,two,her,she,been,other,when,time,during,there,into,school,more,may,years,over,only,year,most,would,world,city,some,where,between,later,three,state,such,then,national,used,made,known,under,many,university,united,while,part,season,team,these,american,than,film,second,born,south,became,states,war,through,being,including,both,before,north,high,however,people,family,early,history,album,area,them,series,against,until,since,district,county,name,work,life,group,music,following,number,company,several,four,called,played,released,career,league,game,government,house,each,based,day,same,won,use,station,club,international,town,located,population,general,college,east,found,age,march,end,september,began,home,public,church,line,june,river,member,system,place,century,band,july,york,january,october,song,august,best,former,british,party,named,held,village,show,local,november,took,service,december,built,another,major,within,along,members,five,single,due,although,small,old,left,final,large,include,building,served,president,received,games,death,february,main,third,set,children,own,order,species,park,law,air,published,road,died,book,men,women,army,often,according,education,central,country,division,english,top,included,development,french,community,among,water,play,side,list,times,near,late,form,original,different,center,power,led,students,german,moved,court,six,land,council,island,u.s.,record,million,research,art,established,award,street,military,television,given,region,support,western,production,non,political,point,cup,period,business,title,started,various,election,using,england,role,produced,become,program,works,field,total,office,class,written,association,radio,union,level,championship,director,few,force,created,department,founded,services,married,though,per,n't,site,open,act,short,society,version,royal,present,northern,worked,professional,full,returned,joined,story,france,european,currently,language,social,california,india,days,design,st.,further,round,australia,wrote,san,project,control,southern,railway,board,popular,continued,free,battle,considered,video,common,position,living,half,playing,recorded,red,post,described,average,records,special,modern,appeared,announced,areas,rock,release,elected,others,example,term,opened,similar,formed,route,census,current,schools,originally,lake,developed,race,himself,forces,addition,information,upon,province,match,event,songs,result,events,win,eastern,track,lead,teams,science,human,construction,minister,germany,awards,available,throughout,training,style,body,museum,australian,health,seven,signed,chief,eventually,appointed,sea,centre,debut,tour,points,media,light,range,character,across,features,families,largest,indian,network,less,performance,players,refer,europe,sold,festival,usually,taken,despite,designed,committee,process,return,official,episode,institute,stage,followed,performed,japanese,personal,thus,arts,space,low,months,includes,china,study,middle,magazine,leading,japan,groups,aircraft,featured,federal,civil,rights,model,coach,canadian,books,remained,eight,type,independent,completed,capital,academy,instead,kingdom,organization,countries,studies,competition,sports,size,above,section,finished,gold,involved,reported,management,systems,industry,directed,market,fourth,movement,technology,bank,ground,campaign,base,lower,sent,rather,added,provided,coast,grand,historic,valley,conference,bridge,winning,approximately,films,chinese,awarded,degree,russian,shows,native,female,replaced,municipality,square,studio,medical,data,african,successful,mid,bay,attack,previous,operations,spanish,theatre,student,republic,beginning,provide,ship,primary,owned,writing,tournament,culture,introduced,texas,related,natural,parts,governor,reached,ireland,units,senior,decided,italian,whose,higher,africa,standard,income,professor,placed,regional,los,buildings,championships,active,novel,energy,generally,interest,via,economic,previously,stated,itself,channel,below,operation,leader,traditional,trade,structure,limited,runs,prior,regular,famous,saint,navy,foreign,listed,artist,catholic,airport,results,parliament,collection,unit,officer,goal,attended,command,staff,commission,lived,location,plays,commercial,places,foundation,significant,older,medal,self,scored,companies,highway,activities,programs,wide,musical,notable,library,numerous,paris,towards,individual,allowed,plant,property,annual,contract,whom,highest,initially,required,earlier,assembly,artists,rural,seat,practice,defeated,ended,soviet,length,spent,manager,press,associated,author,issues,additional,characters,lord,zealand,policy,engine,township,noted,historical,complete,financial,religious,mission,contains,nine,recent,represented,pennsylvania,administration,opening,secretary,lines,report,executive,youth,closed,theory,writer,italy,angeles,appearance,feature,queen,launched,legal,terms,entered,issue,edition,singer,greek,majority,background,source,anti,cultural,complex,changes,recording,stadium,islands,operated,particularly,basketball,month,uses,port,castle,mostly,names,fort,selected,increased,status,earth,subsequently,pacific,cover,variety,certain,goals,remains,upper,congress,becoming,studied,irish,nature,particular,loss,caused,chart,dr.,forced,create,era,retired,material,review,rate,singles,referred,larger,individuals,shown,provides,products,speed,democratic,poland,parish,olympics,cities,themselves,temple,wing,genus,households,serving,cost,wales,stations,passed,supported,view,cases,forms,actor,male,matches,males,stars,tracks,females,administrative,median,effect,biography,train,engineering,camp,offered,chairman,houses,mainly,19th,surface,therefore,nearly,score,ancient,subject,prime,seasons,claimed,experience,specific,jewish,failed,overall,believed,plot,troops,greater,spain,consists,broadcast,heavy,increase,raised,separate,campus,1980s,appears,presented,lies,composed,recently,influence,fifth,nations,creek,references,elections,britain,double,cast,meaning,earned,carried,producer,latter,housing,brothers,attempt,article,response,border,remaining,nearby,direct,ships,value,workers,politician,academic,label,1970s,commander,rule,fellow,residents,authority,editor,transport,dutch,projects,responsible,covered,territory,flight,races,defense,tower,emperor,albums,facilities,daily,stories,assistant,managed,primarily,quality,function,proposed,distribution,conditions,prize,journal,code,vice,newspaper,corps,highly,constructed,mayor,critical,secondary,corporation,rugby,regiment,ohio,appearances,serve,allow,nation,multiple,discovered,directly,scene,levels,growth,elements,acquired,1990s,officers,physical,20th,latin,host,jersey,graduated,arrived,issued,literature,metal,estate,vote,immediately,quickly,asian,competed,extended,produce,urban,1960s,promoted,contemporary,global,formerly,appear,industrial,types,opera,ministry,soldiers,commonly,mass,formation,smaller,typically,drama,shortly,density,senate,effects,iran,polish,prominent,naval,settlement,divided,basis,republican,languages,distance,treatment,continue,product,mile,sources,footballer,format,clubs,leadership,initial,offers,operating,avenue,officially,columbia,grade,squadron,fleet,percent,farm,leaders,agreement,likely,equipment,website,mount,grew,method,transferred,intended,renamed,iron,asia,reserve,capacity,politics,widely,activity,advanced,relations,scottish,dedicated,crew,founder,episodes,lack,amount,build,efforts,concept,follows,ordered,leaves,positive,economy,entertainment,affairs,memorial,ability,illinois,communities,color,text,railroad,scientific,focus,comedy,serves,exchange,environment,cars,direction,organized,firm,description,agency,analysis,purpose,destroyed,reception,planned,revealed,infantry,architecture,growing,featuring,household,candidate,removed,situated,models,knowledge,solo,technical,organizations,assigned,conducted,participated,largely,purchased,register,gained,combined,headquarters,adopted,potential,protection,scale,approach,spread,independence,mountains,titled,geography,applied,safety,mixed,accepted,continues,captured,rail,defeat,principal,recognized,lieutenant,mentioned,semi,owner,joint,liberal,actress,traffic,creation,basic,notes,unique,supreme,declared,simply,plants,sales,massachusetts,designated,parties,jazz,compared,becomes,resources,titles,concert,learning,remain,teaching,versions,content,alongside,revolution,sons,block,premier,impact,champions,districts,generation,estimated,volume,image,sites,account,roles,sport,quarter,providing,zone,yard,scoring,classes,presence,performances,representatives,hosted,split,taught,origin,olympic,claims,critics,facility,occurred,suffered,municipal,damage,defined,resulted,respectively,expanded,platform,draft,opposition,expected,educational,ontario,climate,reports,atlantic,surrounding,performing,reduced,ranked,allows,birth,nominated,younger,newly,kong,positions,theater,philadelphia,heritage,finals,disease,sixth,laws,reviews,constitution,tradition,swedish,theme,fiction,rome,medicine,trains,resulting,existing,deputy,environmental,labour,classical,develop,fans,granted,receive,alternative,begins,nuclear,fame,buried,connected,identified,palace,falls,letters,combat,sciences,effort,villages,inspired,regions,towns,conservative,chosen,animals,labor,attacks,materials,yards,steel,representative,orchestra,peak,entitled,officials,returning,reference,northwest,imperial,convention,examples,ocean,publication,painting,subsequent,frequently,religion,brigade,fully,sides,acts,cemetery,relatively,oldest,suggested,succeeded,achieved,application,programme,cells,votes,promotion,graduate,armed,supply,flying,communist,figures,literary,netherlands,korea,worldwide,citizens,1950s,faculty,draw,stock,seats,occupied,methods,unknown,articles,claim,holds,authorities,audience,sweden,interview,obtained,covers,settled,transfer,marked,allowing,funding,challenge,southeast,unlike,crown,rise,portion,transportation,sector,phase,properties,edge,tropical,standards,institutions,philosophy,legislative,hills,brand,fund,conflict,unable,founding,refused,attempts,metres,permanent,starring,applications,creating,effective,aired,extensive,employed,enemy,expansion,billboard,rank,battalion,multi,vehicle,fought,alliance,category,perform,federation,poetry,bronze,bands,entry,vehicles,bureau,maximum,billion,trees,intelligence,greatest,screen,refers,commissioned,gallery,injury,confirmed,setting,treaty,adult,americans,broadcasting,supporting,pilot,mobile,writers,programming,existence,squad,minnesota,copies,korean,provincial,sets,defence,offices,agricultural,internal,core,northeast,retirement,factory,actions,prevent,communications,ending,weekly,containing,functions,attempted,interior,weight,bowl,recognition,incorporated,increasing,ultimately,documentary,derived,attacked,lyrics,mexican,external,churches,centuries,metropolitan,selling,opposed,personnel,mill,visited,presidential,roads,pieces,norwegian,controlled,18th,rear,influenced,wrestling,weapons,launch,composer,locations,developing,circuit,specifically,studios,shared,canal,wisconsin,publishing,approved,domestic,consisted,determined,comic,establishment,exhibition,southwest,fuel,electronic,cape,converted,educated,melbourne,hits,wins,producing,norway,slightly,occur,surname,identity,represent,constituency,funds,proved,links,structures,athletic,birds,contest,users,poet,institution,display,receiving,rare,contained,guns,motion,piano,temperature,publications,passenger,contributed,toward,cathedral,inhabitants,architect,exist,athletics,muslim,courses,abandoned,signal,successfully,disambiguation,tennessee,dynasty,heavily,maryland,jews,representing,budget,weather,missouri,introduction,faced,pair,chapel,reform,height,vietnam,occurs,motor,cambridge,lands,focused,sought,patients,shape,invasion,chemical,importance,communication,selection,regarding,homes,voivodeship,maintained,borough,failure,aged,passing,agriculture,oregon,teachers,flow,philippines,trail,seventh,portuguese,resistance,reaching,negative,fashion,scheduled,downtown,universities,trained,skills,scenes,views,notably,typical,incident,candidates,engines,decades,composition,commune,chain,inc.,austria,sale,values,employees,chamber,regarded,winners,registered,task,investment,colonial,swiss,user,entirely,flag,stores,closely,entrance,laid,journalist,coal,equal,causes,turkish,quebec,techniques,promote,junction,easily,dates,kentucky,singapore,residence,violence,advance,survey,humans,expressed,passes,streets,distinguished,qualified,folk,establish,egypt,artillery,visual,improved,actual,finishing,medium,protein,switzerland,productions,operate,poverty,neighborhood,organisation,consisting,consecutive,sections,partnership,extension,reaction,factor,costs,bodies,device,ethnic,racial,flat,objects,chapter,improve,musicians,courts,controversy,membership,merged,wars,expedition,interests,arab,comics,gain,describes,mining,bachelor,crisis,joining,decade,1930s,distributed,habitat,routes,arena,cycle,divisions,briefly,vocals,directors,degrees,object,recordings,installed,adjacent,demand,voted,causing,businesses,ruled,grounds,starred,drawn,opposite,stands,formal,operates,persons,counties,compete,wave,israeli,ncaa,resigned,brief,greece,combination,demographics,historian,contain,commonwealth,musician,collected,argued,louisiana,session,cabinet,parliamentary,electoral,loan,profit,regularly,conservation,islamic,purchase,17th,charts,residential,earliest,designs,paintings,survived,moth,items,goods,grey,anniversary,criticism,images,discovery,observed,underground,progress,additionally,participate,thousands,reduce,elementary,owners,stating,iraq,resolution,capture,tank,rooms,hollywood,finance,queensland,reign,maintain,iowa,landing,broad,outstanding,circle,path,manufacturing,assistance,sequence,gmina,crossing,leads,universal,shaped,kings,attached,medieval,ages,metro,colony,affected,scholars,oklahoma,coastal,soundtrack,painted,attend,definition,meanwhile,purposes,trophy,require,marketing,popularity,cable,mathematics,mississippi,represents,scheme,appeal,distinct,factors,acid,subjects,roughly,terminal,economics,senator,diocese,prix,contrast,argentina,czech,wings,relief,stages,duties,16th,novels,accused,whilst,equivalent,charged,measure,documents,couples,request,danish,defensive,guide,devices,statistics,credited,tries,passengers,allied,frame,puerto,peninsula,concluded,instruments,wounded,differences,associate,forests,afterwards,replace,requirements,aviation,solution,offensive,ownership,inner,legislation,hungarian,contributions,actors,translated,denmark,steam,depending,aspects,assumed,injured,severe,admitted,determine,shore,technique,arrival,measures,translation,debuted,delivered,returns,rejected,separated,visitors,damaged,storage,accompanied,markets,industries,losses,gulf,charter,strategy,corporate,socialist,somewhat,significantly,physics,mounted,satellite,experienced,constant,relative,pattern,restored,belgium,connecticut,partners,harvard,retained,networks,protected,mode,artistic,parallel,collaboration,debate,involving,journey,linked,salt,authors,components,context,occupation,requires,occasionally,policies,tamil,ottoman,revolutionary,hungary,poem,versus,gardens,amongst,audio,makeup,frequency,meters,orthodox,continuing,suggests,legislature,coalition,guitarist,eighth,classification,practices,soil,tokyo,instance,limit,coverage,considerable,ranking,colleges,cavalry,centers,daughters,twin,equipped,broadway,narrow,hosts,rates,domain,boundary,arranged,12th,whereas,brazilian,forming,rating,strategic,competitions,trading,covering,baltimore,commissioner,infrastructure,origins,replacement,praised,disc,collections,expression,ukraine,driven,edited,austrian,solar,ensure,premiered,successor,wooden,operational,hispanic,concerns,rapid,prisoners,childhood,meets,influential,tunnel,employment,tribe,qualifying,adapted,temporary,celebrated,appearing,increasingly,depression,adults,cinema,entering,laboratory,script,flows,romania,accounts,fictional,pittsburgh,achieve,monastery,franchise,formally,tools,newspapers,revival,sponsored,processes,vienna,springs,missions,classified,13th,annually,branches,lakes,gender,manner,advertising,normally,maintenance,adding,characteristics,integrated,decline,modified,strongly,critic,victims,malaysia,arkansas,nazi,restoration,powered,monument,hundreds,depth,15th,controversial,admiral,criticized,brick,honorary,initiative,output,visiting,birmingham,progressive,existed,carbon,1920s,credits,colour,rising,hence,defeating,superior,filmed,listing,column,surrounded,orleans,principles,territories,struck,participation,indonesia,movements,index,commerce,conduct,constitutional,spiritual,ambassador,vocal,completion,edinburgh,residing,tourism,finland,bears,medals,resident,themes,visible,indigenous,involvement,basin,electrical,ukrainian,concerts,boats,styles,processing,rival,drawing,vessels,experimental,declined,touring,supporters,compilation,coaching,cited,dated,roots,string,explained,transit,traditionally,poems,minimum,representation,14th,releases,effectively,architectural,triple,indicated,greatly,elevation,clinical,printed,10th,proposal,peaked,producers,romanized,rapidly,stream,innings,meetings,counter,householder,honour,lasted,agencies,document,exists,surviving,experiences,honors,landscape,hurricane,harbor,panel,competing,profile,vessel,farmers,lists,revenue,exception,customers,11th,participants,wildlife,utah,bible,gradually,preserved,replacing,symphony,begun,longest,siege,provinces,mechanical,genre,transmission,agents,executed,videos,benefits,funded,rated,instrumental,ninth,similarly,dominated,destruction,passage,technologies,thereafter,outer,facing,affiliated,opportunities,instrument,governments,scholar,evolution,channels,shares,sessions,widespread,occasions,engineers,scientists,signing,battery,competitive,alleged,eliminated,supplies,judges,hampshire,regime,portrayed,penalty,taiwan,denied,submarine,scholarship,substantial,transition,victorian,http,nevertheless,filed,supports,continental,tribes,ratio,doubles,useful,honours,blocks,principle,retail,departure,ranks,patrol,yorkshire,vancouver,inter,extent,afghanistan,strip,railways,component,organ,symbol,categories,encouraged,abroad,civilian,periods,traveled,writes,struggle,immediate,recommended,adaptation,egyptian,graduating,assault,drums,nomination,historically,voting,allies,detailed,achievement,percentage,arabic,assist,frequent,toured,apply,and/or,intersection,maine,touchdown,throne,produces,contribution,emerged,obtain,archbishop,seek,researchers,remainder,populations,clan,finnish,overseas,fifa,licensed,chemistry,festivals,mediterranean,injuries,animated,seeking,publisher,volumes,limits,venue,jerusalem,generated,trials,islam,youngest,ruling,glasgow,germans,songwriter,persian,municipalities,donated,viewed,belgian,cooperation,posted,tech,dual,volunteer,settlers,commanded,claiming,approval,delhi,usage,terminus,partly,electricity,locally,editions,premiere,absence,belief,traditions,statue,indicate,manor,stable,attributed,possession,managing,viewers,chile,overview,seed,regulations,essential,minority,cargo,segment,endemic,forum,deaths,monthly,playoffs,erected,practical,machines,suburb,relation,mrs.,descent,indoor,continuous,characterized,solutions,caribbean,rebuilt,serbian,summary,contested,psychology,pitch,attending,muhammad,tenure,drivers,diameter,assets,venture,punk,airlines,concentration,athletes,volunteers,pages,mines,influences,sculpture,protest,ferry,behalf,drafted,apparent,furthermore,ranging,romanian,democracy,lanka,significance,linear,d.c.,certified,voters,recovered,tours,demolished,boundaries,assisted,identify,grades,elsewhere,mechanism,1940s,reportedly,aimed,conversion,suspended,photography,departments,beijing,locomotives,publicly,dispute,magazines,resort,conventional,platforms,internationally,capita,settlements,dramatic,derby,establishing,involves,statistical,implementation,immigrants,exposed,diverse,layer,vast,ceased,connections,belonged,interstate,uefa,organised,abuse,deployed,cattle,partially,filming,mainstream,reduction,automatic,rarely,subsidiary,decides,merger,comprehensive,displayed,amendment,guinea,exclusively,manhattan,concerning,commons,radical,serbia,baptist,buses,initiated,portrait,harbour,choir,citizen,sole,unsuccessful,manufactured,enforcement,connecting,increases,patterns,sacred,muslims,clothing,hindu,unincorporated,sentenced,advisory,tanks,campaigns,fled,repeated,remote,rebellion,implemented,texts,fitted,tribute,writings,sufficient,ministers,21st,devoted,jurisdiction,coaches,interpretation,pole,businessman,peru,sporting,prices,cuba,relocated,opponent,arrangement,elite,manufacturer,responded,suitable,distinction,calendar,dominant,tourist,earning,prefecture,ties,preparation,anglo,pursue,worship,archaeological,chancellor,bangladesh,scores,traded,lowest,horror,outdoor,biology,commented,specialized,loop,arriving,farming,housed,historians,'the,patent,pupils,christianity,opponents,athens,northwestern,maps,promoting,reveals,flights,exclusive,lions,norfolk,hebrew,extensively,eldest,shops,acquisition,virtual,renowned,margin,ongoing,essentially,iranian,alternate,sailed,reporting,conclusion,originated,temperatures,exposure,secured,landed,rifle,framework,identical,martial,focuses,topics,ballet,fighters,belonging,wealthy,negotiations,evolved,bases,oriented,acres,democrat,heights,restricted,vary,graduation,aftermath,chess,illness,participating,vertical,collective,immigration,demonstrated,leaf,completing,organic,missile,leeds,eligible,grammar,confederate,improvement,congressional,wealth,cincinnati,spaces,indicates,corresponding,reaches,repair,isolated,taxes,congregation,ratings,leagues,diplomatic,submitted,winds,awareness,photographs,maritime,nigeria,accessible,animation,restaurants,philippine,inaugural,dismissed,armenian,illustrated,reservoir,speakers,programmes,resource,genetic,interviews,camps,regulation,computers,preferred,travelled,comparison,distinctive,recreation,requested,southeastern,dependent,brisbane,breeding,playoff,expand,bonus,gauge,departed,qualification,inspiration,shipping,slaves,variations,shield,theories,munich,recognised,emphasis,favour,variable,seeds,undergraduate,territorial,intellectual,qualify,mini,banned,pointed,democrats,assessment,judicial,examination,attempting,objective,partial,characteristic,hardware,pradesh,execution,ottawa,metre,drum,exhibitions,withdrew,attendance,phrase,journalism,logo,measured,error,christians,trio,protestant,theology,respective,atmosphere,buddhist,substitute,curriculum,fundamental,outbreak,rabbi,intermediate,designation,globe,liberation,simultaneously,diseases,experiments,locomotive,difficulties,mainland,nepal,relegated,contributing,database,developments,veteran,carries,ranges,instruction,lodge,protests,obama,newcastle,experiment,physician,describing,challenges,corruption,delaware,adventures,ensemble,succession,renaissance,tenth,altitude,receives,approached,crosses,syria,croatia,warsaw,professionals,improvements,worn,airline,compound,permitted,preservation,reducing,printing,scientist,activist,comprises,sized,societies,enters,ruler,gospel,earthquake,extend,autonomous,croatian,serial,decorated,relevant,ideal,grows,grass,tier,towers,wider,welfare,columns,alumni,descendants,interface,reserves,banking,colonies,manufacturers,magnetic,closure,pitched,vocalist,preserve,enrolled,cancelled,equation,2000s,nickname,bulgaria,heroes,exile,mathematical,demands,input,structural,tube,stem,approaches,argentine,axis,manuscript,inherited,depicted,targets,visits,veterans,regard,removal,efficiency,organisations,concepts,lebanon,manga,petersburg,rally,supplied,amounts,yale,tournaments,broadcasts,signals,pilots,azerbaijan,architects,enzyme,literacy,declaration,placing,batting,incumbent,bulgarian,consistent,poll,defended,landmark,southwestern,raid,resignation,travels,casualties,prestigious,namely,aims,recipient,warfare,readers,collapse,coached,controls,volleyball,coup,lesser,verse,pairs,exhibited,proteins,molecular,abilities,integration,consist,aspect,advocate,administered,governing,hospitals,commenced,coins,lords,variation,resumed,canton,artificial,elevated,palm,difficulty,civic,efficient,northeastern,inducted,radiation,affiliate,boards,stakes,byzantine,consumption,freight,interaction,oblast,numbered,seminary,contracts,extinct,predecessor,bearing,cultures,functional,neighboring,revised,cylinder,grants,narrative,reforms,athlete,tales,reflect,presidency,compositions,specialist,cricketer,founders,sequel,widow,disbanded,associations,backed,thereby,pitcher,commanding,boulevard,singers,crops,militia,reviewed,centres,waves,consequently,fortress,tributary,portions,bombing,excellence,nest,payment,mars,plaza,unity,victories,scotia,farms,nominations,variant,attacking,suspension,installation,graphics,estates,comments,acoustic,destination,venues,surrender,retreat,libraries,quarterback,customs,berkeley,collaborated,gathered,syndrome,dialogue,recruited,shanghai,neighbouring,psychological,saudi,moderate,exhibit,innovation,depot,binding,brunswick,situations,certificate,actively,shakespeare,editorial,presentation,ports,relay,nationalist,methodist,archives,experts,maintains,collegiate,bishops,maintaining,temporarily,embassy,essex,wellington,connects,reformed,bengal,recalled,inches,doctrine,deemed,legendary,reconstruction,statements,palestinian,meter,achievements,riders,interchange,spots,auto,accurate,chorus,dissolved,missionary,thai,operators,e.g.,generations,failing,delayed,cork,nashville,perceived,venezuela,cult,emerging,tomb,abolished,documented,gaining,canyon,episcopal,stored,assists,compiled,kerala,kilometers,mosque,grammy,theorem,unions,segments,glacier,arrives,theatrical,circulation,conferences,chapters,displays,circular,authored,conductor,fewer,dimensional,nationwide,liga,yugoslavia,peer,vietnamese,fellowship,armies,regardless,relating,dynamic,politicians,mixture,serie,somerset,imprisoned,posts,beliefs,beta,layout,independently,electronics,provisions,fastest,logic,headquartered,creates,challenged,beaten,appeals,plains,protocol,graphic,accommodate,iraqi,midfielder,span,commentary,freestyle,reflected,palestine,lighting,burial,virtually,backing,prague,tribal,heir,identification,prototype,criteria,dame,arch,tissue,footage,extending,procedures,predominantly,updated,rhythm,preliminary,cafe,disorder,prevented,suburbs,discontinued,retiring,oral,followers,extends,massacre,journalists,conquest,larvae,pronounced,behaviour,diversity,sustained,addressed,geographic,restrictions,voiced,milwaukee,dialect,quoted,grid,nationally,nearest,roster,twentieth,separation,indies,manages,citing,intervention,guidance,severely,migration,artwork,focusing,rivals,trustees,varied,enabled,committees,centered,skating,slavery,cardinals,forcing,tasks,auckland,youtube,argues,colored,advisor,mumbai,requiring,theological,registration,refugees,nineteenth,survivors,runners,colleagues,priests,contribute,variants,workshop,concentrated,creator,lectures,temples,exploration,requirement,interactive,navigation,companion,perth,allegedly,releasing,citizenship,observation,stationed,ph.d.,sheep,breed,discovers,encourage,kilometres,journals,performers,isle,saskatchewan,hybrid,hotels,lancashire,dubbed,airfield,anchor,suburban,theoretical,sussex,anglican,stockholm,permanently,upcoming,privately,receiver,optical,highways,congo,colours,aggregate,authorized,repeatedly,varies,fluid,innovative,transformed,praise,convoy,demanded,discography,attraction,export,audiences,ordained,enlisted,occasional,westminster,syrian,heavyweight,bosnia,consultant,eventual,improving,aires,wickets,epic,reactions,scandal,i.e.,discrimination,buenos,patron,investors,conjunction,testament,construct,encountered,celebrity,expanding,georgian,brands,retain,underwent,algorithm,foods,provision,orbit,transformation,associates,tactical,compact,varieties,stability,refuge,gathering,moreover,manila,configuration,gameplay,discipline,entity,comprising,composers,skill,monitoring,ruins,museums,sustainable,aerial,altered,codes,voyage,friedrich,conflicts,storyline,travelling,conducting,merit,indicating,referendum,currency,encounter,particles,automobile,workshops,acclaimed,inhabited,doctorate,cuban,phenomenon,dome,enrollment,tobacco,governance,trend,equally,manufacture,hydrogen,grande,compensation,download,pianist,grain,shifted,neutral,evaluation,define,cycling,seized,array,relatives,motors,firms,varying,automatically,restore,nicknamed,findings,governed,investigate,manitoba,administrator,vital,integral,indonesian,confusion,publishers,enable,geographical,inland,naming,civilians,reconnaissance,indianapolis,lecturer,deer,tourists,exterior,rhode,bassist,symbols,scope,ammunition,yuan,poets,punjab,nursing,cent,developers,estimates,presbyterian,nasa,holdings,generate,renewed,computing,cyprus,arabia,duration,compounds,gastropod,permit,valid,touchdowns,facade,interactions,mineral,practiced,allegations,consequence,goalkeeper,baronet,copyright,uprising,carved,targeted,competitors,mentions,sanctuary,fees,pursued,tampa,chronicle,capabilities,specified,specimens,toll,accounting,limestone,staged,upgraded,philosophical,streams,guild,revolt,rainfall,supporter,princeton,terrain,hometown,probability,assembled,paulo,surrey,voltage,developer,destroyer,floors,lineup,curve,prevention,potentially,onwards,trips,imposed,hosting,striking,strict,admission,apartments,solely,utility,proceeded,observations,euro,incidents,vinyl,profession,haven,distant,expelled,rivalry,runway,torpedo,zones,shrine,dimensions,investigations,lithuania,idaho,pursuit,copenhagen,considerably,locality,wireless,decrease,genes,thermal,deposits,hindi,habitats,withdrawn,biblical,monuments,casting,plateau,thesis,managers,flooding,assassination,acknowledged,interim,inscription,guided,pastor,finale,insects,transported,activists,marshal,intensity,airing,cardiff,proposals,lifestyle,prey,herald,capitol,aboriginal,measuring,lasting,interpreted,occurring,desired,drawings,healthcare,panels,elimination,oslo,ghana,blog,sabha,intent,superintendent,governors,bankruptcy,p.m.,equity,disk,layers,slovenia,prussia,quartet,mechanics,graduates,politically,monks,screenplay,nato,absorbed,topped,petition,bold,morocco,exhibits,canterbury,publish,rankings,crater,dominican,enhanced,planes,lutheran,governmental,joins,collecting,brussels,unified,streak,strategies,flagship,surfaces,oval,archive,etymology,imprisonment,instructor,noting,remix,opposing,servant,rotation,width,trans,maker,synthesis,excess,tactics,snail,ltd.,lighthouse,sequences,cornwall,plantation,mythology,performs,foundations,populated,horizontal,speedway,activated,performer,diving,conceived,edmonton,subtropical,environments,prompted,semifinals,caps,bulk,treasury,recreational,telegraph,continent,portraits,relegation,catholics,graph,velocity,rulers,endangered,secular,observer,learns,inquiry,idol,dictionary,certification,estimate,cluster,armenia,observatory,revived,nadu,consumers,hypothesis,manuscripts,contents,arguments,editing,trails,arctic,essays,belfast,acquire,promotional,undertaken,corridor,proceedings,antarctic,millennium,labels,delegates,vegetation,acclaim,directing,substance,outcome,diploma,philosopher,malta,albanian,vicinity,degc,legends,regiments,consent,terrorist,scattered,presidents,gravity,orientation,deployment,duchy,refuses,estonia,crowned,separately,renovation,rises,wilderness,objectives,agreements,empress,slopes,inclusion,equality,decree,ballot,criticised,rochester,recurring,struggled,disabled,henri,poles,prussian,convert,bacteria,poorly,sudan,geological,wyoming,consistently,minimal,withdrawal,interviewed,proximity,repairs,initiatives,pakistani,republicans,propaganda,viii,abstract,commercially,availability,mechanisms,naples,discussions,underlying,lens,proclaimed,advised,spelling,auxiliary,attract,lithuanian,editors,o'brien,accordance,measurement,novelist,ussr,formats,councils,contestants,indie,facebook,parishes,barrier,battalions,sponsor,consulting,terrorism,implement,uganda,crucial,unclear,notion,distinguish,collector,attractions,filipino,ecology,investments,capability,renovated,iceland,albania,accredited,scouts,armor,sculptor,cognitive,errors,gaming,condemned,successive,consolidated,baroque,entries,regulatory,reserved,treasurer,variables,arose,technological,rounded,provider,rhine,agrees,accuracy,genera,decreased,frankfurt,ecuador,edges,particle,rendered,calculated,careers,faction,rifles,americas,gaelic,portsmouth,resides,merchants,fiscal,premises,coin,draws,presenter,acceptance,ceremonies,pollution,consensus,membrane,brigadier,nonetheless,genres,supervision,predicted,magnitude,finite,differ,ancestry,vale,delegation,removing,proceeds,placement,emigrated,siblings,molecules,payments,considers,demonstration,proportion,newer,valve,achieving,confederation,continuously,luxury,notre,introducing,coordinates,charitable,squadrons,disorders,geometry,winnipeg,ulster,loans,longtime,receptor,preceding,belgrade,mandate,wrestler,neighbourhood,factories,buddhism,imported,sectors,protagonist,steep,elaborate,prohibited,artifacts,prizes,pupil,cooperative,sovereign,subspecies,carriers,allmusic,nationals,settings,autobiography,neighborhoods,analog,facilitate,voluntary,jointly,newfoundland,organizing,raids,exercises,nobel,machinery,baltic,crop,granite,dense,websites,mandatory,seeks,surrendered,anthology,comedian,bombs,slot,synopsis,critically,arcade,marking,equations,halls,indo,inaugurated,embarked,speeds,clause,invention,premiership,likewise,presenting,demonstrate,designers,organize,examined,km/h,bavaria,troop,referee,detection,zurich,prairie,rapper,wingspan,eurovision,luxembourg,slovakia,inception,disputed,mammals,entrepreneur,makers,evangelical,yield,clergy,trademark,defunct,allocated,depicting,volcanic,batted,conquered,sculptures,providers,reflects,armoured,locals,walt,herzegovina,contracted,entities,sponsorship,prominence,flowing,ethiopia,marketed,corporations,withdraw,carnegie,induced,investigated,portfolio,flowering,opinions,viewing,classroom,donations,bounded,perception,leicester,fruits,charleston,academics,statute,complaints,smallest,deceased,petroleum,resolved,commanders,algebra,southampton,modes,cultivation,transmitter,spelled,obtaining,sizes,acre,pageant,bats,abbreviated,correspondence,barracks,feast,tackles,raja,derives,geology,disputes,translations,counted,constantinople,seating,macedonia,preventing,accommodation,homeland,explored,invaded,provisional,transform,sphere,unsuccessfully,missionaries,conservatives,highlights,traces,organisms,openly,dancers,fossils,absent,monarchy,combining,lanes,stint,dynamics,chains,missiles,screening,module,tribune,generating,miners,nottingham,seoul,unofficial,owing,linking,rehabilitation,citation,louisville,mollusk,depicts,differential,zimbabwe,kosovo,recommendations,responses,pottery,scorer,aided,exceptions,dialects,telecommunications,defines,elderly,lunar,coupled,flown,25th,espn,formula_1,bordered,fragments,guidelines,gymnasium,valued,complexity,papal,presumably,maternal,challenging,reunited,advancing,comprised,uncertain,favorable,twelfth,correspondent,nobility,livestock,expressway,chilean,tide,researcher,emissions,profits,lengths,accompanying,witnessed,itunes,drainage,slope,reinforced,feminist,sanskrit,develops,physicians,outlets,isbn,coordinator,averaged,termed,occupy,diagnosed,yearly,humanitarian,prospect,spacecraft,stems,enacted,linux,ancestors,karnataka,constitute,immigrant,thriller,ecclesiastical,generals,celebrations,enhance,heating,advocated,evident,advances,bombardment,watershed,shuttle,wicket,twitter,adds,branded,teaches,schemes,pension,advocacy,conservatory,cairo,varsity,freshwater,providence,seemingly,shells,cuisine,specially,peaks,intensive,publishes,trilogy,skilled,nacional,unemployment,destinations,parameters,verses,trafficking,determination,infinite,savings,alignment,linguistic,countryside,dissolution,measurements,advantages,licence,subfamily,highlands,modest,regent,algeria,crest,teachings,knockout,brewery,combine,conventions,descended,chassis,primitive,fiji,explicitly,cumberland,uruguay,laboratories,bypass,elect,informal,preceded,holocaust,tackle,minneapolis,quantity,securities,console,doctoral,religions,commissioners,expertise,unveiled,precise,diplomat,standings,infant,disciplines,sicily,endorsed,systematic,charted,armored,mild,lateral,townships,hurling,prolific,invested,wartime,compatible,galleries,moist,battlefield,decoration,convent,tubes,terrestrial,nominee,requests,delegate,leased,dubai,polar,applying,addresses,munster,sings,commercials,teamed,dances,eleventh,midland,cedar,flee,sandstone,snails,inspection,divide,asset,themed,comparable,paramount,dairy,archaeology,intact,institutes,rectangular,instances,phases,reflecting,substantially,applies,vacant,lacked,copa,coloured,encounters,sponsors,encoded,possess,revenues,ucla,chaired,a.m.,enabling,playwright,stoke,sociology,tibetan,frames,motto,financing,illustrations,gibraltar,chateau,bolivia,transmitted,enclosed,persuaded,urged,folded,suffolk,regulated,bros.,submarines,myth,oriental,malaysian,effectiveness,narrowly,acute,sunk,replied,utilized,tasmania,consortium,quantities,gains,parkway,enlarged,sided,employers,adequate,accordingly,assumption,ballad,mascot,distances,peaking,saxony,projected,affiliation,limitations,metals,guatemala,scots,theaters,kindergarten,verb,employer,differs,discharge,controller,seasonal,marching,guru,campuses,avoided,vatican,maori,excessive,chartered,modifications,caves,monetary,sacramento,mixing,institutional,celebrities,irrigation,shapes,broadcaster,anthem,attributes,demolition,offshore,specification,surveys,yugoslav,contributor,auditorium,lebanese,capturing,airports,classrooms,chennai,paths,tendency,determining,lacking,upgrade,sailors,detected,kingdoms,sovereignty,freely,decorative,momentum,scholarly,georges,gandhi,speculation,transactions,undertook,interact,similarities,cove,teammate,constituted,painters,tends,madagascar,partnerships,afghan,personalities,attained,rebounds,masses,synagogue,reopened,asylum,embedded,imaging,catalogue,defenders,taxonomy,fiber,afterward,appealed,communists,lisbon,rica,judaism,adviser,batsman,ecological,commands,lgbt,cooling,accessed,wards,shiva,employs,thirds,scenic,worcester,tallest,contestant,humanities,economist,textile,constituencies,motorway,tram,percussion,cloth,leisure,1880s,baden,flags,resemble,riots,coined,sitcom,composite,implies,daytime,tanzania,penalties,optional,competitor,excluded,steering,reversed,autonomy,reviewer,breakthrough,professionally,damages,pomeranian,deputies,valleys,ventures,highlighted,electorate,mapping,shortened,executives,tertiary,specimen,launching,bibliography,sank,pursuing,binary,descendant,marched,natives,ideology,turks,adolf,archdiocese,tribunal,exceptional,nigerian,preference,fails,loading,comeback,vacuum,favored,alter,remnants,consecrated,spectators,trends,patriarch,feedback,paved,sentences,councillor,astronomy,advocates,broader,commentator,commissions,identifying,revealing,theatres,incomplete,enables,constituent,reformation,tract,haiti,atmospheric,screened,explosive,czechoslovakia,acids,symbolic,subdivision,liberals,incorporate,challenger,erie,filmmaker,laps,kazakhstan,organizational,evolutionary,chemicals,dedication,riverside,fauna,moths,maharashtra,annexed,gen.,resembles,underwater,garnered,timeline,remake,suited,educator,hectares,automotive,feared,latvia,finalist,narrator,portable,airways,plaque,designing,villagers,licensing,flank,statues,struggles,deutsche,migrated,cellular,jacksonville,wimbledon,defining,highlight,preparatory,planets,cologne,employ,frequencies,detachment,readily,libya,resign,halt,helicopters,reef,landmarks,collaborative,irregular,retaining,helsinki,folklore,weakened,viscount,interred,professors,memorable,mega,repertoire,rowing,dorsal,albeit,progressed,operative,coronation,liner,telugu,domains,philharmonic,detect,bengali,synthetic,tensions,atlas,dramatically,paralympics,xbox,shire,kiev,lengthy,sued,notorious,seas,screenwriter,transfers,aquatic,pioneers,unesco,radius,abundant,tunnels,syndicated,inventor,accreditation,janeiro,exeter,ceremonial,omaha,cadet,predators,resided,prose,slavic,precision,abbot,deity,engaging,cambodia,estonian,compliance,demonstrations,protesters,reactor,commodore,successes,chronicles,mare,extant,listings,minerals,tonnes,parody,cultivated,traders,pioneering,supplement,slovak,preparations,collision,partnered,vocational,atoms,malayalam,welcomed,documentation,curved,functioning,presently,formations,incorporates,nazis,botanical,nucleus,ethical,greeks,metric,automated,whereby,stance,europeans,duet,disability,purchasing,email,telescope,displaced,sodium,comparative,processor,inning,precipitation,aesthetic,import,coordination,feud,alternatively,mobility,tibet,regained,succeeding,hierarchy,apostolic,catalog,reproduction,inscriptions,vicar,clusters,posthumously,rican,loosely,additions,photographic,nowadays,selective,derivative,keyboards,guides,collectively,affecting,combines,operas,networking,decisive,terminated,continuity,finishes,ancestor,consul,heated,simulation,leipzig,incorporating,georgetown,formula_2,circa,forestry,portrayal,councillors,advancement,complained,forewings,confined,transaction,definitions,reduces,televised,1890s,rapids,phenomena,belarus,alps,landscapes,quarterly,specifications,commemorate,continuation,isolation,antenna,downstream,patents,ensuing,tended,saga,lifelong,columnist,labeled,gymnastics,papua,anticipated,demise,encompasses,madras,antarctica,interval,icon,rams,midlands,ingredients,priory,strengthen,rouge,explicit,gaza,aging,securing,anthropology,listeners,adaptations,underway,vista,malay,fortified,lightweight,violations,concerto,financed,jesuit,observers,trustee,descriptions,nordic,resistant,opted,accepts,prohibition,andhra,inflation,negro,wholly,imagery,spur,instructed,gloucester,cycles,middlesex,destroyers,statewide,evacuated,hyderabad,peasants,mice,shipyard,coordinate,pitching,colombian,exploring,numbering,compression,countess,hiatus,exceed,raced,archipelago,traits,soils,o'connor,vowel,android,facto,angola,amino,holders,logistics,circuits,emergence,kuwait,partition,emeritus,outcomes,submission,promotes,barack,negotiated,loaned,stripped,50th,excavations,treatments,fierce,participant,exports,decommissioned,cameo,remarked,residences,fuselage,mound,undergo,quarry,node,midwest,specializing,occupies,etc.,showcase,molecule,offs,modules,salon,exposition,revision,peers,positioned,hunters,competes,algorithms,reside,zagreb,calcium,uranium,silicon,airs,counterpart,outlet,collectors,sufficiently,canberra,inmates,anatomy,ensuring,curves,aviv,firearms,basque,volcano,thrust,sheikh,extensions,installations,aluminum,darker,sacked,emphasized,aligned,asserted,pseudonym,spanning,decorations,eighteenth,orbital,spatial,subdivided,notation,decay,macedonian,amended,declining,cyclist,feat,unusually,commuter,birthplace,latitude,activation,overhead,30th,finalists,whites,encyclopedia,tenor,qatar,survives,complement,concentrations,uncommon,astronomical,bangalore,pius,genome,memoir,recruit,prosecutor,modification,paired,container,basilica,arlington,displacement,germanic,mongolia,proportional,debates,matched,calcutta,rows,tehran,aerospace,prevalent,arise,lowland,24th,spokesman,supervised,advertisements,clash,tunes,revelation,wanderers,quarterfinals,fisheries,steadily,memoirs,pastoral,renewable,confluence,acquiring,strips,slogan,upstream,scouting,analyst,practitioners,turbine,strengthened,heavier,prehistoric,plural,excluding,isles,persecution,turin,rotating,villain,hemisphere,unaware,arabs,corpus,relied,singular,unanimous,schooling,passive,angles,dominance,instituted,aria,outskirts,balanced,beginnings,financially,structured,parachute,viewer,attitudes,subjected,escapes,derbyshire,erosion,addressing,styled,declaring,originating,colts,adjusted,stained,occurrence,fortifications,baghdad,nitrogen,localities,yemen,galway,debris,lodz,victorious,pharmaceutical,substances,unnamed,dwelling,atop,developmental,activism,voter,refugee,forested,relates,overlooking,genocide,kannada,insufficient,oversaw,partisan,dioxide,recipients,factions,mortality,capped,expeditions,receptors,reorganized,prominently,atom,flooded,flute,orchestral,scripts,mathematician,airplay,detached,rebuilding,dwarf,brotherhood,salvation,expressions,arabian,cameroon,poetic,recruiting,bundesliga,inserted,scrapped,disabilities,evacuation,pasha,undefeated,crafts,rituals,aluminium,norm,pools,submerged,occupying,pathway,exams,prosperity,wrestlers,promotions,basal,permits,nationalism,trim,merge,gazette,tributaries,transcription,caste,porto,emerge,modeled,adjoining,counterparts,paraguay,redevelopment,renewal,unreleased,equilibrium,similarity,minorities,soviets,comprise,nodes,tasked,unrelated,expired,johan,precursor,examinations,electrons,socialism,exiled,admiralty,floods,wigan,nonprofit,lacks,brigades,screens,repaired,hanover,fascist,labs,osaka,delays,judged,statutory,colt,col.,offspring,solving,bred,assisting,retains,somalia,grouped,corresponds,tunisia,chaplain,eminent,chord,22nd,spans,viral,innovations,possessions,mikhail,kolkata,icelandic,implications,introduces,racism,workforce,alto,compulsory,admits,censorship,onset,reluctant,inferior,iconic,progression,liability,turnout,satellites,behavioral,coordinated,exploitation,posterior,averaging,fringe,krakow,mountainous,greenwich,para,plantations,reinforcements,offerings,famed,intervals,constraints,individually,nutrition,1870s,taxation,threshold,tomatoes,fungi,contractor,ethiopian,apprentice,diabetes,wool,gujarat,honduras,norse,bucharest,23rd,arguably,accompany,prone,teammates,perennial,vacancy,polytechnic,deficit,okinawa,functionality,reminiscent,tolerance,transferring,myanmar,concludes,neighbours,hydraulic,economically,slower,plots,charities,synod,investor,catholicism,identifies,bronx,interpretations,adverse,judiciary,hereditary,nominal,sensor,symmetry,cubic,triangular,tenants,divisional,outreach,representations,passages,undergoing,cartridge,testified,exceeded,impacts,limiting,railroads,defeats,regain,rendering,humid,retreated,reliability,governorate,antwerp,infamous,implied,packaging,lahore,trades,billed,extinction,ecole,rejoined,recognizes,projection,qualifications,stripes,forts,socially,lexington,accurately,sexuality,westward,wikipedia,pilgrimage,abolition,choral,stuttgart,nests,expressing,strikeouts,assessed,monasteries,reconstructed,humorous,marxist,fertile,consort,urdu,patronage,peruvian,devised,lyric,baba,nassau,communism,extraction,popularly,markings,inability,litigation,accounted,processed,emirates,tempo,cadets,eponymous,contests,broadly,oxide,courtyard,frigate,directory,apex,outline,regency,chiefly,patrols,secretariat,cliffs,residency,privy,armament,australians,dorset,geometric,genetics,scholarships,fundraising,flats,demographic,multimedia,captained,documentaries,updates,canvas,blockade,guerrilla,songwriting,administrators,intake,drought,implementing,fraction,cannes,refusal,inscribed,meditation,announcing,exported,ballots,formula_3,curator,basel,arches,flour,subordinate,confrontation,gravel,simplified,berkshire,patriotic,tuition,employing,servers,castile,posting,combinations,discharged,miniature,mutations,constellation,incarnation,ideals,necessity,granting,ancestral,crowds,pioneered,mormon,methodology,rama,indirect,complexes,bavarian,patrons,uttar,skeleton,bollywood,flemish,viable,bloc,breeds,triggered,sustainability,tailed,referenced,comply,takeover,latvian,homestead,platoon,communal,nationality,excavated,targeting,sundays,posed,physicist,turret,endowment,marginal,dispatched,commentators,renovations,attachment,collaborations,ridges,barriers,obligations,shareholders,prof.,defenses,presided,rite,backgrounds,arbitrary,affordable,gloucestershire,thirteenth,inlet,miniseries,possesses,detained,pressures,subscription,realism,solidarity,proto,postgraduate,noun,burmese,abundance,homage,reasoning,anterior,robust,fencing,shifting,vowels,garde,profitable,loch,anchored,coastline,samoa,terminology,prostitution,magistrate,venezuelan,speculated,regulate,fixture,colonists,digit,induction,manned,expeditionary,computational,centennial,principally,vein,preserving,engineered,numerical,cancellation,conferred,continually,borne,seeded,advertisement,unanimously,treaties,infections,ions,sensors,lowered,amphibious,lava,fourteenth,bahrain,niagara,nicaragua,squares,congregations,26th,periodic,proprietary,1860s,contributors,seller,overs,emission,procession,presumed,illustrator,zinc,gases,tens,applicable,stretches,reproductive,sixteenth,apparatus,accomplishments,canoe,guam,oppose,recruitment,accumulated,limerick,namibia,staging,remixes,ordnance,uncertainty,pedestrian,temperate,treason,deposited,registry,cerambycidae,attracting,lankan,reprinted,shipbuilding,homosexuality,neurons,eliminating,1900s,resume,ministries,beneficial,blackpool,surplus,northampton,licenses,constructing,announcer,standardized,alternatives,taipei,inadequate,failures,yields,medalist,titular,obsolete,torah,burlington,predecessors,lublin,retailers,castles,depiction,issuing,gubernatorial,propulsion,tiles,damascus,discs,alternating,pomerania,peasant,tavern,redesignated,27th,illustration,focal,mans,codex,specialists,productivity,antiquity,controversies,promoter,pits,companions,behaviors,lyrical,prestige,creativity,swansea,dramas,approximate,feudal,tissues,crude,campaigned,unprecedented,chancel,amendments,surroundings,allegiance,exchanges,align,firmly,optimal,commenting,reigning,landings,obscure,1850s,contemporaries,paternal,devi,endurance,communes,incorporation,denominations,exchanged,routing,resorts,amnesty,slender,explores,suppression,heats,pronunciation,centred,coupe,stirling,freelance,treatise,linguistics,laos,informs,discovering,pillars,encourages,halted,robots,definitive,maturity,tuberculosis,venetian,silesian,unchanged,originates,mali,lincolnshire,quotes,seniors,premise,contingent,distribute,danube,gorge,logging,dams,curling,seventeenth,specializes,wetlands,deities,assess,thickness,rigid,culminated,utilities,substrate,insignia,nile,assam,shri,currents,suffrage,canadians,mortar,asteroid,bosnian,discoveries,enzymes,sanctioned,replica,hymn,investigators,tidal,dominate,derivatives,converting,leinster,verbs,honoured,criticisms,dismissal,discrete,masculine,reorganization,unlimited,wurttemberg,sacks,allocation,bahn,jurisdictions,participates,lagoon,famine,communion,culminating,surveyed,shortage,cables,intersects,cassette,foremost,adopting,solicitor,outright,bihar,reissued,farmland,dissertation,turnpike,baton,photographed,christchurch,kyoto,finances,rails,histories,linebacker,kilkenny,accelerated,dispersed,handicap,absorption,rancho,ceramic,captivity,cites,font,weighed,mater,utilize,bravery,extract,validity,slovenian,seminars,discourse,ranged,duel,ironically,warships,sega,temporal,surpassed,prolonged,recruits,northumberland,greenland,contributes,patented,eligibility,unification,discusses,reply,translates,beirut,relies,torque,northward,reviewers,monastic,accession,neural,tramway,heirs,sikh,subscribers,amenities,taliban,audit,rotterdam,wagons,kurdish,favoured,combustion,meanings,persia,browser,diagnostic,niger,formula_4,denomination,dividing,parameter,branding,badminton,leningrad,sparked,hurricanes,beetles,propeller,mozambique,refined,diagram,exhaust,vacated,readings,markers,reconciliation,determines,concurrent,imprint,primera,organism,demonstrating,filmmakers,vanderbilt,affiliates,traction,evaluated,defendants,megachile,investigative,zambia,assassinated,rewarded,probable,staffordshire,foreigners,directorate,nominees,consolidation,commandant,reddish,differing,unrest,drilling,bohemia,resembling,instrumentation,considerations,haute,promptly,variously,dwellings,clans,tablet,enforced,cockpit,semifinal,hussein,prisons,ceylon,emblem,monumental,phrases,correspond,crossover,outlined,characterised,acceleration,caucus,crusade,protested,composing,rajasthan,habsburg,rhythmic,interception,inherent,cooled,ponds,spokesperson,gradual,consultation,kuala,globally,suppressed,builders,avengers,suffix,integer,enforce,fibers,unionist,proclamation,uncovered,infrared,adapt,eisenhower,utilizing,captains,stretched,observing,assumes,prevents,analyses,saxophone,caucasus,notices,villains,dartmouth,mongol,hostilities,stretching,veterinary,lenses,texture,prompting,overthrow,excavation,islanders,masovian,battleship,biographer,replay,degradation,departing,luftwaffe,fleeing,oversight,immigrated,serbs,fishermen,strengthening,respiratory,italians,denotes,radial,escorted,motif,wiltshire,expresses,accessories,reverted,establishments,inequality,protocols,charting,famously,satirical,entirety,trench,friction,atletico,sampling,subset,weekday,upheld,sharply,correlation,incorrect,mughal,travelers,hasan,earnings,offset,evaluate,specialised,recognizing,flexibility,nagar,postseason,algebraic,capitalism,crystals,melodies,polynomial,racecourse,defences,austro,wembley,attracts,anarchist,resurrection,reviewing,decreasing,prefix,ratified,mutation,displaying,separating,restoring,assemblies,ordinance,priesthood,cruisers,appoint,moldova,imports,directive,epidemic,militant,senegal,signaling,restriction,critique,retrospective,nationalists,undertake,sioux,canals,algerian,redesigned,philanthropist,depict,conceptual,turbines,intellectuals,eastward,applicants,contractors,vendors,undergone,namesake,ensured,tones,substituted,hindwings,arrests,tombs,transitional,principality,reelection,taiwanese,cavity,manifesto,broadcasters,spawned,thoroughbred,identities,generators,proposes,hydroelectric,johannesburg,cortex,scandinavian,killings,aggression,boycott,catalyst,physiology,fifteenth,waterfront,chromosome,organist,costly,calculation,cemeteries,flourished,recognise,juniors,merging,disciples,ashore,workplace,enlightenment,diminished,debated,hailed,podium,educate,mandated,distributor,litre,electromagnetic,flotilla,estuary,peterborough,staircase,selections,melodic,confronts,wholesale,integrate,intercepted,catalonia,unite,immense,palatinate,switches,earthquakes,occupational,successors,praising,concluding,faculties,firstly,overhaul,empirical,metacritic,inauguration,evergreen,laden,winged,philosophers,amalgamated,geoff,centimeters,napoleonic,upright,planting,brewing,fined,sensory,migrants,wherein,inactive,headmaster,warwickshire,siberia,terminals,denounced,academia,divinity,bilateral,clive,omitted,peerage,relics,apartheid,syndicate,fearing,fixtures,desirable,dismantled,ethnicity,valves,biodiversity,aquarium,ideological,visibility,creators,analyzed,tenant,balkan,postwar,supplier,smithsonian,risen,morphology,digits,bohemian,wilmington,vishnu,demonstrates,aforementioned,biographical,mapped,khorasan,phosphate,presentations,ecosystem,processors,calculations,mosaic,clashes,penned,recalls,coding,angular,lattice,macau,accountability,extracted,pollen,therapeutic,overlap,violinist,deposed,candidacy,infants,covenant,bacterial,restructuring,dungeons,ordination,conducts,builds,invasive,customary,concurrently,relocation,cello,statutes,borneo,entrepreneurs,sanctions,packet,rockefeller,piedmont,comparisons,waterfall,receptions,glacial,surge,signatures,alterations,advertised,enduring,somali,botanist,100th,canonical,motifs,longitude,circulated,alloy,indirectly,margins,preserves,internally,besieged,shale,peripheral,drained,baseman,reassigned,tobago,soloist,socio,grazing,contexts,roofs,portraying,ottomans,shrewsbury,noteworthy,lamps,supplying,beams,qualifier,portray,greenhouse,stronghold,hitter,rites,cretaceous,urging,derive,nautical,aiming,fortunes,verde,donors,reliance,exceeding,exclusion,exercised,simultaneous,continents,guiding,pillar,gradient,poznan,eruption,clinics,moroccan,indicator,trams,piers,parallels,fragment,teatro,potassium,satire,compressed,businessmen,influx,seine,perspectives,shelters,decreases,mounting,formula_5,confederacy,equestrian,expulsion,mayors,liberia,resisted,affinity,shrub,unexpectedly,stimulus,amtrak,deported,perpendicular,statesman,wharf,storylines,romanesque,weights,surfaced,interceptions,dhaka,crambidae,orchestras,rwanda,conclude,constitutes,subsidiaries,admissions,prospective,shear,bilingual,campaigning,presiding,domination,commemorative,trailing,confiscated,petrol,acquisitions,polymer,onlyinclude,chloride,elevations,resolutions,hurdles,pledged,likelihood,objected,erect,encoding,databases,aristotle,hindus,marshes,bowled,ministerial,grange,acronym,annexation,squads,ambient,pilgrims,botany,sofla,astronomer,planetary,descending,bestowed,ceramics,diplomacy,metabolism,colonization,potomac,africans,engraved,recycling,commitments,resonance,disciplinary,jamaican,narrated,spectral,tipperary,waterford,stationary,arbitration,transparency,threatens,crossroads,slalom,oversee,centenary,incidence,economies,livery,moisture,newsletter,autobiographical,bhutan,propelled,dependence,moderately,adobe,barrels,subdivisions,outlook,labelled,stratford,arising,diaspora,barony,automobiles,ornamental,slated,norms,primetime,generalized,analysts,vectors,libyan,yielded,certificates,rooted,vernacular,belarusian,marketplace,prediction,fairfax,malawi,viruses,wooded,demos,mauritius,prosperous,coincided,liberties,huddersfield,ascent,warnings,hinduism,glucose,pulitzer,unused,filters,illegitimate,acquitted,protestants,canopy,staple,psychedelic,winding,abbas,pathways,cheltenham,lagos,niche,invaders,proponents,barred,conversely,doncaster,recession,embraced,rematch,concession,emigration,upgrades,bowls,tablets,remixed,loops,kensington,shootout,monarchs,organizers,harmful,punjabi,broadband,exempt,neolithic,profiles,portrays,parma,cyrillic,quasi,attested,regimental,revive,torpedoes,heidelberg,rhythms,spherical,denote,hymns,icons,theologian,qaeda,exceptionally,reinstated,comune,playhouse,lobbying,grossing,viceroy,delivers,visually,armistice,utrecht,syllable,vertices,analogous,annex,refurbished,entrants,knighted,disciple,rhetoric,detailing,inactivated,ballads,algae,intensified,favourable,sanitation,receivers,pornography,commemorated,cannons,entrusted,manifold,photographers,pueblo,textiles,steamer,myths,marquess,onward,liturgical,romney,uzbekistan,consistency,denoted,hertfordshire,convex,hearings,sulfur,universidad,podcast,selecting,emperors,arises,justices,1840s,mongolian,exploited,termination,digitally,infectious,sedan,symmetric,penal,illustrate,formulation,attribute,problematic,modular,inverse,berth,searches,rutgers,leicestershire,enthusiasts,lockheed,upwards,transverse,accolades,backward,archaeologists,crusaders,nuremberg,defects,ferries,vogue,containers,openings,transporting,separates,lumpur,purchases,attain,wichita,topology,woodlands,deleted,periodically,syntax,overturned,musicals,corp.,strasbourg,instability,nationale,prevailing,cache,marathi,versailles,unmarried,grains,straits,antagonist,segregation,assistants,d'etat,contention,dictatorship,unpopular,motorcycles,criterion,analytical,salzburg,militants,hanged,worcestershire,emphasize,paralympic,erupted,convinces,offences,oxidation,nouns,populace,atari,spanned,hazardous,educators,playable,births,baha'i,preseason,generates,invites,meteorological,handbook,foothills,enclosure,diffusion,mirza,convergence,geelong,coefficient,connector,formula_6,cylindrical,disasters,pleaded,knoxville,contamination,compose,libertarian,arrondissement,franciscan,intercontinental,susceptible,initiation,malaria,unbeaten,consonants,waived,saloon,popularized,estadio,pseudo,interdisciplinary,transports,transformers,carriages,bombings,revolves,ceded,collaborator,celestial,exemption,colchester,maltese,oceanic,ligue,crete,shareholder,routed,depictions,ridden,advisors,calculate,lending,guangzhou,simplicity,newscast,scheduling,snout,eliot,undertaking,armenians,nottinghamshire,whitish,consulted,deficiency,salle,cinemas,superseded,rigorous,kerman,convened,landowners,modernization,evenings,pitches,conditional,scandinavia,differed,formulated,cyclists,swami,guyana,dunes,electrified,appalachian,abdomen,scenarios,prototypes,sindh,consonant,adaptive,boroughs,wolverhampton,modelling,cylinders,amounted,minimize,ambassadors,lenin,settler,coincide,approximation,grouping,murals,bullying,registers,rumours,engagements,energetic,vertex,annals,bordering,geologic,yellowish,runoff,converts,allegheny,facilitated,saturdays,colliery,monitored,rainforest,interfaces,geographically,impaired,prevalence,joachim,paperback,slowed,shankar,distinguishing,seminal,categorized,authorised,auspices,bandwidth,asserts,rebranded,balkans,supplemented,seldom,weaving,capsule,apostles,populous,monmouth,payload,symphonic,densely,shoreline,managerial,masonry,antioch,averages,textbooks,royalist,coliseum,tandem,brewers,diocesan,posthumous,walled,incorrectly,distributions,ensued,reasonably,graffiti,propagation,automation,harmonic,augmented,middleweight,limbs,elongated,landfall,comparatively,literal,grossed,koppen,wavelength,1830s,cerebral,boasts,congestion,physiological,practitioner,coasts,cartoonist,undisclosed,frontal,launches,burgundy,qualifiers,imposing,stade,flanked,assyrian,raided,multiplayer,montane,chesapeake,pathology,drains,vineyards,intercollegiate,semiconductor,grassland,convey,citations,predominant,rejects,benefited,yahoo,graphs,busiest,encompassing,hamlets,explorers,suppress,minors,graphical,calculus,sediment,intends,diverted,mainline,unopposed,cottages,initiate,alumnus,towed,autism,forums,darlington,modernist,oxfordshire,lectured,capitalist,suppliers,panchayat,actresses,foundry,southbound,commodity,wesleyan,divides,palestinians,luton,caretaker,nobleman,mutiny,organizer,preferences,nomenclature,splits,unwilling,offenders,timor,relying,halftime,semitic,arithmetic,milestone,jesuits,arctiidae,retrieved,consuming,contender,edged,plagued,inclusive,transforming,khmer,federally,insurgents,distributing,amherst,rendition,prosecutors,viaduct,disqualified,kabul,liturgy,prevailed,reelected,instructors,swimmers,aperture,churchyard,interventions,totals,darts,metropolis,fuels,fluent,northbound,correctional,inflicted,barrister,realms,culturally,aristocratic,collaborating,emphasizes,choreographer,inputs,ensembles,humboldt,practised,endowed,strains,infringement,archaeologist,congregational,magna,relativity,efficiently,proliferation,mixtape,abruptly,regeneration,commissioning,yukon,archaic,reluctantly,retailer,northamptonshire,universally,crossings,boilers,nickelodeon,revue,abbreviation,retaliation,scripture,routinely,medicinal,benedictine,kenyan,retention,deteriorated,glaciers,apprenticeship,coupling,researched,topography,entrances,anaheim,pivotal,compensate,arched,modify,reinforce,dusseldorf,journeys,motorsport,conceded,sumatra,spaniards,quantitative,loire,cinematography,discarded,botswana,morale,engined,zionist,philanthropy,sainte,fatalities,cypriot,motorsports,indicators,pricing,institut,bethlehem,implicated,gravitational,differentiation,rotor,thriving,precedent,ambiguous,concessions,forecast,conserved,fremantle,asphalt,landslide,middlesbrough,formula_7,humidity,overseeing,chronological,diaries,multinational,crimean,turnover,improvised,youths,declares,tasmanian,canadiens,fumble,refinery,weekdays,unconstitutional,upward,guardians,brownish,imminent,hamas,endorsement,naturalist,martyrs,caledonia,chords,yeshiva,reptiles,severity,mitsubishi,fairs,installment,substitution,repertory,keyboardist,interpreter,silesia,noticeable,rhineland,transmit,inconsistent,booklet,academies,epithet,pertaining,progressively,aquatics,scrutiny,prefect,toxicity,rugged,consume,o'donnell,evolve,uniquely,cabaret,mediated,landowner,transgender,palazzo,compilations,albuquerque,induce,sinai,remastered,efficacy,underside,analogue,specify,possessing,advocating,compatibility,liberated,greenville,mecklenburg,header,memorials,sewage,rhodesia,1800s,salaries,atoll,coordinating,partisans,repealed,amidst,subjective,optimization,nectar,evolving,exploits,madhya,styling,accumulation,raion,postage,responds,buccaneers,frontman,brunei,choreography,coated,kinetic,sampled,inflammatory,complementary,eclectic,norte,vijay,a.k.a,mainz,casualty,connectivity,laureate,franchises,yiddish,reputed,unpublished,economical,periodicals,vertically,bicycles,brethren,capacities,unitary,archeological,tehsil,domesday,wehrmacht,justification,angered,mysore,fielded,abuses,nutrients,ambitions,taluk,battleships,symbolism,superiority,neglect,attendees,commentaries,collaborators,predictions,yorker,breeders,investing,libretto,informally,coefficients,memorandum,pounder,collingwood,tightly,envisioned,arbor,mistakenly,captures,nesting,conflicting,enhancing,streetcar,manufactures,buckinghamshire,rewards,commemorating,stony,expenditure,tornadoes,semantic,relocate,weimar,iberian,sighted,intending,ensign,beverages,expectation,differentiate,centro,utilizes,saxophonist,catchment,transylvania,ecosystems,shortest,sediments,socialists,ineffective,kapoor,formidable,heroine,guantanamo,prepares,scattering,pamphlet,verified,elector,barons,totaling,shrubs,pyrenees,amalgamation,mutually,longitudinal,comte,negatively,masonic,envoy,sexes,akbar,mythical,tonga,bishopric,assessments,malaya,warns,interiors,reefs,reflections,neutrality,musically,nomadic,waterways,provence,collaborate,scaled,adulthood,emerges,euros,optics,incentives,overland,periodical,liege,awarding,realization,slang,affirmed,schooner,hokkaido,czechoslovak,protectorate,undrafted,disagreed,commencement,electors,spruce,swindon,fueled,equatorial,inventions,suites,slovene,backdrop,adjunct,energies,remnant,inhabit,alliances,simulcast,reactors,mosques,travellers,outfielder,plumage,migratory,benin,experimented,fibre,projecting,drafting,laude,evidenced,northernmost,indicted,directional,replication,croydon,comedies,jailed,organizes,devotees,reservoirs,turrets,originate,economists,songwriters,junta,trenches,mounds,proportions,comedic,apostle,azerbaijani,farmhouse,resembled,disrupted,playback,mixes,diagonal,relevance,govern,programmer,gdansk,maize,soundtracks,tendencies,mastered,impacted,believers,kilometre,intervene,chairperson,aerodrome,sails,subsidies,ensures,aesthetics,congresses,ratios,sardinia,southernmost,functioned,controllers,downward,randomly,distortion,regents,palatine,disruption,spirituality,vidhan,tracts,compiler,ventilation,anchorage,symposium,assert,pistols,excelled,avenues,convoys,moniker,constructions,proponent,phased,spines,organising,schleswig,policing,campeonato,mined,hourly,croix,lucrative,authenticity,haitian,stimulation,burkina,espionage,midfield,manually,staffed,awakening,metabolic,biographies,entrepreneurship,conspicuous,guangdong,preface,subgroup,mythological,adjutant,feminism,vilnius,oversees,honourable,tripoli,stylized,kinase,societe,notoriety,altitudes,configurations,outward,transmissions,announces,auditor,ethanol,clube,nanjing,mecca,haifa,blogs,postmaster,paramilitary,depart,positioning,potent,recognizable,spire,brackets,remembrance,overlapping,turkic,articulated,scientology,operatic,deploy,readiness,biotechnology,restrict,cinematographer,inverted,synonymous,administratively,westphalia,commodities,replaces,downloads,centralized,munitions,preached,sichuan,fashionable,implementations,matrices,hiv/aids,loyalist,luzon,celebrates,hazards,heiress,mercenaries,synonym,creole,ljubljana,technician,auditioned,technicians,viewpoint,wetland,mongols,princely,sharif,coating,dynasties,southward,doubling,formula_8,mayoral,harvesting,conjecture,goaltender,oceania,spokane,welterweight,bracket,gatherings,weighted,newscasts,mussolini,affiliations,disadvantage,vibrant,spheres,sultanate,distributors,disliked,establishes,marches,drastically,yielding,jewellery,yokohama,vascular,airlift,canons,subcommittee,repression,strengths,graded,outspoken,fused,pembroke,filmography,redundant,fatigue,repeal,threads,reissue,pennant,edible,vapor,corrections,stimuli,commemoration,dictator,anand,secession,amassed,orchards,pontifical,experimentation,greeted,bangor,forwards,decomposition,quran,trolley,chesterfield,traverse,sermons,burials,skier,climbs,consultants,petitioned,reproduce,parted,illuminated,kurdistan,reigned,occupants,packaged,geometridae,woven,regulating,protagonists,crafted,affluent,clergyman,consoles,migrant,supremacy,attackers,caliph,defect,convection,rallies,huron,resin,segunda,quota,warship,overseen,criticizing,shrines,glamorgan,lowering,beaux,hampered,invasions,conductors,collects,bluegrass,surrounds,substrates,perpetual,chronology,pulmonary,executions,crimea,compiling,noctuidae,battled,tumors,minsk,novgorod,serviced,yeast,computation,swamps,theodor,baronetcy,salford,uruguayan,shortages,odisha,siberian,novelty,cinematic,invitational,decks,dowager,oppression,bandits,appellate,state-of-the-art,clade,palaces,signalling,galaxies,industrialist,tensor,learnt,incurred,magistrates,binds,orbits,ciudad,willingness,peninsular,basins,biomedical,shafts,marlborough,bournemouth,withstand,fitzroy,dunedin,variance,steamship,integrating,muscular,fines,akron,bulbophyllum,malmo,disclosed,cornerstone,runways,medicines,twenty20,gettysburg,progresses,frigates,bodied,transformations,transforms,helens,modelled,versatile,regulator,pursuits,legitimacy,amplifier,scriptures,voyages,examines,presenters,octagonal,poultry,formula_9,anatolia,computed,migrate,directorial,hybrids,localized,preferring,guggenheim,persisted,grassroots,inflammation,fishery,otago,vigorous,professions,instructional,inexpensive,insurgency,legislators,sequels,surnames,agrarian,stainless,nairobi,minas,forerunner,aristocracy,transitions,sicilian,showcased,doses,hiroshima,summarized,gearbox,emancipation,limitation,nuclei,seismic,abandonment,dominating,appropriations,occupations,electrification,hilly,contracting,exaggerated,entertainer,kazan,oricon,cartridges,characterization,parcel,maharaja,exceeds,aspiring,obituary,flattened,contrasted,narration,replies,oblique,outpost,fronts,arranger,talmud,keynes,doctrines,endured,confesses,fortification,supervisors,kilometer,academie,jammu,bathurst,piracy,prostitutes,navarre,cumulative,cruises,lifeboat,twinned,radicals,interacting,expenditures,wexford,libre,futsal,curated,clockwise,colloquially,procurement,immaculate,lyricist,enhancement,porcelain,alzheimer,highlighting,judah,disagreements,storytelling,sheltered,wroclaw,vaudeville,contrasts,neoclassical,compares,contrasting,deciduous,francaise,descriptive,cyclic,reactive,antiquities,meiji,repeats,creditors,forcibly,newmarket,picturesque,impending,uneven,bison,raceway,solvent,ecumenical,optic,professorship,harvested,waterway,banjo,pharaoh,geologist,scanning,dissent,recycled,unmanned,retreating,gospels,aqueduct,branched,tallinn,groundbreaking,syllables,hangar,designations,procedural,craters,cabins,encryption,anthropologist,montevideo,outgoing,inverness,chattanooga,fascism,calais,chapels,groundwater,downfall,misleading,robotic,tortricidae,pixel,handel,prohibit,crewe,renaming,reprised,kickoff,leftist,spaced,integers,causeway,pines,authorship,organise,ptolemy,accessibility,virtues,lesions,iroquois,qur'an,atheist,synthesized,biennial,confederates,dietary,skaters,stresses,tariff,koreans,intercity,republics,quintet,baroness,naive,amplitude,insistence,tbilisi,residues,grammatical,diversified,egyptians,accompaniment,vibration,repository,mandal,topological,distinctions,coherent,invariant,batters,nuevo,internationals,implements,follower,bahia,widened,independents,cantonese,totaled,guadalajara,wolverines,befriended,muzzle,surveying,hungarians,medici,deportation,rayon,approx,recounts,attends,clerical,hellenic,furnished,alleging,soluble,systemic,gallantry,bolshevik,intervened,hostel,gunpowder,specialising,stimulate,leiden,removes,thematic,floral,bafta,printers,conglomerate,eroded,analytic,successively,lehigh,thessaloniki,kilda,clauses,ascended,nehru,scripted,tokugawa,competence,diplomats,exclude,consecration,freedoms,assaults,revisions,blacksmith,textual,sparse,concacaf,slain,uploaded,enraged,whaling,guise,stadiums,debuting,dormitory,cardiovascular,yunnan,dioceses,consultancy,notions,lordship,archdeacon,collided,medial,airfields,garment,wrestled,adriatic,reversal,refueling,verification,jakob,horseshoe,intricate,veracruz,sarawak,syndication,synthesizer,anthologies,stature,feasibility,guillaume,narratives,publicized,antrim,intermittent,constituents,grimsby,filmmaking,doping,unlawful,nominally,transmitting,documenting,seater,internationale,ejected,steamboat,alsace,boise,ineligible,geared,vassal,mustered,ville,inline,pairing,eurasian,kyrgyzstan,barnsley,reprise,stereotypes,rushes,conform,firefighters,deportivo,revolutionaries,rabbis,concurrency,charters,sustaining,aspirations,algiers,chichester,falkland,morphological,systematically,volcanoes,designate,artworks,reclaimed,jurist,anglia,resurrected,chaotic,feasible,circulating,simulated,environmentally,confinement,adventist,harrisburg,laborers,ostensibly,universiade,pensions,influenza,bratislava,octave,refurbishment,gothenburg,putin,barangay,annapolis,breaststroke,illustrates,distorted,choreographed,promo,emphasizing,stakeholders,descends,exhibiting,intrinsic,invertebrates,evenly,roundabout,salts,formula_10,strata,inhibition,branching,stylistic,rumored,realises,mitochondrial,commuted,adherents,logos,bloomberg,telenovela,guineas,charcoal,engages,winery,reflective,siena,cambridgeshire,ventral,flashback,installing,engraving,grasses,traveller,rotated,proprietor,nationalities,precedence,sourced,trainers,cambodian,reductions,depleted,saharan,classifications,biochemistry,plaintiffs,arboretum,humanist,fictitious,aleppo,climates,bazaar,his/her,homogeneous,multiplication,moines,indexed,linguist,skeletal,foliage,societal,differentiated,informing,mammal,infancy,archival,cafes,malls,graeme,musee,schizophrenia,fargo,pronouns,derivation,descend,ascending,terminating,deviation,recaptured,confessions,weakening,tajikistan,bahadur,pasture,b/hip,donegal,supervising,sikhs,thinkers,euclidean,reinforcement,friars,portage,fuscous,lucknow,synchronized,assertion,choirs,privatization,corrosion,multitude,skyscraper,royalties,ligament,usable,spores,directs,clashed,stockport,fronted,dependency,contiguous,biologist,backstroke,powerhouse,frescoes,phylogenetic,welding,kildare,gabon,conveyed,augsburg,severn,continuum,sahib,lille,injuring,passeriformesfamily,succeeds,translating,unitarian,startup,turbulent,outlying,philanthropic,stanislaw,idols,claremont,conical,haryana,armagh,blended,implicit,conditioned,modulation,rochdale,labourers,coinage,shortstop,potsdam,gears,obesity,bestseller,advisers,bouts,comedians,jozef,lausanne,taxonomic,correlated,columbian,marne,indications,psychologists,libel,edict,beaufort,disadvantages,renal,finalized,racehorse,unconventional,disturbances,falsely,zoology,adorned,redesign,executing,narrower,commended,appliances,stalls,resurgence,saskatoon,miscellaneous,permitting,epoch,formula_11,cumbria,forefront,vedic,eastenders,disposed,supermarkets,rower,inhibitor,magnesium,colourful,yusuf,harrow,formulas,centrally,balancing,ionic,nocturnal,consolidate,ornate,raiding,charismatic,accelerate,nominate,residual,dhabi,commemorates,attribution,uninhabited,mindanao,atrocities,genealogical,romani,applicant,enactment,abstraction,trough,pulpit,minuscule,misconduct,grenades,timely,supplements,messaging,curvature,ceasefire,telangana,susquehanna,braking,redistribution,shreveport,neighbourhoods,gregorian,widowed,khuzestan,empowerment,scholastic,evangelist,peptide,topical,theorist,historia,thence,sudanese,museo,jurisprudence,masurian,frankish,headlined,recounted,netball,petitions,tolerant,hectare,truncated,southend,methane,captives,reigns,massif,subunit,acidic,weightlifting,footballers,sabah,britannia,tunisian,segregated,sawmill,withdrawing,unpaid,weaponry,somme,perceptions,unicode,alcoholism,durban,wrought,waterfalls,jihad,auschwitz,upland,eastbound,adjective,anhalt,evaluating,regimes,guildford,reproduced,pamphlets,hierarchical,maneuvers,hanoi,fabricated,repetition,enriched,arterial,replacements,tides,globalization,adequately,westbound,satisfactory,fleets,phosphorus,lastly,neuroscience,anchors,xinjiang,membranes,improvisation,shipments,orthodoxy,submissions,bolivian,mahmud,ramps,leyte,pastures,outlines,flees,transmitters,fares,sequential,stimulated,novice,alternately,symmetrical,breakaway,layered,baronets,lizards,blackish,edouard,horsepower,penang,principals,mercantile,maldives,overwhelmingly,hawke,rallied,prostate,conscription,juveniles,maccabi,carvings,strikers,sudbury,spurred,improves,lombardy,macquarie,parisian,elastic,distillery,shetland,humane,brentford,wrexham,warehouses,routines,encompassed,introductory,isfahan,instituto,palais,revolutions,sporadic,impoverished,portico,fellowships,speculative,enroll,dormant,adhere,fundamentally,sculpted,meritorious,template,upgrading,reformer,rectory,uncredited,indicative,creeks,galveston,radically,hezbollah,firearm,educating,prohibits,trondheim,locus,refit,headwaters,screenings,lowlands,wasps,coarse,attaining,sedimentary,perished,pitchfork,interned,cerro,stagecoach,aeronautical,liter,transitioned,haydn,inaccurate,legislatures,bromwich,knesset,spectroscopy,butte,asiatic,degraded,concordia,catastrophic,lobes,wellness,pensacola,periphery,hapoel,theta,horizontally,freiburg,liberalism,pleas,durable,warmian,offenses,mesopotamia,shandong,unsuitable,hospitalized,appropriately,phonetic,encompass,conversions,observes,illnesses,breakout,assigns,crowns,inhibitors,nightly,manifestation,fountains,maximize,alphabetical,sloop,expands,newtown,widening,gaddafi,commencing,camouflage,footprint,tyrol,barangays,universite,highlanders,budgets,query,lobbied,westchester,equator,stipulated,pointe,distinguishes,allotted,embankment,advises,storing,loyalists,fourier,rehearsals,starvation,gland,rihanna,tubular,expressive,baccalaureate,intersections,revered,carbonate,eritrea,craftsmen,cosmopolitan,sequencing,corridors,shortlisted,bangladeshi,persians,mimic,parades,repetitive,recommends,flanks,promoters,incompatible,teaming,ammonia,greyhound,solos,improper,legislator,newsweek,recurrent,vitro,cavendish,eireann,crises,prophets,mandir,strategically,guerrillas,formula_12,ghent,contenders,equivalence,drone,sociological,hamid,castes,statehood,aland,clinched,relaunched,tariffs,simulations,williamsburg,rotate,mediation,smallpox,harmonica,lodges,lavish,restrictive,o'sullivan,detainees,polynomials,echoes,intersecting,learners,elects,charlemagne,defiance,epsom,liszt,facilitating,absorbing,revelations,padua,pieter,pious,penultimate,mammalian,montenegrin,supplementary,widows,aromatic,croats,roanoke,trieste,legions,subdistrict,babylonian,grasslands,volga,violently,sparsely,oldies,telecommunication,respondents,quarries,downloadable,commandos,taxpayer,catalytic,malabar,afforded,copying,declines,nawab,junctions,assessing,filtering,classed,disused,compliant,christoph,gottingen,civilizations,hermitage,caledonian,whereupon,ethnically,springsteen,mobilization,terraces,indus,excel,zoological,enrichment,simulate,guitarists,registrar,cappella,invoked,reused,manchu,configured,uppsala,genealogy,mergers,casts,curricular,rebelled,subcontinent,horticultural,parramatta,orchestrated,dockyard,claudius,decca,prohibiting,turkmenistan,brahmin,clandestine,obligatory,elaborated,parasitic,helix,constraint,spearheaded,rotherham,eviction,adapting,albans,rescues,sociologist,guiana,convicts,occurrences,kamen,antennas,asturias,wheeled,sanitary,deterioration,trier,theorists,baseline,announcements,valea,planners,factual,serialized,serials,bilbao,demoted,fission,jamestown,cholera,alleviate,alteration,indefinite,sulfate,paced,climatic,valuation,artisans,proficiency,aegean,regulators,fledgling,sealing,influencing,servicemen,frequented,cancers,tambon,narayan,bankers,clarified,embodied,engraver,reorganisation,dissatisfied,dictated,supplemental,temperance,ratification,puget,nutrient,pretoria,papyrus,uniting,ascribed,cores,coptic,schoolhouse,barrio,1910s,armory,defected,transatlantic,regulates,ported,artefacts,specifies,boasted,scorers,mollusks,emitted,navigable,quakers,projective,dialogues,reunification,exponential,vastly,banners,unsigned,dissipated,halves,coincidentally,leasing,purported,escorting,estimation,foxes,lifespan,inflorescence,assimilation,showdown,staunch,prologue,ligand,superliga,telescopes,northwards,keynote,heaviest,taunton,redeveloped,vocalists,podlaskie,soyuz,rodents,azores,moravian,outset,parentheses,apparel,domestically,authoritative,polymers,monterrey,inhibit,launcher,jordanian,folds,taxis,mandates,singled,liechtenstein,subsistence,marxism,ousted,governorship,servicing,offseason,modernism,prism,devout,translators,islamist,chromosomes,pitted,bedfordshire,fabrication,authoritarian,javanese,leaflets,transient,substantive,predatory,sigismund,assassinate,diagrams,arrays,rediscovered,reclamation,spawning,fjord,peacekeeping,strands,fabrics,highs,regulars,tirana,ultraviolet,athenian,filly,barnet,naacp,nueva,favourites,terminates,showcases,clones,inherently,interpreting,bjorn,finely,lauded,unspecified,chola,pleistocene,insulation,antilles,donetsk,funnel,nutritional,biennale,reactivated,southport,primate,cavaliers,austrians,interspersed,restarted,suriname,amplifiers,wladyslaw,blockbuster,sportsman,minogue,brightness,benches,bridgeport,initiating,israelis,orbiting,newcomers,externally,scaling,transcribed,impairment,luxurious,longevity,impetus,temperament,ceilings,tchaikovsky,spreads,pantheon,bureaucracy,1820s,heraldic,villas,formula_13,galician,meath,avoidance,corresponded,headlining,connacht,seekers,rappers,solids,monograph,scoreless,opole,isotopes,himalayas,parodies,garments,microscopic,republished,havilland,orkney,demonstrators,pathogen,saturated,hellenistic,facilitates,aerodynamic,relocating,indochina,laval,astronomers,bequeathed,administrations,extracts,nagoya,torquay,demography,medicare,ambiguity,renumbered,pursuant,concave,syriac,electrode,dispersal,henan,bialystok,walsall,crystalline,puebla,janata,illumination,tianjin,enslaved,coloration,championed,defamation,grille,johor,rejoin,caspian,fatally,planck,workings,appointing,institutionalized,wessex,modernized,exemplified,regatta,jacobite,parochial,programmers,blending,eruptions,insurrection,regression,indices,sited,dentistry,mobilized,furnishings,levant,primaries,ardent,nagasaki,conqueror,dorchester,opined,heartland,amman,mortally,wellesley,bowlers,outputs,coveted,orthography,immersion,disrepair,disadvantaged,curate,childless,condensed,codice_1,remodeled,resultant,bolsheviks,superfamily,saxons,2010s,contractual,rivalries,malacca,oaxaca,magnate,vertebrae,quezon,olympiad,yucatan,tyres,macro,specialization,commendation,caliphate,gunnery,exiles,excerpts,fraudulent,adjustable,aramaic,interceptor,drumming,standardization,reciprocal,adolescents,federalist,aeronautics,favorably,enforcing,reintroduced,zhejiang,refining,biplane,banknotes,accordion,intersect,illustrating,summits,classmate,militias,biomass,massacres,epidemiology,reworked,wrestlemania,nantes,auditory,taxon,elliptical,chemotherapy,asserting,avoids,proficient,airmen,yellowstone,multicultural,alloys,utilization,seniority,kuyavian,huntsville,orthogonal,bloomington,cultivars,casimir,internment,repulsed,impedance,revolving,fermentation,parana,shutout,partnering,empowered,islamabad,polled,classify,amphibians,greyish,obedience,4x100,projectile,khyber,halfback,relational,d'ivoire,synonyms,endeavour,padma,customized,mastery,defenceman,berber,purge,interestingly,covent,promulgated,restricting,condemnation,hillsborough,walkers,privateer,intra,captaincy,naturalized,huffington,detecting,hinted,migrating,bayou,counterattack,anatomical,foraging,unsafe,swiftly,outdated,paraguayan,attire,masjid,endeavors,jerseys,triassic,quechua,growers,axial,accumulate,wastewater,cognition,fungal,animator,pagoda,kochi,uniformly,antibody,yerevan,hypotheses,combatants,italianate,draining,fragmentation,snowfall,formative,inversion,kitchener,identifier,additive,lucha,selects,ashland,cambrian,racetrack,trapping,congenital,primates,wavelengths,expansions,yeomanry,harcourt,wealthiest,awaited,punta,intervening,aggressively,vichy,piloted,midtown,tailored,heyday,metadata,guadalcanal,inorganic,hadith,pulses,francais,tangent,scandals,erroneously,tractors,pigment,constabulary,jiangsu,landfill,merton,basalt,astor,forbade,debuts,collisions,exchequer,stadion,roofed,flavour,sculptors,conservancy,dissemination,electrically,undeveloped,existent,surpassing,pentecostal,manifested,amend,formula_14,superhuman,barges,tunis,analytics,argyll,liquids,mechanized,domes,mansions,himalayan,indexing,reuters,nonlinear,purification,exiting,timbers,triangles,decommissioning,departmental,causal,fonts,americana,sept.,seasonally,incomes,razavi,sheds,memorabilia,rotational,terre,sutra,protege,yarmouth,grandmaster,annum,looted,imperialism,variability,liquidation,baptised,isotope,showcasing,milling,rationale,hammersmith,austen,streamlined,acknowledging,contentious,qaleh,breadth,turing,referees,feral,toulon,unofficially,identifiable,standout,labeling,dissatisfaction,jurgen,angrily,featherweight,cantons,constrained,dominates,standalone,relinquished,theologians,markedly,italics,downed,nitrate,likened,gules,craftsman,singaporean,pixels,mandela,moray,parity,departement,antigen,academically,burgh,brahma,arranges,wounding,triathlon,nouveau,vanuatu,banded,acknowledges,unearthed,stemming,authentication,byzantines,converge,nepali,commonplace,deteriorating,recalling,palette,mathematicians,greenish,pictorial,ahmedabad,rouen,validation,u.s.a.,'best,malvern,archers,converter,undergoes,fluorescent,logistical,notification,transvaal,illicit,symphonies,stabilization,worsened,fukuoka,decrees,enthusiast,seychelles,blogger,louvre,dignitaries,burundi,wreckage,signage,pinyin,bursts,federer,polarization,urbana,lazio,schism,nietzsche,venerable,administers,seton,kilograms,invariably,kathmandu,farmed,disqualification,earldom,appropriated,fluctuations,kermanshah,deployments,deformation,wheelbase,maratha,psalm,bytes,methyl,engravings,skirmish,fayette,vaccines,ideally,astrology,breweries,botanic,opposes,harmonies,irregularities,contended,gaulle,prowess,constants,aground,filipinos,fresco,ochreous,jaipur,willamette,quercus,eastwards,mortars,champaign,braille,reforming,horned,hunan,spacious,agitation,draught,specialties,flourishing,greensboro,necessitated,swedes,elemental,whorls,hugely,structurally,plurality,synthesizers,embassies,assad,contradictory,inference,discontent,recreated,inspectors,unicef,commuters,embryo,modifying,stints,numerals,communicated,boosted,trumpeter,brightly,adherence,remade,leases,restrained,eucalyptus,dwellers,planar,grooves,gainesville,daimler,anzac,szczecin,cornerback,prized,peking,mauritania,khalifa,motorized,lodging,instrumentalist,fortresses,cervical,formula_15,passerine,sectarian,researches,apprenticed,reliefs,disclose,gliding,repairing,queue,kyushu,literate,canoeing,sacrament,separatist,calabria,parkland,flowed,investigates,statistically,visionary,commits,dragoons,scrolls,premieres,revisited,subdued,censored,patterned,elective,outlawed,orphaned,leyland,richly,fujian,miniatures,heresy,plaques,countered,nonfiction,exponent,moravia,dispersion,marylebone,midwestern,enclave,ithaca,federated,electronically,handheld,microscopy,tolls,arrivals,climbers,continual,cossacks,moselle,deserts,ubiquitous,gables,forecasts,deforestation,vertebrates,flanking,drilled,superstructure,inspected,consultative,bypassed,ballast,subsidy,socioeconomic,relic,grenada,journalistic,administering,accommodated,collapses,appropriation,reclassified,foreword,porte,assimilated,observance,fragmented,arundel,thuringia,gonzaga,shenzhen,shipyards,sectional,ayrshire,sloping,dependencies,promenade,ecuadorian,mangrove,constructs,goalscorer,heroism,iteration,transistor,omnibus,hampstead,cochin,overshadowed,chieftain,scalar,finishers,ghanaian,abnormalities,monoplane,encyclopaedia,characterize,travancore,baronetage,bearers,biking,distributes,paving,christened,inspections,banco,humber,corinth,quadratic,albanians,lineages,majored,roadside,inaccessible,inclination,darmstadt,fianna,epilepsy,propellers,papacy,montagu,bhutto,sugarcane,optimized,pilasters,contend,batsmen,brabant,housemates,sligo,ascot,aquinas,supervisory,accorded,gerais,echoed,nunavut,conservatoire,carniola,quartermaster,gminas,impeachment,aquitaine,reformers,quarterfinal,karlsruhe,accelerator,coeducational,archduke,gelechiidae,seaplane,dissident,frenchman,palau,depots,hardcover,aachen,darreh,denominational,groningen,parcels,reluctance,drafts,elliptic,counters,decreed,airship,devotional,contradiction,formula_16,undergraduates,qualitative,guatemalan,slavs,southland,blackhawks,detrimental,abolish,chechen,manifestations,arthritis,perch,fated,hebei,peshawar,palin,immensely,havre,totalling,rampant,ferns,concourse,triples,elites,olympian,larva,herds,lipid,karabakh,distal,monotypic,vojvodina,batavia,multiplied,spacing,spellings,pedestrians,parchment,glossy,industrialization,dehydrogenase,patriotism,abolitionist,mentoring,elizabethan,figurative,dysfunction,abyss,constantin,middletown,stigma,mondays,gambia,gaius,israelites,renounced,nepalese,overcoming,buren,sulphur,divergence,predation,looting,iberia,futuristic,shelved,anthropological,innsbruck,escalated,clermont,entrepreneurial,benchmark,mechanically,detachments,populist,apocalyptic,exited,embryonic,stanza,readership,chiba,landlords,expansive,boniface,therapies,perpetrators,whitehall,kassel,masts,carriageway,clinch,pathogens,mazandaran,undesirable,teutonic,miocene,nagpur,juris,cantata,compile,diffuse,dynastic,reopening,comptroller,o'neal,flourish,electing,scientifically,departs,welded,modal,cosmology,fukushima,libertadores,chang'an,asean,generalization,localization,afrikaans,cricketers,accompanies,emigrants,esoteric,southwards,shutdown,prequel,fittings,innate,wrongly,equitable,dictionaries,senatorial,bipolar,flashbacks,semitism,walkway,lyrically,legality,sorbonne,vigorously,durga,samoan,karel,interchanges,patna,decider,registering,electrodes,anarchists,excursion,overthrown,gilan,recited,michelangelo,advertiser,kinship,taboo,cessation,formula_17,premiers,traversed,madurai,poorest,torneo,exerted,replicate,spelt,sporadically,horde,landscaping,razed,hindered,esperanto,manchuria,propellant,jalan,baha'is,sikkim,linguists,pandit,racially,ligands,dowry,francophone,escarpment,behest,magdeburg,mainstay,villiers,yangtze,grupo,conspirators,martyrdom,noticeably,lexical,kazakh,unrestricted,utilised,sired,inhabits,proofs,joseon,pliny,minted,buddhists,cultivate,interconnected,reuse,viability,australasian,derelict,resolving,overlooks,menon,stewardship,playwrights,thwarted,filmfare,disarmament,protections,bundles,sidelined,hypothesized,singer/songwriter,forage,netted,chancery,townshend,restructured,quotation,hyperbolic,succumbed,parliaments,shenandoah,apical,kibbutz,storeys,pastors,lettering,ukrainians,hardships,chihuahua,avail,aisles,taluka,antisemitism,assent,ventured,banksia,seamen,hospice,faroe,fearful,woreda,outfield,chlorine,transformer,tatar,panoramic,pendulum,haarlem,styria,cornice,importing,catalyzes,subunits,enamel,bakersfield,realignment,sorties,subordinates,deanery,townland,gunmen,tutelage,evaluations,allahabad,thrace,veneto,mennonite,sharia,subgenus,satisfies,puritan,unequal,gastrointestinal,ordinances,bacterium,horticulture,argonauts,adjectives,arable,duets,visualization,woolwich,revamped,euroleague,thorax,completes,originality,vasco,freighter,sardar,oratory,sects,extremes,signatories,exporting,arisen,exacerbated,departures,saipan,furlongs,d'italia,goring,dakar,conquests,docked,offshoot,okrug,referencing,disperse,netting,summed,rewritten,articulation,humanoid,spindle,competitiveness,preventive,facades,westinghouse,wycombe,synthase,emulate,fostering,abdel,hexagonal,myriad,caters,arjun,dismay,axiom,psychotherapy,colloquial,complemented,martinique,fractures,culmination,erstwhile,atrium,electronica,anarchism,nadal,montpellier,algebras,submitting,adopts,stemmed,overcame,internacional,asymmetric,gallipoli,gliders,flushing,extermination,hartlepool,tesla,interwar,patriarchal,hitherto,ganges,combatant,marred,philology,glastonbury,reversible,isthmus,undermined,southwark,gateshead,andalusia,remedies,hastily,optimum,smartphone,evade,patrolled,beheaded,dopamine,waivers,ugandan,gujarati,densities,predicting,intestinal,tentative,interstellar,kolonia,soloists,penetrated,rebellions,qeshlaq,prospered,colegio,deficits,konigsberg,deficient,accessing,relays,kurds,politburo,codified,incarnations,occupancy,cossack,metaphysical,deprivation,chopra,piccadilly,formula_18,makeshift,protestantism,alaskan,frontiers,faiths,tendon,dunkirk,durability,autobots,bonuses,coinciding,emails,gunboat,stucco,magma,neutrons,vizier,subscriptions,visuals,envisaged,carpets,smoky,schema,parliamentarian,immersed,domesticated,parishioners,flinders,diminutive,mahabharata,ballarat,falmouth,vacancies,gilded,twigs,mastering,clerics,dalmatia,islington,slogans,compressor,iconography,congolese,sanction,blends,bulgarians,moderator,outflow,textures,safeguard,trafalgar,tramways,skopje,colonialism,chimneys,jazeera,organisers,denoting,motivations,ganga,longstanding,deficiencies,gwynedd,palladium,holistic,fascia,preachers,embargo,sidings,busan,ignited,artificially,clearwater,cemented,northerly,salim,equivalents,crustaceans,oberliga,quadrangle,historiography,romanians,vaults,fiercely,incidental,peacetime,tonal,bhopal,oskar,radha,pesticides,timeslot,westerly,cathedrals,roadways,aldershot,connectors,brahmins,paler,aqueous,gustave,chromatic,linkage,lothian,specialises,aggregation,tributes,insurgent,enact,hampden,ghulam,federations,instigated,lyceum,fredrik,chairmanship,floated,consequent,antagonists,intimidation,patriarchate,warbler,heraldry,entrenched,expectancy,habitation,partitions,widest,launchers,nascent,ethos,wurzburg,lycee,chittagong,mahatma,merseyside,asteroids,yokosuka,cooperatives,quorum,redistricting,bureaucratic,yachts,deploying,rustic,phonology,chorale,cellist,stochastic,crucifixion,surmounted,confucian,portfolios,geothermal,crested,calibre,tropics,deferred,nasir,iqbal,persistence,essayist,chengdu,aborigines,fayetteville,bastion,interchangeable,burlesque,kilmarnock,specificity,tankers,colonels,fijian,quotations,enquiry,quito,palmerston,delle,multidisciplinary,polynesian,iodine,antennae,emphasised,manganese,baptists,galilee,jutland,latent,excursions,skepticism,tectonic,precursors,negligible,musique,misuse,vitoria,expressly,veneration,sulawesi,footed,mubarak,chongqing,chemically,midday,ravaged,facets,varma,yeovil,ethnographic,discounted,physicists,attache,disbanding,essen,shogunate,cooperated,waikato,realising,motherwell,pharmacology,sulfide,inward,expatriate,devoid,cultivar,monde,andean,groupings,goran,unaffected,moldovan,postdoctoral,coleophora,delegated,pronoun,conductivity,coleridge,disapproval,reappeared,microbial,campground,olsztyn,fostered,vaccination,rabbinical,champlain,milestones,viewership,caterpillar,effected,eupithecia,financier,inferred,uzbek,bundled,bandar,balochistan,mysticism,biosphere,holotype,symbolizes,lovecraft,photons,abkhazia,swaziland,subgroups,measurable,falkirk,valparaiso,ashok,discriminatory,rarity,tabernacle,flyweight,jalisco,westernmost,antiquarian,extracellular,margrave,colspan=9,midsummer,digestive,reversing,burgeoning,substitutes,medallist,khrushchev,guerre,folio,detonated,partido,plentiful,aggregator,medallion,infiltration,shaded,santander,fared,auctioned,permian,ramakrishna,andorra,mentors,diffraction,bukit,potentials,translucent,feminists,tiers,protracted,coburg,wreath,guelph,adventurer,he/she,vertebrate,pipelines,celsius,outbreaks,australasia,deccan,garibaldi,unionists,buildup,biochemical,reconstruct,boulders,stringent,barbed,wording,furnaces,pests,befriends,organises,popes,rizal,tentacles,cadre,tallahassee,punishments,occidental,formatted,mitigation,rulings,rubens,cascades,inducing,choctaw,volta,synagogues,movable,altarpiece,mitigate,practise,intermittently,encountering,memberships,earns,signify,retractable,amounting,pragmatic,wilfrid,dissenting,divergent,kanji,reconstituted,devonian,constitutions,levied,hendrik,starch,costal,honduran,ditches,polygon,eindhoven,superstars,salient,argus,punitive,purana,alluvial,flaps,inefficient,retracted,advantageous,quang,andersson,danville,binghamton,symbolize,conclave,shaanxi,silica,interpersonal,adept,frans,pavilions,lubbock,equip,sunken,limburg,activates,prosecutions,corinthian,venerated,shootings,retreats,parapet,orissa,riviere,animations,parodied,offline,metaphysics,bluffs,plume,piety,fruition,subsidized,steeplechase,shanxi,eurasia,angled,forecasting,suffragan,ashram,larval,labyrinth,chronicler,summaries,trailed,merges,thunderstorms,filtered,formula_19,advertisers,alpes,informatics,parti,constituting,undisputed,certifications,javascript,molten,sclerosis,rumoured,boulogne,hmong,lewes,breslau,notts,bantu,ducal,messengers,radars,nightclubs,bantamweight,carnatic,kaunas,fraternal,triggering,controversially,londonderry,visas,scarcity,offaly,uprisings,repelled,corinthians,pretext,kuomintang,kielce,empties,matriculated,pneumatic,expos,agile,treatises,midpoint,prehistory,oncology,subsets,hydra,hypertension,axioms,wabash,reiterated,swapped,achieves,premio,ageing,overture,curricula,challengers,subic,selangor,liners,frontline,shutter,validated,normalized,entertainers,molluscs,maharaj,allegation,youngstown,synth,thoroughfare,regionally,pillai,transcontinental,pedagogical,riemann,colonia,easternmost,tentatively,profiled,herefordshire,nativity,meuse,nucleotide,inhibits,huntingdon,throughput,recorders,conceding,domed,homeowners,centric,gabled,canoes,fringes,breeder,subtitled,fluoride,haplogroup,zionism,izmir,phylogeny,kharkiv,romanticism,adhesion,usaaf,delegations,lorestan,whalers,biathlon,vaulted,mathematically,pesos,skirmishes,heisman,kalamazoo,gesellschaft,launceston,interacts,quadruple,kowloon,psychoanalysis,toothed,ideologies,navigational,valence,induces,lesotho,frieze,rigging,undercarriage,explorations,spoof,eucharist,profitability,virtuoso,recitals,subterranean,sizeable,herodotus,subscriber,huxley,pivot,forewing,warring,boleslaw,bharatiya,suffixes,trois,percussionist,downturn,garrisons,philosophies,chants,mersin,mentored,dramatist,guilds,frameworks,thermodynamic,venomous,mehmed,assembling,rabbinic,hegemony,replicas,enlargement,claimant,retitled,utica,dumfries,metis,deter,assortment,tubing,afflicted,weavers,rupture,ornamentation,transept,salvaged,upkeep,callsign,rajput,stevenage,trimmed,intracellular,synchronization,consular,unfavorable,royalists,goldwyn,fasting,hussars,doppler,obscurity,currencies,amiens,acorn,tagore,townsville,gaussian,migrations,porta,anjou,graphite,seaport,monographs,gladiators,metrics,calligraphy,sculptural,swietokrzyskie,tolombeh,eredivisie,shoals,queries,carts,exempted,fiberglass,mirrored,bazar,progeny,formalized,mukherjee,professed,amazon.com,cathode,moreton,removable,mountaineers,nagano,transplantation,augustinian,steeply,epilogue,adapter,decisively,accelerating,mediaeval,substituting,tasman,devonshire,litres,enhancements,himmler,nephews,bypassing,imperfect,argentinian,reims,integrates,sochi,ascii,licences,niches,surgeries,fables,versatility,indra,footpath,afonso,crore,evaporation,encodes,shelling,conformity,simplify,updating,quotient,overt,firmware,umpires,architectures,eocene,conservatism,secretion,embroidery,f.c..,tuvalu,mosaics,shipwreck,prefectural,cohort,grievances,garnering,centerpiece,apoptosis,djibouti,bethesda,formula_20,shonen,richland,justinian,dormitories,meteorite,reliably,obtains,pedagogy,hardness,cupola,manifolds,amplification,steamers,familial,dumbarton,jerzy,genital,maidstone,salinity,grumman,signifies,presbytery,meteorology,procured,aegis,streamed,deletion,nuestra,mountaineering,accords,neuronal,khanate,grenoble,axles,dispatches,tokens,turku,auctions,propositions,planters,proclaiming,recommissioned,stravinsky,obverse,bombarded,waged,saviour,massacred,reformist,purportedly,resettlement,ravenna,embroiled,minden,revitalization,hikers,bridging,torpedoed,depletion,nizam,affectionately,latitudes,lubeck,spore,polymerase,aarhus,nazism,101st,buyout,galerie,diets,overflow,motivational,renown,brevet,deriving,melee,goddesses,demolish,amplified,tamworth,retake,brokerage,beneficiaries,henceforth,reorganised,silhouette,browsers,pollutants,peron,lichfield,encircled,defends,bulge,dubbing,flamenco,coimbatore,refinement,enshrined,grizzlies,capacitor,usefulness,evansville,interscholastic,rhodesian,bulletins,diamondbacks,rockers,platted,medalists,formosa,transporter,slabs,guadeloupe,disparate,concertos,violins,regaining,mandible,untitled,agnostic,issuance,hamiltonian,brampton,srpska,homology,downgraded,florentine,epitaph,kanye,rallying,analysed,grandstand,infinitely,antitrust,plundered,modernity,colspan=3|total,amphitheatre,doric,motorists,yemeni,carnivorous,probabilities,prelate,struts,scrapping,bydgoszcz,pancreatic,signings,predicts,compendium,ombudsman,apertura,appoints,rebbe,stereotypical,valladolid,clustered,touted,plywood,inertial,kettering,curving,d'honneur,housewives,grenadier,vandals,barbarossa,necked,waltham,reputedly,jharkhand,cistercian,pursues,viscosity,organiser,cloister,islet,stardom,moorish,himachal,strives,scripps,staggered,blasts,westwards,millimeters,angolan,hubei,agility,admirals,mordellistena,coincides,platte,vehicular,cordillera,riffs,schoolteacher,canaan,acoustics,tinged,reinforcing,concentrates,daleks,monza,selectively,musik,polynesia,exporter,reviving,macclesfield,bunkers,ballets,manors,caudal,microbiology,primes,unbroken,outcry,flocks,pakhtunkhwa,abelian,toowoomba,luminous,mould,appraisal,leuven,experimentally,interoperability,hideout,perak,specifying,knighthood,vasily,excerpt,computerized,niels,networked,byzantium,reaffirmed,geographer,obscured,fraternities,mixtures,allusion,accra,lengthened,inquest,panhandle,pigments,revolts,bluetooth,conjugate,overtaken,foray,coils,breech,streaks,impressionist,mendelssohn,intermediary,panned,suggestive,nevis,upazila,rotunda,mersey,linnaeus,anecdotes,gorbachev,viennese,exhaustive,moldavia,arcades,irrespective,orator,diminishing,predictive,cohesion,polarized,montage,avian,alienation,conus,jaffna,urbanization,seawater,extremity,editorials,scrolling,dreyfus,traverses,topographic,gunboats,extratropical,normans,correspondents,recognises,millennia,filtration,ammonium,voicing,complied,prefixes,diplomas,figurines,weakly,gated,oscillator,lucerne,embroidered,outpatient,airframe,fractional,disobedience,quarterbacks,formula_21,shinto,chiapas,epistle,leakage,pacifist,avignon,penrith,renders,mantua,screenplays,gustaf,tesco,alphabetically,rations,discharges,headland,tapestry,manipur,boolean,mediator,ebenezer,subchannel,fable,bestselling,ateneo,trademarks,recurrence,dwarfs,britannica,signifying,vikram,mediate,condensation,censuses,verbandsgemeinde,cartesian,sprang,surat,britons,chelmsford,courtenay,statistic,retina,abortions,liabilities,closures,mississauga,skyscrapers,saginaw,compounded,aristocrat,msnbc,stavanger,septa,interpretive,hinder,visibly,seeding,shutouts,irregularly,quebecois,footbridge,hydroxide,implicitly,lieutenants,simplex,persuades,midshipman,heterogeneous,officiated,crackdown,lends,tartu,altars,fractions,dissidents,tapered,modernisation,scripting,blazon,aquaculture,thermodynamics,sistan,hasidic,bellator,pavia,propagated,theorized,bedouin,transnational,mekong,chronicled,declarations,kickstarter,quotas,runtime,duquesne,broadened,clarendon,brownsville,saturation,tatars,electorates,malayan,replicated,observable,amphitheater,endorsements,referral,allentown,mormons,pantomime,eliminates,typeface,allegorical,varna,conduction,evoke,interviewer,subordinated,uyghur,landscaped,conventionally,ascend,edifice,postulated,hanja,whitewater,embarking,musicologist,tagalog,frontage,paratroopers,hydrocarbons,transliterated,nicolae,viewpoints,surrealist,asheville,falklands,hacienda,glide,opting,zimbabwean,discal,mortgages,nicaraguan,yadav,ghosh,abstracted,castilian,compositional,cartilage,intergovernmental,forfeited,importation,rapping,artes,republika,narayana,condominium,frisian,bradman,duality,marche,extremist,phosphorylation,genomes,allusions,valencian,habeas,ironworks,multiplex,harpsichord,emigrate,alternated,breda,waffen,smartphones,familiarity,regionalliga,herbaceous,piping,dilapidated,carboniferous,xviii,critiques,carcinoma,sagar,chippewa,postmodern,neapolitan,excludes,notoriously,distillation,tungsten,richness,installments,monoxide,chand,privatisation,molded,maths,projectiles,luoyang,epirus,lemma,concentric,incline,erroneous,sideline,gazetted,leopards,fibres,renovate,corrugated,unilateral,repatriation,orchestration,saeed,rockingham,loughborough,formula_22,bandleader,appellation,openness,nanotechnology,massively,tonnage,dunfermline,exposes,moored,ridership,motte,eurobasket,majoring,feats,silla,laterally,playlist,downwards,methodologies,eastbourne,daimyo,cellulose,leyton,norwalk,oblong,hibernian,opaque,insular,allegory,camogie,inactivation,favoring,masterpieces,rinpoche,serotonin,portrayals,waverley,airliner,longford,minimalist,outsourcing,excise,meyrick,qasim,organisational,synaptic,farmington,gorges,scunthorpe,zoned,tohoku,librarians,davao,decor,theatrically,brentwood,pomona,acquires,planter,capacitors,synchronous,skateboarding,coatings,turbocharged,ephraim,capitulation,scoreboard,hebrides,ensues,cereals,ailing,counterpoint,duplication,antisemitic,clique,aichi,oppressive,transcendental,incursions,rename,renumbering,powys,vestry,bitterly,neurology,supplanted,affine,susceptibility,orbiter,activating,overlaps,ecoregion,raman,canoer,darfur,microorganisms,precipitated,protruding,torun,anthropologists,rennes,kangaroos,parliamentarians,edits,littoral,archived,begum,rensselaer,microphones,ypres,empower,etruscan,wisden,montfort,calibration,isomorphic,rioting,kingship,verbally,smyrna,cohesive,canyons,fredericksburg,rahul,relativistic,micropolitan,maroons,industrialized,henchmen,uplift,earthworks,mahdi,disparity,cultured,transliteration,spiny,fragmentary,extinguished,atypical,inventors,biosynthesis,heralded,curacao,anomalies,aeroplane,surya,mangalore,maastricht,ashkenazi,fusiliers,hangzhou,emitting,monmouthshire,schwarzenegger,ramayana,peptides,thiruvananthapuram,alkali,coimbra,budding,reasoned,epithelial,harbors,rudimentary,classically,parque,ealing,crusades,rotations,riparian,pygmy,inertia,revolted,microprocessor,calendars,solvents,kriegsmarine,accademia,cheshmeh,yoruba,ardabil,mitra,genomic,notables,propagate,narrates,univision,outposts,polio,birkenhead,urinary,crocodiles,pectoral,barrymore,deadliest,rupees,chaim,protons,comical,astrophysics,unifying,formula_23,vassals,cortical,audubon,pedals,tenders,resorted,geophysical,lenders,recognising,tackling,lanarkshire,doctrinal,annan,combating,guangxi,estimating,selectors,tribunals,chambered,inhabiting,exemptions,curtailed,abbasid,kandahar,boron,bissau,150th,codenamed,wearer,whorl,adhered,subversive,famer,smelting,inserting,mogadishu,zoologist,mosul,stumps,almanac,olympiacos,stamens,participatory,cults,honeycomb,geologists,dividend,recursive,skiers,reprint,pandemic,liber,percentages,adversely,stoppage,chieftains,tubingen,southerly,overcrowding,unorganized,hangars,fulfil,hails,cantilever,woodbridge,pinus,wiesbaden,fertilization,fluorescence,enhances,plenary,troublesome,episodic,thrissur,kickboxing,allele,staffing,garda,televisions,philatelic,spacetime,bullpen,oxides,leninist,enrolling,inventive,truro,compatriot,ruskin,normative,assay,gotha,murad,illawarra,gendarmerie,strasse,mazraeh,rebounded,fanfare,liaoning,rembrandt,iranians,emirate,governs,latency,waterfowl,chairmen,katowice,aristocrats,eclipsed,sentient,sonatas,interplay,sacking,decepticons,dynamical,arbitrarily,resonant,petar,velocities,alludes,wastes,prefectures,belleville,sensibility,salvadoran,consolidating,medicaid,trainees,vivekananda,molar,porous,upload,youngster,infused,doctorates,wuhan,annihilation,enthusiastically,gamespot,kanpur,accumulating,monorail,operetta,tiling,sapporo,finns,calvinist,hydrocarbon,sparrows,orienteering,cornelis,minster,vuelta,plebiscite,embraces,panchayats,focussed,remediation,brahman,olfactory,reestablished,uniqueness,northumbria,rwandan,predominately,abode,ghats,balances,californian,uptake,bruges,inert,westerns,reprints,cairn,yarra,resurfaced,audible,rossini,regensburg,italiana,fleshy,irrigated,alerts,yahya,varanasi,marginalized,expatriates,cantonment,normandie,sahitya,directives,rounder,hulls,fictionalized,constables,inserts,hipped,potosi,navies,biologists,canteen,husbandry,augment,fortnight,assamese,kampala,o'keefe,paleolithic,bluish,promontory,consecutively,striving,niall,reuniting,dipole,friendlies,disapproved,thrived,netflix,liberian,dielectric,medway,strategist,sankt,pickups,hitters,encode,rerouted,claimants,anglesey,partitioned,cavan,flutes,reared,repainted,armaments,bowed,thoracic,balliol,piero,chaplains,dehestan,sender,junkers,sindhi,sickle,dividends,metallurgy,honorific,berths,namco,springboard,resettled,gansu,copyrighted,criticizes,utopian,bendigo,ovarian,binomial,spaceflight,oratorio,proprietors,supergroup,duplicated,foreground,strongholds,revolved,optimize,layouts,westland,hurler,anthropomorphic,excelsior,merchandising,reeds,vetoed,cryptography,hollyoaks,monash,flooring,ionian,resilience,johnstown,resolves,lawmakers,alegre,wildcards,intolerance,subculture,selector,slums,formulate,bayonet,istvan,restitution,interchangeably,awakens,rostock,serpentine,oscillation,reichstag,phenotype,recessed,piotr,annotated,preparedness,consultations,clausura,preferential,euthanasia,genoese,outcrops,freemasonry,geometrical,genesee,islets,prometheus,panamanian,thunderbolt,terraced,stara,shipwrecks,futebol,faroese,sharqi,aldermen,zeitung,unify,formula_24,humanism,syntactic,earthen,blyth,taxed,rescinded,suleiman,cymru,dwindled,vitality,superieure,resupply,adolphe,ardennes,rajiv,profiling,olympique,gestation,interfaith,milosevic,tagline,funerary,druze,silvery,plough,shrubland,relaunch,disband,nunatak,minimizing,excessively,waned,attaching,luminosity,bugle,encampment,electrostatic,minesweeper,dubrovnik,rufous,greenock,hochschule,assyrians,extracting,malnutrition,priya,attainment,anhui,connotations,predicate,seabirds,deduced,pseudonyms,gopal,plovdiv,refineries,imitated,kwazulu,terracotta,tenets,discourses,brandeis,whigs,dominions,pulmonate,landslides,tutors,determinant,richelieu,farmstead,tubercles,technicolor,hegel,redundancy,greenpeace,shortening,mules,distilled,xxiii,fundamentalist,acrylic,outbuildings,lighted,corals,signaled,transistors,cavite,austerity,76ers,exposures,dionysius,outlining,commutative,permissible,knowledgeable,howrah,assemblage,inhibited,crewmen,mbit/s,pyramidal,aberdeenshire,bering,rotates,atheism,howitzer,saone,lancet,fermented,contradicted,materiel,ofsted,numeric,uniformity,josephus,nazarene,kuwaiti,noblemen,pediment,emergent,campaigner,akademi,murcia,perugia,gallen,allsvenskan,finned,cavities,matriculation,rosters,twickenham,signatory,propel,readable,contends,artisan,flamboyant,reggio,italo,fumbles,widescreen,rectangle,centimetres,collaborates,envoys,rijeka,phonological,thinly,refractive,civilisation,reductase,cognate,dalhousie,monticello,lighthouses,jitsu,luneburg,socialite,fermi,collectible,optioned,marquee,jokingly,architecturally,kabir,concubine,nationalisation,watercolor,wicklow,acharya,pooja,leibniz,rajendra,nationalized,stalemate,bloggers,glutamate,uplands,shivaji,carolingian,bucuresti,dasht,reappears,muscat,functionally,formulations,hinged,hainan,catechism,autosomal,incremental,asahi,coeur,diversification,multilateral,fewest,recombination,finisher,harrogate,hangul,feasts,photovoltaic,paget,liquidity,alluded,incubation,applauded,choruses,malagasy,hispanics,bequest,underparts,cassava,kazimierz,gastric,eradication,mowtowr,tyrosine,archbishopric,e9e9e9,unproductive,uxbridge,hydrolysis,harbours,officio,deterministic,devonport,kanagawa,breaches,freetown,rhinoceros,chandigarh,janos,sanatorium,liberator,inequalities,agonist,hydrophobic,constructors,nagorno,snowboarding,welcomes,subscribed,iloilo,resuming,catalysts,stallions,jawaharlal,harriers,definitively,roughriders,hertford,inhibiting,elgar,randomized,incumbents,episcopate,rainforests,yangon,improperly,kemal,interpreters,diverged,uttarakhand,umayyad,phnom,panathinaikos,shabbat,diode,jiangxi,forbidding,nozzle,artistry,licensee,processions,staffs,decimated,expressionism,shingle,palsy,ontology,mahayana,maribor,sunil,hostels,edwardian,jetty,freehold,overthrew,eukaryotic,schuylkill,rawalpindi,sheath,recessive,ferenc,mandibles,berlusconi,confessor,convergent,ababa,slugging,rentals,sephardic,equivalently,collagen,markov,dynamically,hailing,depressions,sprawling,fairgrounds,indistinguishable,plutarch,pressurized,banff,coldest,braunschweig,mackintosh,sociedad,wittgenstein,tromso,airbase,lecturers,subtitle,attaches,purified,contemplated,dreamworks,telephony,prophetic,rockland,aylesbury,biscay,coherence,aleksandar,judoka,pageants,theses,homelessness,luthor,sitcoms,hinterland,fifths,derwent,privateers,enigmatic,nationalistic,instructs,superimposed,conformation,tricycle,dusan,attributable,unbeknownst,laptops,etching,archbishops,ayatollah,cranial,gharbi,interprets,lackawanna,abingdon,saltwater,tories,lender,minaj,ancillary,ranching,pembrokeshire,topographical,plagiarism,murong,marque,chameleon,assertions,infiltrated,guildhall,reverence,schenectady,formula_25,kollam,notary,mexicana,initiates,abdication,basra,theorems,ionization,dismantling,eared,censors,budgetary,numeral,verlag,excommunicated,distinguishable,quarried,cagliari,hindustan,symbolizing,watertown,descartes,relayed,enclosures,militarily,sault,devolved,dalian,djokovic,filaments,staunton,tumour,curia,villainous,decentralized,galapagos,moncton,quartets,onscreen,necropolis,brasileiro,multipurpose,alamos,comarca,jorgen,concise,mercia,saitama,billiards,entomologist,montserrat,lindbergh,commuting,lethbridge,phoenician,deviations,anaerobic,denouncing,redoubt,fachhochschule,principalities,negros,announcers,seconded,parrots,konami,revivals,approving,devotee,riyadh,overtook,morecambe,lichen,expressionist,waterline,silverstone,geffen,sternites,aspiration,behavioural,grenville,tripura,mediums,genders,pyotr,charlottesville,sacraments,programmable,ps100,shackleton,garonne,sumerian,surpass,authorizing,interlocking,lagoons,voiceless,advert,steeple,boycotted,alouettes,yosef,oxidative,sassanid,benefiting,sayyid,nauru,predetermined,idealism,maxillary,polymerization,semesters,munchen,conor,outfitted,clapham,progenitor,gheorghe,observational,recognitions,numerically,colonized,hazrat,indore,contaminants,fatality,eradicate,assyria,convocation,cameos,skillful,skoda,corfu,confucius,overtly,ramadan,wollongong,placements,d.c..,permutation,contemporaneous,voltages,elegans,universitat,samar,plunder,dwindling,neuter,antonin,sinhala,campania,solidified,stanzas,fibrous,marburg,modernize,sorcery,deutscher,florets,thakur,disruptive,infielder,disintegration,internazionale,vicariate,effigy,tripartite,corrective,klamath,environs,leavenworth,sandhurst,workmen,compagnie,hoseynabad,strabo,palisades,ordovician,sigurd,grandsons,defection,viacom,sinhalese,innovator,uncontrolled,slavonic,indexes,refrigeration,aircrew,superbike,resumption,neustadt,confrontations,arras,hindenburg,ripon,embedding,isomorphism,dwarves,matchup,unison,lofty,argos,louth,constitutionally,transitive,newington,facelift,degeneration,perceptual,aviators,enclosing,igneous,symbolically,academician,constitutionality,iso/iec,sacrificial,maturation,apprentices,enzymology,naturalistic,hajji,arthropods,abbess,vistula,scuttled,gradients,pentathlon,etudes,freedmen,melaleuca,thrice,conductive,sackville,franciscans,stricter,golds,kites,worshiped,monsignor,trios,orally,tiered,primacy,bodywork,castleford,epidemics,alveolar,chapelle,chemists,hillsboro,soulful,warlords,ngati,huguenot,diurnal,remarking,luger,motorways,gauss,jahan,cutoff,proximal,bandai,catchphrase,jonubi,ossetia,codename,codice_2,throated,itinerant,chechnya,riverfront,leela,evoked,entailed,zamboanga,rejoining,circuitry,haymarket,khartoum,feuds,braced,miyazaki,mirren,lubusz,caricature,buttresses,attrition,characterizes,widnes,evanston,materialism,contradictions,marist,midrash,gainsborough,ulithi,turkmen,vidya,escuela,patrician,inspirations,reagent,premierships,humanistic,euphrates,transitioning,belfry,zedong,adaption,kaliningrad,lobos,epics,waiver,coniferous,polydor,inductee,refitted,moraine,unsatisfactory,worsening,polygamy,rajya,nested,subgenre,broadside,stampeders,lingua,incheon,pretender,peloton,persuading,excitation,multan,predates,tonne,brackish,autoimmune,insulated,podcasts,iraqis,bodybuilding,condominiums,midlothian,delft,debtor,asymmetrical,lycaenidae,forcefully,pathogenic,tamaulipas,andaman,intravenous,advancements,senegalese,chronologically,realigned,inquirer,eusebius,dekalb,additives,shortlist,goldwater,hindustani,auditing,caterpillars,pesticide,nakhon,ingestion,lansdowne,traditionalist,northland,thunderbirds,josip,nominating,locale,ventricular,animators,verandah,epistles,surveyors,anthems,dredd,upheaval,passaic,anatolian,svalbard,associative,floodplain,taranaki,estuaries,irreducible,beginners,hammerstein,allocate,coursework,secreted,counteract,handwritten,foundational,passover,discoverer,decoding,wares,bourgeoisie,playgrounds,nazionale,abbreviations,seanad,golan,mishra,godavari,rebranding,attendances,backstory,interrupts,lettered,hasbro,ultralight,hormozgan,armee,moderne,subdue,disuse,improvisational,enrolment,persists,moderated,carinthia,hatchback,inhibitory,capitalized,anatoly,abstracts,albemarle,bergamo,insolvency,sentai,cellars,walloon,joked,kashmiri,dirac,materialized,renomination,homologous,gusts,eighteens,centrifugal,storied,baluchestan,formula_26,poincare,vettel,infuriated,gauges,streetcars,vedanta,stately,liquidated,goguryeo,swifts,accountancy,levee,acadian,hydropower,eustace,comintern,allotment,designating,torsion,molding,irritation,aerobic,halen,concerted,plantings,garrisoned,gramophone,cytoplasm,onslaught,requisitioned,relieving,genitive,centrist,jeong,espanola,dissolving,chatterjee,sparking,connaught,varese,arjuna,carpathian,empowering,meteorologist,decathlon,opioid,hohenzollern,fenced,ibiza,avionics,footscray,scrum,discounts,filament,directories,a.f.c,stiffness,quaternary,adventurers,transmits,harmonious,taizong,radiating,germantown,ejection,projectors,gaseous,nahuatl,vidyalaya,nightlife,redefined,refuted,destitute,arista,potters,disseminated,distanced,jamboree,kaohsiung,tilted,lakeshore,grained,inflicting,kreis,novelists,descendents,mezzanine,recast,fatah,deregulation,ac/dc,australis,kohgiluyeh,boreal,goths,authoring,intoxicated,nonpartisan,theodosius,pyongyang,shree,boyhood,sanfl,plenipotentiary,photosynthesis,presidium,sinaloa,honshu,texan,avenida,transmembrane,malays,acropolis,catalunya,vases,inconsistencies,methodists,quell,suisse,banat,simcoe,cercle,zealanders,discredited,equine,sages,parthian,fascists,interpolation,classifying,spinoff,yehuda,cruised,gypsum,foaled,wallachia,saraswati,imperialist,seabed,footnotes,nakajima,locales,schoolmaster,drosophila,bridgehead,immanuel,courtier,bookseller,niccolo,stylistically,portmanteau,superleague,konkani,millimetres,arboreal,thanjavur,emulation,sounders,decompression,commoners,infusion,methodological,osage,rococo,anchoring,bayreuth,formula_27,abstracting,symbolized,bayonne,electrolyte,rowed,corvettes,traversing,editorship,sampler,presidio,curzon,adirondack,swahili,rearing,bladed,lemur,pashtun,behaviours,bottling,zaire,recognisable,systematics,leeward,formulae,subdistricts,smithfield,vijaya,buoyancy,boosting,cantonal,rishi,airflow,kamakura,adana,emblems,aquifer,clustering,husayn,woolly,wineries,montessori,turntable,exponentially,caverns,espoused,pianists,vorpommern,vicenza,latterly,o'rourke,williamstown,generale,kosice,duisburg,poirot,marshy,mismanagement,mandalay,dagenham,universes,chiral,radiated,stewards,vegan,crankshaft,kyrgyz,amphibian,cymbals,infrequently,offenbach,environmentalist,repatriated,permutations,midshipmen,loudoun,refereed,bamberg,ornamented,nitric,selim,translational,dorsum,annunciation,gippsland,reflector,informational,regia,reactionary,ahmet,weathering,erlewine,legalized,berne,occupant,divas,manifests,analyzes,disproportionate,mitochondria,totalitarian,paulista,interscope,anarcho,correlate,brookfield,elongate,brunel,ordinal,precincts,volatility,equaliser,hittite,somaliland,ticketing,monochrome,ubuntu,chhattisgarh,titleholder,ranches,referendums,blooms,accommodates,merthyr,religiously,ryukyu,tumultuous,checkpoints,anode,mi'kmaq,cannonball,punctuation,remodelled,assassinations,criminology,alternates,yonge,pixar,namibian,piraeus,trondelag,hautes,lifeboats,shoal,atelier,vehemently,sadat,postcode,jainism,lycoming,undisturbed,lutherans,genomics,popmatters,tabriz,isthmian,notched,autistic,horsham,mites,conseil,bloomsbury,seung,cybertron,idris,overhauled,disbandment,idealized,goldfields,worshippers,lobbyist,ailments,paganism,herbarium,athenians,messerschmitt,faraday,entangled,'olya,untreated,criticising,howitzers,parvati,lobed,debussy,atonement,tadeusz,permeability,mueang,sepals,degli,optionally,fuelled,follies,asterisk,pristina,lewiston,congested,overpass,affixed,pleads,telecasts,stanislaus,cryptographic,friesland,hamstring,selkirk,antisubmarine,inundated,overlay,aggregates,fleur,trolleybus,sagan,ibsen,inductees,beltway,tiled,ladders,cadbury,laplace,ascetic,micronesia,conveying,bellingham,cleft,batches,usaid,conjugation,macedon,assisi,reappointed,brine,jinnah,prairies,screenwriting,oxidized,despatches,linearly,fertilizers,brazilians,absorbs,wagga,modernised,scorsese,ashraf,charlestown,esque,habitable,nizhny,lettres,tuscaloosa,esplanade,coalitions,carbohydrates,legate,vermilion,standardised,galleria,psychoanalytic,rearrangement,substation,competency,nationalised,reshuffle,reconstructions,mehdi,bougainville,receivership,contraception,enlistment,conducive,aberystwyth,solicitors,dismisses,fibrosis,montclair,homeowner,surrealism,s.h.i.e.l.d,peregrine,compilers,1790s,parentage,palmas,rzeszow,worldview,eased,svenska,housemate,bundestag,originator,enlisting,outwards,reciprocity,formula_28,carbohydrate,democratically,firefighting,romagna,acknowledgement,khomeini,carbide,quests,vedas,characteristically,guwahati,brixton,unintended,brothels,parietal,namur,sherbrooke,moldavian,baruch,milieu,undulating,laurier,entre,dijon,ethylene,abilene,heracles,paralleling,ceres,dundalk,falun,auspicious,chisinau,polarity,foreclosure,templates,ojibwe,punic,eriksson,biden,bachchan,glaciation,spitfires,norsk,nonviolent,heidegger,algonquin,capacitance,cassettes,balconies,alleles,airdate,conveys,replays,classifies,infrequent,amine,cuttings,rarer,woking,olomouc,amritsar,rockabilly,illyrian,maoist,poignant,tempore,stalinist,segmented,bandmate,mollusc,muhammed,totalled,byrds,tendered,endogenous,kottayam,aisne,oxidase,overhears,illustrators,verve,commercialization,purplish,directv,moulded,lyttelton,baptismal,captors,saracens,georgios,shorten,polity,grids,fitzwilliam,sculls,impurities,confederations,akhtar,intangible,oscillations,parabolic,harlequin,maulana,ovate,tanzanian,singularity,confiscation,qazvin,speyer,phonemes,overgrown,vicarage,gurion,undocumented,niigata,thrones,preamble,stave,interment,liiga,ataturk,aphrodite,groupe,indentured,habsburgs,caption,utilitarian,ozark,slovenes,reproductions,plasticity,serbo,dulwich,castel,barbuda,salons,feuding,lenape,wikileaks,swamy,breuning,shedding,afield,superficially,operationally,lamented,okanagan,hamadan,accolade,furthering,adolphus,fyodor,abridged,cartoonists,pinkish,suharto,cytochrome,methylation,debit,colspan=9|,refine,taoist,signalled,herding,leaved,bayan,fatherland,rampart,sequenced,negation,storyteller,occupiers,barnabas,pelicans,nadir,conscripted,railcars,prerequisite,furthered,columba,carolinas,markup,gwalior,franche,chaco,eglinton,ramparts,rangoon,metabolites,pollination,croat,televisa,holyoke,testimonial,setlist,safavid,sendai,georgians,shakespearean,galleys,regenerative,krzysztof,overtones,estado,barbary,cherbourg,obispo,sayings,composites,sainsbury,deliberation,cosmological,mahalleh,embellished,ascap,biala,pancras,calumet,grands,canvases,antigens,marianas,defenseman,approximated,seedlings,soren,stele,nuncio,immunology,testimonies,glossary,recollections,suitability,tampere,venous,cohomology,methanol,echoing,ivanovich,warmly,sterilization,imran,multiplying,whitechapel,undersea,xuanzong,tacitus,bayesian,roundhouse,correlations,rioters,molds,fiorentina,bandmates,mezzo,thani,guerilla,200th,premiums,tamils,deepwater,chimpanzees,tribesmen,selwyn,globo,turnovers,punctuated,erode,nouvelle,banbury,exponents,abolishing,helical,maimonides,endothelial,goteborg,infield,encroachment,cottonwood,mazowiecki,parable,saarbrucken,reliever,epistemology,artistes,enrich,rationing,formula_29,palmyra,subfamilies,kauai,zoran,fieldwork,arousal,creditor,friuli,celts,comoros,equated,escalation,negev,tallied,inductive,anion,netanyahu,mesoamerican,lepidoptera,aspirated,remit,westmorland,italic,crosse,vaclav,fuego,owain,balmain,venetians,ethnicities,deflected,ticino,apulia,austere,flycatcher,reprising,repressive,hauptbahnhof,subtype,ophthalmology,summarizes,eniwetok,colonisation,subspace,nymphalidae,earmarked,tempe,burnet,crests,abbots,norwegians,enlarge,ashoka,frankfort,livorno,malware,renters,singly,iliad,moresby,rookies,gustavus,affirming,alleges,legume,chekhov,studded,abdicated,suzhou,isidore,townsite,repayment,quintus,yankovic,amorphous,constructor,narrowing,industrialists,tanganyika,capitalization,connective,mughals,rarities,aerodynamics,worthing,antalya,diagnostics,shaftesbury,thracian,obstetrics,benghazi,multiplier,orbitals,livonia,roscommon,intensify,ravel,oaths,overseer,locomotion,necessities,chickasaw,strathclyde,treviso,erfurt,aortic,contemplation,accrington,markazi,predeceased,hippocampus,whitecaps,assemblyman,incursion,ethnography,extraliga,reproducing,directorship,benzene,byway,stupa,taxable,scottsdale,onondaga,favourably,countermeasures,lithuanians,thatched,deflection,tarsus,consuls,annuity,paralleled,contextual,anglian,klang,hoisted,multilingual,enacting,samaj,taoiseach,carthaginian,apologised,hydrology,entrant,seamless,inflorescences,mugabe,westerners,seminaries,wintering,penzance,mitre,sergeants,unoccupied,delimitation,discriminate,upriver,abortive,nihon,bessarabia,calcareous,buffaloes,patil,daegu,streamline,berks,chaparral,laity,conceptions,typified,kiribati,threaded,mattel,eccentricity,signified,patagonia,slavonia,certifying,adnan,astley,sedition,minimally,enumerated,nikos,goalless,walid,narendra,causa,missoula,coolant,dalek,outcrop,hybridization,schoolchildren,peasantry,afghans,confucianism,shahr,gallic,tajik,kierkegaard,sauvignon,commissar,patriarchs,tuskegee,prussians,laois,ricans,talmudic,officiating,aesthetically,baloch,antiochus,separatists,suzerainty,arafat,shading,u.s.c,chancellors,inc..,toolkit,nepenthes,erebidae,solicited,pratap,kabbalah,alchemist,caltech,darjeeling,biopic,spillway,kaiserslautern,nijmegen,bolstered,neath,pahlavi,eugenics,bureaus,retook,northfield,instantaneous,deerfield,humankind,selectivity,putative,boarders,cornhuskers,marathas,raikkonen,aliabad,mangroves,garages,gulch,karzai,poitiers,chernobyl,thane,alexios,belgrano,scion,solubility,urbanized,executable,guizhou,nucleic,tripled,equalled,harare,houseguests,potency,ghazi,repeater,overarching,regrouped,broward,ragtime,d'art,nandi,regalia,campsites,mamluk,plating,wirral,presumption,zenit,archivist,emmerdale,decepticon,carabidae,kagoshima,franconia,guarani,formalism,diagonally,submarginal,denys,walkways,punts,metrolink,hydrographic,droplets,upperside,martyred,hummingbird,antebellum,curiously,mufti,friary,chabad,czechs,shaykh,reactivity,berklee,turbonilla,tongan,sultans,woodville,unlicensed,enmity,dominicans,operculum,quarrying,watercolour,catalyzed,gatwick,'what,mesozoic,auditors,shizuoka,footballing,haldane,telemundo,appended,deducted,disseminate,o'shea,pskov,abrasive,entente,gauteng,calicut,lemurs,elasticity,suffused,scopula,staining,upholding,excesses,shostakovich,loanwords,naidu,championnat,chromatography,boasting,goaltenders,engulfed,salah,kilogram,morristown,shingles,shi'a,labourer,renditions,frantisek,jekyll,zonal,nanda,sheriffs,eigenvalues,divisione,endorsing,ushered,auvergne,cadres,repentance,freemasons,utilising,laureates,diocletian,semiconductors,o'grady,vladivostok,sarkozy,trackage,masculinity,hydroxyl,mervyn,muskets,speculations,gridiron,opportunistic,mascots,aleutian,fillies,sewerage,excommunication,borrowers,capillary,trending,sydenham,synthpop,rajah,cagayan,deportes,kedah,faure,extremism,michoacan,levski,culminates,occitan,bioinformatics,unknowingly,inciting,emulated,footpaths,piacenza,dreadnought,viceroyalty,oceanographic,scouted,combinatorial,ornithologist,cannibalism,mujahideen,independiente,cilicia,hindwing,minimized,odeon,gyorgy,rubles,purchaser,collieries,kickers,interurban,coiled,lynchburg,respondent,plzen,detractors,etchings,centering,intensification,tomography,ranjit,warblers,retelling,reinstatement,cauchy,modulus,redirected,evaluates,beginner,kalateh,perforated,manoeuvre,scrimmage,internships,megawatts,mottled,haakon,tunbridge,kalyan,summarised,sukarno,quetta,canonized,henryk,agglomeration,coahuila,diluted,chiropractic,yogyakarta,talladega,sheik,cation,halting,reprisals,sulfuric,musharraf,sympathizers,publicised,arles,lectionary,fracturing,startups,sangha,latrobe,rideau,ligaments,blockading,cremona,lichens,fabaceae,modulated,evocative,embodies,battersea,indistinct,altai,subsystem,acidity,somatic,formula_30,tariq,rationality,sortie,ashlar,pokal,cytoplasmic,valour,bangla,displacing,hijacking,spectrometry,westmeath,weill,charing,goias,revolvers,individualized,tenured,nawaz,piquet,chanted,discard,bernd,phalanx,reworking,unilaterally,subclass,yitzhak,piloting,circumvent,disregarded,semicircular,viscous,tibetans,endeavours,retaliated,cretan,vienne,workhouse,sufficiency,aurangzeb,legalization,lipids,expanse,eintracht,sanjak,megas,125th,bahraini,yakima,eukaryotes,thwart,affirmation,peloponnese,retailing,carbonyl,chairwoman,macedonians,dentate,rockaway,correctness,wealthier,metamorphic,aragonese,fermanagh,pituitary,schrodinger,evokes,spoiler,chariots,akita,genitalia,combe,confectionery,desegregation,experiential,commodores,persepolis,viejo,restorations,virtualization,hispania,printmaking,stipend,yisrael,theravada,expended,radium,tweeted,polygonal,lippe,charente,leveraged,cutaneous,fallacy,fragrant,bypasses,elaborately,rigidity,majid,majorca,kongo,plasmodium,skits,audiovisual,eerste,staircases,prompts,coulthard,northwestward,riverdale,beatrix,copyrights,prudential,communicates,mated,obscenity,asynchronous,analyse,hansa,searchlight,farnborough,patras,asquith,qarah,contours,fumbled,pasteur,redistributed,almeria,sanctuaries,jewry,israelite,clinicians,koblenz,bookshop,affective,goulburn,panelist,sikorsky,cobham,mimics,ringed,portraiture,probabilistic,girolamo,intelligible,andalusian,jalal,athenaeum,eritrean,auxiliaries,pittsburg,devolution,sangam,isolating,anglers,cronulla,annihilated,kidderminster,synthesize,popularised,theophilus,bandstand,innumerable,chagrin,retroactively,weser,multiples,birdlife,goryeo,pawnee,grosser,grappling,tactile,ahmadinejad,turboprop,erdogan,matchday,proletarian,adhering,complements,austronesian,adverts,luminaries,archeology,impressionism,conifer,sodomy,interracial,platoons,lessen,postings,pejorative,registrations,cookery,persecutions,microbes,audits,idiosyncratic,subsp,suspensions,restricts,colouring,ratify,instrumentals,nucleotides,sulla,posits,bibliotheque,diameters,oceanography,instigation,subsumed,submachine,acceptor,legation,borrows,sedge,discriminated,loaves,insurers,highgate,detectable,abandons,kilns,sportscaster,harwich,iterations,preakness,arduous,tensile,prabhu,shortwave,philologist,shareholding,vegetative,complexities,councilors,distinctively,revitalize,automaton,amassing,montreux,khanh,surabaya,nurnberg,pernambuco,cuisines,charterhouse,firsts,tercera,inhabitant,homophobia,naturalism,einar,powerplant,coruna,entertainments,whedon,rajputs,raton,democracies,arunachal,oeuvre,wallonia,jeddah,trolleybuses,evangelism,vosges,kiowa,minimise,encirclement,undertakes,emigrant,beacons,deepened,grammars,publius,preeminent,seyyed,repechage,crafting,headingley,osteopathic,lithography,hotly,bligh,inshore,betrothed,olympians,formula_31,dissociation,trivandrum,arran,petrovic,stettin,disembarked,simplification,bronzes,philo,acrobatic,jonsson,conjectured,supercharged,kanto,detects,cheeses,correlates,harmonics,lifecycle,sudamericana,reservists,decayed,elitserien,parametric,113th,dusky,hogarth,modulo,symbiotic,monopolies,discontinuation,converges,southerners,tucuman,eclipses,enclaves,emits,famicom,caricatures,artistically,levelled,mussels,erecting,mouthparts,cunard,octaves,crucible,guardia,unusable,lagrangian,droughts,ephemeral,pashto,canis,tapering,sasebo,silurian,metallurgical,outscored,evolves,reissues,sedentary,homotopy,greyhawk,reagents,inheriting,onshore,tilting,rebuffed,reusable,naturalists,basingstoke,insofar,offensives,dravidian,curators,planks,rajan,isoforms,flagstaff,preside,globular,egalitarian,linkages,biographers,goalscorers,molybdenum,centralised,nordland,jurists,ellesmere,rosberg,hideyoshi,restructure,biases,borrower,scathing,redress,tunnelling,workflow,magnates,mahendra,dissenters,plethora,transcriptions,handicrafts,keyword,xi'an,petrograd,unser,prokofiev,90deg,madan,bataan,maronite,kearny,carmarthen,termini,consulates,disallowed,rockville,bowery,fanzine,docklands,bests,prohibitions,yeltsin,selassie,naturalization,realisation,dispensary,tribeca,abdulaziz,pocahontas,stagnation,pamplona,cuneiform,propagating,subsurface,christgau,epithelium,schwerin,lynching,routledge,hanseatic,upanishad,glebe,yugoslavian,complicity,endowments,girona,mynetworktv,entomology,plinth,ba'ath,supercup,torus,akkadian,salted,englewood,commandery,belgaum,prefixed,colorless,dartford,enthroned,caesarea,nominative,sandown,safeguards,hulled,formula_32,leamington,dieppe,spearhead,generalizations,demarcation,llanelli,masque,brickwork,recounting,sufism,strikingly,petrochemical,onslow,monologues,emigrating,anderlecht,sturt,hossein,sakhalin,subduction,novices,deptford,zanjan,airstrikes,coalfield,reintroduction,timbaland,hornby,messianic,stinging,universalist,situational,radiocarbon,strongman,rowling,saloons,traffickers,overran,fribourg,cambrai,gravesend,discretionary,finitely,archetype,assessor,pilipinas,exhumed,invocation,interacted,digitized,timisoara,smelter,teton,sexism,precepts,srinagar,pilsudski,carmelite,hanau,scoreline,hernando,trekking,blogging,fanbase,wielded,vesicles,nationalization,banja,rafts,motoring,luang,takeda,girder,stimulates,histone,sunda,nanoparticles,attains,jumpers,catalogued,alluding,pontus,ancients,examiners,shinkansen,ribbentrop,reimbursement,pharmacological,ramat,stringed,imposes,cheaply,transplanted,taiping,mizoram,looms,wallabies,sideman,kootenay,encased,sportsnet,revolutionized,tangier,benthic,runic,pakistanis,heatseekers,shyam,mishnah,presbyterians,stadt,sutras,straddles,zoroastrian,infer,fueling,gymnasts,ofcom,gunfight,journeyman,tracklist,oshawa,ps500,pa'in,mackinac,xiongnu,mississippian,breckinridge,freemason,bight,autoroute,liberalization,distantly,thrillers,solomons,presumptive,romanization,anecdotal,bohemians,unpaved,milder,concurred,spinners,alphabets,strenuous,rivieres,kerrang,mistreatment,dismounted,intensively,carlist,dancehall,shunting,pluralism,trafficked,brokered,bonaventure,bromide,neckar,designates,malian,reverses,sotheby,sorghum,serine,environmentalists,languedoc,consulship,metering,bankstown,handlers,militiamen,conforming,regularity,pondicherry,armin,capsized,consejo,capitalists,drogheda,granular,purged,acadians,endocrine,intramural,elicit,terns,orientations,miklos,omitting,apocryphal,slapstick,brecon,pliocene,affords,typography,emigre,tsarist,tomasz,beset,nishi,necessitating,encyclical,roleplaying,journeyed,inflow,sprints,progressives,novosibirsk,cameroonian,ephesus,speckled,kinshasa,freiherr,burnaby,dalmatian,torrential,rigor,renegades,bhakti,nurburgring,cosimo,convincingly,reverting,visayas,lewisham,charlottetown,charadriiformesfamily,transferable,jodhpur,converters,deepening,camshaft,underdeveloped,protease,polonia,uterine,quantify,tobruk,dealerships,narasimha,fortran,inactivity,1780s,victors,categorised,naxos,workstation,skink,sardinian,chalice,precede,dammed,sondheim,phineas,tutored,sourcing,uncompromising,placer,tyneside,courtiers,proclaims,pharmacies,hyogo,booksellers,sengoku,kursk,spectrometer,countywide,wielkopolski,bobsleigh,shetty,llywelyn,consistory,heretics,guinean,cliches,individualism,monolithic,imams,usability,bursa,deliberations,railings,torchwood,inconsistency,balearic,stabilizer,demonstrator,facet,radioactivity,outboard,educates,d'oyly,heretical,handover,jurisdictional,shockwave,hispaniola,conceptually,routers,unaffiliated,trentino,formula_33,cypriots,intervenes,neuchatel,formulating,maggiore,delisted,alcohols,thessaly,potable,estimator,suborder,fluency,mimicry,clergymen,infrastructures,rivals.com,baroda,subplot,majlis,plano,clinching,connotation,carinae,savile,intercultural,transcriptional,sandstones,ailerons,annotations,impresario,heinkel,scriptural,intermodal,astrological,ribbed,northeastward,posited,boers,utilise,kalmar,phylum,breakwater,skype,textured,guideline,azeri,rimini,massed,subsidence,anomalous,wolfsburg,polyphonic,accrediting,vodacom,kirov,captaining,kelantan,logie,fervent,eamon,taper,bundeswehr,disproportionately,divination,slobodan,pundits,hispano,kinetics,reunites,makati,ceasing,statistician,amending,chiltern,eparchy,riverine,melanoma,narragansett,pagans,raged,toppled,breaching,zadar,holby,dacian,ochre,velodrome,disparities,amphoe,sedans,webpage,williamsport,lachlan,groton,baring,swastika,heliport,unwillingness,razorbacks,exhibitors,foodstuffs,impacting,tithe,appendages,dermot,subtypes,nurseries,balinese,simulating,stary,remakes,mundi,chautauqua,geologically,stockade,hakka,dilute,kalimantan,pahang,overlapped,fredericton,baha'u'llah,jahangir,damping,benefactors,shomali,triumphal,cieszyn,paradigms,shielded,reggaeton,maharishi,zambian,shearing,golestan,mirroring,partitioning,flyover,songbook,incandescent,merrimack,huguenots,sangeet,vulnerabilities,trademarked,drydock,tantric,honoris,queenstown,labelling,iterative,enlists,statesmen,anglicans,herge,qinghai,burgundian,islami,delineated,zhuge,aggregated,banknote,qatari,suitably,tapestries,asymptotic,charleroi,majorities,pyramidellidae,leanings,climactic,tahir,ramsar,suppressor,revisionist,trawler,ernakulam,penicillium,categorization,slits,entitlement,collegium,earths,benefice,pinochet,puritans,loudspeaker,stockhausen,eurocup,roskilde,alois,jaroslav,rhondda,boutiques,vigor,neurotransmitter,ansar,malden,ferdinando,sported,relented,intercession,camberwell,wettest,thunderbolts,positional,oriel,cloverleaf,penalized,shoshone,rajkumar,completeness,sharjah,chromosomal,belgians,woolen,ultrasonic,sequentially,boleyn,mordella,microsystems,initiator,elachista,mineralogy,rhododendron,integrals,compostela,hamza,sawmills,stadio,berlioz,maidens,stonework,yachting,tappeh,myocardial,laborer,workstations,costumed,nicaea,lanark,roundtable,mashhad,nablus,algonquian,stuyvesant,sarkar,heroines,diwan,laments,intonation,intrigues,almaty,feuded,grandes,algarve,rehabilitate,macrophages,cruciate,dismayed,heuristic,eliezer,kozhikode,covalent,finalised,dimorphism,yaroslavl,overtaking,leverkusen,middlebury,feeders,brookings,speculates,insoluble,lodgings,jozsef,cysteine,shenyang,habilitation,spurious,brainchild,mtdna,comique,albedo,recife,partick,broadening,shahi,orientated,himalaya,swabia,palme,mennonites,spokeswoman,conscripts,sepulchre,chartres,eurozone,scaffold,invertebrate,parishad,bagan,heian,watercolors,basse,supercomputer,commences,tarragona,plainfield,arthurian,functor,identically,murex,chronicling,pressings,burrowing,histoire,guayaquil,goalkeeping,differentiable,warburg,machining,aeneas,kanawha,holocene,ramesses,reprisal,qingdao,avatars,turkestan,cantatas,besieging,repudiated,teamsters,equipping,hydride,ahmadiyya,euston,bottleneck,computations,terengganu,kalinga,stela,rediscovery,'this,azhar,stylised,karelia,polyethylene,kansai,motorised,lounges,normalization,calculators,1700s,goalkeepers,unfolded,commissary,cubism,vignettes,multiverse,heaters,briton,sparingly,childcare,thorium,plock,riksdag,eunuchs,catalysis,limassol,perce,uncensored,whitlam,ulmus,unites,mesopotamian,refraction,biodiesel,forza,fulda,unseated,mountbatten,shahrak,selenium,osijek,mimicking,antimicrobial,axons,simulcasting,donizetti,swabian,sportsmen,hafiz,neared,heraclius,locates,evaded,subcarpathian,bhubaneswar,negeri,jagannath,thaksin,aydin,oromo,lateran,goldsmiths,multiculturalism,cilia,mihai,evangelists,lorient,qajar,polygons,vinod,mechanised,anglophone,prefabricated,mosses,supervillain,airliners,biofuels,iodide,innovators,valais,wilberforce,logarithm,intelligentsia,dissipation,sanctioning,duchies,aymara,porches,simulators,mostar,telepathic,coaxial,caithness,burghs,fourths,stratification,joaquim,scribes,meteorites,monarchist,germination,vries,desiring,replenishment,istria,winemaking,tammany,troupes,hetman,lanceolate,pelagic,triptych,primeira,scant,outbound,hyphae,denser,bentham,basie,normale,executes,ladislaus,kontinental,herat,cruiserweight,activision,customization,manoeuvres,inglewood,northwood,waveform,investiture,inpatient,alignments,kiryat,rabat,archimedes,ustad,monsanto,archetypal,kirkby,sikhism,correspondingly,catskill,overlaid,petrels,widowers,unicameral,federalists,metalcore,gamerankings,mussel,formula_34,lymphocytes,cystic,southgate,vestiges,immortals,kalam,strove,amazons,pocono,sociologists,sopwith,adheres,laurens,caregivers,inspecting,transylvanian,rebroadcast,rhenish,miserables,pyrams,blois,newtonian,carapace,redshirt,gotland,nazir,unilever,distortions,linebackers,federalism,mombasa,lumen,bernoulli,favouring,aligarh,denounce,steamboats,dnieper,stratigraphic,synths,bernese,umass,icebreaker,guanajuato,heisenberg,boldly,diodes,ladakh,dogmatic,scriptwriter,maritimes,battlestar,symposia,adaptable,toluca,bhavan,nanking,ieyasu,picardy,soybean,adalbert,brompton,deutsches,brezhnev,glandular,laotian,hispanicized,ibadan,personification,dalit,yamuna,regio,dispensed,yamagata,zweibrucken,revising,fandom,stances,participle,flavours,khitan,vertebral,crores,mayaguez,dispensation,guntur,undefined,harpercollins,unionism,meena,leveling,philippa,refractory,telstra,judea,attenuation,pylons,elaboration,elegy,edging,gracillariidae,residencies,absentia,reflexive,deportations,dichotomy,stoves,sanremo,shimon,menachem,corneal,conifers,mordellidae,facsimile,diagnoses,cowper,citta,viticulture,divisive,riverview,foals,mystics,polyhedron,plazas,airspeed,redgrave,motherland,impede,multiplicity,barrichello,airships,pharmacists,harvester,clays,payloads,differentiating,popularize,caesars,tunneling,stagnant,circadian,indemnity,sensibilities,musicology,prefects,serfs,metra,lillehammer,carmarthenshire,kiosks,welland,barbican,alkyl,tillandsia,gatherers,asociacion,showings,bharati,brandywine,subversion,scalable,pfizer,dawla,barium,dardanelles,nsdap,konig,ayutthaya,hodgkin,sedimentation,completions,purchasers,sponsorships,maximizing,banked,taoism,minot,enrolls,fructose,aspired,capuchin,outages,artois,carrollton,totality,osceola,pawtucket,fontainebleau,converged,queretaro,competencies,botha,allotments,sheaf,shastri,obliquely,banding,catharines,outwardly,monchengladbach,driest,contemplative,cassini,ranga,pundit,kenilworth,tiananmen,disulfide,formula_35,townlands,codice_3,looping,caravans,rachmaninoff,segmentation,fluorine,anglicised,gnostic,dessau,discern,reconfigured,altrincham,rebounding,battlecruiser,ramblers,1770s,convective,triomphe,miyagi,mourners,instagram,aloft,breastfeeding,courtyards,folkestone,changsha,kumamoto,saarland,grayish,provisionally,appomattox,uncial,classicism,mahindra,elapsed,supremes,monophyletic,cautioned,formula_36,noblewoman,kernels,sucre,swaps,bengaluru,grenfell,epicenter,rockhampton,worshipful,licentiate,metaphorical,malankara,amputated,wattle,palawan,tankobon,nobunaga,polyhedra,transduction,jilin,syrians,affinities,fluently,emanating,anglicized,sportscar,botanists,altona,dravida,chorley,allocations,kunming,luanda,premiering,outlived,mesoamerica,lingual,dissipating,impairments,attenborough,balustrade,emulator,bakhsh,cladding,increments,ascents,workington,qal'eh,winless,categorical,petrel,emphasise,dormer,toros,hijackers,telescopic,solidly,jankovic,cession,gurus,madoff,newry,subsystems,northside,talib,englishmen,farnese,holographic,electives,argonne,scrivener,predated,brugge,nauvoo,catalyses,soared,siddeley,graphically,powerlifting,funicular,sungai,coercive,fusing,uncertainties,locos,acetic,diverge,wedgwood,dressings,tiebreaker,didactic,vyacheslav,acreage,interplanetary,battlecruisers,sunbury,alkaloids,hairpin,automata,wielkie,interdiction,plugins,monkees,nudibranch,esporte,approximations,disabling,powering,characterisation,ecologically,martinsville,termen,perpetuated,lufthansa,ascendancy,motherboard,bolshoi,athanasius,prunus,dilution,invests,nonzero,mendocino,charan,banque,shaheed,counterculture,unita,voivode,hospitalization,vapour,supermarine,resistor,steppes,osnabruck,intermediates,benzodiazepines,sunnyside,privatized,geopolitical,ponta,beersheba,kievan,embody,theoretic,sangh,cartographer,blige,rotors,thruway,battlefields,discernible,demobilized,broodmare,colouration,sagas,policymakers,serialization,augmentation,hoare,frankfurter,transnistria,kinases,detachable,generational,converging,antiaircraft,khaki,bimonthly,coadjutor,arkhangelsk,kannur,buffers,livonian,northwich,enveloped,cysts,yokozuna,herne,beeching,enron,virginian,woollen,excepting,competitively,outtakes,recombinant,hillcrest,clearances,pathe,cumbersome,brasov,u.s.a,likud,christiania,cruciform,hierarchies,wandsworth,lupin,resins,voiceover,sitar,electrochemical,mediacorp,typhus,grenadiers,hepatic,pompeii,weightlifter,bosniak,oxidoreductase,undersecretary,rescuers,ranji,seleucid,analysing,exegesis,tenancy,toure,kristiansand,110th,carillon,minesweepers,poitou,acceded,palladian,redevelop,naismith,rifled,proletariat,shojo,hackensack,harvests,endpoint,kuban,rosenborg,stonehenge,authorisation,jacobean,revocation,compatriots,colliding,undetermined,okayama,acknowledgment,angelou,fresnel,chahar,ethereal,mg/kg,emmet,mobilised,unfavourable,cultura,characterizing,parsonage,skeptics,expressways,rabaul,medea,guardsmen,visakhapatnam,caddo,homophobic,elmwood,encircling,coexistence,contending,seljuk,mycologist,infertility,moliere,insolvent,covenants,underpass,holme,landesliga,workplaces,delinquency,methamphetamine,contrived,tableau,tithes,overlying,usurped,contingents,spares,oligocene,molde,beatification,mordechai,balloting,pampanga,navigators,flowered,debutant,codec,orogeny,newsletters,solon,ambivalent,ubisoft,archdeaconry,harpers,kirkus,jabal,castings,kazhagam,sylhet,yuwen,barnstaple,amidships,causative,isuzu,watchtower,granules,canaveral,remuneration,insurer,payout,horizonte,integrative,attributing,kiwis,skanderbeg,asymmetry,gannett,urbanism,disassembled,unaltered,precluded,melodifestivalen,ascends,plugin,gurkha,bisons,stakeholder,industrialisation,abbotsford,sextet,bustling,uptempo,slavia,choreographers,midwives,haram,javed,gazetteer,subsection,natively,weighting,lysine,meera,redbridge,muchmusic,abruzzo,adjoins,unsustainable,foresters,kbit/s,cosmopterigidae,secularism,poetics,causality,phonograph,estudiantes,ceausescu,universitario,adjoint,applicability,gastropods,nagaland,kentish,mechelen,atalanta,woodpeckers,lombards,gatineau,romansh,avraham,acetylcholine,perturbation,galois,wenceslaus,fuzhou,meandering,dendritic,sacristy,accented,katha,therapeutics,perceives,unskilled,greenhouses,analogues,chaldean,timbre,sloped,volodymyr,sadiq,maghreb,monogram,rearguard,caucuses,mures,metabolite,uyezd,determinism,theosophical,corbet,gaels,disruptions,bicameral,ribosomal,wolseley,clarksville,watersheds,tarsi,radon,milanese,discontinuous,aristotelian,whistleblower,representational,hashim,modestly,localised,atrial,hazara,ravana,troyes,appointees,rubus,morningside,amity,aberdare,ganglia,wests,zbigniew,aerobatic,depopulated,corsican,introspective,twinning,hardtop,shallower,cataract,mesolithic,emblematic,graced,lubrication,republicanism,voronezh,bastions,meissen,irkutsk,oboes,hokkien,sprites,tenet,individualist,capitulated,oakville,dysentery,orientalist,hillsides,keywords,elicited,incised,lagging,apoel,lengthening,attractiveness,marauders,sportswriter,decentralization,boltzmann,contradicts,draftsman,precipitate,solihull,norske,consorts,hauptmann,riflemen,adventists,syndromes,demolishing,customize,continuo,peripherals,seamlessly,linguistically,bhushan,orphanages,paraul,lessened,devanagari,quarto,responders,patronymic,riemannian,altoona,canonization,honouring,geodetic,exemplifies,republica,enzymatic,porters,fairmount,pampa,sufferers,kamchatka,conjugated,coachella,uthman,repositories,copious,headteacher,awami,phoneme,homomorphism,franconian,moorland,davos,quantified,kamloops,quarks,mayoralty,weald,peacekeepers,valerian,particulate,insiders,perthshire,caches,guimaraes,piped,grenadines,kosciuszko,trombonist,artemisia,covariance,intertidal,soybeans,beatified,ellipse,fruiting,deafness,dnipropetrovsk,accrued,zealous,mandala,causation,junius,kilowatt,bakeries,montpelier,airdrie,rectified,bungalows,toleration,debian,pylon,trotskyist,posteriorly,two-and-a-half,herbivorous,islamists,poetical,donne,wodehouse,frome,allium,assimilate,phonemic,minaret,unprofitable,darpa,untenable,leaflet,bitcoin,zahir,thresholds,argentino,jacopo,bespoke,stratified,wellbeing,shiite,basaltic,timberwolves,secrete,taunts,marathons,isomers,carre,consecrators,penobscot,pitcairn,sakha,crosstown,inclusions,impassable,fenders,indre,uscgc,jordi,retinue,logarithmic,pilgrimages,railcar,cashel,blackrock,macroscopic,aligning,tabla,trestle,certify,ronson,palps,dissolves,thickened,silicate,taman,walsingham,hausa,lowestoft,rondo,oleksandr,cuyahoga,retardation,countering,cricketing,holborn,identifiers,hells,geophysics,infighting,sculpting,balaji,webbed,irradiation,runestone,trusses,oriya,sojourn,forfeiture,colonize,exclaimed,eucharistic,lackluster,glazing,northridge,gutenberg,stipulates,macroeconomic,priori,outermost,annular,udinese,insulating,headliner,godel,polytope,megalithic,salix,sharapova,derided,muskegon,braintree,plateaus,confers,autocratic,isomer,interstitial,stamping,omits,kirtland,hatchery,evidences,intifada,111th,podgorica,capua,motivating,nuneaton,jakub,korsakov,amitabh,mundial,monrovia,gluten,predictor,marshalling,d'orleans,levers,touchscreen,brantford,fricative,banishment,descendent,antagonism,ludovico,loudspeakers,formula_37,livelihoods,manassas,steamships,dewsbury,uppermost,humayun,lures,pinnacles,dependents,lecce,clumps,observatories,paleozoic,dedicating,samiti,draughtsman,gauls,incite,infringing,nepean,pythagorean,convents,triumvirate,seigneur,gaiman,vagrant,fossa,byproduct,serrated,renfrewshire,sheltering,achaemenid,dukedom,catchers,sampdoria,platelet,bielefeld,fluctuating,phenomenology,strikeout,ethnology,prospectors,woodworking,tatra,wildfires,meditations,agrippa,fortescue,qureshi,wojciech,methyltransferase,accusative,saatchi,amerindian,volcanism,zeeland,toyama,vladimirovich,allege,polygram,redox,budgeted,advisories,nematode,chipset,starscream,tonbridge,hardening,shales,accompanist,paraded,phonographic,whitefish,sportive,audiobook,kalisz,hibernation,latif,duels,ps200,coxeter,nayak,safeguarding,cantabria,minesweeping,zeiss,dunams,catholicos,sawtooth,ontological,nicobar,bridgend,unclassified,intrinsically,hanoverian,rabbitohs,kenseth,alcalde,northumbrian,raritan,septuagint,presse,sevres,origen,dandenong,peachtree,intersected,impeded,usages,hippodrome,novara,trajectories,customarily,yardage,inflected,yanow,kalan,taverns,liguria,librettist,intermarriage,1760s,courant,gambier,infanta,ptolemaic,ukulele,haganah,sceptical,manchukuo,plexus,implantation,hilal,intersex,efficiencies,arbroath,hagerstown,adelphi,diario,marais,matti,lifes,coining,modalities,divya,bletchley,conserving,ivorian,mithridates,generative,strikeforce,laymen,toponymy,pogrom,satya,meticulously,agios,dufferin,yaakov,fortnightly,cargoes,deterrence,prefrontal,przemysl,mitterrand,commemorations,chatsworth,gurdwara,abuja,chakraborty,badajoz,geometries,artiste,diatonic,ganglion,presides,marymount,nanak,cytokines,feudalism,storks,rowers,widens,politico,evangelicals,assailants,pittsfield,allowable,bijapur,telenovelas,dichomeris,glenelg,herbivores,keita,inked,radom,fundraisers,constantius,boheme,portability,komnenos,crystallography,derrida,moderates,tavistock,fateh,spacex,disjoint,bristles,commercialized,interwoven,empirically,regius,bulacan,newsday,showa,radicalism,yarrow,pleura,sayed,structuring,cotes,reminiscences,acetyl,edicts,escalators,aomori,encapsulated,legacies,bunbury,placings,fearsome,postscript,powerfully,keighley,hildesheim,amicus,crevices,deserters,benelux,aurangabad,freeware,ioannis,carpathians,chirac,seceded,prepaid,landlocked,naturalised,yanukovych,soundscan,blotch,phenotypic,determinants,twente,dictatorial,giessen,composes,recherche,pathophysiology,inventories,ayurveda,elevating,gravestone,degeneres,vilayet,popularizing,spartanburg,bloemfontein,previewed,renunciation,genotype,ogilvy,tracery,blacklisted,emissaries,diploid,disclosures,tupolev,shinjuku,antecedents,pennine,braganza,bhattacharya,countable,spectroscopic,ingolstadt,theseus,corroborated,compounding,thrombosis,extremadura,medallions,hasanabad,lambton,perpetuity,glycol,besancon,palaiologos,pandey,caicos,antecedent,stratum,laserdisc,novitiate,crowdfunding,palatal,sorceress,dassault,toughness,celle,cezanne,vientiane,tioga,hander,crossbar,gisborne,cursor,inspectorate,serif,praia,sphingidae,nameplate,psalter,ivanovic,sitka,equalised,mutineers,sergius,outgrowth,creationism,haredi,rhizomes,predominate,undertakings,vulgate,hydrothermal,abbeville,geodesic,kampung,physiotherapy,unauthorised,asteraceae,conservationist,minoan,supersport,mohammadabad,cranbrook,mentorship,legitimately,marshland,datuk,louvain,potawatomi,carnivores,levies,lyell,hymnal,regionals,tinto,shikoku,conformal,wanganui,beira,lleida,standstill,deloitte,formula_40,corbusier,chancellery,mixtapes,airtime,muhlenberg,formula_39,bracts,thrashers,prodigious,gironde,chickamauga,uyghurs,substitutions,pescara,batangas,gregarious,gijon,paleo,mathura,pumas,proportionally,hawkesbury,yucca,kristiania,funimation,fluted,eloquence,mohun,aftermarket,chroniclers,futurist,nonconformist,branko,mannerisms,lesnar,opengl,altos,retainers,ashfield,shelbourne,sulaiman,divisie,gwent,locarno,lieder,minkowski,bivalve,redeployed,cartography,seaway,bookings,decays,ostend,antiquaries,pathogenesis,formula_38,chrysalis,esperance,valli,motogp,homelands,bridged,bloor,ghazal,vulgaris,baekje,prospector,calculates,debtors,hesperiidae,titian,returner,landgrave,frontenac,kelowna,pregame,castelo,caius,canoeist,watercolours,winterthur,superintendents,dissonance,dubstep,adorn,matic,salih,hillel,swordsman,flavoured,emitter,assays,monongahela,deeded,brazzaville,sufferings,babylonia,fecal,umbria,astrologer,gentrification,frescos,phasing,zielona,ecozone,candido,manoj,quadrilateral,gyula,falsetto,prewar,puntland,infinitive,contraceptive,bakhtiari,ohrid,socialization,tailplane,evoking,havelock,macapagal,plundering,104th,keynesian,templars,phrasing,morphologically,czestochowa,humorously,catawba,burgas,chiswick,ellipsoid,kodansha,inwards,gautama,katanga,orthopaedic,heilongjiang,sieges,outsourced,subterminal,vijayawada,hares,oration,leitrim,ravines,manawatu,cryogenic,tracklisting,about.com,ambedkar,degenerated,hastened,venturing,lobbyists,shekhar,typefaces,northcote,rugen,'good,ornithology,asexual,hemispheres,unsupported,glyphs,spoleto,epigenetic,musicianship,donington,diogo,kangxi,bisected,polymorphism,megawatt,salta,embossed,cheetahs,cruzeiro,unhcr,aristide,rayleigh,maturing,indonesians,noire,llano,ffffff,camus,purges,annales,convair,apostasy,algol,phage,apaches,marketers,aldehyde,pompidou,kharkov,forgeries,praetorian,divested,retrospectively,gornji,scutellum,bitumen,pausanias,magnification,imitations,nyasaland,geographers,floodlights,athlone,hippolyte,expositions,clarinetist,razak,neutrinos,rotax,sheykh,plush,interconnect,andalus,cladogram,rudyard,resonator,granby,blackfriars,placido,windscreen,sahel,minamoto,haida,cations,emden,blackheath,thematically,blacklist,pawel,disseminating,academical,undamaged,raytheon,harsher,powhatan,ramachandran,saddles,paderborn,capping,zahra,prospecting,glycine,chromatin,profane,banska,helmand,okinawan,dislocation,oscillators,insectivorous,foyle,gilgit,autonomic,tuareg,sluice,pollinated,multiplexed,granary,narcissus,ranchi,staines,nitra,goalscoring,midwifery,pensioners,algorithmic,meetinghouse,biblioteca,besar,narva,angkor,predate,lohan,cyclical,detainee,occipital,eventing,faisalabad,dartmoor,kublai,courtly,resigns,radii,megachilidae,cartels,shortfall,xhosa,unregistered,benchmarks,dystopian,bulkhead,ponsonby,jovanovic,accumulates,papuan,bhutanese,intuitively,gotaland,headliners,recursion,dejan,novellas,diphthongs,imbued,withstood,analgesic,amplify,powertrain,programing,maidan,alstom,affirms,eradicated,summerslam,videogame,molla,severing,foundered,gallium,atmospheres,desalination,shmuel,howmeh,catolica,bossier,reconstructing,isolates,lyase,tweets,unconnected,tidewater,divisible,cohorts,orebro,presov,furnishing,folklorist,simplifying,centrale,notations,factorization,monarchies,deepen,macomb,facilitation,hennepin,declassified,redrawn,microprocessors,preliminaries,enlarging,timeframe,deutschen,shipbuilders,patiala,ferrous,aquariums,genealogies,vieux,unrecognized,bridgwater,tetrahedral,thule,resignations,gondwana,registries,agder,dataset,felled,parva,analyzer,worsen,coleraine,columella,blockaded,polytechnique,reassembled,reentry,narvik,greys,nigra,knockouts,bofors,gniezno,slotted,hamasaki,ferrers,conferring,thirdly,domestication,photojournalist,universality,preclude,ponting,halved,thereupon,photosynthetic,ostrava,mismatch,pangasinan,intermediaries,abolitionists,transited,headings,ustase,radiological,interconnection,dabrowa,invariants,honorius,preferentially,chantilly,marysville,dialectical,antioquia,abstained,gogol,dirichlet,muricidae,symmetries,reproduces,brazos,fatwa,bacillus,ketone,paribas,chowk,multiplicative,dermatitis,mamluks,devotes,adenosine,newbery,meditative,minefields,inflection,oxfam,conwy,bystrica,imprints,pandavas,infinitesimal,conurbation,amphetamine,reestablish,furth,edessa,injustices,frankston,serjeant,4x200,khazar,sihanouk,longchamp,stags,pogroms,coups,upperparts,endpoints,infringed,nuanced,summing,humorist,pacification,ciaran,jamaat,anteriorly,roddick,springboks,faceted,hypoxia,rigorously,cleves,fatimid,ayurvedic,tabled,ratna,senhora,maricopa,seibu,gauguin,holomorphic,campgrounds,amboy,coordinators,ponderosa,casemates,ouachita,nanaimo,mindoro,zealander,rimsky,cluny,tomaszow,meghalaya,caetano,tilak,roussillon,landtag,gravitation,dystrophy,cephalopods,trombones,glens,killarney,denominated,anthropogenic,pssas,roubaix,carcasses,montmorency,neotropical,communicative,rabindranath,ordinated,separable,overriding,surged,sagebrush,conciliation,codice_4,durrani,phosphatase,qadir,votive,revitalized,taiyuan,tyrannosaurus,graze,slovaks,nematodes,environmentalism,blockhouse,illiteracy,schengen,ecotourism,alternation,conic,wields,hounslow,blackfoot,kwame,ambulatory,volhynia,hordaland,croton,piedras,rohit,drava,conceptualized,birla,illustrative,gurgaon,barisal,tutsi,dezong,nasional,polje,chanson,clarinets,krasnoyarsk,aleksandrovich,cosmonaut,d'este,palliative,midseason,silencing,wardens,durer,girders,salamanders,torrington,supersonics,lauda,farid,circumnavigation,embankments,funnels,bajnoksag,lorries,cappadocia,jains,warringah,retirees,burgesses,equalization,cusco,ganesan,algal,amazonian,lineups,allocating,conquerors,usurper,mnemonic,predating,brahmaputra,ahmadabad,maidenhead,numismatic,subregion,encamped,reciprocating,freebsd,irgun,tortoises,governorates,zionists,airfoil,collated,ajmer,fiennes,etymological,polemic,chadian,clerestory,nordiques,fluctuated,calvados,oxidizing,trailhead,massena,quarrels,dordogne,tirunelveli,pyruvate,pulsed,athabasca,sylar,appointee,serer,japonica,andronikos,conferencing,nicolaus,chemin,ascertained,incited,woodbine,helices,hospitalised,emplacements,to/from,orchestre,tyrannical,pannonia,methodism,pop/rock,shibuya,berbers,despot,seaward,westpac,separator,perpignan,alamein,judeo,publicize,quantization,ethniki,gracilis,menlo,offside,oscillating,unregulated,succumbing,finnmark,metrical,suleyman,raith,sovereigns,bundesstrasse,kartli,fiduciary,darshan,foramen,curler,concubines,calvinism,larouche,bukhara,sophomores,mohanlal,lutheranism,monomer,eamonn,'black,uncontested,immersive,tutorials,beachhead,bindings,permeable,postulates,comite,transformative,indiscriminate,hofstra,associacao,amarna,dermatology,lapland,aosta,babur,unambiguous,formatting,schoolboys,gwangju,superconducting,replayed,adherent,aureus,compressors,forcible,spitsbergen,boulevards,budgeting,nossa,annandale,perumal,interregnum,sassoon,kwajalein,greenbrier,caldas,triangulation,flavius,increment,shakhtar,nullified,pinfall,nomen,microfinance,depreciation,cubist,steeper,splendour,gruppe,everyman,chasers,campaigners,bridle,modality,percussive,darkly,capes,velar,picton,triennial,factional,padang,toponym,betterment,norepinephrine,112th,estuarine,diemen,warehousing,morphism,ideologically,pairings,immunization,crassus,exporters,sefer,flocked,bulbous,deseret,booms,calcite,bohol,elven,groot,pulau,citigroup,wyeth,modernizing,layering,pastiche,complies,printmaker,condenser,theropod,cassino,oxyrhynchus,akademie,trainings,lowercase,coxae,parte,chetniks,pentagonal,keselowski,monocoque,morsi,reticulum,meiosis,clapboard,recoveries,tinge,an/fps,revista,sidon,livre,epidermis,conglomerates,kampong,congruent,harlequins,tergum,simplifies,epidemiological,underwriting,tcp/ip,exclusivity,multidimensional,mysql,columbine,ecologist,hayat,sicilies,levees,handset,aesop,usenet,pacquiao,archiving,alexandrian,compensatory,broadsheet,annotation,bahamian,d'affaires,interludes,phraya,shamans,marmara,customizable,immortalized,ambushes,chlorophyll,diesels,emulsion,rheumatoid,voluminous,screenwriters,tailoring,sedis,runcorn,democratization,bushehr,anacostia,constanta,antiquary,sixtus,radiate,advaita,antimony,acumen,barristers,reichsbahn,ronstadt,symbolist,pasig,cursive,secessionist,afrikaner,munnetra,inversely,adsorption,syllabic,moltke,idioms,midline,olimpico,diphosphate,cautions,radziwill,mobilisation,copelatus,trawlers,unicron,bhaskar,financiers,minimalism,derailment,marxists,oireachtas,abdicate,eigenvalue,zafar,vytautas,ganguly,chelyabinsk,telluride,subordination,ferried,dived,vendee,pictish,dimitrov,expiry,carnation,cayley,magnitudes,lismore,gretna,sandwiched,unmasked,sandomierz,swarthmore,tetra,nanyang,pevsner,dehradun,mormonism,rashi,complying,seaplanes,ningbo,cooperates,strathcona,mornington,mestizo,yulia,edgbaston,palisade,ethno,polytopes,espirito,tymoshenko,pronunciations,paradoxical,taichung,chipmunks,erhard,maximise,accretion,kanda,`abdu'l,narrowest,umpiring,mycenaean,divisor,geneticist,ceredigion,barque,hobbyists,equates,auxerre,spinose,cheil,sweetwater,guano,carboxylic,archiv,tannery,cormorant,agonists,fundacion,anbar,tunku,hindrance,meerut,concordat,secunderabad,kachin,achievable,murfreesboro,comprehensively,forges,broadest,synchronised,speciation,scapa,aliyev,conmebol,tirelessly,subjugated,pillaged,udaipur,defensively,lakhs,stateless,haasan,headlamps,patterning,podiums,polyphony,mcmurdo,mujer,vocally,storeyed,mucosa,multivariate,scopus,minimizes,formalised,certiorari,bourges,populate,overhanging,gaiety,unreserved,borromeo,woolworths,isotopic,bashar,purify,vertebra,medan,juxtaposition,earthwork,elongation,chaudhary,schematic,piast,steeped,nanotubes,fouls,achaea,legionnaires,abdur,qmjhl,embraer,hardback,centerville,ilocos,slovan,whitehorse,mauritian,moulding,mapuche,donned,provisioning,gazprom,jonesboro,audley,lightest,calyx,coldwater,trigonometric,petroglyphs,psychoanalyst,congregate,zambezi,fissure,supervises,bexley,etobicoke,wairarapa,tectonics,emphasises,formula_41,debugging,linfield,spatially,ionizing,ungulates,orinoco,clades,erlangen,news/talk,vols.,ceara,yakovlev,finsbury,entanglement,fieldhouse,graphene,intensifying,grigory,keyong,zacatecas,ninian,allgemeine,keswick,societa,snorri,femininity,najib,monoclonal,guyanese,postulate,huntly,abbeys,machinist,yunus,emphasising,ishaq,urmia,bremerton,pretenders,lumiere,thoroughfares,chikara,dramatized,metathorax,taiko,transcendence,wycliffe,retrieves,umpired,steuben,racehorses,taylors,kuznetsov,montezuma,precambrian,canopies,gaozong,propodeum,disestablished,retroactive,shoreham,rhizome,doubleheader,clinician,diwali,quartzite,shabaab,agassiz,despatched,stormwater,luxemburg,callao,universidade,courland,skane,glyph,dormers,witwatersrand,curacy,qualcomm,nansen,entablature,lauper,hausdorff,lusaka,ruthenian,360deg,cityscape,douai,vaishnava,spars,vaulting,rationalist,gygax,sequestration,typology,pollinates,accelerators,leben,colonials,cenotaph,imparted,carthaginians,equaled,rostrum,gobind,bodhisattva,oberst,bicycling,arabi,sangre,biophysics,hainaut,vernal,lunenburg,apportioned,finches,lajos,nenad,repackaged,zayed,nikephoros,r.e.m,swaminarayan,gestalt,unplaced,crags,grohl,sialkot,unsaturated,gwinnett,linemen,forays,palakkad,writs,instrumentalists,aircrews,badged,terrapins,180deg,oneness,commissariat,changi,pupation,circumscribed,contador,isotropic,administrated,fiefs,nimes,intrusions,minoru,geschichte,nadph,tainan,changchun,carbondale,frisia,swapo,evesham,hawai'i,encyclopedic,transporters,dysplasia,formula_42,onsite,jindal,guetta,judgements,narbonne,permissions,paleogene,rationalism,vilna,isometric,subtracted,chattahoochee,lamina,missa,greville,pervez,lattices,persistently,crystallization,timbered,hawaiians,fouling,interrelated,masood,ripening,stasi,gamal,visigothic,warlike,cybernetics,tanjung,forfar,cybernetic,karelian,brooklands,belfort,greifswald,campeche,inexplicably,refereeing,understory,uninterested,prius,collegiately,sefid,sarsfield,categorize,biannual,elsevier,eisteddfod,declension,autonoma,procuring,misrepresentation,novelization,bibliographic,shamanism,vestments,potash,eastleigh,ionized,turan,lavishly,scilly,balanchine,importers,parlance,'that,kanyakumari,synods,mieszko,crossovers,serfdom,conformational,legislated,exclave,heathland,sadar,differentiates,propositional,konstantinos,photoshop,manche,vellore,appalachia,orestes,taiga,exchanger,grozny,invalidated,baffin,spezia,staunchly,eisenach,robustness,virtuosity,ciphers,inlets,bolagh,understandings,bosniaks,parser,typhoons,sinan,luzerne,webcomic,subtraction,jhelum,businessweek,ceske,refrained,firebox,mitigated,helmholtz,dilip,eslamabad,metalwork,lucan,apportionment,provident,gdynia,schooners,casement,danse,hajjiabad,benazir,buttress,anthracite,newsreel,wollaston,dispatching,cadastral,riverboat,provincetown,nantwich,missal,irreverent,juxtaposed,darya,ennobled,electropop,stereoscopic,maneuverability,laban,luhansk,udine,collectibles,haulage,holyrood,materially,supercharger,gorizia,shkoder,townhouses,pilate,layoffs,folkloric,dialectic,exuberant,matures,malla,ceuta,citizenry,crewed,couplet,stopover,transposition,tradesmen,antioxidant,amines,utterance,grahame,landless,isere,diction,appellant,satirist,urbino,intertoto,subiaco,antonescu,nehemiah,ubiquitin,emcee,stourbridge,fencers,103rd,wranglers,monteverdi,watertight,expounded,xiamen,manmohan,pirie,threefold,antidepressant,sheboygan,grieg,cancerous,diverging,bernini,polychrome,fundamentalism,bihari,critiqued,cholas,villers,tendulkar,dafydd,vastra,fringed,evangelization,episcopalian,maliki,sana'a,ashburton,trianon,allegany,heptathlon,insufficiently,panelists,pharrell,hexham,amharic,fertilized,plumes,cistern,stratigraphy,akershus,catalans,karoo,rupee,minuteman,quantification,wigmore,leutnant,metanotum,weeknights,iridescent,extrasolar,brechin,deuterium,kuching,lyricism,astrakhan,brookhaven,euphorbia,hradec,bhagat,vardar,aylmer,positron,amygdala,speculators,unaccompanied,debrecen,slurry,windhoek,disaffected,rapporteur,mellitus,blockers,fronds,yatra,sportsperson,precession,physiologist,weeknight,pidgin,pharma,condemns,standardize,zetian,tibor,glycoprotein,emporia,cormorants,amalie,accesses,leonhard,denbighshire,roald,116th,will.i.am,symbiosis,privatised,meanders,chemnitz,jabalpur,shing,secede,ludvig,krajina,homegrown,snippets,sasanian,euripides,peder,cimarron,streaked,graubunden,kilimanjaro,mbeki,middleware,flensburg,bukovina,lindwall,marsalis,profited,abkhaz,polis,camouflaged,amyloid,morgantown,ovoid,bodleian,morte,quashed,gamelan,juventud,natchitoches,storyboard,freeview,enumeration,cielo,preludes,bulawayo,1600s,olympiads,multicast,faunal,asura,reinforces,puranas,ziegfeld,handicraft,seamount,kheil,noche,hallmarks,dermal,colorectal,encircle,hessen,umbilicus,sunnis,leste,unwin,disclosing,superfund,montmartre,refuelling,subprime,kolhapur,etiology,bismuth,laissez,vibrational,mazar,alcoa,rumsfeld,recurve,ticonderoga,lionsgate,onlookers,homesteads,filesystem,barometric,kingswood,biofuel,belleza,moshav,occidentalis,asymptomatic,northeasterly,leveson,huygens,numan,kingsway,primogeniture,toyotomi,yazoo,limpets,greenbelt,booed,concurrence,dihedral,ventrites,raipur,sibiu,plotters,kitab,109th,trackbed,skilful,berthed,effendi,fairing,sephardi,mikhailovich,lockyer,wadham,invertible,paperbacks,alphabetic,deuteronomy,constitutive,leathery,greyhounds,estoril,beechcraft,poblacion,cossidae,excreted,flamingos,singha,olmec,neurotransmitters,ascoli,nkrumah,forerunners,dualism,disenchanted,benefitted,centrum,undesignated,noida,o'donoghue,collages,egrets,egmont,wuppertal,cleave,montgomerie,pseudomonas,srinivasa,lymphatic,stadia,resold,minima,evacuees,consumerism,ronde,biochemist,automorphism,hollows,smuts,improvisations,vespasian,bream,pimlico,eglin,colne,melancholic,berhad,ousting,saale,notaulices,ouest,hunslet,tiberias,abdomina,ramsgate,stanislas,donbass,pontefract,sucrose,halts,drammen,chelm,l'arc,taming,trolleys,konin,incertae,licensees,scythian,giorgos,dative,tanglewood,farmlands,o'keeffe,caesium,romsdal,amstrad,corte,oglethorpe,huntingdonshire,magnetization,adapts,zamosc,shooto,cuttack,centrepiece,storehouse,winehouse,morbidity,woodcuts,ryazan,buddleja,buoyant,bodmin,estero,austral,verifiable,periyar,christendom,curtail,shura,kaifeng,cotswold,invariance,seafaring,gorica,androgen,usman,seabird,forecourt,pekka,juridical,audacious,yasser,cacti,qianlong,polemical,d'amore,espanyol,distrito,cartographers,pacifism,serpents,backa,nucleophilic,overturning,duplicates,marksman,oriente,vuitton,oberleutnant,gielgud,gesta,swinburne,transfiguration,1750s,retaken,celje,fredrikstad,asuka,cropping,mansard,donates,blacksmiths,vijayanagara,anuradhapura,germinate,betis,foreshore,jalandhar,bayonets,devaluation,frazione,ablaze,abidjan,approvals,homeostasis,corollary,auden,superfast,redcliffe,luxembourgish,datum,geraldton,printings,ludhiana,honoree,synchrotron,invercargill,hurriedly,108th,three-and-a-half,colonist,bexar,limousin,bessemer,ossetian,nunataks,buddhas,rebuked,thais,tilburg,verdicts,interleukin,unproven,dordrecht,solent,acclamation,muammar,dahomey,operettas,4x400,arrears,negotiators,whitehaven,apparitions,armoury,psychoactive,worshipers,sculptured,elphinstone,airshow,kjell,o'callaghan,shrank,professorships,predominance,subhash,coulomb,sekolah,retrofitted,samos,overthrowing,vibrato,resistors,palearctic,datasets,doordarshan,subcutaneous,compiles,immorality,patchwork,trinidadian,glycogen,pronged,zohar,visigoths,freres,akram,justo,agora,intakes,craiova,playwriting,bukhari,militarism,iwate,petitioners,harun,wisla,inefficiency,vendome,ledges,schopenhauer,kashi,entombed,assesses,tenn.,noumea,baguio,carex,o'donovan,filings,hillsdale,conjectures,blotches,annuals,lindisfarne,negated,vivek,angouleme,trincomalee,cofactor,verkhovna,backfield,twofold,automaker,rudra,freighters,darul,gharana,busway,formula_43,plattsburgh,portuguesa,showrunner,roadmap,valenciennes,erdos,biafra,spiritualism,transactional,modifies,carne,107th,cocos,gcses,tiverton,radiotherapy,meadowlands,gunma,srebrenica,foxtel,authenticated,enslavement,classicist,klaipeda,minstrels,searchable,infantrymen,incitement,shiga,nadp+,urals,guilders,banquets,exteriors,counterattacks,visualized,diacritics,patrimony,svensson,transepts,prizren,telegraphy,najaf,emblazoned,coupes,effluent,ragam,omani,greensburg,taino,flintshire,cd/dvd,lobbies,narrating,cacao,seafarers,bicolor,collaboratively,suraj,floodlit,sacral,puppetry,tlingit,malwa,login,motionless,thien,overseers,vihar,golem,specializations,bathhouse,priming,overdubs,winningest,archetypes,uniao,acland,creamery,slovakian,lithographs,maryborough,confidently,excavating,stillborn,ramallah,audiencia,alava,ternary,hermits,rostam,bauxite,gawain,lothair,captions,gulfstream,timelines,receded,mediating,petain,bastia,rudbar,bidders,disclaimer,shrews,tailings,trilobites,yuriy,jamil,demotion,gynecology,rajinikanth,madrigals,ghazni,flycatchers,vitebsk,bizet,computationally,kashgar,refinements,frankford,heralds,europe/africa,levante,disordered,sandringham,queues,ransacked,trebizond,verdes,comedie,primitives,figurine,organists,culminate,gosport,coagulation,ferrying,hoyas,polyurethane,prohibitive,midfielders,ligase,progesterone,defectors,sweetened,backcountry,diodorus,waterside,nieuport,khwaja,jurong,decried,gorkha,ismaili,300th,octahedral,kindergartens,paseo,codification,notifications,disregarding,risque,reconquista,shortland,atolls,texarkana,perceval,d'etudes,kanal,herbicides,tikva,nuova,gatherer,dissented,soweto,dexterity,enver,bacharach,placekicker,carnivals,automate,maynooth,symplectic,chetnik,militaire,upanishads,distributive,strafing,championing,moiety,miliband,blackadder,enforceable,maung,dimer,stadtbahn,diverges,obstructions,coleophoridae,disposals,shamrocks,aural,banca,bahru,coxed,grierson,vanadium,watermill,radiative,ecoregions,berets,hariri,bicarbonate,evacuations,mallee,nairn,rushden,loggia,slupsk,satisfactorily,milliseconds,cariboo,reine,cyclo,pigmentation,postmodernism,aqueducts,vasari,bourgogne,dilemmas,liquefied,fluminense,alloa,ibaraki,tenements,kumasi,humerus,raghu,labours,putsch,soundcloud,bodybuilder,rakyat,domitian,pesaro,translocation,sembilan,homeric,enforcers,tombstones,lectureship,rotorua,salamis,nikolaos,inferences,superfortress,lithgow,surmised,undercard,tarnow,barisan,stingrays,federacion,coldstream,haverford,ornithological,heerenveen,eleazar,jyoti,murali,bamako,riverbed,subsidised,theban,conspicuously,vistas,conservatorium,madrasa,kingfishers,arnulf,credential,syndicalist,sheathed,discontinuity,prisms,tsushima,coastlines,escapees,vitis,optimizing,megapixel,overground,embattled,halide,sprinters,buoys,mpumalanga,peculiarities,106th,roamed,menezes,macao,prelates,papyri,freemen,dissertations,irishmen,pooled,sverre,reconquest,conveyance,subjectivity,asturian,circassian,formula_45,comdr,thickets,unstressed,monro,passively,harmonium,moveable,dinar,carlsson,elysees,chairing,b'nai,confusingly,kaoru,convolution,godolphin,facilitator,saxophones,eelam,jebel,copulation,anions,livres,licensure,pontypridd,arakan,controllable,alessandria,propelling,stellenbosch,tiber,wolka,liberators,yarns,d'azur,tsinghua,semnan,amhara,ablation,melies,tonality,historique,beeston,kahne,intricately,sonoran,robespierre,gyrus,boycotts,defaulted,infill,maranhao,emigres,framingham,paraiba,wilhelmshaven,tritium,skyway,labial,supplementation,possessor,underserved,motets,maldivian,marrakech,quays,wikimedia,turbojet,demobilization,petrarch,encroaching,sloops,masted,karbala,corvallis,agribusiness,seaford,stenosis,hieronymus,irani,superdraft,baronies,cortisol,notability,veena,pontic,cyclin,archeologists,newham,culled,concurring,aeolian,manorial,shouldered,fords,philanthropists,105th,siddharth,gotthard,halim,rajshahi,jurchen,detritus,practicable,earthenware,discarding,travelogue,neuromuscular,elkhart,raeder,zygmunt,metastasis,internees,102nd,vigour,upmarket,summarizing,subjunctive,offsets,elizabethtown,udupi,pardubice,repeaters,instituting,archaea,substandard,technische,linga,anatomist,flourishes,velika,tenochtitlan,evangelistic,fitchburg,springbok,cascading,hydrostatic,avars,occasioned,filipina,perceiving,shimbun,africanus,consternation,tsing,optically,beitar,45deg,abutments,roseville,monomers,huelva,lotteries,hypothalamus,internationalist,electromechanical,hummingbirds,fibreglass,salaried,dramatists,uncovers,invokes,earners,excretion,gelding,ancien,aeronautica,haverhill,stour,ittihad,abramoff,yakov,ayodhya,accelerates,industrially,aeroplanes,deleterious,dwelt,belvoir,harpalus,atpase,maluku,alasdair,proportionality,taran,epistemological,interferometer,polypeptide,adjudged,villager,metastatic,marshalls,madhavan,archduchess,weizmann,kalgoorlie,balan,predefined,sessile,sagaing,brevity,insecticide,psychosocial,africana,steelworks,aether,aquifers,belem,mineiro,almagro,radiators,cenozoic,solute,turbocharger,invicta,guested,buccaneer,idolatry,unmatched,paducah,sinestro,dispossessed,conforms,responsiveness,cyanobacteria,flautist,procurator,complementing,semifinalist,rechargeable,permafrost,cytokine,refuges,boomed,gelderland,franchised,jinan,burnie,doubtless,randomness,colspan=12,angra,ginebra,famers,nuestro,declarative,roughness,lauenburg,motile,rekha,issuer,piney,interceptors,napoca,gipsy,formulaic,formula_44,viswanathan,ebrahim,thessalonica,galeria,muskogee,unsold,html5,taito,mobutu,icann,carnarvon,fairtrade,morphisms,upsilon,nozzles,fabius,meander,murugan,strontium,episcopacy,sandinista,parasol,attenuated,bhima,primeval,panay,ordinator,negara,osteoporosis,glossop,ebook,paradoxically,grevillea,modoc,equating,phonetically,legumes,covariant,dorje,quatre,bruxelles,pyroclastic,shipbuilder,zhaozong,obscuring,sveriges,tremolo,extensible,barrack,multnomah,hakon,chaharmahal,parsing,volumetric,astrophysical,glottal,combinatorics,freestanding,encoder,paralysed,cavalrymen,taboos,heilbronn,orientalis,lockport,marvels,ozawa,dispositions,waders,incurring,saltire,modulate,papilio,phenol,intermedia,rappahannock,plasmid,fortify,phenotypes,transiting,correspondences,leaguer,larnaca,incompatibility,mcenroe,deeming,endeavoured,aboriginals,helmed,salar,arginine,werke,ferrand,expropriated,delimited,couplets,phoenicians,petioles,ouster,anschluss,protectionist,plessis,urchins,orquesta,castleton,juniata,bittorrent,fulani,donji,mykola,rosemont,chandos,scepticism,signer,chalukya,wicketkeeper,coquitlam,programmatic,o'brian,carteret,urology,steelhead,paleocene,konkan,bettered,venkatesh,surfacing,longitudinally,centurions,popularization,yazid,douro,widths,premios,leonards,gristmill,fallujah,arezzo,leftists,ecliptic,glycerol,inaction,disenfranchised,acrimonious,depositing,parashah,cockatoo,marechal,bolzano,chios,cablevision,impartiality,pouches,thickly,equities,bentinck,emotive,boson,ashdown,conquistadors,parsi,conservationists,reductive,newlands,centerline,ornithologists,waveguide,nicene,philological,hemel,setanta,masala,aphids,convening,casco,matrilineal,chalcedon,orthographic,hythe,replete,damming,bolivarian,admixture,embarks,borderlands,conformed,nagarjuna,blenny,chaitanya,suwon,shigeru,tatarstan,lingayen,rejoins,grodno,merovingian,hardwicke,puducherry,prototyping,laxmi,upheavals,headquarter,pollinators,bromine,transom,plantagenet,arbuthnot,chidambaram,woburn,osamu,panelling,coauthored,zhongshu,hyaline,omissions,aspergillus,offensively,electrolytic,woodcut,sodom,intensities,clydebank,piotrkow,supplementing,quipped,focke,harbinger,positivism,parklands,wolfenbuttel,cauca,tryptophan,taunus,curragh,tsonga,remand,obscura,ashikaga,eltham,forelimbs,analogs,trnava,observances,kailash,antithesis,ayumi,abyssinia,dorsally,tralee,pursuers,misadventures,padova,perot,mahadev,tarim,granth,licenced,compania,patuxent,baronial,korda,cochabamba,codices,karna,memorialized,semaphore,playlists,mandibular,halal,sivaji,scherzinger,stralsund,foundries,ribosome,mindfulness,nikolayevich,paraphyletic,newsreader,catalyze,ioannina,thalamus,gbit/s,paymaster,sarab,500th,replenished,gamepro,cracow,formula_46,gascony,reburied,lessing,easement,transposed,meurthe,satires,proviso,balthasar,unbound,cuckoos,durbar,louisbourg,cowes,wholesalers,manet,narita,xiaoping,mohamad,illusory,cathal,reuptake,alkaloid,tahrir,mmorpg,underlies,anglicanism,repton,aharon,exogenous,buchenwald,indigent,odostomia,milled,santorum,toungoo,nevsky,steyr,urbanisation,darkseid,subsonic,canaanite,akiva,eglise,dentition,mediators,cirencester,peloponnesian,malmesbury,durres,oerlikon,tabulated,saens,canaria,ischemic,esterhazy,ringling,centralization,walthamstow,nalanda,lignite,takht,leninism,expiring,circe,phytoplankton,promulgation,integrable,breeches,aalto,menominee,borgo,scythians,skrull,galleon,reinvestment,raglan,reachable,liberec,airframes,electrolysis,geospatial,rubiaceae,interdependence,symmetrically,simulcasts,keenly,mauna,adipose,zaidi,fairport,vestibular,actuators,monochromatic,literatures,congestive,sacramental,atholl,skytrain,tycho,tunings,jamia,catharina,modifier,methuen,tapings,infiltrating,colima,grafting,tauranga,halides,pontificate,phonetics,koper,hafez,grooved,kintetsu,extrajudicial,linkoping,cyberpunk,repetitions,laurentian,parnu,bretton,darko,sverdlovsk,foreshadowed,akhenaten,rehnquist,gosford,coverts,pragmatism,broadleaf,ethiopians,instated,mediates,sodra,opulent,descriptor,enugu,shimla,leesburg,officership,giffard,refectory,lusitania,cybermen,fiume,corus,tydfil,lawrenceville,ocala,leviticus,burghers,ataxia,richthofen,amicably,acoustical,watling,inquired,tiempo,multiracial,parallelism,trenchard,tokyopop,germanium,usisl,philharmonia,shapur,jacobites,latinized,sophocles,remittances,o'farrell,adder,dimitrios,peshwa,dimitar,orlov,outstretched,musume,satish,dimensionless,serialised,baptisms,pagasa,antiviral,1740s,quine,arapaho,bombardments,stratosphere,ophthalmic,injunctions,carbonated,nonviolence,asante,creoles,sybra,boilermakers,abington,bipartite,permissive,cardinality,anheuser,carcinogenic,hohenlohe,surinam,szeged,infanticide,generically,floorball,'white,automakers,cerebellar,homozygous,remoteness,effortlessly,allude,'great,headmasters,minting,manchurian,kinabalu,wemyss,seditious,widgets,marbled,almshouses,bards,subgenres,tetsuya,faulting,kickboxer,gaulish,hoseyn,malton,fluvial,questionnaires,mondale,downplayed,traditionalists,vercelli,sumatran,landfills,gamesradar,exerts,franciszek,unlawfully,huesca,diderot,libertarians,professorial,laane,piecemeal,conidae,taiji,curatorial,perturbations,abstractions,szlachta,watercraft,mullah,zoroastrianism,segmental,khabarovsk,rectors,affordability,scuola,diffused,stena,cyclonic,workpiece,romford,'little,jhansi,stalag,zhongshan,skipton,maracaibo,bernadotte,thanet,groening,waterville,encloses,sahrawi,nuffield,moorings,chantry,annenberg,islay,marchers,tenses,wahid,siegen,furstenberg,basques,resuscitation,seminarians,tympanum,gentiles,vegetarianism,tufted,venkata,fantastical,pterophoridae,machined,superposition,glabrous,kaveri,chicane,executors,phyllonorycter,bidirectional,jasta,undertones,touristic,majapahit,navratilova,unpopularity,barbadian,tinian,webcast,hurdler,rigidly,jarrah,staphylococcus,igniting,irrawaddy,stabilised,airstrike,ragas,wakayama,energetically,ekstraklasa,minibus,largemouth,cultivators,leveraging,waitangi,carnaval,weaves,turntables,heydrich,sextus,excavate,govind,ignaz,pedagogue,uriah,borrowings,gemstones,infractions,mycobacterium,batavian,massing,praetor,subalpine,massoud,passers,geostationary,jalil,trainsets,barbus,impair,budejovice,denbigh,pertain,historicity,fortaleza,nederlandse,lamenting,masterchef,doubs,gemara,conductance,ploiesti,cetaceans,courthouses,bhagavad,mihailovic,occlusion,bremerhaven,bulwark,morava,kaine,drapery,maputo,conquistador,kaduna,famagusta,first-past-the-post,erudite,galton,undated,tangential,filho,dismembered,dashes,criterium,darwen,metabolized,blurring,everard,randwick,mohave,impurity,acuity,ansbach,chievo,surcharge,plantain,algoma,porosity,zirconium,selva,sevenoaks,venizelos,gwynne,golgi,imparting,separatism,courtesan,idiopathic,gravestones,hydroelectricity,babar,orford,purposeful,acutely,shard,ridgewood,viterbo,manohar,expropriation,placenames,brevis,cosine,unranked,richfield,newnham,recoverable,flightless,dispersing,clearfield,abu'l,stranraer,kempe,streamlining,goswami,epidermal,pieta,conciliatory,distilleries,electrophoresis,bonne,tiago,curiosities,candidature,picnicking,perihelion,lintel,povoa,gullies,configure,excision,facies,signers,1730s,insufficiency,semiotics,streatham,deactivation,entomological,skippers,albacete,parodying,escherichia,honorees,singaporeans,counterterrorism,tiruchirappalli,omnivorous,metropole,globalisation,athol,unbounded,codice_5,landforms,classifier,farmhouses,reaffirming,reparation,yomiuri,technologists,mitte,medica,viewable,steampunk,konya,kshatriya,repelling,edgewater,lamiinae,devas,potteries,llandaff,engendered,submits,virulence,uplifted,educationist,metropolitans,frontrunner,dunstable,forecastle,frets,methodius,exmouth,linnean,bouchet,repulsion,computable,equalling,liceo,tephritidae,agave,hydrological,azarenka,fairground,l'homme,enforces,xinhua,cinematographers,cooperstown,sa'id,paiute,christianization,tempos,chippenham,insulator,kotor,stereotyped,dello,cours,hisham,d'souza,eliminations,supercars,passau,rebrand,natures,coote,persephone,rededicated,cleaved,plenum,blistering,indiscriminately,cleese,safed,recursively,compacted,revues,hydration,shillong,echelons,garhwal,pedimented,grower,zwolle,wildflower,annexing,methionine,petah,valens,famitsu,petiole,specialities,nestorian,shahin,tokaido,shearwater,barberini,kinsmen,experimenter,alumnae,cloisters,alumina,pritzker,hardiness,soundgarden,julich,ps300,watercourse,cementing,wordplay,olivet,demesne,chasseurs,amide,zapotec,gaozu,porphyry,absorbers,indium,analogies,devotions,engravers,limestones,catapulted,surry,brickworks,gotra,rodham,landline,paleontologists,shankara,islip,raucous,trollope,arpad,embarkation,morphemes,recites,picardie,nakhchivan,tolerances,formula_47,khorramabad,nichiren,adrianople,kirkuk,assemblages,collider,bikaner,bushfires,roofline,coverings,reredos,bibliotheca,mantras,accentuated,commedia,rashtriya,fluctuation,serhiy,referential,fittipaldi,vesicle,geeta,iraklis,immediacy,chulalongkorn,hunsruck,bingen,dreadnoughts,stonemason,meenakshi,lebesgue,undergrowth,baltistan,paradoxes,parlement,articled,tiflis,dixieland,meriden,tejano,underdogs,barnstable,exemplify,venter,tropes,wielka,kankakee,iskandar,zilina,pharyngeal,spotify,materialised,picts,atlantique,theodoric,prepositions,paramilitaries,pinellas,attlee,actuated,piedmontese,grayling,thucydides,multifaceted,unedited,autonomously,universelle,utricularia,mooted,preto,incubated,underlie,brasenose,nootka,bushland,sensu,benzodiazepine,esteghlal,seagoing,amenhotep,azusa,sappers,culpeper,smokeless,thoroughbreds,dargah,gorda,alumna,mankato,zdroj,deleting,culvert,formula_49,punting,wushu,hindering,immunoglobulin,standardisation,birger,oilfield,quadrangular,ulama,recruiters,netanya,1630s,communaute,istituto,maciej,pathan,meher,vikas,characterizations,playmaker,interagency,intercepts,assembles,horthy,introspection,narada,matra,testes,radnicki,estonians,csiro,instar,mitford,adrenergic,crewmembers,haaretz,wasatch,lisburn,rangefinder,ordre,condensate,reforestation,corregidor,spvgg,modulator,mannerist,faulted,aspires,maktoum,squarepants,aethelred,piezoelectric,mulatto,dacre,progressions,jagiellonian,norge,samaria,sukhoi,effingham,coxless,hermetic,humanists,centrality,litters,stirlingshire,beaconsfield,sundanese,geometrically,caretakers,habitually,bandra,pashtuns,bradenton,arequipa,laminar,brickyard,hitchin,sustains,shipboard,ploughing,trechus,wheelers,bracketed,ilyushin,subotica,d'hondt,reappearance,bridgestone,intermarried,fulfilment,aphasia,birkbeck,transformational,strathmore,hornbill,millstone,lacan,voids,solothurn,gymnasiums,laconia,viaducts,peduncle,teachta,edgware,shinty,supernovae,wilfried,exclaim,parthia,mithun,flashpoint,moksha,cumbia,metternich,avalanches,militancy,motorist,rivadavia,chancellorsville,federals,gendered,bounding,footy,gauri,caliphs,lingam,watchmaker,unrecorded,riverina,unmodified,seafloor,droit,pfalz,chrysostom,gigabit,overlordship,besiege,espn2,oswestry,anachronistic,ballymena,reactivation,duchovny,ghani,abacetus,duller,legio,watercourses,nord-pas-de-calais,leiber,optometry,swarms,installer,sancti,adverbs,iheartmedia,meiningen,zeljko,kakheti,notional,circuses,patrilineal,acrobatics,infrastructural,sheva,oregonian,adjudication,aamir,wloclawek,overfishing,obstructive,subtracting,aurobindo,archeologist,newgate,'cause,secularization,tehsils,abscess,fingal,janacek,elkhorn,trims,kraftwerk,mandating,irregulars,faintly,congregationalist,sveti,kasai,mishaps,kennebec,provincially,durkheim,scotties,aicte,rapperswil,imphal,surrenders,morphs,nineveh,hoxha,cotabato,thuringian,metalworking,retold,shogakukan,anthers,proteasome,tippeligaen,disengagement,mockumentary,palatial,erupts,flume,corrientes,masthead,jaroslaw,rereleased,bharti,labors,distilling,tusks,varzim,refounded,enniskillen,melkite,semifinalists,vadodara,bermudian,capstone,grasse,origination,populus,alesi,arrondissements,semigroup,verein,opossum,messrs.,portadown,bulbul,tirupati,mulhouse,tetrahedron,roethlisberger,nonverbal,connexion,warangal,deprecated,gneiss,octet,vukovar,hesketh,chambre,despatch,claes,kargil,hideo,gravelly,tyndale,aquileia,tuners,defensible,tutte,theotokos,constructivist,ouvrage,dukla,polisario,monasticism,proscribed,commutation,testers,nipissing,codon,mesto,olivine,concomitant,exoskeleton,purports,coromandel,eyalet,dissension,hippocrates,purebred,yaounde,composting,oecophoridae,procopius,o'day,angiogenesis,sheerness,intelligencer,articular,felixstowe,aegon,endocrinology,trabzon,licinius,pagodas,zooplankton,hooghly,satie,drifters,sarthe,mercian,neuilly,tumours,canal+,scheldt,inclinations,counteroffensive,roadrunners,tuzla,shoreditch,surigao,predicates,carnot,algeciras,militaries,generalize,bulkheads,gawler,pollutant,celta,rundgren,microrna,gewog,olimpija,placental,lubelski,roxburgh,discerned,verano,kikuchi,musicale,l'enfant,ferocity,dimorphic,antigonus,erzurum,prebendary,recitative,discworld,cyrenaica,stigmella,totnes,sutta,pachuca,ulsan,downton,landshut,castellan,pleural,siedlce,siecle,catamaran,cottbus,utilises,trophic,freeholders,holyhead,u.s.s,chansons,responder,waziristan,suzuka,birding,shogi,asker,acetone,beautification,cytotoxic,dixit,hunterdon,cobblestone,formula_48,kossuth,devizes,sokoto,interlaced,shuttered,kilowatts,assiniboine,isaak,salto,alderney,sugarloaf,franchising,aggressiveness,toponyms,plaintext,antimatter,henin,equidistant,salivary,bilingualism,mountings,obligate,extirpated,irenaeus,misused,pastoralists,aftab,immigrating,warping,tyrolean,seaforth,teesside,soundwave,oligarchy,stelae,pairwise,iupac,tezuka,posht,orchestrations,landmass,ironstone,gallia,hjalmar,carmelites,strafford,elmhurst,palladio,fragility,teleplay,gruffudd,karoly,yerba,potok,espoo,inductance,macaque,nonprofits,pareto,rock'n'roll,spiritualist,shadowed,skateboarder,utterances,generality,congruence,prostrate,deterred,yellowknife,albarn,maldon,battlements,mohsen,insecticides,khulna,avellino,menstruation,glutathione,springdale,parlophone,confraternity,korps,countrywide,bosphorus,preexisting,damodar,astride,alexandrovich,sprinting,crystallized,botev,leaching,interstates,veers,angevin,undaunted,yevgeni,nishapur,northerners,alkmaar,bethnal,grocers,sepia,tornus,exemplar,trobe,charcot,gyeonggi,larne,tournai,lorain,voided,genji,enactments,maxilla,adiabatic,eifel,nazim,transducer,thelonious,pyrite,deportiva,dialectal,bengt,rosettes,labem,sergeyevich,synoptic,conservator,statuette,biweekly,adhesives,bifurcation,rajapaksa,mammootty,republique,yusef,waseda,marshfield,yekaterinburg,minnelli,fundy,fenian,matchups,dungannon,supremacist,panelled,drenthe,iyengar,fibula,narmada,homeport,oceanside,precept,antibacterial,altarpieces,swath,ospreys,lillooet,legnica,lossless,formula_50,galvatron,iorga,stormont,rsfsr,loggers,kutno,phenomenological,medallists,cuatro,soissons,homeopathy,bituminous,injures,syndicates,typesetting,displacements,dethroned,makassar,lucchese,abergavenny,targu,alborz,akb48,boldface,gastronomy,sacra,amenity,accumulator,myrtaceae,cornices,mourinho,denunciation,oxbow,diddley,aargau,arbitrage,bedchamber,gruffydd,zamindar,klagenfurt,caernarfon,slowdown,stansted,abrasion,tamaki,suetonius,dukakis,individualistic,ventrally,hotham,perestroika,ketones,fertilisation,sobriquet,couplings,renderings,misidentified,rundfunk,sarcastically,braniff,concours,dismissals,elegantly,modifiers,crediting,combos,crucially,seafront,lieut,ischemia,manchus,derivations,proteases,aristophanes,adenauer,porting,hezekiah,sante,trulli,hornblower,foreshadowing,ypsilanti,dharwad,khani,hohenstaufen,distillers,cosmodrome,intracranial,turki,salesian,gorzow,jihlava,yushchenko,leichhardt,venables,cassia,eurogamer,airtel,curative,bestsellers,timeform,sortied,grandview,massillon,ceding,pilbara,chillicothe,heredity,elblag,rogaland,ronne,millennial,batley,overuse,bharata,fille,campbelltown,abeyance,counterclockwise,250cc,neurodegenerative,consigned,electromagnetism,sunnah,saheb,exons,coxswain,gleaned,bassoons,worksop,prismatic,immigrate,pickets,takeo,bobsledder,stosur,fujimori,merchantmen,stiftung,forli,endorses,taskforce,thermally,atman,gurps,floodplains,enthalpy,extrinsic,setubal,kennesaw,grandis,scalability,durations,showrooms,prithvi,outro,overruns,andalucia,amanita,abitur,hipper,mozambican,sustainment,arsene,chesham,palaeolithic,reportage,criminality,knowsley,haploid,atacama,shueisha,ridgefield,astern,getafe,lineal,timorese,restyled,hollies,agincourt,unter,justly,tannins,mataram,industrialised,tarnovo,mumtaz,mustapha,stretton,synthetase,condita,allround,putra,stjepan,troughs,aechmea,specialisation,wearable,kadokawa,uralic,aeros,messiaen,existentialism,jeweller,effigies,gametes,fjordane,cochlear,interdependent,demonstrative,unstructured,emplacement,famines,spindles,amplitudes,actuator,tantalum,psilocybe,apnea,monogatari,expulsions,seleucus,tsuen,hospitaller,kronstadt,eclipsing,olympiakos,clann,canadensis,inverter,helio,egyptologist,squamous,resonate,munir,histology,torbay,khans,jcpenney,veterinarians,aintree,microscopes,colonised,reflectors,phosphorylated,pristimantis,tulare,corvinus,multiplexing,midweek,demosthenes,transjordan,ecija,tengku,vlachs,anamorphic,counterweight,radnor,trinitarian,armidale,maugham,njsiaa,futurism,stairways,avicenna,montebello,bridgetown,wenatchee,lyonnais,amass,surinamese,streptococcus,m*a*s*h,hydrogenation,frazioni,proscenium,kalat,pennsylvanian,huracan,tallying,kralove,nucleolar,phrygian,seaports,hyacinthe,ignace,donning,instalment,regnal,fonds,prawn,carell,folktales,goaltending,bracknell,vmware,patriarchy,mitsui,kragujevac,pythagoras,soult,thapa,disproved,suwalki,secures,somoza,l'ecole,divizia,chroma,herders,technologist,deduces,maasai,rampur,paraphrase,raimi,imaged,magsaysay,ivano,turmeric,formula_51,subcommittees,axillary,ionosphere,organically,indented,refurbishing,pequot,violinists,bearn,colle,contralto,silverton,mechanization,etruscans,wittelsbach,pasir,redshirted,marrakesh,scarp,plein,wafers,qareh,teotihuacan,frobenius,sinensis,rehoboth,bundaberg,newbridge,hydrodynamic,traore,abubakar,adjusts,storytellers,dynamos,verbandsliga,concertmaster,exxonmobil,appreciable,sieradz,marchioness,chaplaincy,rechristened,cunxu,overpopulation,apolitical,sequencer,beaked,nemanja,binaries,intendant,absorber,filamentous,indebtedness,nusra,nashik,reprises,psychedelia,abwehr,ligurian,isoform,resistive,pillaging,mahathir,reformatory,lusatia,allerton,ajaccio,tepals,maturin,njcaa,abyssinian,objector,fissures,sinuous,ecclesiastic,dalits,caching,deckers,phosphates,wurlitzer,navigated,trofeo,berea,purefoods,solway,unlockable,grammys,kostroma,vocalizations,basilan,rebuke,abbasi,douala,helsingborg,ambon,bakar,runestones,cenel,tomislav,pigmented,northgate,excised,seconda,kirke,determinations,dedicates,vilas,pueblos,reversion,unexploded,overprinted,ekiti,deauville,masato,anaesthesia,endoplasmic,transponders,aguascalientes,hindley,celluloid,affording,bayeux,piaget,rickshaws,eishockey,camarines,zamalek,undersides,hardwoods,hermitian,mutinied,monotone,blackmails,affixes,jpmorgan,habermas,mitrovica,paleontological,polystyrene,thana,manas,conformist,turbofan,decomposes,logano,castration,metamorphoses,patroness,herbicide,mikolaj,rapprochement,macroeconomics,barranquilla,matsudaira,lintels,femina,hijab,spotsylvania,morpheme,bitola,baluchistan,kurukshetra,otway,extrusion,waukesha,menswear,helder,trung,bingley,protester,boars,overhang,differentials,exarchate,hejaz,kumara,unjustified,timings,sharpness,nuovo,taisho,sundar,etc..,jehan,unquestionably,muscovy,daltrey,canute,paneled,amedeo,metroplex,elaborates,telus,tetrapods,dragonflies,epithets,saffir,parthenon,lucrezia,refitting,pentateuch,hanshin,montparnasse,lumberjacks,sanhedrin,erectile,odors,greenstone,resurgent,leszek,amory,substituents,prototypical,viewfinder,monck,universiteit,joffre,revives,chatillon,seedling,scherzo,manukau,ashdod,gympie,homolog,stalwarts,ruinous,weibo,tochigi,wallenberg,gayatri,munda,satyagraha,storefronts,heterogeneity,tollway,sportswriters,binocular,gendarmes,ladysmith,tikal,ortsgemeinde,ja'far,osmotic,linlithgow,bramley,telecoms,pugin,repose,rupaul,sieur,meniscus,garmisch,reintroduce,400th,shoten,poniatowski,drome,kazakhstani,changeover,astronautics,husserl,herzl,hypertext,katakana,polybius,antananarivo,seong,breguet,reliquary,utada,aggregating,liangshan,sivan,tonawanda,audiobooks,shankill,coulee,phenolic,brockton,bookmakers,handsets,boaters,wylde,commonality,mappings,silhouettes,pennines,maurya,pratchett,singularities,eschewed,pretensions,vitreous,ibero,totalitarianism,poulenc,lingered,directx,seasoning,deputation,interdict,illyria,feedstock,counterbalance,muzik,buganda,parachuted,violist,homogeneity,comix,fjords,corsairs,punted,verandahs,equilateral,laoghaire,magyars,117th,alesund,televoting,mayotte,eateries,refurbish,nswrl,yukio,caragiale,zetas,dispel,codecs,inoperable,outperformed,rejuvenation,elstree,modernise,contributory,pictou,tewkesbury,chechens,ashina,psionic,refutation,medico,overdubbed,nebulae,sandefjord,personages,eccellenza,businessperson,placename,abenaki,perryville,threshing,reshaped,arecibo,burslem,colspan=3|turnout,rebadged,lumia,erinsborough,interactivity,bitmap,indefatigable,theosophy,excitatory,gleizes,edsel,bermondsey,korce,saarinen,wazir,diyarbakir,cofounder,liberalisation,onsen,nighthawks,siting,retirements,semyon,d'histoire,114th,redditch,venetia,praha,'round,valdosta,hieroglyphic,postmedial,edirne,miscellany,savona,cockpits,minimization,coupler,jacksonian,appeasement,argentines,saurashtra,arkwright,hesiod,folios,fitzalan,publica,rivaled,civitas,beermen,constructivism,ribeira,zeitschrift,solanum,todos,deformities,chilliwack,verdean,meagre,bishoprics,gujrat,yangzhou,reentered,inboard,mythologies,virtus,unsurprisingly,rusticated,museu,symbolise,proportionate,thesaban,symbian,aeneid,mitotic,veliki,compressive,cisterns,abies,winemaker,massenet,bertolt,ahmednagar,triplemania,armorial,administracion,tenures,smokehouse,hashtag,fuerza,regattas,gennady,kanazawa,mahmudabad,crustal,asaph,valentinian,ilaiyaraaja,honeyeater,trapezoidal,cooperatively,unambiguously,mastodon,inhospitable,harnesses,riverton,renewables,djurgardens,haitians,airings,humanoids,boatswain,shijiazhuang,faints,veera,punjabis,steepest,narain,karlovy,serre,sulcus,collectives,1500m,arion,subarctic,liberally,apollonius,ostia,droplet,headstones,norra,robusta,maquis,veronese,imola,primers,luminance,escadrille,mizuki,irreconcilable,stalybridge,temur,paraffin,stuccoed,parthians,counsels,fundamentalists,vivendi,polymath,sugababes,mikko,yonne,fermions,vestfold,pastoralist,kigali,unseeded,glarus,cusps,amasya,northwesterly,minorca,astragalus,verney,trevelyan,antipathy,wollstonecraft,bivalves,boulez,royle,divisao,quranic,bareilly,coronal,deviates,lulea,erectus,petronas,chandan,proxies,aeroflot,postsynaptic,memoriam,moyne,gounod,kuznetsova,pallava,ordinating,reigate,'first,lewisburg,exploitative,danby,academica,bailiwick,brahe,injective,stipulations,aeschylus,computes,gulden,hydroxylase,liveries,somalis,underpinnings,muscovite,kongsberg,domus,overlain,shareware,variegated,jalalabad,agence,ciphertext,insectivores,dengeki,menuhin,cladistic,baerum,betrothal,tokushima,wavelet,expansionist,pottsville,siyuan,prerequisites,carpi,nemzeti,nazar,trialled,eliminator,irrorated,homeward,redwoods,undeterred,strayed,lutyens,multicellular,aurelian,notated,lordships,alsatian,idents,foggia,garros,chalukyas,lillestrom,podlaski,pessimism,hsien,demilitarized,whitewashed,willesden,kirkcaldy,sanctorum,lamia,relaying,escondido,paediatric,contemplates,demarcated,bluestone,betula,penarol,capitalise,kreuznach,kenora,115th,hold'em,reichswehr,vaucluse,m.i.a,windings,boys/girls,cajon,hisar,predictably,flemington,ysgol,mimicked,clivina,grahamstown,ionia,glyndebourne,patrese,aquaria,sleaford,dayal,sportscenter,malappuram,m.b.a.,manoa,carbines,solvable,designator,ramanujan,linearity,academicians,sayid,lancastrian,factorial,strindberg,vashem,delos,comyn,condensing,superdome,merited,kabaddi,intransitive,bideford,neuroimaging,duopoly,scorecards,ziggler,heriot,boyars,virology,marblehead,microtubules,westphalian,anticipates,hingham,searchers,harpist,rapides,morricone,convalescent,mises,nitride,metrorail,matterhorn,bicol,drivetrain,marketer,snippet,winemakers,muban,scavengers,halberstadt,herkimer,peten,laborious,stora,montgomeryshire,booklist,shamir,herault,eurostar,anhydrous,spacewalk,ecclesia,calliostoma,highschool,d'oro,suffusion,imparts,overlords,tagus,rectifier,counterinsurgency,ministered,eilean,milecastle,contre,micromollusk,okhotsk,bartoli,matroid,hasidim,thirunal,terme,tarlac,lashkar,presque,thameslink,flyby,troopship,renouncing,fatih,messrs,vexillum,bagration,magnetite,bornholm,androgynous,vehement,tourette,philosophic,gianfranco,tuileries,codice_6,radially,flexion,hants,reprocessing,setae,burne,palaeographically,infantryman,shorebirds,tamarind,moderna,threading,militaristic,crohn,norrkoping,125cc,stadtholder,troms,klezmer,alphanumeric,brome,emmanuelle,tiwari,alchemical,formula_52,onassis,bleriot,bipedal,colourless,hermeneutics,hosni,precipitating,turnstiles,hallucinogenic,panhellenic,wyandotte,elucidated,chita,ehime,generalised,hydrophilic,biota,niobium,rnzaf,gandhara,longueuil,logics,sheeting,bielsko,cuvier,kagyu,trefoil,docent,pancrase,stalinism,postures,encephalopathy,monckton,imbalances,epochs,leaguers,anzio,diminishes,pataki,nitrite,amuro,nabil,maybach,l'aquila,babbler,bacolod,thutmose,evora,gaudi,breakage,recur,preservative,60deg,mendip,functionaries,columnar,maccabiah,chert,verden,bromsgrove,clijsters,dengue,pastorate,phuoc,principia,viareggio,kharagpur,scharnhorst,anyang,bosons,l'art,criticises,ennio,semarang,brownian,mirabilis,asperger,calibers,typographical,cartooning,minos,disembark,supranational,undescribed,etymologically,alappuzha,vilhelm,lanao,pakenham,bhagavata,rakoczi,clearings,astrologers,manitowoc,bunuel,acetylene,scheduler,defamatory,trabzonspor,leaded,scioto,pentathlete,abrahamic,minigames,aldehydes,peerages,legionary,1640s,masterworks,loudness,bryansk,likeable,genocidal,vegetated,towpath,declination,pyrrhus,divinely,vocations,rosebery,associazione,loaders,biswas,oeste,tilings,xianzong,bhojpuri,annuities,relatedness,idolator,psers,constriction,chuvash,choristers,hanafi,fielders,grammarian,orpheum,asylums,millbrook,gyatso,geldof,stabilise,tableaux,diarist,kalahari,panini,cowdenbeath,melanin,4x100m,resonances,pinar,atherosclerosis,sheringham,castlereagh,aoyama,larks,pantograph,protrude,natak,gustafsson,moribund,cerevisiae,cleanly,polymeric,holkar,cosmonauts,underpinning,lithosphere,firuzabad,languished,mingled,citrate,spadina,lavas,daejeon,fibrillation,porgy,pineville,ps1000,cobbled,emamzadeh,mukhtar,dampers,indelible,salonika,nanoscale,treblinka,eilat,purporting,fluctuate,mesic,hagiography,cutscenes,fondation,barrens,comically,accrue,ibrox,makerere,defections,'there,hollandia,skene,grosseto,reddit,objectors,inoculation,rowdies,playfair,calligrapher,namor,sibenik,abbottabad,propellants,hydraulically,chloroplasts,tablelands,tecnico,schist,klasse,shirvan,bashkortostan,bullfighting,north/south,polski,hanns,woodblock,kilmore,ejecta,ignacy,nanchang,danubian,commendations,snohomish,samaritans,argumentation,vasconcelos,hedgehogs,vajrayana,barents,kulkarni,kumbakonam,identifications,hillingdon,weirs,nayanar,beauvoir,messe,divisors,atlantiques,broods,affluence,tegucigalpa,unsuited,autodesk,akash,princeps,culprits,kingstown,unassuming,goole,visayan,asceticism,blagojevich,irises,paphos,unsound,maurier,pontchartrain,desertification,sinfonietta,latins,especial,limpet,valerenga,glial,brainstem,mitral,parables,sauropod,judean,iskcon,sarcoma,venlo,justifications,zhuhai,blavatsky,alleviated,usafe,steppenwolf,inversions,janko,chagall,secretory,basildon,saguenay,pergamon,hemispherical,harmonized,reloading,franjo,domaine,extravagance,relativism,metamorphosed,labuan,baloncesto,gmail,byproducts,calvinists,counterattacked,vitus,bubonic,120th,strachey,ritually,brookwood,selectable,savinja,incontinence,meltwater,jinja,1720s,brahmi,morgenthau,sheaves,sleeved,stratovolcano,wielki,utilisation,avoca,fluxus,panzergrenadier,philately,deflation,podlaska,prerogatives,kuroda,theophile,zhongzong,gascoyne,magus,takao,arundell,fylde,merdeka,prithviraj,venkateswara,liepaja,daigo,dreamland,reflux,sunnyvale,coalfields,seacrest,soldering,flexor,structuralism,alnwick,outweighed,unaired,mangeshkar,batons,glaad,banshees,irradiated,organelles,biathlete,cabling,chairlift,lollapalooza,newsnight,capacitive,succumbs,flatly,miramichi,burwood,comedienne,charteris,biotic,workspace,aficionados,sokolka,chatelet,o'shaughnessy,prosthesis,neoliberal,refloated,oppland,hatchlings,econometrics,loess,thieu,androids,appalachians,jenin,pterostichinae,downsized,foils,chipsets,stencil,danza,narrate,maginot,yemenite,bisects,crustacean,prescriptive,melodious,alleviation,empowers,hansson,autodromo,obasanjo,osmosis,daugava,rheumatism,moraes,leucine,etymologies,chepstow,delaunay,bramall,bajaj,flavoring,approximates,marsupials,incisive,microcomputer,tactically,waals,wilno,fisichella,ursus,hindmarsh,mazarin,lomza,xenophobia,lawlessness,annecy,wingers,gornja,gnaeus,superieur,tlaxcala,clasps,symbolises,slats,rightist,effector,blighted,permanence,divan,progenitors,kunsthalle,anointing,excelling,coenzyme,indoctrination,dnipro,landholdings,adriaan,liturgies,cartan,ethmia,attributions,sanctus,trichy,chronicon,tancred,affinis,kampuchea,gantry,pontypool,membered,distrusted,fissile,dairies,hyposmocoma,craigie,adarsh,martinsburg,taxiway,30deg,geraint,vellum,bencher,khatami,formula_53,zemun,teruel,endeavored,palmares,pavements,u.s..,internationalization,satirized,carers,attainable,wraparound,muang,parkersburg,extinctions,birkenfeld,wildstorm,payers,cohabitation,unitas,culloden,capitalizing,clwyd,daoist,campinas,emmylou,orchidaceae,halakha,orientales,fealty,domnall,chiefdom,nigerians,ladislav,dniester,avowed,ergonomics,newsmagazine,kitsch,cantilevered,benchmarking,remarriage,alekhine,coldfield,taupo,almirante,substations,apprenticeships,seljuq,levelling,eponym,symbolising,salyut,opioids,underscore,ethnologue,mohegan,marikina,libro,bassano,parse,semantically,disjointed,dugdale,padraig,tulsi,modulating,xfinity,headlands,mstislav,earthworms,bourchier,lgbtq,embellishments,pennants,rowntree,betel,motet,mulla,catenary,washoe,mordaunt,dorking,colmar,girardeau,glentoran,grammatically,samad,recreations,technion,staccato,mikoyan,spoilers,lyndhurst,victimization,chertsey,belafonte,tondo,tonsberg,narrators,subcultures,malformations,edina,augmenting,attests,euphemia,cabriolet,disguising,1650s,navarrese,demoralized,cardiomyopathy,welwyn,wallachian,smoothness,planktonic,voles,issuers,sardasht,survivability,cuauhtemoc,thetis,extruded,signet,raghavan,lombok,eliyahu,crankcase,dissonant,stolberg,trencin,desktops,bursary,collectivization,charlottenburg,triathlete,curvilinear,involuntarily,mired,wausau,invades,sundaram,deletions,bootstrap,abellio,axiomatic,noguchi,setups,malawian,visalia,materialist,kartuzy,wenzong,plotline,yeshivas,parganas,tunica,citric,conspecific,idlib,superlative,reoccupied,blagoevgrad,masterton,immunological,hatta,courbet,vortices,swallowtail,delves,haridwar,diptera,boneh,bahawalpur,angering,mardin,equipments,deployable,guanine,normality,rimmed,artisanal,boxset,chandrasekhar,jools,chenar,tanakh,carcassonne,belatedly,millville,anorthosis,reintegration,velde,surfactant,kanaan,busoni,glyphipterix,personas,fullness,rheims,tisza,stabilizers,bharathi,joost,spinola,mouldings,perching,esztergom,afzal,apostate,lustre,s.league,motorboat,monotheistic,armature,barat,asistencia,bloomsburg,hippocampal,fictionalised,defaults,broch,hexadecimal,lusignan,ryanair,boccaccio,breisgau,southbank,bskyb,adjoined,neurobiology,aforesaid,sadhu,langue,headship,wozniacki,hangings,regulus,prioritized,dynamism,allier,hannity,shimin,antoninus,gymnopilus,caledon,preponderance,melayu,electrodynamics,syncopated,ibises,krosno,mechanistic,morpeth,harbored,albini,monotheism,'real,hyperactivity,haveli,writer/director,minato,nimoy,caerphilly,chitral,amirabad,fanshawe,l'oreal,lorde,mukti,authoritarianism,valuing,spyware,hanbury,restarting,stato,embed,suiza,empiricism,stabilisation,stari,castlemaine,orbis,manufactory,mauritanian,shoji,taoyuan,prokaryotes,oromia,ambiguities,embodying,slims,frente,innovate,ojibwa,powdery,gaeltacht,argentinos,quatermass,detergents,fijians,adaptor,tokai,chileans,bulgars,oxidoreductases,bezirksliga,conceicao,myosin,nellore,500cc,supercomputers,approximating,glyndwr,polypropylene,haugesund,cockerell,tudman,ashbourne,hindemith,bloodlines,rigveda,etruria,romanos,steyn,oradea,deceleration,manhunter,laryngeal,fraudulently,janez,wendover,haplotype,janaki,naoki,belizean,mellencamp,cartographic,sadhana,tricolour,pseudoscience,satara,bytow,s.p.a.,jagdgeschwader,arcot,omagh,sverdrup,masterplan,surtees,apocrypha,ahvaz,d'amato,socratic,leumit,unnumbered,nandini,witold,marsupial,coalesced,interpolated,gimnasia,karadzic,keratin,mamoru,aldeburgh,speculator,escapement,irfan,kashyap,satyajit,haddington,solver,rothko,ashkelon,kickapoo,yeomen,superbly,bloodiest,greenlandic,lithic,autofocus,yardbirds,poona,keble,javan,sufis,expandable,tumblr,ursuline,swimwear,winwood,counsellors,aberrations,marginalised,befriending,workouts,predestination,varietal,siddhartha,dunkeld,judaic,esquimalt,shabab,ajith,telefonica,stargard,hoysala,radhakrishnan,sinusoidal,strada,hiragana,cebuano,monoid,independencia,floodwaters,mildura,mudflats,ottokar,translit,radix,wigner,philosophically,tephritid,synthesizing,castletown,installs,stirner,resettle,bushfire,choirmaster,kabbalistic,shirazi,lightship,rebus,colonizers,centrifuge,leonean,kristofferson,thymus,clackamas,ratnam,rothesay,municipally,centralia,thurrock,gulfport,bilinear,desirability,merite,psoriasis,macaw,erigeron,consignment,mudstone,distorting,karlheinz,ramen,tailwheel,vitor,reinsurance,edifices,superannuation,dormancy,contagion,cobden,rendezvoused,prokaryotic,deliberative,patricians,feigned,degrades,starlings,sopot,viticultural,beaverton,overflowed,convener,garlands,michiel,ternopil,naturelle,biplanes,bagot,gamespy,ventspils,disembodied,flattening,profesional,londoners,arusha,scapular,forestall,pyridine,ulema,eurodance,aruna,callus,periodontal,coetzee,immobilized,o'meara,maharani,katipunan,reactants,zainab,microgravity,saintes,britpop,carrefour,constrain,adversarial,firebirds,brahmo,kashima,simca,surety,surpluses,superconductivity,gipuzkoa,cumans,tocantins,obtainable,humberside,roosting,'king,formula_54,minelayer,bessel,sulayman,cycled,biomarkers,annealing,shusha,barda,cassation,djing,polemics,tuple,directorates,indomitable,obsolescence,wilhelmine,pembina,bojan,tambo,dioecious,pensioner,magnificat,1660s,estrellas,southeasterly,immunodeficiency,railhead,surreptitiously,codeine,encores,religiosity,tempera,camberley,efendi,boardings,malleable,hagia,input/output,lucasfilm,ujjain,polymorphisms,creationist,berners,mickiewicz,irvington,linkedin,endures,kinect,munition,apologetics,fairlie,predicated,reprinting,ethnographer,variances,levantine,mariinsky,jadid,jarrow,asia/oceania,trinamool,waveforms,bisexuality,preselection,pupae,buckethead,hieroglyph,lyricists,marionette,dunbartonshire,restorer,monarchical,pazar,kickoffs,cabildo,savannas,gliese,dench,spoonbills,novelette,diliman,hypersensitivity,authorising,montefiore,mladen,qu'appelle,theistic,maruti,laterite,conestoga,saare,californica,proboscis,carrickfergus,imprecise,hadassah,baghdadi,jolgeh,deshmukh,amusements,heliopolis,berle,adaptability,partenkirchen,separations,baikonur,cardamom,southeastward,southfield,muzaffar,adequacy,metropolitana,rajkot,kiyoshi,metrobus,evictions,reconciles,librarianship,upsurge,knightley,badakhshan,proliferated,spirituals,burghley,electroacoustic,professing,featurette,reformists,skylab,descriptors,oddity,greyfriars,injects,salmond,lanzhou,dauntless,subgenera,underpowered,transpose,mahinda,gatos,aerobatics,seaworld,blocs,waratahs,joris,giggs,perfusion,koszalin,mieczyslaw,ayyubid,ecologists,modernists,sant'angelo,quicktime,him/her,staves,sanyo,melaka,acrocercops,qigong,iterated,generalizes,recuperation,vihara,circassians,psychical,chavo,memoires,infiltrates,notaries,pelecaniformesfamily,strident,chivalric,pierrepont,alleviating,broadsides,centipede,b.tech,reinterpreted,sudetenland,hussite,covenanters,radhika,ironclads,gainsbourg,testis,penarth,plantar,azadegan,beano,espn.com,leominster,autobiographies,nbcuniversal,eliade,khamenei,montferrat,undistinguished,ethnological,wenlock,fricatives,polymorphic,biome,joule,sheaths,astrophysicist,salve,neoclassicism,lovat,downwind,belisarius,forma,usurpation,freie,depopulation,backbench,ascenso,'high,aagpbl,gdanski,zalman,mouvement,encapsulation,bolshevism,statny,voyageurs,hywel,vizcaya,mazra'eh,narthex,azerbaijanis,cerebrospinal,mauretania,fantail,clearinghouse,bolingbroke,pequeno,ansett,remixing,microtubule,wrens,jawahar,palembang,gambian,hillsong,fingerboard,repurposed,sundry,incipient,veolia,theologically,ulaanbaatar,atsushi,foundling,resistivity,myeloma,factbook,mazowiecka,diacritic,urumqi,clontarf,provokes,intelsat,professes,materialise,portobello,benedictines,panionios,introverted,reacquired,bridport,mammary,kripke,oratorios,vlore,stoning,woredas,unreported,antti,togolese,fanzines,heuristics,conservatories,carburetors,clitheroe,cofounded,formula_57,erupting,quinnipiac,bootle,ghostface,sittings,aspinall,sealift,transferase,boldklub,siskiyou,predominated,francophonie,ferruginous,castrum,neogene,sakya,madama,precipitous,'love,posix,bithynia,uttara,avestan,thrushes,seiji,memorably,septimius,libri,cibernetico,hyperinflation,dissuaded,cuddalore,peculiarity,vaslui,grojec,albumin,thurles,casks,fasteners,fluidity,buble,casals,terek,gnosticism,cognates,ulnar,radwanska,babylonians,majuro,oxidizer,excavators,rhythmically,liffey,gorakhpur,eurydice,underscored,arborea,lumumba,tuber,catholique,grama,galilei,scrope,centreville,jacobin,bequests,ardeche,polygamous,montauban,terai,weatherboard,readability,attainder,acraea,transversely,rivets,winterbottom,reassures,bacteriology,vriesea,chera,andesite,dedications,homogenous,reconquered,bandon,forrestal,ukiyo,gurdjieff,tethys,sparc,muscogee,grebes,belchatow,mansa,blantyre,palliser,sokolow,fibroblasts,exmoor,misaki,soundscapes,housatonic,middelburg,convenor,leyla,antipope,histidine,okeechobee,alkenes,sombre,alkene,rubik,macaques,calabar,trophee,pinchot,'free,frusciante,chemins,falaise,vasteras,gripped,schwarzenberg,cumann,kanchipuram,acoustically,silverbacks,fangio,inset,plympton,kuril,vaccinations,recep,theropods,axils,stavropol,encroached,apoptotic,papandreou,wailers,moonstone,assizes,micrometers,hornchurch,truncation,annapurna,egyptologists,rheumatic,promiscuity,satiric,fleche,caloptilia,anisotropy,quaternions,gruppo,viscounts,awardees,aftershocks,sigint,concordance,oblasts,gaumont,stent,commissars,kesteven,hydroxy,vijayanagar,belorussian,fabricius,watermark,tearfully,mamet,leukaemia,sorkh,milepost,tattooing,vosta,abbasids,uncompleted,hedong,woodwinds,extinguishing,malus,multiplexes,francoist,pathet,responsa,bassists,'most,postsecondary,ossory,grampian,saakashvili,alito,strasberg,impressionistic,volador,gelatinous,vignette,underwing,campanian,abbasabad,albertville,hopefuls,nieuwe,taxiways,reconvened,recumbent,pathologists,unionized,faversham,asymptotically,romulo,culling,donja,constricted,annesley,duomo,enschede,lovech,sharpshooter,lansky,dhamma,papillae,alanine,mowat,delius,wrest,mcluhan,podkarpackie,imitators,bilaspur,stunting,pommel,casemate,handicaps,nagas,testaments,hemings,necessitate,rearward,locative,cilla,klitschko,lindau,merion,consequential,antic,soong,copula,berthing,chevrons,rostral,sympathizer,budokan,ranulf,beria,stilt,replying,conflated,alcibiades,painstaking,yamanashi,calif.,arvid,ctesiphon,xizong,rajas,caxton,downbeat,resurfacing,rudders,miscegenation,deathmatch,foregoing,arthropod,attestation,karts,reapportionment,harnessing,eastlake,schola,dosing,postcolonial,imtiaz,formula_55,insulators,gunung,accumulations,pampas,llewelyn,bahnhof,cytosol,grosjean,teaneck,briarcliff,arsenio,canara,elaborating,passchendaele,searchlights,holywell,mohandas,preventable,gehry,mestizos,ustinov,cliched,'national,heidfeld,tertullian,jihadist,tourer,miletus,semicircle,outclassed,bouillon,cardinalate,clarifies,dakshina,bilayer,pandyan,unrwa,chandragupta,formula_56,portola,sukumaran,lactation,islamia,heikki,couplers,misappropriation,catshark,montt,ploughs,carib,stator,leaderboard,kenrick,dendrites,scape,tillamook,molesworth,mussorgsky,melanesia,restated,troon,glycoside,truckee,headwater,mashup,sectoral,gangwon,docudrama,skirting,psychopathology,dramatised,ostroleka,infestations,thabo,depolarization,wideroe,eisenbahn,thomond,kumaon,upendra,foreland,acronyms,yaqui,retaking,raphaelite,specie,dupage,villars,lucasarts,chloroplast,werribee,balsa,ascribe,havant,flava,khawaja,tyumen,subtract,interrogators,reshaping,buzzcocks,eesti,campanile,potemkin,apertures,snowboarder,registrars,handbooks,boyar,contaminant,depositors,proximate,jeunesse,zagora,pronouncements,mists,nihilism,deified,margraviate,pietersen,moderators,amalfi,adjectival,copepods,magnetosphere,pallets,clemenceau,castra,perforation,granitic,troilus,grzegorz,luthier,dockyards,antofagasta,ffestiniog,subroutine,afterword,waterwheel,druce,nitin,undifferentiated,emacs,readmitted,barneveld,tapers,hittites,infomercials,infirm,braathens,heligoland,carpark,geomagnetic,musculoskeletal,nigerien,machinima,harmonize,repealing,indecency,muskoka,verite,steubenville,suffixed,cytoskeleton,surpasses,harmonia,imereti,ventricles,heterozygous,envisions,otsego,ecoles,warrnambool,burgenland,seria,rawat,capistrano,welby,kirin,enrollments,caricom,dragonlance,schaffhausen,expanses,photojournalism,brienne,etude,referent,jamtland,schemas,xianbei,cleburne,bicester,maritima,shorelines,diagonals,bjelke,nonpublic,aliasing,m.f.a,ovals,maitreya,skirmishing,grothendieck,sukhothai,angiotensin,bridlington,durgapur,contras,gakuen,skagit,rabbinate,tsunamis,haphazard,tyldesley,microcontroller,discourages,hialeah,compressing,septimus,larvik,condoleezza,psilocybin,protectionism,songbirds,clandestinely,selectmen,wargame,cinemascope,khazars,agronomy,melzer,latifah,cherokees,recesses,assemblymen,basescu,banaras,bioavailability,subchannels,adenine,o'kelly,prabhakar,leonese,dimethyl,testimonials,geoffroy,oxidant,universiti,gheorghiu,bohdan,reversals,zamorin,herbivore,jarre,sebastiao,infanterie,dolmen,teddington,radomsko,spaceships,cuzco,recapitulation,mahoning,bainimarama,myelin,aykroyd,decals,tokelau,nalgonda,rajasthani,121st,quelled,tambov,illyrians,homilies,illuminations,hypertrophy,grodzisk,inundation,incapacity,equilibria,combats,elihu,steinitz,berengar,gowda,canwest,khosrau,maculata,houten,kandinsky,onside,leatherhead,heritable,belvidere,federative,chukchi,serling,eruptive,patan,entitlements,suffragette,evolutions,migrates,demobilisation,athleticism,trope,sarpsborg,kensal,translink,squamish,concertgebouw,energon,timestamp,competences,zalgiris,serviceman,codice_7,spoofing,assange,mahadevan,skien,suceava,augustan,revisionism,unconvincing,hollande,drina,gottlob,lippi,broglie,darkening,tilapia,eagerness,nacht,kolmogorov,photometric,leeuwarden,jrotc,haemorrhage,almanack,cavalli,repudiation,galactose,zwickau,cetinje,houbraken,heavyweights,gabonese,ordinals,noticias,museveni,steric,charaxes,amjad,resection,joinville,leczyca,anastasius,purbeck,subtribe,dalles,leadoff,monoamine,jettisoned,kaori,anthologized,alfreton,indic,bayezid,tottori,colonizing,assassinating,unchanging,eusebian,d'estaing,tsingtao,toshio,transferases,peronist,metrology,equus,mirpur,libertarianism,kovil,indole,'green,abstention,quantitatively,icebreakers,tribals,mainstays,dryandra,eyewear,nilgiri,chrysanthemum,inositol,frenetic,merchantman,hesar,physiotherapist,transceiver,dancefloor,rankine,neisse,marginalization,lengthen,unaided,rework,pageantry,savio,striated,funen,witton,illuminates,frass,hydrolases,akali,bistrita,copywriter,firings,handballer,tachinidae,dmytro,coalesce,neretva,menem,moraines,coatbridge,crossrail,spoofed,drosera,ripen,protour,kikuyu,boleslav,edwardes,troubadours,haplogroups,wrasse,educationalist,sroda,khaneh,dagbladet,apennines,neuroscientist,deplored,terje,maccabees,daventry,spaceport,lessening,ducats,singer/guitarist,chambersburg,yeong,configurable,ceremonially,unrelenting,caffe,graaf,denizens,kingsport,ingush,panhard,synthesised,tumulus,homeschooled,bozorg,idiomatic,thanhouser,queensway,radek,hippolytus,inking,banovina,peacocks,piaui,handsworth,pantomimes,abalone,thera,kurzweil,bandura,augustinians,bocelli,ferrol,jiroft,quadrature,contravention,saussure,rectification,agrippina,angelis,matanzas,nidaros,palestrina,latium,coriolis,clostridium,ordain,uttering,lanchester,proteolytic,ayacucho,merseburg,holbein,sambalpur,algebraically,inchon,ostfold,savoia,calatrava,lahiri,judgeship,ammonite,masaryk,meyerbeer,hemorrhagic,superspeedway,ningxia,panicles,encircles,khmelnytsky,profusion,esher,babol,inflationary,anhydride,gaspe,mossy,periodicity,nacion,meteorologists,mahjong,interventional,sarin,moult,enderby,modell,palgrave,warners,montcalm,siddha,functionalism,rilke,politicized,broadmoor,kunste,orden,brasileira,araneta,eroticism,colquhoun,mamba,blacktown,tubercle,seagrass,manoel,camphor,neoregelia,llandudno,annexe,enplanements,kamien,plovers,statisticians,iturbide,madrasah,nontrivial,publican,landholders,manama,uninhabitable,revivalist,trunkline,friendliness,gurudwara,rocketry,unido,tripos,besant,braque,evolutionarily,abkhazian,staffel,ratzinger,brockville,bohemond,intercut,djurgarden,utilitarianism,deploys,sastri,absolutism,subhas,asghar,fictions,sepinwall,proportionately,titleholders,thereon,foursquare,machinegun,knightsbridge,siauliai,aqaba,gearboxes,castaways,weakens,phallic,strzelce,buoyed,ruthenia,pharynx,intractable,neptunes,koine,leakey,netherlandish,preempted,vinay,terracing,instigating,alluvium,prosthetics,vorarlberg,politiques,joinery,reduplication,nebuchadnezzar,lenticular,banka,seaborne,pattinson,helpline,aleph,beckenham,californians,namgyal,franziska,aphid,branagh,transcribe,appropriateness,surakarta,takings,propagates,juraj,b0d3fb,brera,arrayed,tailback,falsehood,hazleton,prosody,egyptology,pinnate,tableware,ratan,camperdown,ethnologist,tabari,classifiers,biogas,126th,kabila,arbitron,apuestas,membranous,kincardine,oceana,glories,natick,populism,synonymy,ghalib,mobiles,motherboards,stationers,germinal,patronised,formula_58,gaborone,torts,jeezy,interleague,novaya,batticaloa,offshoots,wilbraham,filename,nswrfl,'well,trilobite,pythons,optimally,scientologists,rhesus,pilsen,backdrops,batang,unionville,hermanos,shrikes,fareham,outlawing,discontinuing,boisterous,shamokin,scanty,southwestward,exchangers,unexpired,mewar,h.m.s,saldanha,pawan,condorcet,turbidity,donau,indulgences,coincident,cliques,weeklies,bardhaman,violators,kenai,caspase,xperia,kunal,fistula,epistemic,cammell,nephi,disestablishment,rotator,germaniawerft,pyaar,chequered,jigme,perlis,anisotropic,popstars,kapil,appendices,berat,defecting,shacks,wrangel,panchayath,gorna,suckling,aerosols,sponheim,talal,borehole,encodings,enlai,subduing,agong,nadar,kitsap,syrmia,majumdar,pichilemu,charleville,embryology,booting,literati,abutting,basalts,jussi,repubblica,hertogenbosch,digitization,relents,hillfort,wiesenthal,kirche,bhagwan,bactrian,oases,phyla,neutralizing,helsing,ebooks,spearheading,margarine,'golden,phosphor,picea,stimulants,outliers,timescale,gynaecology,integrator,skyrocketed,bridgnorth,senecio,ramachandra,suffragist,arrowheads,aswan,inadvertent,microelectronics,118th,sofer,kubica,melanesian,tuanku,balkh,vyborg,crystallographic,initiators,metamorphism,ginzburg,looters,unimproved,finistere,newburyport,norges,immunities,franchisees,asterism,kortrijk,camorra,komsomol,fleurs,draughts,patagonian,voracious,artin,collaborationist,revolucion,revitalizing,xaver,purifying,antipsychotic,disjunct,pompeius,dreamwave,juvenal,beinn,adiyaman,antitank,allama,boletus,melanogaster,dumitru,caproni,aligns,athabaskan,stobart,phallus,veikkausliiga,hornsey,buffering,bourbons,dobruja,marga,borax,electrics,gangnam,motorcyclist,whidbey,draconian,lodger,galilean,sanctification,imitates,boldness,underboss,wheatland,cantabrian,terceira,maumee,redefining,uppercase,ostroda,characterise,universalism,equalized,syndicalism,haringey,masovia,deleuze,funkadelic,conceals,thuan,minsky,pluralistic,ludendorff,beekeeping,bonfires,endoscopic,abuts,prebend,jonkoping,amami,tribunes,yup'ik,awadh,gasification,pforzheim,reforma,antiwar,vaishnavism,maryville,inextricably,margrethe,empresa,neutrophils,sanctified,ponca,elachistidae,curiae,quartier,mannar,hyperplasia,wimax,busing,neologism,florins,underrepresented,digitised,nieuw,cooch,howards,frege,hughie,plied,swale,kapellmeister,vajpayee,quadrupled,aeronautique,dushanbe,custos,saltillo,kisan,tigray,manaus,epigrams,shamanic,peppered,frosts,promotion/relegation,concedes,zwingli,charentes,whangarei,hyung,spring/summer,sobre,eretz,initialization,sawai,ephemera,grandfathered,arnaldo,customised,permeated,parapets,growths,visegrad,estudios,altamont,provincia,apologises,stoppard,carburettor,rifts,kinematic,zhengzhou,eschatology,prakrit,folate,yvelines,scapula,stupas,rishon,reconfiguration,flutist,1680s,apostolate,proudhon,lakshman,articulating,stortford,faithfull,bitterns,upwelling,qur'anic,lidar,interferometry,waterlogged,koirala,ditton,wavefunction,fazal,babbage,antioxidants,lemberg,deadlocked,tolled,ramapo,mathematica,leiria,topologies,khali,photonic,balti,1080p,corrects,recommenced,polyglot,friezes,tiebreak,copacabana,cholmondeley,armband,abolishment,sheamus,buttes,glycolysis,cataloged,warrenton,sassari,kishan,foodservice,cryptanalysis,holmenkollen,cosplay,machi,yousuf,mangal,allying,fertiliser,otomi,charlevoix,metallurg,parisians,bottlenose,oakleigh,debug,cidade,accede,ligation,madhava,pillboxes,gatefold,aveyron,sorin,thirsk,immemorial,menelik,mehra,domingos,underpinned,fleshed,harshness,diphthong,crestwood,miskolc,dupri,pyrausta,muskingum,tuoba,prodi,incidences,waynesboro,marquesas,heydar,artesian,calinescu,nucleation,funders,covalently,compaction,derbies,seaters,sodor,tabular,amadou,peckinpah,o'halloran,zechariah,libyans,kartik,daihatsu,chandran,erzhu,heresies,superheated,yarder,dorde,tanjore,abusers,xuanwu,juniperus,moesia,trusteeship,birdwatching,beatz,moorcock,harbhajan,sanga,choreographic,photonics,boylston,amalgamate,prawns,electrifying,sarath,inaccurately,exclaims,powerpoint,chaining,cpusa,adulterous,saccharomyces,glogow,vfl/afl,syncretic,simla,persisting,functors,allosteric,euphorbiaceae,juryo,mlada,moana,gabala,thornycroft,kumanovo,ostrovsky,sitio,tutankhamun,sauropods,kardzhali,reinterpretation,sulpice,rosyth,originators,halesowen,delineation,asesoria,abatement,gardai,elytra,taillights,overlays,monsoons,sandpipers,ingmar,henrico,inaccuracy,irwell,arenabowl,elche,pressburg,signalman,interviewees,sinkhole,pendle,ecommerce,cellos,nebria,organometallic,surrealistic,propagandist,interlaken,canandaigua,aerials,coutinho,pascagoula,tonopah,letterkenny,gropius,carbons,hammocks,childe,polities,hosiery,donitz,suppresses,diaghilev,stroudsburg,bagram,pistoia,regenerating,unitarians,takeaway,offstage,vidin,glorification,bakunin,yavapai,lutzow,sabercats,witney,abrogated,gorlitz,validating,dodecahedron,stubbornly,telenor,glaxosmithkline,solapur,undesired,jellicoe,dramatization,four-and-a-half,seawall,waterpark,artaxerxes,vocalization,typographic,byung,sachsenhausen,shepparton,kissimmee,konnan,belsen,dhawan,khurd,mutagenesis,vejle,perrot,estradiol,formula_60,saros,chiloe,misiones,lamprey,terrains,speke,miasto,eigenvectors,haydock,reservist,corticosteroids,savitri,shinawatra,developmentally,yehudi,berates,janissaries,recapturing,rancheria,subplots,gresley,nikkatsu,oryol,cosmas,boavista,formula_59,playfully,subsections,commentated,kathakali,dorid,vilaine,seepage,hylidae,keiji,kazakhs,triphosphate,1620s,supersede,monarchists,falla,miyako,notching,bhumibol,polarizing,secularized,shingled,bronislaw,lockerbie,soleyman,bundesbahn,latakia,redoubts,boult,inwardly,invents,ondrej,minangkabau,newquay,permanente,alhaji,madhav,malini,ellice,bookmaker,mankiewicz,etihad,o'dea,interrogative,mikawa,wallsend,canisius,bluesy,vitruvius,noord,ratifying,mixtec,gujranwala,subprefecture,keelung,goiania,nyssa,shi'ite,semitone,ch'uan,computerised,pertuan,catapults,nepomuk,shruti,millstones,buskerud,acolytes,tredegar,sarum,armia,dell'arte,devises,custodians,upturned,gallaudet,disembarking,thrashed,sagrada,myeon,undeclared,qumran,gaiden,tepco,janesville,showground,condense,chalon,unstaffed,pasay,undemocratic,hauts,viridis,uninjured,escutcheon,gymkhana,petaling,hammam,dislocations,tallaght,rerum,shias,indios,guaranty,simplicial,benares,benediction,tajiri,prolifically,huawei,onerous,grantee,ferencvaros,otranto,carbonates,conceit,digipak,qadri,masterclasses,swamiji,cradock,plunket,helmsman,119th,salutes,tippecanoe,murshidabad,intelligibility,mittal,diversifying,bidar,asansol,crowdsourcing,rovere,karakoram,grindcore,skylights,tulagi,furrows,ligne,stuka,sumer,subgraph,amata,regionalist,bulkeley,teletext,glorify,readied,lexicographer,sabadell,predictability,quilmes,phenylalanine,bandaranaike,pyrmont,marksmen,quisling,viscountess,sociopolitical,afoul,pediments,swazi,martyrology,nullify,panagiotis,superconductors,veldenz,jujuy,l'isle,hematopoietic,shafi,subsea,hattiesburg,jyvaskyla,kebir,myeloid,landmine,derecho,amerindians,birkenau,scriabin,milhaud,mucosal,nikaya,freikorps,theoretician,proconsul,o'hanlon,clerked,bactria,houma,macular,topologically,shrubby,aryeh,ghazali,afferent,magalhaes,moduli,ashtabula,vidarbha,securitate,ludwigsburg,adoor,varun,shuja,khatun,chengde,bushels,lascelles,professionnelle,elfman,rangpur,unpowered,citytv,chojnice,quaternion,stokowski,aschaffenburg,commutes,subramaniam,methylene,satrap,gharb,namesakes,rathore,helier,gestational,heraklion,colliers,giannis,pastureland,evocation,krefeld,mahadeva,churchmen,egret,yilmaz,galeazzo,pudukkottai,artigas,generalitat,mudslides,frescoed,enfeoffed,aphorisms,melilla,montaigne,gauliga,parkdale,mauboy,linings,prema,sapir,xylophone,kushan,rockne,sequoyah,vasyl,rectilinear,vidyasagar,microcosm,san'a,carcinogen,thicknesses,aleut,farcical,moderating,detested,hegemonic,instalments,vauban,verwaltungsgemeinschaft,picayune,razorback,magellanic,moluccas,pankhurst,exportation,waldegrave,sufferer,bayswater,1up.com,rearmament,orangutans,varazdin,b.o.b,elucidate,harlingen,erudition,brankovic,lapis,slipway,urraca,shinde,unwell,elwes,euboea,colwyn,srivijaya,grandstands,hortons,generalleutnant,fluxes,peterhead,gandhian,reals,alauddin,maximized,fairhaven,endow,ciechanow,perforations,darters,panellist,manmade,litigants,exhibitor,tirol,caracalla,conformance,hotelier,stabaek,hearths,borac,frisians,ident,veliko,emulators,schoharie,uzbeks,samarra,prestwick,wadia,universita,tanah,bucculatrix,predominates,genotypes,denounces,roadsides,ganassi,keokuk,philatelist,tomic,ingots,conduits,samplers,abdus,johar,allegories,timaru,wolfpacks,secunda,smeaton,sportivo,inverting,contraindications,whisperer,moradabad,calamities,bakufu,soundscape,smallholders,nadeem,crossroad,xenophobic,zakir,nationalliga,glazes,retroflex,schwyz,moroder,rubra,quraysh,theodoros,endemol,infidels,km/hr,repositioned,portraitist,lluis,answerable,arges,mindedness,coarser,eyewall,teleported,scolds,uppland,vibraphone,ricoh,isenburg,bricklayer,cuttlefish,abstentions,communicable,cephalopod,stockyards,balto,kinston,armbar,bandini,elphaba,maxims,bedouins,sachsen,friedkin,tractate,pamir,ivanovo,mohini,kovalainen,nambiar,melvyn,orthonormal,matsuyama,cuernavaca,veloso,overstated,streamer,dravid,informers,analyte,sympathized,streetscape,gosta,thomasville,grigore,futuna,depleting,whelks,kiedis,armadale,earner,wynyard,dothan,animating,tridentine,sabri,immovable,rivoli,ariege,parley,clinker,circulates,junagadh,fraunhofer,congregants,180th,buducnost,formula_62,olmert,dedekind,karnak,bayernliga,mazes,sandpiper,ecclestone,yuvan,smallmouth,decolonization,lemmy,adjudicated,retiro,legia,benue,posit,acidification,wahab,taconic,floatplane,perchlorate,atria,wisbech,divestment,dallara,phrygia,palustris,cybersecurity,rebates,facie,mineralogical,substituent,proteges,fowey,mayenne,smoothbore,cherwell,schwarzschild,junin,murrumbidgee,smalltalk,d'orsay,emirati,calaveras,titusville,theremin,vikramaditya,wampanoag,burra,plaines,onegin,emboldened,whampoa,langa,soderbergh,arnaz,sowerby,arendal,godunov,pathanamthitta,damselfly,bestowing,eurosport,iconoclasm,outfitters,acquiesced,badawi,hypotension,ebbsfleet,annulus,sohrab,thenceforth,chagatai,necessitates,aulus,oddities,toynbee,uniontown,innervation,populaire,indivisible,rossellini,minuet,cyrene,gyeongju,chania,cichlids,harrods,1690s,plunges,abdullahi,gurkhas,homebuilt,sortable,bangui,rediff,incrementally,demetrios,medaille,sportif,svend,guttenberg,tubules,carthusian,pleiades,torii,hoppus,phenyl,hanno,conyngham,teschen,cronenberg,wordless,melatonin,distinctiveness,autos,freising,xuanzang,dunwich,satanism,sweyn,predrag,contractually,pavlovic,malaysians,micrometres,expertly,pannonian,abstaining,capensis,southwesterly,catchphrases,commercialize,frankivsk,normanton,hibernate,verso,deportees,dubliners,codice_8,condors,zagros,glosses,leadville,conscript,morrisons,usury,ossian,oulton,vaccinium,civet,ayman,codrington,hadron,nanometers,geochemistry,extractor,grigori,tyrrhenian,neocollyris,drooping,falsification,werft,courtauld,brigantine,orhan,chapultepec,supercopa,federalized,praga,havering,encampments,infallibility,sardis,pawar,undirected,reconstructionist,ardrossan,varuna,pastimes,archdiocesan,fledging,shenhua,molise,secondarily,stagnated,replicates,ciencias,duryodhana,marauding,ruislip,ilyich,intermixed,ravenswood,shimazu,mycorrhizal,icosahedral,consents,dunblane,follicular,pekin,suffield,muromachi,kinsale,gauche,businesspeople,thereto,watauga,exaltation,chelmno,gorse,proliferate,drainages,burdwan,kangra,transducers,inductor,duvalier,maguindanao,moslem,uncaf,givenchy,plantarum,liturgics,telegraphs,lukashenko,chenango,andante,novae,ironwood,faubourg,torme,chinensis,ambala,pietermaritzburg,virginians,landform,bottlenecks,o'driscoll,darbhanga,baptistery,ameer,needlework,naperville,auditoriums,mullingar,starrer,animatronic,topsoil,madura,cannock,vernet,santurce,catocala,ozeki,pontevedra,multichannel,sundsvall,strategists,medio,135th,halil,afridi,trelawny,caloric,ghraib,allendale,hameed,ludwigshafen,spurned,pavlo,palmar,strafed,catamarca,aveiro,harmonization,surah,predictors,solvay,mande,omnipresent,parenthesis,echolocation,equaling,experimenters,acyclic,lithographic,sepoys,katarzyna,sridevi,impoundment,khosrow,caesarean,nacogdoches,rockdale,lawmaker,caucasians,bahman,miyan,rubric,exuberance,bombastic,ductile,snowdonia,inlays,pinyon,anemones,hurries,hospitallers,tayyip,pulleys,treme,photovoltaics,testbed,polonium,ryszard,osgoode,profiting,ironwork,unsurpassed,nepticulidae,makai,lumbini,preclassic,clarksburg,egremont,videography,rehabilitating,ponty,sardonic,geotechnical,khurasan,solzhenitsyn,henna,phoenicia,rhyolite,chateaux,retorted,tomar,deflections,repressions,harborough,renan,brumbies,vandross,storia,vodou,clerkenwell,decking,universo,salon.com,imprisoning,sudwest,ghaziabad,subscribing,pisgah,sukhumi,econometric,clearest,pindar,yildirim,iulia,atlases,cements,remaster,dugouts,collapsible,resurrecting,batik,unreliability,thiers,conjunctions,colophon,marcher,placeholder,flagella,wolds,kibaki,viviparous,twelver,screenshots,aroostook,khadr,iconographic,itasca,jaume,basti,propounded,varro,be'er,jeevan,exacted,shrublands,creditable,brocade,boras,bittern,oneonta,attentional,herzliya,comprehensible,lakeville,discards,caxias,frankland,camerata,satoru,matlab,commutator,interprovincial,yorkville,benefices,nizami,edwardsville,amigaos,cannabinoid,indianola,amateurliga,pernicious,ubiquity,anarchic,novelties,precondition,zardari,symington,sargodha,headphone,thermopylae,mashonaland,zindagi,thalberg,loewe,surfactants,dobro,crocodilians,samhita,diatoms,haileybury,berwickshire,supercritical,sofie,snorna,slatina,intramolecular,agung,osteoarthritis,obstetric,teochew,vakhtang,connemara,deformations,diadem,ferruccio,mainichi,qualitatively,refrigerant,rerecorded,methylated,karmapa,krasinski,restatement,rouvas,cubitt,seacoast,schwarzkopf,homonymous,shipowner,thiamine,approachable,xiahou,160th,ecumenism,polistes,internazionali,fouad,berar,biogeography,texting,inadequately,'when,4kids,hymenoptera,emplaced,cognomen,bellefonte,supplant,michaelmas,uriel,tafsir,morazan,schweinfurt,chorister,ps400,nscaa,petipa,resolutely,ouagadougou,mascarene,supercell,konstanz,bagrat,harmonix,bergson,shrimps,resonators,veneta,camas,mynydd,rumford,generalmajor,khayyam,web.com,pappus,halfdan,tanana,suomen,yutaka,bibliographical,traian,silat,noailles,contrapuntal,agaricus,'special,minibuses,1670s,obadiah,deepa,rorschach,malolos,lymington,valuations,imperials,caballeros,ambroise,judicature,elegiac,sedaka,shewa,checksum,gosforth,legionaries,corneille,microregion,friedrichshafen,antonis,surnamed,mycelium,cantus,educations,topmost,outfitting,ivica,nankai,gouda,anthemic,iosif,supercontinent,antifungal,belarusians,mudaliar,mohawks,caversham,glaciated,basemen,stevan,clonmel,loughton,deventer,positivist,manipuri,tensors,panipat,changeup,impermeable,dubbo,elfsborg,maritimo,regimens,bikram,bromeliad,substratum,norodom,gaultier,queanbeyan,pompeo,redacted,eurocopter,mothballed,centaurs,borno,copra,bemidji,'home,sopron,neuquen,passo,cineplex,alexandrov,wysokie,mammoths,yossi,sarcophagi,congreve,petkovic,extraneous,waterbirds,slurs,indias,phaeton,discontented,prefaced,abhay,prescot,interoperable,nordisk,bicyclists,validly,sejong,litovsk,zanesville,kapitanleutnant,kerch,changeable,mcclatchy,celebi,attesting,maccoll,sepahan,wayans,veined,gaudens,markt,dansk,soane,quantized,petersham,forebears,nayarit,frenzied,queuing,bygone,viggo,ludwik,tanka,hanssen,brythonic,cornhill,primorsky,stockpiles,conceptualization,lampeter,hinsdale,mesoderm,bielsk,rosenheim,ultron,joffrey,stanwyck,khagan,tiraspol,pavelic,ascendant,empoli,metatarsal,descentralizado,masada,ligier,huseyin,ramadi,waratah,tampines,ruthenium,statoil,mladost,liger,grecian,multiparty,digraph,maglev,reconsideration,radiography,cartilaginous,taizu,wintered,anabaptist,peterhouse,shoghi,assessors,numerator,paulet,painstakingly,halakhic,rocroi,motorcycling,gimel,kryptonian,emmeline,cheeked,drawdown,lelouch,dacians,brahmana,reminiscence,disinfection,optimizations,golders,extensor,tsugaru,tolling,liman,gulzar,unconvinced,crataegus,oppositional,dvina,pyrolysis,mandan,alexius,prion,stressors,loomed,moated,dhivehi,recyclable,relict,nestlings,sarandon,kosovar,solvers,czeslaw,kenta,maneuverable,middens,berkhamsted,comilla,folkways,loxton,beziers,batumi,petrochemicals,optimised,sirjan,rabindra,musicality,rationalisation,drillers,subspaces,'live,bbwaa,outfielders,tsung,danske,vandalised,norristown,striae,kanata,gastroenterology,steadfastly,equalising,bootlegging,mannerheim,notodontidae,lagoa,commentating,peninsulas,chishti,seismology,modigliani,preceptor,canonically,awardee,boyaca,hsinchu,stiffened,nacelle,bogor,dryness,unobstructed,yaqub,scindia,peeters,irritant,ammonites,ferromagnetic,speechwriter,oxygenated,walesa,millais,canarian,faience,calvinistic,discriminant,rasht,inker,annexes,howth,allocates,conditionally,roused,regionalism,regionalbahn,functionary,nitrates,bicentenary,recreates,saboteurs,koshi,plasmids,thinned,124th,plainview,kardashian,neuville,victorians,radiates,127th,vieques,schoolmates,petru,tokusatsu,keying,sunaina,flamethrower,'bout,demersal,hosokawa,corelli,omniscient,o'doherty,niksic,reflectivity,transdev,cavour,metronome,temporally,gabba,nsaids,geert,mayport,hematite,boeotia,vaudreuil,torshavn,sailplane,mineralogist,eskisehir,practises,gallifrey,takumi,unease,slipstream,hedmark,paulinus,ailsa,wielkopolska,filmworks,adamantly,vinaya,facelifted,franchisee,augustana,toppling,velvety,crispa,stonington,histological,genealogist,tactician,tebow,betjeman,nyingma,overwinter,oberoi,rampal,overwinters,petaluma,lactarius,stanmore,balikpapan,vasant,inclines,laminate,munshi,sociedade,rabbah,septal,boyband,ingrained,faltering,inhumans,nhtsa,affix,l'ordre,kazuki,rossendale,mysims,latvians,slaveholders,basilicata,neuburg,assize,manzanillo,scrobipalpa,formula_61,belgique,pterosaurs,privateering,vaasa,veria,northport,pressurised,hobbyist,austerlitz,sahih,bhadra,siliguri,bistrica,bursaries,wynton,corot,lepidus,lully,libor,libera,olusegun,choline,mannerism,lymphocyte,chagos,duxbury,parasitism,ecowas,morotai,cancion,coniston,aggrieved,sputnikmusic,parle,ammonian,civilisations,malformation,cattaraugus,skyhawks,d'arc,demerara,bronfman,midwinter,piscataway,jogaila,threonine,matins,kohlberg,hubli,pentatonic,camillus,nigam,potro,unchained,chauvel,orangeville,cistercians,redeployment,xanthi,manju,carabinieri,pakeha,nikolaevich,kantakouzenos,sesquicentennial,gunships,symbolised,teramo,ballo,crusading,l'oeil,bharatpur,lazier,gabrovo,hysteresis,rothbard,chaumont,roundel,ma'mun,sudhir,queried,newts,shimane,presynaptic,playfield,taxonomists,sensitivities,freleng,burkinabe,orfeo,autovia,proselytizing,bhangra,pasok,jujutsu,heung,pivoting,hominid,commending,formula_64,epworth,christianized,oresund,hantuchova,rajputana,hilversum,masoretic,dayak,bakri,assen,magog,macromolecules,waheed,qaida,spassky,rumped,protrudes,preminger,misogyny,glencairn,salafi,lacunae,grilles,racemes,areva,alighieri,inari,epitomized,photoshoot,one-of-a-kind,tring,muralist,tincture,backwaters,weaned,yeasts,analytically,smaland,caltrans,vysocina,jamuna,mauthausen,175th,nouvelles,censoring,reggina,christology,gilad,amplifying,mehmood,johnsons,redirects,eastgate,sacrum,meteoric,riverbanks,guidebooks,ascribes,scoparia,iconoclastic,telegraphic,chine,merah,mistico,lectern,sheung,aethelstan,capablanca,anant,uspto,albatrosses,mymensingh,antiretroviral,clonal,coorg,vaillant,liquidator,gigas,yokai,eradicating,motorcyclists,waitakere,tandon,nears,montenegrins,250th,tatsuya,yassin,atheistic,syncretism,nahum,berisha,transcended,owensboro,lakshmana,abteilung,unadorned,nyack,overflows,harrisonburg,complainant,uematsu,frictional,worsens,sangguniang,abutment,bulwer,sarma,apollinaire,shippers,lycia,alentejo,porpoises,optus,trawling,augustow,blackwall,workbench,westmount,leaped,sikandar,conveniences,stornoway,culverts,zoroastrians,hristo,ansgar,assistive,reassert,fanned,compasses,delgada,maisons,arima,plonsk,verlaine,starstruck,rakhine,befell,spirally,wyclef,expend,colloquium,formula_63,albertus,bellarmine,handedness,holon,introns,movimiento,profitably,lohengrin,discoverers,awash,erste,pharisees,dwarka,oghuz,hashing,heterodox,uloom,vladikavkaz,linesman,rehired,nucleophile,germanicus,gulshan,songz,bayerische,paralympian,crumlin,enjoined,khanum,prahran,penitent,amersfoort,saranac,semisimple,vagrants,compositing,tualatin,oxalate,lavra,ironi,ilkeston,umpqua,calum,stretford,zakat,guelders,hydrazine,birkin,spurring,modularity,aspartate,sodermanland,hopital,bellary,legazpi,clasico,cadfael,hypersonic,volleys,pharmacokinetics,carotene,orientale,pausini,bataille,lunga,retailed,m.phil,mazowieckie,vijayan,rawal,sublimation,promissory,estimators,ploughed,conflagration,penda,segregationist,otley,amputee,coauthor,sopra,pellew,wreckers,tollywood,circumscription,permittivity,strabane,landward,articulates,beaverbrook,rutherglen,coterminous,whistleblowers,colloidal,surbiton,atlante,oswiecim,bhasa,lampooned,chanter,saarc,landkreis,tribulation,tolerates,daiichi,hatun,cowries,dyschirius,abercromby,attock,aldwych,inflows,absolutist,l'histoire,committeeman,vanbrugh,headstock,westbourne,appenzell,hoxton,oculus,westfalen,roundabouts,nickelback,trovatore,quenching,summarises,conservators,transmutation,talleyrand,barzani,unwillingly,axonal,'blue,opining,enveloping,fidesz,rafah,colborne,flickr,lozenge,dulcimer,ndebele,swaraj,oxidize,gonville,resonated,gilani,superiore,endeared,janakpur,shepperton,solidifying,memoranda,sochaux,kurnool,rewari,emirs,kooning,bruford,unavailability,kayseri,judicious,negating,pterosaur,cytosolic,chernihiv,variational,sabretooth,seawolves,devalued,nanded,adverb,volunteerism,sealers,nemours,smederevo,kashubian,bartin,animax,vicomte,polotsk,polder,archiepiscopal,acceptability,quidditch,tussock,seminaire,immolation,belge,coves,wellingborough,khaganate,mckellen,nayaka,brega,kabhi,pontoons,bascule,newsreels,injectors,cobol,weblog,diplo,biggar,wheatbelt,erythrocytes,pedra,showgrounds,bogdanovich,eclecticism,toluene,elegies,formalize,andromedae,airworthiness,springville,mainframes,overexpression,magadha,bijelo,emlyn,glutamine,accenture,uhuru,metairie,arabidopsis,patanjali,peruvians,berezovsky,accion,astrolabe,jayanti,earnestly,sausalito,recurved,1500s,ramla,incineration,galleons,laplacian,shiki,smethwick,isomerase,dordevic,janow,jeffersonville,internationalism,penciled,styrene,ashur,nucleoside,peristome,horsemanship,sedges,bachata,medes,kristallnacht,schneerson,reflectance,invalided,strutt,draupadi,destino,partridges,tejas,quadrennial,aurel,halych,ethnomusicology,autonomist,radyo,rifting,shi'ar,crvena,telefilm,zawahiri,plana,sultanates,theodorus,subcontractors,pavle,seneschal,teleports,chernivtsi,buccal,brattleboro,stankovic,safar,dunhuang,electrocution,chastised,ergonomic,midsomer,130th,zomba,nongovernmental,escapist,localize,xuzhou,kyrie,carinthian,karlovac,nisan,kramnik,pilipino,digitisation,khasi,andronicus,highwayman,maior,misspelling,sebastopol,socon,rhaetian,archimandrite,partway,positivity,otaku,dingoes,tarski,geopolitics,disciplinarian,zulfikar,kenzo,globose,electrophilic,modele,storekeeper,pohang,wheldon,washers,interconnecting,digraphs,intrastate,campy,helvetic,frontispiece,ferrocarril,anambra,petraeus,midrib,endometrial,dwarfism,mauryan,endocytosis,brigs,percussionists,furtherance,synergistic,apocynaceae,krona,berthier,circumvented,casal,siltstone,precast,ethnikos,realists,geodesy,zarzuela,greenback,tripathi,persevered,interments,neutralization,olbermann,departements,supercomputing,demobilised,cassavetes,dunder,ministering,veszprem,barbarism,'world,pieve,apologist,frentzen,sulfides,firewalls,pronotum,staatsoper,hachette,makhachkala,oberland,phonon,yoshihiro,instars,purnima,winslet,mutsu,ergative,sajid,nizamuddin,paraphrased,ardeidae,kodagu,monooxygenase,skirmishers,sportiva,o'byrne,mykolaiv,ophir,prieta,gyllenhaal,kantian,leche,copan,herero,ps250,gelsenkirchen,shalit,sammarinese,chetwynd,wftda,travertine,warta,sigmaringen,concerti,namespace,ostergotland,biomarker,universals,collegio,embarcadero,wimborne,fiddlers,likening,ransomed,stifled,unabated,kalakaua,khanty,gongs,goodrem,countermeasure,publicizing,geomorphology,swedenborg,undefended,catastrophes,diverts,storyboards,amesbury,contactless,placentia,festivity,authorise,terrane,thallium,stradivarius,antonine,consortia,estimations,consecrate,supergiant,belichick,pendants,butyl,groza,univac,afire,kavala,studi,teletoon,paucity,gonbad,koninklijke,128th,stoichiometric,multimodal,facundo,anatomic,melamine,creuse,altan,brigands,mcguinty,blomfield,tsvangirai,protrusion,lurgan,warminster,tenzin,russellville,discursive,definable,scotrail,lignin,reincorporated,o'dell,outperform,redland,multicolored,evaporates,dimitrie,limbic,patapsco,interlingua,surrogacy,cutty,potrero,masud,cahiers,jintao,ardashir,centaurus,plagiarized,minehead,musings,statuettes,logarithms,seaview,prohibitively,downforce,rivington,tomorrowland,microbiologist,ferric,morag,capsid,kucinich,clairvaux,demotic,seamanship,cicada,painterly,cromarty,carbonic,tupou,oconee,tehuantepec,typecast,anstruther,internalized,underwriters,tetrahedra,flagrant,quakes,pathologies,ulrik,nahal,tarquini,dongguan,parnassus,ryoko,senussi,seleucia,airasia,einer,sashes,d'amico,matriculating,arabesque,honved,biophysical,hardinge,kherson,mommsen,diels,icbms,reshape,brasiliensis,palmach,netaji,oblate,functionalities,grigor,blacksburg,recoilless,melanchthon,reales,astrodome,handcrafted,memes,theorizes,isma'il,aarti,pirin,maatschappij,stabilizes,honiara,ashbury,copts,rootes,defensed,queiroz,mantegna,galesburg,coraciiformesfamily,cabrillo,tokio,antipsychotics,kanon,173rd,apollonia,finial,lydian,hadamard,rangi,dowlatabad,monolingual,platformer,subclasses,chiranjeevi,mirabeau,newsgroup,idmanyurdu,kambojas,walkover,zamoyski,generalist,khedive,flanges,knowle,bande,157th,alleyn,reaffirm,pininfarina,zuckerberg,hakodate,131st,aditi,bellinzona,vaulter,planking,boscombe,colombians,lysis,toppers,metered,nahyan,queensryche,minho,nagercoil,firebrand,foundress,bycatch,mendota,freeform,antena,capitalisation,martinus,overijssel,purists,interventionist,zgierz,burgundians,hippolyta,trompe,umatilla,moroccans,dictionnaire,hydrography,changers,chota,rimouski,aniline,bylaw,grandnephew,neamt,lemnos,connoisseurs,tractive,rearrangements,fetishism,finnic,apalachicola,landowning,calligraphic,circumpolar,mansfeld,legible,orientalism,tannhauser,blamey,maximization,noinclude,blackbirds,angara,ostersund,pancreatitis,glabra,acleris,juried,jungian,triumphantly,singlet,plasmas,synesthesia,yellowhead,unleashes,choiseul,quanzhong,brookville,kaskaskia,igcse,skatepark,jatin,jewellers,scaritinae,techcrunch,tellurium,lachaise,azuma,codeshare,dimensionality,unidirectional,scolaire,macdill,camshafts,unassisted,verband,kahlo,eliya,prelature,chiefdoms,saddleback,sockers,iommi,coloratura,llangollen,biosciences,harshest,maithili,k'iche,plical,multifunctional,andreu,tuskers,confounding,sambre,quarterdeck,ascetics,berdych,transversal,tuolumne,sagami,petrobras,brecker,menxia,instilling,stipulating,korra,oscillate,deadpan,v/line,pyrotechnic,stoneware,prelims,intracoastal,retraining,ilija,berwyn,encrypt,achievers,zulfiqar,glycoproteins,khatib,farmsteads,occultist,saman,fionn,derulo,khilji,obrenovic,argosy,toowong,dementieva,sociocultural,iconostasis,craigslist,festschrift,taifa,intercalated,tanjong,penticton,sharad,marxian,extrapolation,guises,wettin,prabang,exclaiming,kosta,famas,conakry,wanderings,'aliabad,macleay,exoplanet,bancorp,besiegers,surmounting,checkerboard,rajab,vliet,tarek,operable,wargaming,haldimand,fukuyama,uesugi,aggregations,erbil,brachiopods,tokyu,anglais,unfavorably,ujpest,escorial,armagnac,nagara,funafuti,ridgeline,cocking,o'gorman,compactness,retardant,krajowa,barua,coking,bestows,thampi,chicagoland,variably,o'loughlin,minnows,schwa,shaukat,polycarbonate,chlorinated,godalming,gramercy,delved,banqueting,enlil,sarada,prasanna,domhnall,decadal,regressive,lipoprotein,collectable,surendra,zaporizhia,cycliste,suchet,offsetting,formula_65,pudong,d'arte,blyton,quonset,osmania,tientsin,manorama,proteomics,bille,jalpaiguri,pertwee,barnegat,inventiveness,gollancz,euthanized,henricus,shortfalls,wuxia,chlorides,cerrado,polyvinyl,folktale,straddled,bioengineering,eschewing,greendale,recharged,olave,ceylonese,autocephalous,peacebuilding,wrights,guyed,rosamund,abitibi,bannockburn,gerontology,scutari,souness,seagram,codice_9,'open,xhtml,taguig,purposed,darbar,orthopedics,unpopulated,kisumu,tarrytown,feodor,polyhedral,monadnock,gottorp,priam,redesigning,gasworks,elfin,urquiza,homologation,filipovic,bohun,manningham,gornik,soundness,shorea,lanus,gelder,darke,sandgate,criticality,paranaense,153rd,vieja,lithograph,trapezoid,tiebreakers,convalescence,yan'an,actuaries,balad,altimeter,thermoelectric,trailblazer,previn,tenryu,ancaster,endoscopy,nicolet,discloses,fracking,plaine,salado,americanism,placards,absurdist,propylene,breccia,jirga,documenta,ismailis,161st,brentano,dallas/fort,embellishment,calipers,subscribes,mahavidyalaya,wednesbury,barnstormers,miwok,schembechler,minigame,unterberger,dopaminergic,inacio,nizamabad,overridden,monotype,cavernous,stichting,sassafras,sotho,argentinean,myrrh,rapidity,flatts,gowrie,dejected,kasaragod,cyprinidae,interlinked,arcseconds,degeneracy,infamously,incubate,substructure,trigeminal,sectarianism,marshlands,hooliganism,hurlers,isolationist,urania,burrard,switchover,lecco,wilts,interrogator,strived,ballooning,volterra,raciborz,relegating,gilding,cybele,dolomites,parachutist,lochaber,orators,raeburn,backend,benaud,rallycross,facings,banga,nuclides,defencemen,futurity,emitters,yadkin,eudonia,zambales,manasseh,sirte,meshes,peculiarly,mcminnville,roundly,boban,decrypt,icelanders,sanam,chelan,jovian,grudgingly,penalised,subscript,gambrinus,poaceae,infringements,maleficent,runciman,148th,supersymmetry,granites,liskeard,eliciting,involution,hallstatt,kitzbuhel,shankly,sandhills,inefficiencies,yishuv,psychotropic,nightjars,wavell,sangamon,vaikundar,choshu,retrospectives,pitesti,gigantea,hashemi,bosna,gakuin,siochana,arrangers,baronetcies,narayani,temecula,creston,koscierzyna,autochthonous,wyandot,anniston,igreja,mobilise,buzau,dunster,musselburgh,wenzhou,khattak,detoxification,decarboxylase,manlius,campbells,coleoptera,copyist,sympathisers,suisun,eminescu,defensor,transshipment,thurgau,somerton,fluctuates,ambika,weierstrass,lukow,giambattista,volcanics,romanticized,innovated,matabeleland,scotiabank,garwolin,purine,d'auvergne,borderland,maozhen,pricewaterhousecoopers,testator,pallium,scout.com,mv/pi,nazca,curacies,upjohn,sarasvati,monegasque,ketrzyn,malory,spikelets,biomechanics,haciendas,rapped,dwarfed,stews,nijinsky,subjection,matsu,perceptible,schwarzburg,midsection,entertains,circuitous,epiphytic,wonsan,alpini,bluefield,sloths,transportable,braunfels,dictum,szczecinek,jukka,wielun,wejherowo,hucknall,grameen,duodenum,ribose,deshpande,shahar,nexstar,injurious,dereham,lithographer,dhoni,structuralist,progreso,deschutes,christus,pulteney,quoins,yitzchak,gyeongsang,breviary,makkah,chiyoda,jutting,vineland,angiosperms,necrotic,novelisation,redistribute,tirumala,140th,featureless,mafic,rivaling,toyline,2/1st,martius,saalfeld,monthan,texian,kathak,melodramas,mithila,regierungsbezirk,509th,fermenting,schoolmate,virtuosic,briain,kokoda,heliocentric,handpicked,kilwinning,sonically,dinars,kasim,parkways,bogdanov,luxembourgian,halland,avesta,bardic,daugavpils,excavator,qwest,frustrate,physiographic,majoris,'ndrangheta,unrestrained,firmness,montalban,abundances,preservationists,adare,executioners,guardsman,bonnaroo,neglects,nazrul,pro12,hoorn,abercorn,refuting,kabud,cationic,parapsychology,troposphere,venezuelans,malignancy,khoja,unhindered,accordionist,medak,visby,ejercito,laparoscopic,dinas,umayyads,valmiki,o'dowd,saplings,stranding,incisions,illusionist,avocets,buccleuch,amazonia,fourfold,turboprops,roosts,priscus,turnstile,areal,certifies,pocklington,spoofs,viseu,commonalities,dabrowka,annam,homesteaders,daredevils,mondrian,negotiates,fiestas,perennials,maximizes,lubavitch,ravindra,scrapers,finials,kintyre,violas,snoqualmie,wilders,openbsd,mlawa,peritoneal,devarajan,congke,leszno,mercurial,fakir,joannes,bognor,overloading,unbuilt,gurung,scuttle,temperaments,bautzen,jardim,tradesman,visitations,barbet,sagamore,graaff,forecasters,wilsons,assis,l'air,shariah,sochaczew,russa,dirge,biliary,neuve,heartbreakers,strathearn,jacobian,overgrazing,edrich,anticline,parathyroid,petula,lepanto,decius,channelled,parvathi,puppeteers,communicators,francorchamps,kahane,longus,panjang,intron,traite,xxvii,matsuri,amrit,katyn,disheartened,cacak,omonia,alexandrine,partaking,wrangling,adjuvant,haskovo,tendrils,greensand,lammermoor,otherworld,volusia,stabling,one-and-a-half,bresson,zapatista,eotvos,ps150,webisodes,stepchildren,microarray,braganca,quanta,dolne,superoxide,bellona,delineate,ratha,lindenwood,bruhl,cingulate,tallies,bickerton,helgi,bevin,takoma,tsukuba,statuses,changeling,alister,bytom,dibrugarh,magnesia,duplicating,outlier,abated,goncalo,strelitz,shikai,mardan,musculature,ascomycota,springhill,tumuli,gabaa,odenwald,reformatted,autocracy,theresienstadt,suplex,chattopadhyay,mencken,congratulatory,weatherfield,systema,solemnity,projekt,quanzhou,kreuzberg,postbellum,nobuo,mediaworks,finisterre,matchplay,bangladeshis,kothen,oocyte,hovered,aromas,afshar,browed,teases,chorlton,arshad,cesaro,backbencher,iquique,vulcans,padmini,unabridged,cyclase,despotic,kirilenko,achaean,queensberry,debre,octahedron,iphigenia,curbing,karimnagar,sagarmatha,smelters,surrealists,sanada,shrestha,turridae,leasehold,jiedushi,eurythmics,appropriating,correze,thimphu,amery,musicomh,cyborgs,sandwell,pushcart,retorts,ameliorate,deteriorates,stojanovic,spline,entrenchments,bourse,chancellorship,pasolini,lendl,personage,reformulated,pubescens,loiret,metalurh,reinvention,nonhuman,eilema,tarsal,complutense,magne,broadview,metrodome,outtake,stouffville,seinen,bataillon,phosphoric,ostensible,opatow,aristides,beefheart,glorifying,banten,romsey,seamounts,fushimi,prophylaxis,sibylla,ranjith,goslar,balustrades,georgiev,caird,lafitte,peano,canso,bankura,halfpenny,segregate,caisson,bizerte,jamshedpur,euromaidan,philosophie,ridged,cheerfully,reclassification,aemilius,visionaries,samoans,wokingham,chemung,wolof,unbranched,cinerea,bhosle,ourense,immortalised,cornerstones,sourcebook,khufu,archimedean,universitatea,intermolecular,fiscally,suffices,metacomet,adjudicator,stablemate,specks,glace,inowroclaw,patristic,muharram,agitating,ashot,neurologic,didcot,gamla,ilves,putouts,siraj,laski,coaling,diarmuid,ratnagiri,rotulorum,liquefaction,morbihan,harel,aftershock,gruiformesfamily,bonnier,falconiformesfamily,adorns,wikis,maastrichtian,stauffenberg,bishopsgate,fakhr,sevenfold,ponders,quantifying,castiel,opacity,depredations,lenten,gravitated,o'mahony,modulates,inuktitut,paston,kayfabe,vagus,legalised,balked,arianism,tendering,sivas,birthdate,awlaki,khvajeh,shahab,samtgemeinde,bridgeton,amalgamations,biogenesis,recharging,tsukasa,mythbusters,chamfered,enthronement,freelancers,maharana,constantia,sutil,messines,monkton,okanogan,reinvigorated,apoplexy,tanahashi,neues,valiants,harappan,russes,carding,volkoff,funchal,statehouse,imitative,intrepidity,mellotron,samaras,turkana,besting,longitudes,exarch,diarrhoea,transcending,zvonareva,darna,ramblin,disconnection,137th,refocused,diarmait,agricole,ba'athist,turenne,contrabass,communis,daviess,fatimids,frosinone,fittingly,polyphyletic,qanat,theocratic,preclinical,abacha,toorak,marketplaces,conidia,seiya,contraindicated,retford,bundesautobahn,rebuilds,climatology,seaworthy,starfighter,qamar,categoria,malai,hellinsia,newstead,airworthy,catenin,avonmouth,arrhythmias,ayyavazhi,downgrade,ashburnham,ejector,kinematics,petworth,rspca,filmation,accipitridae,chhatrapati,g/mol,bacau,agama,ringtone,yudhoyono,orchestrator,arbitrators,138th,powerplants,cumbernauld,alderley,misamis,hawai`i,cuando,meistriliiga,jermyn,alans,pedigrees,ottavio,approbation,omnium,purulia,prioress,rheinland,lymphoid,lutsk,oscilloscope,ballina,iliac,motorbikes,modernising,uffizi,phylloxera,kalevala,bengalis,amravati,syntheses,interviewers,inflectional,outflank,maryhill,unhurt,profiler,nacelles,heseltine,personalised,guarda,herpetologist,airpark,pigot,margaretha,dinos,peleliu,breakbeat,kastamonu,shaivism,delamere,kingsville,epigram,khlong,phospholipids,journeying,lietuvos,congregated,deviance,celebes,subsoil,stroma,kvitova,lubricating,layoff,alagoas,olafur,doron,interuniversity,raycom,agonopterix,uzice,nanna,springvale,raimundo,wrested,pupal,talat,skinheads,vestige,unpainted,handan,odawara,ammar,attendee,lapped,myotis,gusty,ciconiiformesfamily,traversal,subfield,vitaphone,prensa,hasidism,inwood,carstairs,kropotkin,turgenev,dobra,remittance,purim,tannin,adige,tabulation,lethality,pacha,micronesian,dhruva,defensemen,tibeto,siculus,radioisotope,sodertalje,phitsanulok,euphonium,oxytocin,overhangs,skinks,fabrica,reinterred,emulates,bioscience,paragliding,raekwon,perigee,plausibility,frolunda,erroll,aznar,vyasa,albinus,trevally,confederacion,terse,sixtieth,1530s,kendriya,skateboarders,frontieres,muawiyah,easements,shehu,conservatively,keystones,kasem,brutalist,peekskill,cowry,orcas,syllabary,paltz,elisabetta,denticles,hampering,dolni,eidos,aarau,lermontov,yankton,shahbaz,barrages,kongsvinger,reestablishment,acetyltransferase,zulia,mrnas,slingsby,eucalypt,efficacious,weybridge,gradation,cinematheque,malthus,bampton,coexisted,cisse,hamdi,cupertino,saumarez,chionodes,libertine,formers,sakharov,pseudonymous,vol.1,mcduck,gopalakrishnan,amberley,jorhat,grandmasters,rudiments,dwindle,param,bukidnon,menander,americanus,multipliers,pulawy,homoerotic,pillbox,cd+dvd,epigraph,aleksandrow,extrapolated,horseshoes,contemporain,angiography,hasselt,shawinigan,memorization,legitimized,cyclades,outsold,rodolphe,kelis,powerball,dijkstra,analyzers,incompressible,sambar,orangeburg,osten,reauthorization,adamawa,sphagnum,hypermarket,millipedes,zoroaster,madea,ossuary,murrayfield,pronominal,gautham,resellers,ethers,quarrelled,dolna,stragglers,asami,tangut,passos,educacion,sharaf,texel,berio,bethpage,bezalel,marfa,noronha,36ers,genteel,avram,shilton,compensates,sweetener,reinstalled,disables,noether,1590s,balakrishnan,kotaro,northallerton,cataclysm,gholam,cancellara,schiphol,commends,longinus,albinism,gemayel,hamamatsu,volos,islamism,sidereal,pecuniary,diggings,townsquare,neosho,lushan,chittoor,akhil,disputation,desiccation,cambodians,thwarting,deliberated,ellipsis,bahini,susumu,separators,kohneh,plebeians,kultur,ogaden,pissarro,trypeta,latur,liaodong,vetting,datong,sohail,alchemists,lengthwise,unevenly,masterly,microcontrollers,occupier,deviating,farringdon,baccalaureat,theocracy,chebyshev,archivists,jayaram,ineffectiveness,scandinavians,jacobins,encomienda,nambu,g/cm3,catesby,paavo,heeded,rhodium,idealised,10deg,infective,mecyclothorax,halevy,sheared,minbari,audax,lusatian,rebuffs,hitfix,fastener,subjugate,tarun,binet,compuserve,synthesiser,keisuke,amalric,ligatures,tadashi,ignazio,abramovich,groundnut,otomo,maeve,mortlake,ostrogoths,antillean,todor,recto,millimetre,espousing,inaugurate,paracetamol,galvanic,harpalinae,jedrzejow,reassessment,langlands,civita,mikan,stikine,bijar,imamate,istana,kaiserliche,erastus,federale,cytosine,expansionism,hommes,norrland,smriti,snapdragon,gulab,taleb,lossy,khattab,urbanised,sesto,rekord,diffuser,desam,morganatic,silting,pacts,extender,beauharnais,purley,bouches,halfpipe,discontinuities,houthi,farmville,animism,horni,saadi,interpretative,blockades,symeon,biogeographic,transcaucasian,jetties,landrieu,astrocytes,conjunto,stumpings,weevils,geysers,redux,arching,romanus,tazeh,marcellinus,casein,opava,misrata,anare,sattar,declarer,dreux,oporto,venta,vallis,icosahedron,cortona,lachine,mohammedan,sandnes,zynga,clarin,diomedes,tsuyoshi,pribram,gulbarga,chartist,superettan,boscawen,altus,subang,gating,epistolary,vizianagaram,ogdensburg,panna,thyssen,tarkovsky,dzogchen,biograph,seremban,unscientific,nightjar,legco,deism,n.w.a,sudha,siskel,sassou,flintlock,jovial,montbeliard,pallida,formula_66,tranquillity,nisei,adornment,'people,yamhill,hockeyallsvenskan,adopters,appian,lowicz,haplotypes,succinctly,starogard,presidencies,kheyrabad,sobibor,kinesiology,cowichan,militum,cromwellian,leiningen,ps1.5,concourses,dalarna,goldfield,brzeg,faeces,aquarii,matchless,harvesters,181st,numismatics,korfball,sectioned,transpires,facultative,brandishing,kieron,forages,menai,glutinous,debarge,heathfield,1580s,malang,photoelectric,froome,semiotic,alwar,grammophon,chiaroscuro,mentalist,maramures,flacco,liquors,aleutians,marvell,sutlej,patnaik,qassam,flintoff,bayfield,haeckel,sueno,avicii,exoplanets,hoshi,annibale,vojislav,honeycombs,celebrant,rendsburg,veblen,quails,141st,carronades,savar,narrations,jeeva,ontologies,hedonistic,marinette,godot,munna,bessarabian,outrigger,thame,gravels,hoshino,falsifying,stereochemistry,nacionalista,medially,radula,ejecting,conservatorio,odile,ceiba,jaina,essonne,isometry,allophones,recidivism,iveco,ganda,grammarians,jagan,signposted,uncompressed,facilitators,constancy,ditko,propulsive,impaling,interbank,botolph,amlaib,intergroup,sorbus,cheka,debye,praca,adorning,presbyteries,dormition,strategos,qarase,pentecostals,beehives,hashemite,goldust,euronext,egress,arpanet,soames,jurchens,slovenska,copse,kazim,appraisals,marischal,mineola,sharada,caricaturist,sturluson,galba,faizabad,overwintering,grete,uyezds,didsbury,libreville,ablett,microstructure,anadolu,belenenses,elocution,cloaks,timeslots,halden,rashidun,displaces,sympatric,germanus,tuples,ceska,equalize,disassembly,krautrock,babangida,memel,deild,gopala,hematology,underclass,sangli,wawrinka,assur,toshack,refrains,nicotinic,bhagalpur,badami,racetracks,pocatello,walgreens,nazarbayev,occultation,spinnaker,geneon,josias,hydrolyzed,dzong,corregimiento,waistcoat,thermoplastic,soldered,anticancer,lactobacillus,shafi'i,carabus,adjournment,schlumberger,triceratops,despotate,mendicant,krishnamurti,bahasa,earthworm,lavoisier,noetherian,kalki,fervently,bhawan,saanich,coquille,gannet,motagua,kennels,mineralization,fitzherbert,svein,bifurcated,hairdressing,felis,abounded,dimers,fervour,hebdo,bluffton,aetna,corydon,clevedon,carneiro,subjectively,deutz,gastropoda,overshot,concatenation,varman,carolla,maharshi,mujib,inelastic,riverhead,initialized,safavids,rohini,caguas,bulges,fotbollforbund,hefei,spithead,westville,maronites,lytham,americo,gediminas,stephanus,chalcolithic,hijra,gnu/linux,predilection,rulership,sterility,haidar,scarlatti,saprissa,sviatoslav,pointedly,sunroof,guarantor,thevar,airstrips,pultusk,sture,129th,divinities,daizong,dolichoderus,cobourg,maoists,swordsmanship,uprated,bohme,tashi,largs,chandi,bluebeard,householders,richardsonian,drepanidae,antigonish,elbasan,occultism,marca,hypergeometric,oirat,stiglitz,ignites,dzungar,miquelon,pritam,d'automne,ulidiid,niamey,vallecano,fondo,billiton,incumbencies,raceme,chambery,cadell,barenaked,kagame,summerside,haussmann,hatshepsut,apothecaries,criollo,feint,nasals,timurid,feltham,plotinus,oxygenation,marginata,officinalis,salat,participations,ising,downe,izumo,unguided,pretence,coursed,haruna,viscountcy,mainstage,justicia,powiat,takara,capitoline,implacable,farben,stopford,cosmopterix,tuberous,kronecker,galatians,kweli,dogmas,exhorted,trebinje,skanda,newlyn,ablative,basidia,bhiwani,encroachments,stranglers,regrouping,tubal,shoestring,wawel,anionic,mesenchymal,creationists,pyrophosphate,moshi,despotism,powerbook,fatehpur,rupiah,segre,ternate,jessore,b.i.g,shevardnadze,abounds,gliwice,densest,memoria,suborbital,vietcong,ratepayers,karunanidhi,toolbar,descents,rhymney,exhortation,zahedan,carcinomas,hyperbaric,botvinnik,billets,neuropsychological,tigranes,hoards,chater,biennially,thistles,scotus,wataru,flotillas,hungama,monopolistic,payouts,vetch,generalissimo,caries,naumburg,piran,blizzards,escalates,reactant,shinya,theorize,rizzoli,transitway,ecclesiae,streptomyces,cantal,nisibis,superconductor,unworkable,thallus,roehampton,scheckter,viceroys,makuuchi,ilkley,superseding,takuya,klodzko,borbon,raspberries,operand,w.a.k.o,sarabande,factionalism,egalitarianism,temasek,torbat,unscripted,jorma,westerner,perfective,vrije,underlain,goldfrapp,blaenau,jomon,barthes,drivetime,bassa,bannock,umaga,fengxiang,zulus,sreenivasan,farces,codice_10,freeholder,poddebice,imperialists,deregulated,wingtip,o'hagan,pillared,overtone,hofstadter,149th,kitano,saybrook,standardizing,aldgate,staveley,o'flaherty,hundredths,steerable,soltan,empted,cruyff,intramuros,taluks,cotonou,marae,karur,figueres,barwon,lucullus,niobe,zemlya,lathes,homeported,chaux,amyotrophic,opines,exemplars,bhamo,homomorphisms,gauleiter,ladin,mafiosi,airdrieonians,b/soul,decal,transcaucasia,solti,defecation,deaconess,numidia,sampradaya,normalised,wingless,schwaben,alnus,cinerama,yakutsk,ketchikan,orvieto,unearned,monferrato,rotem,aacsb,loong,decoders,skerries,cardiothoracic,repositioning,pimpernel,yohannan,tenebrionoidea,nargis,nouvel,costliest,interdenominational,noize,redirecting,zither,morcha,radiometric,frequenting,irtysh,gbagbo,chakri,litvinenko,infotainment,ravensbruck,harith,corbels,maegashira,jousting,natan,novus,falcao,minis,railed,decile,rauma,ramaswamy,cavitation,paranaque,berchtesgaden,reanimated,schomberg,polysaccharides,exclusionary,cleon,anurag,ravaging,dhanush,mitchells,granule,contemptuous,keisei,rolleston,atlantean,yorkist,daraa,wapping,micrometer,keeneland,comparably,baranja,oranje,schlafli,yogic,dinajpur,unimpressive,masashi,recreativo,alemannic,petersfield,naoko,vasudeva,autosport,rajat,marella,busko,wethersfield,ssris,soulcalibur,kobani,wildland,rookery,hoffenheim,kauri,aliphatic,balaclava,ferrite,publicise,victorias,theism,quimper,chapbook,functionalist,roadbed,ulyanovsk,cupen,purpurea,calthorpe,teofilo,mousavi,cochlea,linotype,detmold,ellerslie,gakkai,telkom,southsea,subcontractor,inguinal,philatelists,zeebrugge,piave,trochidae,dempo,spoilt,saharanpur,mihrab,parasympathetic,barbarous,chartering,antiqua,katsina,bugis,categorizes,altstadt,kandyan,pambansa,overpasses,miters,assimilating,finlandia,uneconomic,am/fm,harpsichordist,dresdner,luminescence,authentically,overpowers,magmatic,cliftonville,oilfields,skirted,berthe,cuman,oakham,frelimo,glockenspiel,confection,saxophonists,piaseczno,multilevel,antipater,levying,maltreatment,velho,opoczno,harburg,pedophilia,unfunded,palettes,plasterwork,breve,dharmendra,auchinleck,nonesuch,blackmun,libretti,rabbani,145th,hasselbeck,kinnock,malate,vanden,cloverdale,ashgabat,nares,radians,steelworkers,sabor,possums,catterick,hemispheric,ostra,outpaced,dungeness,almshouse,penryn,texians,1000m,franchitti,incumbency,texcoco,newar,tramcars,toroidal,meitetsu,spellbound,agronomist,vinifera,riata,bunko,pinas,ba'al,github,vasilyevich,obsolescent,geodesics,ancestries,tujue,capitalised,unassigned,throng,unpaired,psychometric,skegness,exothermic,buffered,kristiansund,tongued,berenger,basho,alitalia,prolongation,archaeologically,fractionation,cyprinid,echinoderms,agriculturally,justiciar,sonam,ilium,baits,danceable,grazer,ardahan,grassed,preemption,glassworks,hasina,ugric,umbra,wahhabi,vannes,tinnitus,capitaine,tikrit,lisieux,scree,hormuz,despenser,jagiellon,maisonneuve,gandaki,santarem,basilicas,lancing,landskrona,weilburg,fireside,elysian,isleworth,krishnamurthy,filton,cynon,tecmo,subcostal,scalars,triglycerides,hyperplane,farmingdale,unione,meydan,pilings,mercosur,reactivate,akiba,fecundity,jatra,natsume,zarqawi,preta,masao,presbyter,oakenfold,rhodri,ferran,ruizong,cloyne,nelvana,epiphanius,borde,scutes,strictures,troughton,whitestone,sholom,toyah,shingon,kutuzov,abelard,passant,lipno,cafeterias,residuals,anabaptists,paratransit,criollos,pleven,radiata,destabilizing,hadiths,bazaars,mannose,taiyo,crookes,welbeck,baoding,archelaus,nguesso,alberni,wingtips,herts,viasat,lankans,evreux,wigram,fassbinder,ryuichi,storting,reducible,olesnica,znojmo,hyannis,theophanes,flatiron,mustering,rajahmundry,kadir,wayang,prome,lethargy,zubin,illegality,conall,dramedy,beerbohm,hipparchus,ziarat,ryuji,shugo,glenorchy,microarchitecture,morne,lewinsky,cauvery,battenberg,hyksos,wayanad,hamilcar,buhari,brazo,bratianu,solms,aksaray,elamite,chilcotin,bloodstock,sagara,dolny,reunified,umlaut,proteaceae,camborne,calabrian,dhanbad,vaxjo,cookware,potez,rediffusion,semitones,lamentations,allgau,guernica,suntory,pleated,stationing,urgell,gannets,bertelsmann,entryway,raphitomidae,acetaldehyde,nephrology,categorizing,beiyang,permeate,tourney,geosciences,khana,masayuki,crucis,universitaria,slaskie,khaimah,finno,advani,astonishingly,tubulin,vampiric,jeolla,sociale,cleethorpes,badri,muridae,suzong,debater,decimation,kenyans,mutualism,pontifex,middlemen,insee,halevi,lamentation,psychopathy,brassey,wenders,kavya,parabellum,prolactin,inescapable,apses,malignancies,rinzai,stigmatized,menahem,comox,ateliers,welshpool,setif,centimetre,truthfulness,downfield,drusus,woden,glycosylation,emanated,agulhas,dalkeith,jazira,nucky,unifil,jobim,operon,oryzomys,heroically,seances,supernumerary,backhouse,hashanah,tatler,imago,invert,hayato,clockmaker,kingsmill,swiecie,analogously,golconda,poste,tacitly,decentralised,ge'ez,diplomatically,fossiliferous,linseed,mahavira,pedestals,archpriest,byelection,domiciled,jeffersonian,bombus,winegrowing,waukegan,uncultivated,haverfordwest,saumur,communally,disbursed,cleeve,zeljeznicar,speciosa,vacationers,sigur,vaishali,zlatko,iftikhar,cropland,transkei,incompleteness,bohra,subantarctic,slieve,physiologic,similis,klerk,replanted,'right,chafee,reproducible,bayburt,regicide,muzaffarpur,plurals,hanyu,orthologs,diouf,assailed,kamui,tarik,dodecanese,gorne,on/off,179th,shimoga,granaries,carlists,valar,tripolitania,sherds,simmern,dissociated,isambard,polytechnical,yuvraj,brabazon,antisense,pubmed,glans,minutely,masaaki,raghavendra,savoury,podcasting,tachi,bienville,gongsun,ridgely,deform,yuichi,binders,canna,carcetti,llobregat,implored,berri,njegos,intermingled,offload,athenry,motherhouse,corpora,kakinada,dannebrog,imperio,prefaces,musicologists,aerospatiale,shirai,nagapattinam,servius,cristoforo,pomfret,reviled,entebbe,stane,east/west,thermometers,matriarchal,siglo,bodil,legionnaire,ze'ev,theorizing,sangeetha,horticulturist,uncountable,lookalike,anoxic,ionospheric,genealogists,chicopee,imprinting,popish,crematoria,diamondback,cyathea,hanzhong,cameramen,halogaland,naklo,waclaw,storehouses,flexed,comuni,frits,glauca,nilgiris,compresses,nainital,continuations,albay,hypoxic,samajwadi,dunkerque,nanticoke,sarwar,interchanged,jubal,corba,jalgaon,derleth,deathstroke,magny,vinnytsia,hyphenated,rimfire,sawan,boehner,disrepute,normalize,aromanian,dualistic,approximant,chama,karimabad,barnacles,sanok,stipends,dyfed,rijksmuseum,reverberation,suncorp,fungicides,reverie,spectrograph,stereophonic,niazi,ordos,alcan,karaite,lautrec,tableland,lamellar,rieti,langmuir,russula,webern,tweaks,hawick,southerner,morphy,naturalisation,enantiomer,michinoku,barbettes,relieves,carburettors,redruth,oblates,vocabularies,mogilev,bagmati,galium,reasserted,extolled,symon,eurosceptic,inflections,tirtha,recompense,oruro,roping,gouverneur,pared,yayoi,watermills,retooled,leukocytes,jubilant,mazhar,nicolau,manheim,touraine,bedser,hambledon,kohat,powerhouses,tlemcen,reuven,sympathetically,afrikaners,interes,handcrafts,etcher,baddeley,wodonga,amaury,155th,vulgarity,pompadour,automorphisms,1540s,oppositions,prekmurje,deryni,fortifying,arcuate,mahila,bocage,uther,nozze,slashes,atlantica,hadid,rhizomatous,azeris,'with,osmena,lewisville,innervated,bandmaster,outcropping,parallelogram,dominicana,twang,ingushetia,extensional,ladino,sastry,zinoviev,relatable,nobilis,cbeebies,hitless,eulima,sporangia,synge,longlisted,criminalized,penitential,weyden,tubule,volyn,priestesses,glenbrook,kibbutzim,windshaft,canadair,falange,zsolt,bonheur,meine,archangels,safeguarded,jamaicans,malarial,teasers,badging,merseyrail,operands,pulsars,gauchos,biotin,bambara,necaxa,egmond,tillage,coppi,anxiolytic,preah,mausoleums,plautus,feroz,debunked,187th,belediyespor,mujibur,wantage,carboxyl,chettiar,murnau,vagueness,racemic,backstretch,courtland,municipio,palpatine,dezful,hyperbola,sreekumar,chalons,altay,arapahoe,tudors,sapieha,quilon,burdensome,kanya,xxviii,recension,generis,siphuncle,repressor,bitrate,mandals,midhurst,dioxin,democratique,upholds,rodez,cinematographic,epoque,jinping,rabelais,zhytomyr,glenview,rebooted,khalidi,reticulata,122nd,monnaie,passersby,ghazals,europaea,lippmann,earthbound,tadic,andorran,artvin,angelicum,banksy,epicentre,resemblances,shuttled,rathaus,bernt,stonemasons,balochi,siang,tynemouth,cygni,biosynthetic,precipitates,sharecroppers,d'annunzio,softbank,shiji,apeldoorn,polycyclic,wenceslas,wuchang,samnites,tamarack,silmarillion,madinah,palaeontology,kirchberg,sculpin,rohtak,aquabats,oviparous,thynne,caney,blimps,minimalistic,whatcom,palatalization,bardstown,direct3d,paramagnetic,kamboja,khash,globemaster,lengua,matej,chernigov,swanage,arsenals,cascadia,cundinamarca,tusculum,leavers,organics,warplanes,'three,exertions,arminius,gandharva,inquires,comercio,kuopio,chabahar,plotlines,mersenne,anquetil,paralytic,buckminster,ambit,acrolophus,quantifiers,clacton,ciliary,ansaldo,fergana,egoism,thracians,chicoutimi,northbrook,analgesia,brotherhoods,hunza,adriaen,fluoridation,snowfalls,soundboard,fangoria,cannibalistic,orthogonius,chukotka,dindigul,manzoni,chainz,macromedia,beltline,muruga,schistura,provable,litex,initio,pneumoniae,infosys,cerium,boonton,cannonballs,d'une,solvency,mandurah,houthis,dolmens,apologists,radioisotopes,blaxploitation,poroshenko,stawell,coosa,maximilien,tempelhof,espouse,declaratory,hambro,xalapa,outmoded,mihiel,benefitting,desirous,archeparchy,repopulated,telescoping,captor,mackaye,disparaged,ramanathan,crowne,tumbled,technetium,silted,chedi,nievre,hyeon,cartoonish,interlock,infocom,rediff.com,dioramas,timekeeping,concertina,kutaisi,cesky,lubomirski,unapologetic,epigraphic,stalactites,sneha,biofilm,falconry,miraflores,catena,'outstanding,prospekt,apotheosis,o'odham,pacemakers,arabica,gandhinagar,reminisces,iroquoian,ornette,tilling,neoliberalism,chameleons,pandava,prefontaine,haiyan,gneisenau,utama,bando,reconstitution,azaria,canola,paratroops,ayckbourn,manistee,stourton,manifestos,lympne,denouement,tractatus,rakim,bellflower,nanometer,sassanids,turlough,presbyterianism,varmland,20deg,phool,nyerere,almohad,manipal,vlaanderen,quickness,removals,makow,circumflex,eatery,morane,fondazione,alkylation,unenforceable,galliano,silkworm,junior/senior,abducts,phlox,konskie,lofoten,buuren,glyphosate,faired,naturae,cobbles,taher,skrulls,dostoevsky,walkout,wagnerian,orbited,methodically,denzil,sarat,extraterritorial,kohima,d'armor,brinsley,rostropovich,fengtian,comitatus,aravind,moche,wrangell,giscard,vantaa,viljandi,hakoah,seabees,muscatine,ballade,camanachd,sothern,mullioned,durad,margraves,maven,arete,chandni,garifuna,142nd,reading/literature,thickest,intensifies,trygve,khaldun,perinatal,asana,powerline,acetylation,nureyev,omiya,montesquieu,riverwalk,marly,correlating,intermountain,bulgar,hammerheads,underscores,wiretapping,quatrain,ruisseau,newsagent,tuticorin,polygyny,hemsworth,partisanship,banna,istrian,evaporator".split(","),
45638female_names:"mary,patricia,linda,barbara,elizabeth,jennifer,maria,susan,margaret,dorothy,lisa,nancy,karen,betty,helen,sandra,donna,carol,ruth,sharon,michelle,laura,sarah,kimberly,deborah,jessica,shirley,cynthia,angela,melissa,brenda,amy,anna,rebecca,virginia,kathleen,pamela,martha,debra,amanda,stephanie,carolyn,christine,marie,janet,catherine,frances,ann,joyce,diane,alice,julie,heather,teresa,doris,gloria,evelyn,jean,cheryl,mildred,katherine,joan,ashley,judith,rose,janice,kelly,nicole,judy,christina,kathy,theresa,beverly,denise,tammy,irene,jane,lori,rachel,marilyn,andrea,kathryn,louise,sara,anne,jacqueline,wanda,bonnie,julia,ruby,lois,tina,phyllis,norma,paula,diana,annie,lillian,emily,robin,peggy,crystal,gladys,rita,dawn,connie,florence,tracy,edna,tiffany,carmen,rosa,cindy,grace,wendy,victoria,edith,kim,sherry,sylvia,josephine,thelma,shannon,sheila,ethel,ellen,elaine,marjorie,carrie,charlotte,monica,esther,pauline,emma,juanita,anita,rhonda,hazel,amber,eva,debbie,april,leslie,clara,lucille,jamie,joanne,eleanor,valerie,danielle,megan,alicia,suzanne,michele,gail,bertha,darlene,veronica,jill,erin,geraldine,lauren,cathy,joann,lorraine,lynn,sally,regina,erica,beatrice,dolores,bernice,audrey,yvonne,annette,marion,dana,stacy,ana,renee,ida,vivian,roberta,holly,brittany,melanie,loretta,yolanda,jeanette,laurie,katie,kristen,vanessa,alma,sue,elsie,beth,jeanne,vicki,carla,tara,rosemary,eileen,terri,gertrude,lucy,tonya,ella,stacey,wilma,gina,kristin,jessie,natalie,agnes,vera,charlene,bessie,delores,melinda,pearl,arlene,maureen,colleen,allison,tamara,joy,georgia,constance,lillie,claudia,jackie,marcia,tanya,nellie,minnie,marlene,heidi,glenda,lydia,viola,courtney,marian,stella,caroline,dora,vickie,mattie,maxine,irma,mabel,marsha,myrtle,lena,christy,deanna,patsy,hilda,gwendolyn,jennie,nora,margie,nina,cassandra,leah,penny,kay,priscilla,naomi,carole,olga,billie,dianne,tracey,leona,jenny,felicia,sonia,miriam,velma,becky,bobbie,violet,kristina,toni,misty,mae,shelly,daisy,ramona,sherri,erika,katrina,claire,lindsey,lindsay,geneva,guadalupe,belinda,margarita,sheryl,cora,faye,ada,sabrina,isabel,marguerite,hattie,harriet,molly,cecilia,kristi,brandi,blanche,sandy,rosie,joanna,iris,eunice,angie,inez,lynda,madeline,amelia,alberta,genevieve,monique,jodi,janie,kayla,sonya,jan,kristine,candace,fannie,maryann,opal,alison,yvette,melody,luz,susie,olivia,flora,shelley,kristy,mamie,lula,lola,verna,beulah,antoinette,candice,juana,jeannette,pam,kelli,whitney,bridget,karla,celia,latoya,patty,shelia,gayle,della,vicky,lynne,sheri,marianne,kara,jacquelyn,erma,blanca,myra,leticia,pat,krista,roxanne,angelica,robyn,adrienne,rosalie,alexandra,brooke,bethany,sadie,bernadette,traci,jody,kendra,nichole,rachael,mable,ernestine,muriel,marcella,elena,krystal,angelina,nadine,kari,estelle,dianna,paulette,lora,mona,doreen,rosemarie,desiree,antonia,janis,betsy,christie,freda,meredith,lynette,teri,cristina,eula,leigh,meghan,sophia,eloise,rochelle,gretchen,cecelia,raquel,henrietta,alyssa,jana,gwen,jenna,tricia,laverne,olive,tasha,silvia,elvira,delia,kate,patti,lorena,kellie,sonja,lila,lana,darla,mindy,essie,mandy,lorene,elsa,josefina,jeannie,miranda,dixie,lucia,marta,faith,lela,johanna,shari,camille,tami,shawna,elisa,ebony,melba,ora,nettie,tabitha,ollie,winifred,kristie,alisha,aimee,rena,myrna,marla,tammie,latasha,bonita,patrice,ronda,sherrie,addie,francine,deloris,stacie,adriana,cheri,abigail,celeste,jewel,cara,adele,rebekah,lucinda,dorthy,effie,trina,reba,sallie,aurora,lenora,etta,lottie,kerri,trisha,nikki,estella,francisca,josie,tracie,marissa,karin,brittney,janelle,lourdes,laurel,helene,fern,elva,corinne,kelsey,ina,bettie,elisabeth,aida,caitlin,ingrid,iva,eugenia,christa,goldie,maude,jenifer,therese,dena,lorna,janette,latonya,candy,consuelo,tamika,rosetta,debora,cherie,polly,dina,jewell,fay,jillian,dorothea,nell,trudy,esperanza,patrica,kimberley,shanna,helena,cleo,stefanie,rosario,ola,janine,mollie,lupe,alisa,lou,maribel,susanne,bette,susana,elise,cecile,isabelle,lesley,jocelyn,paige,joni,rachelle,leola,daphne,alta,ester,petra,graciela,imogene,jolene,keisha,lacey,glenna,gabriela,keri,ursula,lizzie,kirsten,shana,adeline,mayra,jayne,jaclyn,gracie,sondra,carmela,marisa,rosalind,charity,tonia,beatriz,marisol,clarice,jeanine,sheena,angeline,frieda,lily,shauna,millie,claudette,cathleen,angelia,gabrielle,autumn,katharine,jodie,staci,lea,christi,justine,elma,luella,margret,dominique,socorro,martina,margo,mavis,callie,bobbi,maritza,lucile,leanne,jeannine,deana,aileen,lorie,ladonna,willa,manuela,gale,selma,dolly,sybil,abby,ivy,dee,winnie,marcy,luisa,jeri,magdalena,ofelia,meagan,audra,matilda,leila,cornelia,bianca,simone,bettye,randi,virgie,latisha,barbra,georgina,eliza,leann,bridgette,rhoda,haley,adela,nola,bernadine,flossie,ila,greta,ruthie,nelda,minerva,lilly,terrie,letha,hilary,estela,valarie,brianna,rosalyn,earline,catalina,ava,mia,clarissa,lidia,corrine,alexandria,concepcion,tia,sharron,rae,dona,ericka,jami,elnora,chandra,lenore,neva,marylou,melisa,tabatha,serena,avis,allie,sofia,jeanie,odessa,nannie,harriett,loraine,penelope,milagros,emilia,benita,allyson,ashlee,tania,esmeralda,eve,pearlie,zelma,malinda,noreen,tameka,saundra,hillary,amie,althea,rosalinda,lilia,alana,clare,alejandra,elinor,lorrie,jerri,darcy,earnestine,carmella,noemi,marcie,liza,annabelle,louisa,earlene,mallory,carlene,nita,selena,tanisha,katy,julianne,lakisha,edwina,maricela,margery,kenya,dollie,roxie,roslyn,kathrine,nanette,charmaine,lavonne,ilene,tammi,suzette,corine,kaye,chrystal,lina,deanne,lilian,juliana,aline,luann,kasey,maryanne,evangeline,colette,melva,lawanda,yesenia,nadia,madge,kathie,ophelia,valeria,nona,mitzi,mari,georgette,claudine,fran,alissa,roseann,lakeisha,susanna,reva,deidre,chasity,sheree,elvia,alyce,deirdre,gena,briana,araceli,katelyn,rosanne,wendi,tessa,berta,marva,imelda,marietta,marci,leonor,arline,sasha,madelyn,janna,juliette,deena,aurelia,josefa,augusta,liliana,lessie,amalia,savannah,anastasia,vilma,natalia,rosella,lynnette,corina,alfreda,leanna,amparo,coleen,tamra,aisha,wilda,karyn,maura,mai,evangelina,rosanna,hallie,erna,enid,mariana,lacy,juliet,jacklyn,freida,madeleine,mara,cathryn,lelia,casandra,bridgett,angelita,jannie,dionne,annmarie,katina,beryl,millicent,katheryn,diann,carissa,maryellen,liz,lauri,helga,gilda,rhea,marquita,hollie,tisha,tamera,angelique,francesca,kaitlin,lolita,florine,rowena,reyna,twila,fanny,janell,ines,concetta,bertie,alba,brigitte,alyson,vonda,pansy,elba,noelle,letitia,deann,brandie,louella,leta,felecia,sharlene,lesa,beverley,isabella,herminia,terra,celina,tori,octavia,jade,denice,germaine,michell,cortney,nelly,doretha,deidra,monika,lashonda,judi,chelsey,antionette,margot,adelaide,leeann,elisha,dessie,libby,kathi,gayla,latanya,mina,mellisa,kimberlee,jasmin,renae,zelda,elda,justina,gussie,emilie,camilla,abbie,rocio,kaitlyn,edythe,ashleigh,selina,lakesha,geri,allene,pamala,michaela,dayna,caryn,rosalia,jacquline,rebeca,marybeth,krystle,iola,dottie,belle,griselda,ernestina,elida,adrianne,demetria,delma,jaqueline,arleen,virgina,retha,fatima,tillie,eleanore,cari,treva,wilhelmina,rosalee,maurine,latrice,jena,taryn,elia,debby,maudie,jeanna,delilah,catrina,shonda,hortencia,theodora,teresita,robbin,danette,delphine,brianne,nilda,danna,cindi,bess,iona,winona,vida,rosita,marianna,racheal,guillermina,eloisa,celestine,caren,malissa,lona,chantel,shellie,marisela,leora,agatha,soledad,migdalia,ivette,christen,athena,janel,veda,pattie,tessie,tera,marilynn,lucretia,karrie,dinah,daniela,alecia,adelina,vernice,shiela,portia,merry,lashawn,dara,tawana,verda,alene,zella,sandi,rafaela,maya,kira,candida,alvina,suzan,shayla,lettie,samatha,oralia,matilde,larissa,vesta,renita,delois,shanda,phillis,lorri,erlinda,cathrine,barb,isabell,ione,gisela,roxanna,mayme,kisha,ellie,mellissa,dorris,dalia,bella,annetta,zoila,reta,reina,lauretta,kylie,christal,pilar,charla,elissa,tiffani,tana,paulina,leota,breanna,jayme,carmel,vernell,tomasa,mandi,dominga,santa,melodie,lura,alexa,tamela,mirna,kerrie,venus,felicita,cristy,carmelita,berniece,annemarie,tiara,roseanne,missy,cori,roxana,pricilla,kristal,jung,elyse,haydee,aletha,bettina,marge,gillian,filomena,zenaida,harriette,caridad,vada,aretha,pearline,marjory,marcela,flor,evette,elouise,alina,damaris,catharine,belva,nakia,marlena,luanne,lorine,karon,dorene,danita,brenna,tatiana,louann,julianna,andria,philomena,lucila,leonora,dovie,romona,mimi,jacquelin,gaye,tonja,misti,chastity,stacia,roxann,micaela,velda,marlys,johnna,aura,ivonne,hayley,nicki,majorie,herlinda,yadira,perla,gregoria,antonette,shelli,mozelle,mariah,joelle,cordelia,josette,chiquita,trista,laquita,georgiana,candi,shanon,hildegard,stephany,magda,karol,gabriella,tiana,roma,richelle,oleta,jacque,idella,alaina,suzanna,jovita,tosha,nereida,marlyn,kyla,delfina,tena,stephenie,sabina,nathalie,marcelle,gertie,darleen,thea,sharonda,shantel,belen,venessa,rosalina,genoveva,clementine,rosalba,renate,renata,georgianna,floy,dorcas,ariana,tyra,theda,mariam,juli,jesica,vikki,verla,roselyn,melvina,jannette,ginny,debrah,corrie,violeta,myrtis,latricia,collette,charleen,anissa,viviana,twyla,nedra,latonia,hellen,fabiola,annamarie,adell,sharyn,chantal,niki,maud,lizette,lindy,kesha,jeana,danelle,charline,chanel,valorie,dortha,cristal,sunny,leone,leilani,gerri,debi,andra,keshia,eulalia,easter,dulce,natividad,linnie,kami,georgie,catina,brook,alda,winnifred,sharla,ruthann,meaghan,magdalene,lissette,adelaida,venita,trena,shirlene,shameka,elizebeth,dian,shanta,latosha,carlotta,windy,rosina,mariann,leisa,jonnie,dawna,cathie,astrid,laureen,janeen,holli,fawn,vickey,teressa,shante,rubye,marcelina,chanda,terese,scarlett,marnie,lulu,lisette,jeniffer,elenor,dorinda,donita,carman,bernita,altagracia,aleta,adrianna,zoraida,lyndsey,janina,starla,phylis,phuong,kyra,charisse,blanch,sanjuanita,rona,nanci,marilee,maranda,brigette,sanjuana,marita,kassandra,joycelyn,felipa,chelsie,bonny,mireya,lorenza,kyong,ileana,candelaria,sherie,lucie,leatrice,lakeshia,gerda,edie,bambi,marylin,lavon,hortense,garnet,evie,tressa,shayna,lavina,kyung,jeanetta,sherrill,shara,phyliss,mittie,anabel,alesia,thuy,tawanda,joanie,tiffanie,lashanda,karissa,enriqueta,daria,daniella,corinna,alanna,abbey,roxane,roseanna,magnolia,lida,joellen,coral,carleen,tresa,peggie,novella,nila,maybelle,jenelle,carina,nova,melina,marquerite,margarette,josephina,evonne,cinthia,albina,toya,tawnya,sherita,myriam,lizabeth,lise,keely,jenni,giselle,cheryle,ardith,ardis,alesha,adriane,shaina,linnea,karolyn,felisha,dori,darci,artie,armida,zola,xiomara,vergie,shamika,nena,nannette,maxie,lovie,jeane,jaimie,inge,farrah,elaina,caitlyn,felicitas,cherly,caryl,yolonda,yasmin,teena,prudence,pennie,nydia,mackenzie,orpha,marvel,lizbeth,laurette,jerrie,hermelinda,carolee,tierra,mirian,meta,melony,kori,jennette,jamila,yoshiko,susannah,salina,rhiannon,joleen,cristine,ashton,aracely,tomeka,shalonda,marti,lacie,kala,jada,ilse,hailey,brittani,zona,syble,sherryl,nidia,marlo,kandice,kandi,alycia,ronna,norene,mercy,ingeborg,giovanna,gemma,christel,audry,zora,vita,trish,stephaine,shirlee,shanika,melonie,mazie,jazmin,inga,hettie,geralyn,fonda,estrella,adella,sarita,rina,milissa,maribeth,golda,evon,ethelyn,enedina,cherise,chana,velva,tawanna,sade,mirta,karie,jacinta,elna,davina,cierra,ashlie,albertha,tanesha,nelle,mindi,lorinda,larue,florene,demetra,dedra,ciara,chantelle,ashly,suzy,rosalva,noelia,lyda,leatha,krystyna,kristan,karri,darline,darcie,cinda,cherrie,awilda,almeda,rolanda,lanette,jerilyn,gisele,evalyn,cyndi,cleta,carin,zina,zena,velia,tanika,charissa,talia,margarete,lavonda,kaylee,kathlene,jonna,irena,ilona,idalia,candis,candance,brandee,anitra,alida,sigrid,nicolette,maryjo,linette,hedwig,christiana,alexia,tressie,modesta,lupita,lita,gladis,evelia,davida,cherri,cecily,ashely,annabel,agustina,wanita,shirly,rosaura,hulda,yetta,verona,thomasina,sibyl,shannan,mechelle,leandra,lani,kylee,kandy,jolynn,ferne,eboni,corene,alysia,zula,nada,moira,lyndsay,lorretta,jammie,hortensia,gaynell,adria,vina,vicenta,tangela,stephine,norine,nella,liana,leslee,kimberely,iliana,glory,felica,emogene,elfriede,eden,eartha,carma,ocie,lennie,kiara,jacalyn,carlota,arielle,otilia,kirstin,kacey,johnetta,joetta,jeraldine,jaunita,elana,dorthea,cami,amada,adelia,vernita,tamar,siobhan,renea,rashida,ouida,nilsa,meryl,kristyn,julieta,danica,breanne,aurea,anglea,sherron,odette,malia,lorelei,leesa,kenna,kathlyn,fiona,charlette,suzie,shantell,sabra,racquel,myong,mira,martine,lucienne,lavada,juliann,elvera,delphia,christiane,charolette,carri,asha,angella,paola,ninfa,leda,stefani,shanell,palma,machelle,lissa,kecia,kathryne,karlene,julissa,jettie,jenniffer,corrina,carolann,alena,rosaria,myrtice,marylee,liane,kenyatta,judie,janey,elmira,eldora,denna,cristi,cathi,zaida,vonnie,viva,vernie,rosaline,mariela,luciana,lesli,karan,felice,deneen,adina,wynona,tarsha,sheron,shanita,shani,shandra,randa,pinkie,nelida,marilou,lyla,laurene,laci,janene,dorotha,daniele,dani,carolynn,carlyn,berenice,ayesha,anneliese,alethea,thersa,tamiko,rufina,oliva,mozell,marylyn,kristian,kathyrn,kasandra,kandace,janae,domenica,debbra,dannielle,chun,arcelia,zenobia,sharen,sharee,lavinia,kacie,jackeline,huong,felisa,emelia,eleanora,cythia,cristin,claribel,anastacia,zulma,zandra,yoko,tenisha,susann,sherilyn,shay,shawanda,romana,mathilda,linsey,keiko,joana,isela,gretta,georgetta,eugenie,desirae,delora,corazon,antonina,anika,willene,tracee,tamatha,nichelle,mickie,maegan,luana,lanita,kelsie,edelmira,bree,afton,teodora,tamie,shena,linh,keli,kaci,danyelle,arlette,albertine,adelle,tiffiny,simona,nicolasa,nichol,nakisha,maira,loreen,kizzy,fallon,christene,bobbye,ying,vincenza,tanja,rubie,roni,queenie,margarett,kimberli,irmgard,idell,hilma,evelina,esta,emilee,dennise,dania,carie,risa,rikki,particia,masako,luvenia,loree,loni,lien,gigi,florencia,denita,billye,tomika,sharita,rana,nikole,neoma,margarite,madalyn,lucina,laila,kali,jenette,gabriele,evelyne,elenora,clementina,alejandrina,zulema,violette,vannessa,thresa,retta,patience,noella,nickie,jonell,chaya,camelia,bethel,anya,suzann,mila,lilla,laverna,keesha,kattie,georgene,eveline,estell,elizbeth,vivienne,vallie,trudie,stephane,magaly,madie,kenyetta,karren,janetta,hermine,drucilla,debbi,celestina,candie,britni,beckie,amina,zita,yolande,vivien,vernetta,trudi,pearle,patrina,ossie,nicolle,loyce,letty,katharina,joselyn,jonelle,jenell,iesha,heide,florinda,florentina,elodia,dorine,brunilda,brigid,ashli,ardella,twana,tarah,shavon,serina,rayna,ramonita,margurite,lucrecia,kourtney,kati,jesenia,crista,ayana,alica,alia,vinnie,suellen,romelia,rachell,olympia,michiko,kathaleen,jolie,jessi,janessa,hana,elease,carletta,britany,shona,salome,rosamond,regena,raina,ngoc,nelia,louvenia,lesia,latrina,laticia,larhonda,jina,jacki,emmy,deeann,coretta,arnetta,thalia,shanice,neta,mikki,micki,lonna,leana,lashunda,kiley,joye,jacqulyn,ignacia,hyun,hiroko,henriette,elayne,delinda,dahlia,coreen,consuela,conchita,babette,ayanna,anette,albertina,shawnee,shaneka,quiana,pamelia,merri,merlene,margit,kiesha,kiera,kaylene,jodee,jenise,erlene,emmie,dalila,daisey,casie,belia,babara,versie,vanesa,shelba,shawnda,nikia,naoma,marna,margeret,madaline,lawana,kindra,jutta,jazmine,janett,hannelore,glendora,gertrud,garnett,freeda,frederica,florance,flavia,carline,beverlee,anjanette,valda,tamala,shonna,sarina,oneida,merilyn,marleen,lurline,lenna,katherin,jeni,gracia,glady,farah,enola,dominque,devona,delana,cecila,caprice,alysha,alethia,vena,theresia,tawny,shakira,samara,sachiko,rachele,pamella,marni,mariel,maren,malisa,ligia,lera,latoria,larae,kimber,kathern,karey,jennefer,janeth,halina,fredia,delisa,debroah,ciera,angelika,andree,altha,vivan,terresa,tanna,sudie,signe,salena,ronni,rebbecca,myrtie,malika,maida,leonarda,kayleigh,ethyl,ellyn,dayle,cammie,brittni,birgit,avelina,asuncion,arianna,akiko,venice,tyesha,tonie,tiesha,takisha,steffanie,sindy,meghann,manda,macie,kellye,kellee,joslyn,inger,indira,glinda,glennis,fernanda,faustina,eneida,elicia,digna,dell,arletta,willia,tammara,tabetha,sherrell,sari,rebbeca,pauletta,natosha,nakita,mammie,kenisha,kazuko,kassie,earlean,daphine,corliss,clotilde,carolyne,bernetta,augustina,audrea,annis,annabell,tennille,tamica,selene,rosana,regenia,qiana,markita,macy,leeanne,laurine,jessenia,janita,georgine,genie,emiko,elvie,deandra,dagmar,corie,collen,cherish,romaine,porsha,pearlene,micheline,merna,margorie,margaretta,lore,jenine,hermina,fredericka,elke,drusilla,dorathy,dione,celena,brigida,allegra,tamekia,synthia,sook,slyvia,rosann,reatha,raye,marquetta,margart,ling,layla,kymberly,kiana,kayleen,katlyn,karmen,joella,emelda,eleni,detra,clemmie,cheryll,chantell,cathey,arnita,arla,angle,angelic,alyse,zofia,thomasine,tennie,sherly,sherley,sharyl,remedios,petrina,nickole,myung,myrle,mozella,louanne,lisha,latia,krysta,julienne,jeanene,jacqualine,isaura,gwenda,earleen,cleopatra,carlie,audie,antonietta,alise,verdell,tomoko,thao,talisha,shemika,savanna,santina,rosia,raeann,odilia,nana,minna,magan,lynelle,karma,joeann,ivana,inell,ilana,gudrun,dreama,crissy,chante,carmelina,arvilla,annamae,alvera,aleida,yanira,vanda,tianna,stefania,shira,nicol,nancie,monserrate,melynda,melany,lovella,laure,kacy,jacquelynn,hyon,gertha,eliana,christena,christeen,charise,caterina,carley,candyce,arlena,ammie,willette,vanita,tuyet,syreeta,penney,nyla,maryam,marya,magen,ludie,loma,livia,lanell,kimberlie,julee,donetta,diedra,denisha,deane,dawne,clarine,cherryl,bronwyn,alla,valery,tonda,sueann,soraya,shoshana,shela,sharleen,shanelle,nerissa,meridith,mellie,maye,maple,magaret,lili,leonila,leonie,leeanna,lavonia,lavera,kristel,kathey,kathe,jann,ilda,hildred,hildegarde,genia,fumiko,evelin,ermelinda,elly,dung,doloris,dionna,danae,berneice,annice,alix,verena,verdie,shawnna,shawana,shaunna,rozella,randee,ranae,milagro,lynell,luise,loida,lisbeth,karleen,junita,jona,isis,hyacinth,hedy,gwenn,ethelene,erline,donya,domonique,delicia,dannette,cicely,branda,blythe,bethann,ashlyn,annalee,alline,yuko,vella,trang,towanda,tesha,sherlyn,narcisa,miguelina,meri,maybell,marlana,marguerita,madlyn,lory,loriann,leonore,leighann,laurice,latesha,laronda,katrice,kasie,kaley,jadwiga,glennie,gearldine,francina,epifania,dyan,dorie,diedre,denese,demetrice,delena,cristie,cleora,catarina,carisa,barbera,almeta,trula,tereasa,solange,sheilah,shavonne,sanora,rochell,mathilde,margareta,maia,lynsey,lawanna,launa,kena,keena,katia,glynda,gaylene,elvina,elanor,danuta,danika,cristen,cordie,coletta,clarita,carmon,brynn,azucena,aundrea,angele,verlie,verlene,tamesha,silvana,sebrina,samira,reda,raylene,penni,norah,noma,mireille,melissia,maryalice,laraine,kimbery,karyl,karine,jolanda,johana,jesusa,jaleesa,jacquelyne,iluminada,hilaria,hanh,gennie,francie,floretta,exie,edda,drema,delpha,barbar,assunta,ardell,annalisa,alisia,yukiko,yolando,wonda,waltraud,veta,temeka,tameika,shirleen,shenita,piedad,ozella,mirtha,marilu,kimiko,juliane,jenice,janay,jacquiline,hilde,elois,echo,devorah,chau,brinda,betsey,arminda,aracelis,apryl,annett,alishia,veola,usha,toshiko,theola,tashia,talitha,shery,renetta,reiko,rasheeda,obdulia,mika,melaine,meggan,marlen,marget,marceline,mana,magdalen,librada,lezlie,latashia,lasandra,kelle,isidra,inocencia,gwyn,francoise,erminia,erinn,dimple,devora,criselda,armanda,arie,ariane,angelena,aliza,adriene,adaline,xochitl,twanna,tomiko,tamisha,taisha,susy,rutha,rhona,noriko,natashia,merrie,marinda,mariko,margert,loris,lizzette,leisha,kaila,joannie,jerrica,jene,jannet,janee,jacinda,herta,elenore,doretta,delaine,daniell,claudie,britta,apolonia,amberly,alease,yuri,waneta,tomi,sharri,sandie,roselle,reynalda,raguel,phylicia,patria,olimpia,odelia,mitzie,minda,mignon,mica,mendy,marivel,maile,lynetta,lavette,lauryn,latrisha,lakiesha,kiersten,kary,josphine,jolyn,jetta,janise,jacquie,ivelisse,glynis,gianna,gaynelle,danyell,danille,dacia,coralee,cher,ceola,arianne,aleshia,yung,williemae,trinh,thora,sherika,shemeka,shaunda,roseline,ricki,melda,mallie,lavonna,latina,laquanda,lala,lachelle,klara,kandis,johna,jeanmarie,jaye,grayce,gertude,emerita,ebonie,clorinda,ching,chery,carola,breann,blossom,bernardine,becki,arletha,argelia,alita,yulanda,yessenia,tobi,tasia,sylvie,shirl,shirely,shella,shantelle,sacha,rebecka,providencia,paulene,misha,miki,marline,marica,lorita,latoyia,lasonya,kerstin,kenda,keitha,kathrin,jaymie,gricelda,ginette,eryn,elina,elfrieda,danyel,cheree,chanelle,barrie,aurore,annamaria,alleen,ailene,aide,yasmine,vashti,treasa,tiffaney,sheryll,sharie,shanae,raisa,neda,mitsuko,mirella,milda,maryanna,maragret,mabelle,luetta,lorina,letisha,latarsha,lanelle,lajuana,krissy,karly,karena,jessika,jerica,jeanelle,jalisa,jacelyn,izola,euna,etha,domitila,dominica,daina,creola,carli,camie,brittny,ashanti,anisha,aleen,adah,yasuko,valrie,tona,tinisha,terisa,taneka,simonne,shalanda,serita,ressie,refugia,olene,margherita,mandie,maire,lyndia,luci,lorriane,loreta,leonia,lavona,lashawnda,lakia,kyoko,krystina,krysten,kenia,kelsi,jeanice,isobel,georgiann,genny,felicidad,eilene,deloise,deedee,conception,clora,cherilyn,calandra,armandina,anisa,tiera,theressa,stephania,sima,shyla,shonta,shera,shaquita,shala,rossana,nohemi,nery,moriah,melita,melida,melani,marylynn,marisha,mariette,malorie,madelene,ludivina,loria,lorette,loralee,lianne,lavenia,laurinda,lashon,kimi,keila,katelynn,jone,joane,jayna,janella,hertha,francene,elinore,despina,delsie,deedra,clemencia,carolin,bulah,brittanie,blondell,bibi,beaulah,beata,annita,agripina,virgen,valene,twanda,tommye,tarra,tari,tammera,shakia,sadye,ruthanne,rochel,rivka,pura,nenita,natisha,ming,merrilee,melodee,marvis,lucilla,leena,laveta,larita,lanie,keren,ileen,georgeann,genna,frida,eufemia,emely,edyth,deonna,deadra,darlena,chanell,cathern,cassondra,cassaundra,bernarda,berna,arlinda,anamaria,vertie,valeri,torri,stasia,sherise,sherill,sanda,ruthe,rosy,robbi,ranee,quyen,pearly,palmira,onita,nisha,niesha,nida,merlyn,mayola,marylouise,marth,margene,madelaine,londa,leontine,leoma,leia,lauralee,lanora,lakita,kiyoko,keturah,katelin,kareen,jonie,johnette,jenee,jeanett,izetta,hiedi,heike,hassie,giuseppina,georgann,fidela,fernande,elwanda,ellamae,eliz,dusti,dotty,cyndy,coralie,celesta,alverta,xenia,wava,vanetta,torrie,tashina,tandy,tambra,tama,stepanie,shila,shaunta,sharan,shaniqua,shae,setsuko,serafina,sandee,rosamaria,priscila,olinda,nadene,muoi,michelina,mercedez,maryrose,marcene,magali,mafalda,lannie,kayce,karoline,kamilah,kamala,justa,joline,jennine,jacquetta,iraida,georgeanna,franchesca,emeline,elane,ehtel,earlie,dulcie,dalene,classie,chere,charis,caroyln,carmina,carita,bethanie,ayako,arica,alysa,alessandra,akilah,adrien,zetta,youlanda,yelena,yahaira,xuan,wendolyn,tijuana,terina,teresia,suzi,sherell,shavonda,shaunte,sharda,shakita,sena,ryann,rubi,riva,reginia,rachal,parthenia,pamula,monnie,monet,michaele,melia,malka,maisha,lisandra,lekisha,lean,lakendra,krystin,kortney,kizzie,kittie,kera,kendal,kemberly,kanisha,julene,jule,johanne,jamee,halley,gidget,fredricka,fleta,fatimah,eusebia,elza,eleonore,dorthey,doria,donella,dinorah,delorse,claretha,christinia,charlyn,bong,belkis,azzie,andera,aiko,adena,yajaira,vania,ulrike,toshia,tifany,stefany,shizue,shenika,shawanna,sharolyn,sharilyn,shaquana,shantay,rozanne,roselee,remona,reanna,raelene,phung,petronila,natacha,nancey,myrl,miyoko,miesha,merideth,marvella,marquitta,marhta,marchelle,lizeth,libbie,lahoma,ladawn,kina,katheleen,katharyn,karisa,kaleigh,junie,julieann,johnsie,janean,jaimee,jackqueline,hisako,herma,helaine,gwyneth,gita,eustolia,emelina,elin,edris,donnette,donnetta,dierdre,denae,darcel,clarisa,cinderella,chia,charlesetta,charita,celsa,cassy,cassi,carlee,bruna,brittaney,brande,billi,antonetta,angla,angelyn,analisa,alane,wenona,wendie,veronique,vannesa,tobie,tempie,sumiko,sulema,somer,sheba,sharice,shanel,shalon,rosio,roselia,renay,rema,reena,ozie,oretha,oralee,ngan,nakesha,milly,marybelle,margrett,maragaret,manie,lurlene,lillia,lieselotte,lavelle,lashaunda,lakeesha,kaycee,kalyn,joya,joette,jenae,janiece,illa,grisel,glayds,genevie,gala,fredda,eleonor,debera,deandrea,corrinne,cordia,contessa,colene,cleotilde,chantay,cecille,beatris,azalee,arlean,ardath,anjelica,anja,alfredia,aleisha,zada,yuonne,xiao,willodean,vennie,vanna,tyisha,tova,torie,tonisha,tilda,tien,sirena,sherril,shanti,shan,senaida,samella,robbyn,renda,reita,phebe,paulita,nobuko,nguyet,neomi,mikaela,melania,maximina,marg,maisie,lynna,lilli,lashaun,lakenya,lael,kirstie,kathline,kasha,karlyn,karima,jovan,josefine,jennell,jacqui,jackelyn,hien,grazyna,florrie,floria,eleonora,dwana,dorla,delmy,deja,dede,dann,crysta,clelia,claris,chieko,cherlyn,cherelle,charmain,chara,cammy,arnette,ardelle,annika,amiee,amee,allena,yvone,yuki,yoshie,yevette,yael,willetta,voncile,venetta,tula,tonette,timika,temika,telma,teisha,taren,stacee,shawnta,saturnina,ricarda,pasty,onie,nubia,marielle,mariella,marianela,mardell,luanna,loise,lisabeth,lindsy,lilliana,lilliam,lelah,leigha,leanora,kristeen,khalilah,keeley,kandra,junko,joaquina,jerlene,jani,jamika,hsiu,hermila,genevive,evia,eugena,emmaline,elfreda,elene,donette,delcie,deeanna,darcey,clarinda,cira,chae,celinda,catheryn,casimira,carmelia,camellia,breana,bobette,bernardina,bebe,basilia,arlyne,amal,alayna,zonia,zenia,yuriko,yaeko,wynell,willena,vernia,tora,terrilyn,terica,tenesha,tawna,tajuana,taina,stephnie,sona,sina,shondra,shizuko,sherlene,sherice,sharika,rossie,rosena,rima,rheba,renna,natalya,nancee,melodi,meda,matha,marketta,maricruz,marcelene,malvina,luba,louetta,leida,lecia,lauran,lashawna,laine,khadijah,katerine,kasi,kallie,julietta,jesusita,jestine,jessia,jeffie,janyce,isadora,georgianne,fidelia,evita,eura,eulah,estefana,elsy,eladia,dodie,denisse,deloras,delila,daysi,crystle,concha,claretta,charlsie,charlena,carylon,bettyann,asley,ashlea,amira,agueda,agnus,yuette,vinita,victorina,tynisha,treena,toccara,tish,thomasena,tegan,soila,shenna,sharmaine,shantae,shandi,saran,sarai,sana,rosette,rolande,regine,otelia,olevia,nicholle,necole,naida,myrta,myesha,mitsue,minta,mertie,margy,mahalia,madalene,loura,lorean,lesha,leonida,lenita,lavone,lashell,lashandra,lamonica,kimbra,katherina,karry,kanesha,jong,jeneva,jaquelyn,gilma,ghislaine,gertrudis,fransisca,fermina,ettie,etsuko,ellan,elidia,edra,dorethea,doreatha,denyse,deetta,daine,cyrstal,corrin,cayla,carlita,camila,burma,bula,buena,barabara,avril,alaine,zana,wilhemina,wanetta,verline,vasiliki,tonita,tisa,teofila,tayna,taunya,tandra,takako,sunni,suanne,sixta,sharell,seema,rosenda,robena,raymonde,pamila,ozell,neida,mistie,micha,merissa,maurita,maryln,maryetta,marcell,malena,makeda,lovetta,lourie,lorrine,lorilee,laurena,lashay,larraine,laree,lacresha,kristle,keva,keira,karole,joie,jinny,jeannetta,jama,heidy,gilberte,gema,faviola,evelynn,enda,elli,ellena,divina,dagny,collene,codi,cindie,chassidy,chasidy,catrice,catherina,cassey,caroll,carlena,candra,calista,bryanna,britteny,beula,bari,audrie,audria,ardelia,annelle,angila,alona,allyn".split(","),surnames:"smith,johnson,williams,jones,brown,davis,miller,wilson,moore,taylor,anderson,jackson,white,harris,martin,thompson,garcia,martinez,robinson,clark,rodriguez,lewis,lee,walker,hall,allen,young,hernandez,king,wright,lopez,hill,green,adams,baker,gonzalez,nelson,carter,mitchell,perez,roberts,turner,phillips,campbell,parker,evans,edwards,collins,stewart,sanchez,morris,rogers,reed,cook,morgan,bell,murphy,bailey,rivera,cooper,richardson,cox,howard,ward,torres,peterson,gray,ramirez,watson,brooks,sanders,price,bennett,wood,barnes,ross,henderson,coleman,jenkins,perry,powell,long,patterson,hughes,flores,washington,butler,simmons,foster,gonzales,bryant,alexander,griffin,diaz,hayes,myers,ford,hamilton,graham,sullivan,wallace,woods,cole,west,owens,reynolds,fisher,ellis,harrison,gibson,mcdonald,cruz,marshall,ortiz,gomez,murray,freeman,wells,webb,simpson,stevens,tucker,porter,hicks,crawford,boyd,mason,morales,kennedy,warren,dixon,ramos,reyes,burns,gordon,shaw,holmes,rice,robertson,hunt,black,daniels,palmer,mills,nichols,grant,knight,ferguson,stone,hawkins,dunn,perkins,hudson,spencer,gardner,stephens,payne,pierce,berry,matthews,arnold,wagner,willis,watkins,olson,carroll,duncan,snyder,hart,cunningham,lane,andrews,ruiz,harper,fox,riley,armstrong,carpenter,weaver,greene,elliott,chavez,sims,peters,kelley,franklin,lawson,fields,gutierrez,schmidt,carr,vasquez,castillo,wheeler,chapman,montgomery,richards,williamson,johnston,banks,meyer,bishop,mccoy,howell,alvarez,morrison,hansen,fernandez,garza,harvey,burton,nguyen,jacobs,reid,fuller,lynch,garrett,romero,welch,larson,frazier,burke,hanson,mendoza,moreno,bowman,medina,fowler,brewer,hoffman,carlson,silva,pearson,holland,fleming,jensen,vargas,byrd,davidson,hopkins,herrera,wade,soto,walters,neal,caldwell,lowe,jennings,barnett,graves,jimenez,horton,shelton,barrett,obrien,castro,sutton,mckinney,lucas,miles,rodriquez,chambers,holt,lambert,fletcher,watts,bates,hale,rhodes,pena,beck,newman,haynes,mcdaniel,mendez,bush,vaughn,parks,dawson,santiago,norris,hardy,steele,curry,powers,schultz,barker,guzman,page,munoz,ball,keller,chandler,weber,walsh,lyons,ramsey,wolfe,schneider,mullins,benson,sharp,bowen,barber,cummings,hines,baldwin,griffith,valdez,hubbard,salazar,reeves,warner,stevenson,burgess,santos,tate,cross,garner,mann,mack,moss,thornton,mcgee,farmer,delgado,aguilar,vega,glover,manning,cohen,harmon,rodgers,robbins,newton,blair,higgins,ingram,reese,cannon,strickland,townsend,potter,goodwin,walton,rowe,hampton,ortega,patton,swanson,goodman,maldonado,yates,becker,erickson,hodges,rios,conner,adkins,webster,malone,hammond,flowers,cobb,moody,quinn,pope,osborne,mccarthy,guerrero,estrada,sandoval,gibbs,gross,fitzgerald,stokes,doyle,saunders,wise,colon,gill,alvarado,greer,padilla,waters,nunez,ballard,schwartz,mcbride,houston,christensen,klein,pratt,briggs,parsons,mclaughlin,zimmerman,buchanan,moran,copeland,pittman,brady,mccormick,holloway,brock,poole,logan,bass,marsh,drake,wong,jefferson,morton,abbott,sparks,norton,huff,massey,figueroa,carson,bowers,roberson,barton,tran,lamb,harrington,boone,cortez,clarke,mathis,singleton,wilkins,cain,underwood,hogan,mckenzie,collier,luna,phelps,mcguire,bridges,wilkerson,nash,summers,atkins,wilcox,pitts,conley,marquez,burnett,cochran,chase,davenport,hood,gates,ayala,sawyer,vazquez,dickerson,hodge,acosta,flynn,espinoza,nicholson,monroe,wolf,morrow,whitaker,oconnor,skinner,ware,molina,kirby,huffman,gilmore,dominguez,oneal,lang,combs,kramer,hancock,gallagher,gaines,shaffer,wiggins,mathews,mcclain,fischer,wall,melton,hensley,bond,dyer,grimes,contreras,wyatt,baxter,snow,mosley,shepherd,larsen,hoover,beasley,petersen,whitehead,meyers,garrison,shields,horn,savage,olsen,schroeder,hartman,woodard,mueller,kemp,deleon,booth,patel,calhoun,wiley,eaton,cline,navarro,harrell,humphrey,parrish,duran,hutchinson,hess,dorsey,bullock,robles,beard,dalton,avila,rich,blackwell,johns,blankenship,trevino,salinas,campos,pruitt,callahan,montoya,hardin,guerra,mcdowell,stafford,gallegos,henson,wilkinson,booker,merritt,atkinson,orr,decker,hobbs,tanner,knox,pacheco,stephenson,glass,rojas,serrano,marks,hickman,sweeney,strong,mcclure,conway,roth,maynard,farrell,lowery,hurst,nixon,weiss,trujillo,ellison,sloan,juarez,winters,mclean,boyer,villarreal,mccall,gentry,carrillo,ayers,lara,sexton,pace,hull,leblanc,browning,velasquez,leach,chang,sellers,herring,noble,foley,bartlett,mercado,landry,durham,walls,barr,mckee,bauer,rivers,bradshaw,pugh,velez,rush,estes,dodson,morse,sheppard,weeks,camacho,bean,barron,livingston,middleton,spears,branch,blevins,chen,kerr,mcconnell,hatfield,harding,solis,frost,giles,blackburn,pennington,woodward,finley,mcintosh,koch,mccullough,blanchard,rivas,brennan,mejia,kane,benton,buckley,valentine,maddox,russo,mcknight,buck,moon,mcmillan,crosby,berg,dotson,mays,roach,chan,richmond,meadows,faulkner,oneill,knapp,kline,ochoa,jacobson,gay,hendricks,horne,shepard,hebert,cardenas,mcintyre,waller,holman,donaldson,cantu,morin,gillespie,fuentes,tillman,bentley,peck,key,salas,rollins,gamble,dickson,santana,cabrera,cervantes,howe,hinton,hurley,spence,zamora,yang,mcneil,suarez,petty,gould,mcfarland,sampson,carver,bray,macdonald,stout,hester,melendez,dillon,farley,hopper,galloway,potts,joyner,stein,aguirre,osborn,mercer,bender,franco,rowland,sykes,pickett,sears,mayo,dunlap,hayden,wilder,mckay,coffey,mccarty,ewing,cooley,vaughan,bonner,cotton,holder,stark,ferrell,cantrell,fulton,lott,calderon,pollard,hooper,burch,mullen,fry,riddle,levy,duke,odonnell,britt,daugherty,berger,dillard,alston,frye,riggs,chaney,odom,duffy,fitzpatrick,valenzuela,mayer,alford,mcpherson,acevedo,barrera,cote,reilly,compton,mooney,mcgowan,craft,clemons,wynn,nielsen,baird,stanton,snider,rosales,bright,witt,hays,holden,rutledge,kinney,clements,castaneda,slater,hahn,burks,delaney,pate,lancaster,sharpe,whitfield,talley,macias,burris,ratliff,mccray,madden,kaufman,beach,goff,cash,bolton,mcfadden,levine,byers,kirkland,kidd,workman,carney,mcleod,holcomb,finch,sosa,haney,franks,sargent,nieves,downs,rasmussen,bird,hewitt,foreman,valencia,oneil,delacruz,vinson,dejesus,hyde,forbes,gilliam,guthrie,wooten,huber,barlow,boyle,mcmahon,buckner,rocha,puckett,langley,knowles,cooke,velazquez,whitley,vang,shea,rouse,hartley,mayfield,elder,rankin,hanna,cowan,lucero,arroyo,slaughter,haas,oconnell,minor,boucher,archer,boggs,dougherty,andersen,newell,crowe,wang,friedman,bland,swain,holley,pearce,childs,yarbrough,galvan,proctor,meeks,lozano,mora,rangel,bacon,villanueva,schaefer,rosado,helms,boyce,goss,stinson,ibarra,hutchins,covington,crowley,hatcher,mackey,bunch,womack,polk,dodd,childress,childers,villa,springer,mahoney,dailey,belcher,lockhart,griggs,costa,brandt,walden,moser,tatum,mccann,akers,lutz,pryor,orozco,mcallister,lugo,davies,shoemaker,rutherford,newsome,magee,chamberlain,blanton,simms,godfrey,flanagan,crum,cordova,escobar,downing,sinclair,donahue,krueger,mcginnis,gore,farris,webber,corbett,andrade,starr,lyon,yoder,hastings,mcgrath,spivey,krause,harden,crabtree,kirkpatrick,arrington,ritter,mcghee,bolden,maloney,gagnon,dunbar,ponce,pike,mayes,beatty,mobley,kimball,butts,montes,eldridge,braun,hamm,gibbons,moyer,manley,herron,plummer,elmore,cramer,rucker,pierson,fontenot,rubio,goldstein,elkins,wills,novak,hickey,worley,gorman,katz,dickinson,broussard,woodruff,crow,britton,nance,lehman,bingham,zuniga,whaley,shafer,coffman,steward,delarosa,neely,mata,davila,mccabe,kessler,hinkle,welsh,pagan,goldberg,goins,crouch,cuevas,quinones,mcdermott,hendrickson,samuels,denton,bergeron,ivey,locke,haines,snell,hoskins,byrne,arias,corbin,beltran,chappell,downey,dooley,tuttle,couch,payton,mcelroy,crockett,groves,cartwright,dickey,mcgill,dubois,muniz,tolbert,dempsey,cisneros,sewell,latham,vigil,tapia,rainey,norwood,stroud,meade,tipton,kuhn,hilliard,bonilla,teague,gunn,greenwood,correa,reece,pineda,phipps,frey,kaiser,ames,gunter,schmitt,milligan,espinosa,bowden,vickers,lowry,pritchard,costello,piper,mcclellan,lovell,sheehan,hatch,dobson,singh,jeffries,hollingsworth,sorensen,meza,fink,donnelly,burrell,tomlinson,colbert,billings,ritchie,helton,sutherland,peoples,mcqueen,thomason,givens,crocker,vogel,robison,dunham,coker,swartz,keys,ladner,richter,hargrove,edmonds,brantley,albright,murdock,boswell,muller,quintero,padgett,kenney,daly,connolly,inman,quintana,lund,barnard,villegas,simons,huggins,tidwell,sanderson,bullard,mcclendon,duarte,draper,marrero,dwyer,abrams,stover,goode,fraser,crews,bernal,godwin,conklin,mcneal,baca,esparza,crowder,bower,brewster,mcneill,rodrigues,leal,coates,raines,mccain,mccord,miner,holbrook,swift,dukes,carlisle,aldridge,ackerman,starks,ricks,holliday,ferris,hairston,sheffield,lange,fountain,doss,betts,kaplan,carmichael,bloom,ruffin,penn,kern,bowles,sizemore,larkin,dupree,seals,metcalf,hutchison,henley,farr,mccauley,hankins,gustafson,curran,waddell,ramey,cates,pollock,cummins,messer,heller,funk,cornett,palacios,galindo,cano,hathaway,pham,enriquez,salgado,pelletier,painter,wiseman,blount,feliciano,houser,doherty,mead,mcgraw,swan,capps,blanco,blackmon,thomson,mcmanus,burkett,gleason,dickens,cormier,voss,rushing,rosenberg,hurd,dumas,benitez,arellano,marin,caudill,bragg,jaramillo,huerta,gipson,colvin,biggs,vela,platt,cassidy,tompkins,mccollum,dolan,daley,crump,sneed,kilgore,grove,grimm,davison,brunson,prater,marcum,devine,dodge,stratton,rosas,choi,tripp,ledbetter,hightower,feldman,epps,yeager,posey,scruggs,cope,stubbs,richey,overton,trotter,sprague,cordero,butcher,stiles,burgos,woodson,horner,bassett,purcell,haskins,akins,ziegler,spaulding,hadley,grubbs,sumner,murillo,zavala,shook,lockwood,driscoll,dahl,thorpe,redmond,putnam,mcwilliams,mcrae,romano,joiner,sadler,hedrick,hager,hagen,fitch,coulter,thacker,mansfield,langston,guidry,ferreira,corley,conn,rossi,lackey,baez,saenz,mcnamara,mcmullen,mckenna,mcdonough,link,engel,browne,roper,peacock,eubanks,drummond,stringer,pritchett,parham,mims,landers,grayson,schafer,egan,timmons,ohara,keen,hamlin,finn,cortes,mcnair,nadeau,moseley,michaud,rosen,oakes,kurtz,jeffers,calloway,beal,bautista,winn,suggs,stern,stapleton,lyles,laird,montano,dawkins,hagan,goldman,bryson,barajas,lovett,segura,metz,lockett,langford,hinson,eastman,hooks,smallwood,shapiro,crowell,whalen,triplett,chatman,aldrich,cahill,youngblood,ybarra,stallings,sheets,reeder,connelly,bateman,abernathy,winkler,wilkes,masters,hackett,granger,gillis,schmitz,sapp,napier,souza,lanier,gomes,weir,otero,ledford,burroughs,babcock,ventura,siegel,dugan,bledsoe,atwood,wray,varner,spangler,anaya,staley,kraft,fournier,belanger,wolff,thorne,bynum,burnette,boykin,swenson,purvis,pina,khan,duvall,darby,xiong,kauffman,healy,engle,benoit,valle,steiner,spicer,shaver,randle,lundy,chin,calvert,staton,neff,kearney,darden,oakley,medeiros,mccracken,crenshaw,perdue,dill,whittaker,tobin,washburn,hogue,goodrich,easley,bravo,dennison,shipley,kerns,jorgensen,crain,villalobos,maurer,longoria,keene,coon,witherspoon,staples,pettit,kincaid,eason,madrid,echols,lusk,stahl,currie,thayer,shultz,mcnally,seay,maher,gagne,barrow,nava,moreland,honeycutt,hearn,diggs,caron,whitten,westbrook,stovall,ragland,munson,meier,looney,kimble,jolly,hobson,goddard,culver,burr,presley,negron,connell,tovar,huddleston,ashby,salter,root,pendleton,oleary,nickerson,myrick,judd,jacobsen,bain,adair,starnes,matos,busby,herndon,hanley,bellamy,doty,bartley,yazzie,rowell,parson,gifford,cullen,christiansen,benavides,barnhart,talbot,mock,crandall,connors,bonds,whitt,gage,bergman,arredondo,addison,lujan,dowdy,jernigan,huynh,bouchard,dutton,rhoades,ouellette,kiser,herrington,hare,blackman,babb,allred,rudd,paulson,ogden,koenig,geiger,begay,parra,lassiter,hawk,esposito,waldron,ransom,prather,chacon,vick,sands,roark,parr,mayberry,greenberg,coley,bruner,whitman,skaggs,shipman,leary,hutton,romo,medrano,ladd,kruse,askew,schulz,alfaro,tabor,mohr,gallo,bermudez,pereira,bliss,reaves,flint,comer,woodall,naquin,guevara,delong,carrier,pickens,tilley,schaffer,knutson,fenton,doran,vogt,vann,prescott,mclain,landis,corcoran,zapata,hyatt,hemphill,faulk,dove,boudreaux,aragon,whitlock,trejo,tackett,shearer,saldana,hanks,mckinnon,koehler,bourgeois,keyes,goodson,foote,lunsford,goldsmith,flood,winslow,sams,reagan,mccloud,hough,esquivel,naylor,loomis,coronado,ludwig,braswell,bearden,huang,fagan,ezell,edmondson,cronin,nunn,lemon,guillory,grier,dubose,traylor,ryder,dobbins,coyle,aponte,whitmore,smalls,rowan,malloy,cardona,braxton,borden,humphries,carrasco,ruff,metzger,huntley,hinojosa,finney,madsen,ernst,dozier,burkhart,bowser,peralta,daigle,whittington,sorenson,saucedo,roche,redding,fugate,avalos,waite,lind,huston,hawthorne,hamby,boyles,boles,regan,faust,crook,beam,barger,hinds,gallardo,willoughby,willingham,eckert,busch,zepeda,worthington,tinsley,hoff,hawley,carmona,varela,rector,newcomb,kinsey,dube,whatley,ragsdale,bernstein,becerra,yost,mattson,felder,cheek,handy,grossman,gauthier,escobedo,braden,beckman,mott,hillman,flaherty,dykes,stockton,stearns,lofton,coats,cavazos,beavers,barrios,tang,mosher,cardwell,coles,burnham,weller,lemons,beebe,aguilera,parnell,harman,couture,alley,schumacher,redd,dobbs,blum,blalock,merchant,ennis,denson,cottrell,brannon,bagley,aviles,watt,sousa,rosenthal,rooney,dietz,blank,paquette,mcclelland,duff,velasco,lentz,grubb,burrows,barbour,ulrich,shockley,rader,beyer,mixon,layton,altman,weathers,stoner,squires,shipp,priest,lipscomb,cutler,caballero,zimmer,willett,thurston,storey,medley,epperson,shah,mcmillian,baggett,torrez,hirsch,dent,poirier,peachey,farrar,creech,barth,trimble,dupre,albrecht,sample,lawler,crisp,conroy,wetzel,nesbitt,murry,jameson,wilhelm,patten,minton,matson,kimbrough,guinn,croft,toth,pulliam,nugent,newby,littlejohn,dias,canales,bernier,baron,singletary,renteria,pruett,mchugh,mabry,landrum,brower,stoddard,cagle,stjohn,scales,kohler,kellogg,hopson,gant,tharp,gann,zeigler,pringle,hammons,fairchild,deaton,chavis,carnes,rowley,matlock,kearns,irizarry,carrington,starkey,lopes,jarrell,craven,baum,littlefield,linn,humphreys,etheridge,cuellar,chastain,bundy,speer,skelton,quiroz,pyle,portillo,ponder,moulton,machado,killian,hutson,hitchcock,dowling,cloud,burdick,spann,pedersen,levin,leggett,hayward,dietrich,beaulieu,barksdale,wakefield,snowden,briscoe,bowie,berman,ogle,mcgregor,laughlin,helm,burden,wheatley,schreiber,pressley,parris,alaniz,agee,swann,snodgrass,schuster,radford,monk,mattingly,harp,girard,cheney,yancey,wagoner,ridley,lombardo,hudgins,gaskins,duckworth,coburn,willey,prado,newberry,magana,hammonds,elam,whipple,slade,serna,ojeda,liles,dorman,diehl,upton,reardon,michaels,goetz,eller,bauman,baer,layne,hummel,brenner,amaya,adamson,ornelas,dowell,cloutier,castellanos,wellman,saylor,orourke,moya,montalvo,kilpatrick,durbin,shell,oldham,kang,garvin,foss,branham,bartholomew,templeton,maguire,holton,rider,monahan,mccormack,beaty,anders,streeter,nieto,nielson,moffett,lankford,keating,heck,gatlin,delatorre,callaway,adcock,worrell,unger,robinette,nowak,jeter,brunner,steen,parrott,overstreet,nobles,montanez,clevenger,brinkley,trahan,quarles,pickering,pederson,jansen,grantham,gilchrist,crespo,aiken,schell,schaeffer,lorenz,leyva,harms,dyson,wallis,pease,leavitt,cheng,cavanaugh,batts,warden,seaman,rockwell,quezada,paxton,linder,houck,fontaine,durant,caruso,adler,pimentel,mize,lytle,cleary,cason,acker,switzer,isaacs,higginbotham,waterman,vandyke,stamper,sisk,shuler,riddick,mcmahan,levesque,hatton,bronson,bollinger,arnett,okeefe,gerber,gannon,farnsworth,baughman,silverman,satterfield,mccrary,kowalski,grigsby,greco,cabral,trout,rinehart,mahon,linton,gooden,curley,baugh,wyman,weiner,schwab,schuler,morrissey,mahan,bunn,thrasher,spear,waggoner,qualls,purdy,mcwhorter,mauldin,gilman,perryman,newsom,menard,martino,graf,billingsley,artis,simpkins,salisbury,quintanilla,gilliland,fraley,foust,crouse,scarborough,grissom,fultz,marlow,markham,madrigal,lawton,barfield,whiting,varney,schwarz,gooch,arce,wheat,truong,poulin,hurtado,selby,gaither,fortner,culpepper,coughlin,brinson,boudreau,bales,stepp,holm,schilling,morrell,kahn,heaton,gamez,causey,turpin,shanks,schrader,meek,isom,hardison,carranza,yanez,scroggins,schofield,runyon,ratcliff,murrell,moeller,irby,currier,butterfield,ralston,pullen,pinson,estep,carbone,hawks,ellington,casillas,spurlock,sikes,motley,mccartney,kruger,isbell,houle,burk,tomlin,quigley,neumann,lovelace,fennell,cheatham,bustamante,skidmore,hidalgo,forman,culp,bowens,betancourt,aquino,robb,milner,martel,gresham,wiles,ricketts,dowd,collazo,bostic,blakely,sherrod,kenyon,gandy,ebert,deloach,allard,sauer,robins,olivares,gillette,chestnut,bourque,paine,hite,hauser,devore,crawley,chapa,talbert,poindexter,meador,mcduffie,mattox,kraus,harkins,choate,wren,sledge,sanborn,kinder,geary,cornwell,barclay,abney,seward,rhoads,howland,fortier,benner,vines,tubbs,troutman,rapp,mccurdy,deluca,westmoreland,havens,guajardo,clary,seal,meehan,herzog,guillen,ashcraft,waugh,renner,milam,elrod,churchill,breaux,bolin,asher,windham,tirado,pemberton,nolen,noland,knott,emmons,cornish,christenson,brownlee,barbee,waldrop,pitt,olvera,lombardi,gruber,gaffney,eggleston,banda,archuleta,slone,prewitt,pfeiffer,nettles,mena,mcadams,henning,gardiner,cromwell,chisholm,burleson,vest,oglesby,mccarter,lumpkin,wofford,vanhorn,thorn,teel,swafford,stclair,stanfield,ocampo,herrmann,hannon,arsenault,roush,mcalister,hiatt,gunderson,forsythe,duggan,delvalle,cintron,wilks,weinstein,uribe,rizzo,noyes,mclendon,gurley,bethea,winstead,maples,guyton,giordano,alderman,valdes,polanco,pappas,lively,grogan,griffiths,bobo,arevalo,whitson,sowell,rendon,fernandes,farrow,benavidez,ayres,alicea,stump,smalley,seitz,schulte,gilley,gallant,canfield,wolford,omalley,mcnutt,mcnulty,mcgovern,hardman,harbin,cowart,chavarria,brink,beckett,bagwell,armstead,anglin,abreu,reynoso,krebs,jett,hoffmann,greenfield,forte,burney,broome,sisson,trammell,partridge,mace,lomax,lemieux,gossett,frantz,fogle,cooney,broughton,pence,paulsen,muncy,mcarthur,hollins,beauchamp,withers,osorio,mulligan,hoyle,dockery,cockrell,begley,amador,roby,rains,lindquist,gentile,everhart,bohannon,wylie,sommers,purnell,fortin,dunning,breeden,vail,phelan,phan,marx,cosby,colburn,boling,biddle,ledesma,gaddis,denney,chow,bueno,berrios,wicker,tolliver,thibodeaux,nagle,lavoie,fisk,crist,barbosa,reedy,locklear,kolb,himes,behrens,beckwith,weems,wahl,shorter,shackelford,rees,muse,cerda,valadez,thibodeau,saavedra,ridgeway,reiter,mchenry,majors,lachance,keaton,ferrara,clemens,blocker,applegate,needham,mojica,kuykendall,hamel,escamilla,doughty,burchett,ainsworth,vidal,upchurch,thigpen,strauss,spruill,sowers,riggins,ricker,mccombs,harlow,buffington,sotelo,olivas,negrete,morey,macon,logsdon,lapointe,bigelow,bello,westfall,stubblefield,lindley,hein,hawes,farrington,breen,birch,wilde,steed,sepulveda,reinhardt,proffitt,minter,messina,mcnabb,maier,keeler,gamboa,donohue,basham,shinn,crooks,cota,borders,bills,bachman,tisdale,tavares,schmid,pickard,gulley,fonseca,delossantos,condon,batista,wicks,wadsworth,martell,littleton,ison,haag,folsom,brumfield,broyles,brito,mireles,mcdonnell,leclair,hamblin,gough,fanning,binder,winfield,whitworth,soriano,palumbo,newkirk,mangum,hutcherson,comstock,carlin,beall,bair,wendt,watters,walling,putman,otoole,morley,mares,lemus,keener,hundley,dial,damico,billups,strother,mcfarlane,lamm,eaves,crutcher,caraballo,canty,atwell,taft,siler,rust,rawls,rawlings,prieto,mcneely,mcafee,hulsey,hackney,galvez,escalante,delagarza,crider,bandy,wilbanks,stowe,steinberg,renfro,masterson,massie,lanham,haskell,hamrick,dehart,burdette,branson,bourne,babin,aleman,worthy,tibbs,smoot,slack,paradis,mull,luce,houghton,gantt,furman,danner,christianson,burge,ashford,arndt,almeida,stallworth,shade,searcy,sager,noonan,mclemore,mcintire,maxey,lavigne,jobe,ferrer,falk,coffin,byrnes,aranda,apodaca,stamps,rounds,peek,olmstead,lewandowski,kaminski,dunaway,bruns,brackett,amato,reich,mcclung,lacroix,koontz,herrick,hardesty,flanders,cousins,cato,cade,vickery,shank,nagel,dupuis,croteau,cotter,stuckey,stine,porterfield,pauley,moffitt,knudsen,hardwick,goforth,dupont,blunt,barrows,barnhill,shull,rash,loftis,lemay,kitchens,horvath,grenier,fuchs,fairbanks,culbertson,calkins,burnside,beattie,ashworth,albertson,wertz,vaught,vallejo,turk,tuck,tijerina,sage,peterman,marroquin,marr,lantz,hoang,demarco,cone,berube,barnette,wharton,stinnett,slocum,scanlon,sander,pinto,mancuso,lima,headley,epstein,counts,clarkson,carnahan,boren,arteaga,adame,zook,whittle,whitehurst,wenzel,saxton,reddick,puente,handley,haggerty,earley,devlin,chaffin,cady,acuna,solano,sigler,pollack,pendergrass,ostrander,janes,francois,crutchfield,chamberlin,brubaker,baptiste,willson,reis,neeley,mullin,mercier,lira,layman,keeling,higdon,espinal,chapin,warfield,toledo,pulido,peebles,nagy,montague,mello,lear,jaeger,hogg,graff,furr,soliz,poore,mendenhall,mclaurin,maestas,gable,barraza,tillery,snead,pond,neill,mcculloch,mccorkle,lightfoot,hutchings,holloman,harness,dorn,bock,zielinski,turley,treadwell,stpierre,starling,somers,oswald,merrick,easterling,bivens,truitt,poston,parry,ontiveros,olivarez,moreau,medlin,lenz,knowlton,fairley,cobbs,chisolm,bannister,woodworth,toler,ocasio,noriega,neuman,moye,milburn,mcclanahan,lilley,hanes,flannery,dellinger,danielson,conti,blodgett,beers,weatherford,strain,karr,hitt,denham,custer,coble,clough,casteel,bolduc,batchelor,ammons,whitlow,tierney,staten,sibley,seifert,schubert,salcedo,mattison,laney,haggard,grooms,dees,cromer,cooks,colson,caswell,zarate,swisher,shin,ragan,pridgen,mcvey,matheny,lafleur,franz,ferraro,dugger,whiteside,rigsby,mcmurray,lehmann,jacoby,hildebrand,hendrick,headrick,goad,fincher,drury,borges,archibald,albers,woodcock,trapp,soares,seaton,monson,luckett,lindberg,kopp,keeton,healey,garvey,gaddy,fain,burchfield,wentworth,strand,stack,spooner,saucier,ricci,plunkett,pannell,ness,leger,freitas,fong,elizondo,duval,beaudoin,urbina,rickard,partin,mcgrew,mcclintock,ledoux,forsyth,faison,devries,bertrand,wasson,tilton,scarbrough,leung,irvine,garber,denning,corral,colley,castleberry,bowlin,bogan,beale,baines,trice,rayburn,parkinson,nunes,mcmillen,leahy,kimmel,higgs,fulmer,carden,bedford,taggart,spearman,prichard,morrill,koonce,heinz,hedges,guenther,grice,findley,dover,creighton,boothe,bayer,arreola,vitale,valles,raney,osgood,hanlon,burley,bounds,worden,weatherly,vetter,tanaka,stiltner,nevarez,mosby,montero,melancon,harter,hamer,goble,gladden,gist,ginn,akin,zaragoza,tarver,sammons,royster,oreilly,muir,morehead,luster,kingsley,kelso,grisham,glynn,baumann,alves,yount,tamayo,paterson,oates,menendez,longo,hargis,gillen,desantis,conover,breedlove,sumpter,scherer,rupp,reichert,heredia,creel,cohn,clemmons,casas,bickford,belton,bach,williford,whitcomb,tennant,sutter,stull,mccallum,langlois,keel,keegan,dangelo,dancy,damron,clapp,clanton,bankston,oliveira,mintz,mcinnis,martens,mabe,laster,jolley,hildreth,hefner,glaser,duckett,demers,brockman,blais,alcorn,agnew,toliver,tice,seeley,najera,musser,mcfall,laplante,galvin,fajardo,doan,coyne,copley,clawson,cheung,barone,wynne,woodley,tremblay,stoll,sparrow,sparkman,schweitzer,sasser,samples,roney,legg,heim,farias,colwell,christman,bratcher,winchester,upshaw,southerland,sorrell,sells,mccloskey,martindale,luttrell,loveless,lovejoy,linares,latimer,embry,coombs,bratton,bostick,venable,tuggle,toro,staggs,sandlin,jefferies,heckman,griffis,crayton,clem,browder,thorton,sturgill,sprouse,royer,rousseau,ridenour,pogue,perales,peeples,metzler,mesa,mccutcheon,mcbee,hornsby,heffner,corrigan,armijo,plante,peyton,paredes,macklin,hussey,hodgson,granados,frias,becnel,batten,almanza,turney,teal,sturgeon,meeker,mcdaniels,limon,keeney,hutto,holguin,gorham,fishman,fierro,blanchette,rodrigue,reddy,osburn,oden,lerma,kirkwood,keefer,haugen,hammett,chalmers,brinkman,baumgartner,zhang,valerio,tellez,steffen,shumate,sauls,ripley,kemper,guffey,evers,craddock,carvalho,blaylock,banuelos,balderas,wheaton,turnbull,shuman,pointer,mosier,mccue,ligon,kozlowski,johansen,ingle,herr,briones,snipes,rickman,pipkin,pantoja,orosco,moniz,lawless,kunkel,hibbard,galarza,enos,bussey,schott,salcido,perreault,mcdougal,mccool,haight,garris,easton,conyers,atherton,wimberly,utley,spellman,smithson,slagle,ritchey,rand,petit,osullivan,oaks,nutt,mcvay,mccreary,mayhew,knoll,jewett,harwood,cardoza,ashe,arriaga,zeller,wirth,whitmire,stauffer,rountree,redden,mccaffrey,martz,larose,langdon,humes,gaskin,faber,devito,cass,almond,wingfield,wingate,villareal,tyner,smothers,severson,reno,pennell,maupin,leighton,janssen,hassell,hallman,halcomb,folse,fitzsimmons,fahey,cranford,bolen,battles,battaglia,wooldridge,trask,rosser,regalado,mcewen,keefe,fuqua,echevarria,caro,boynton,andrus,viera,vanmeter,taber,spradlin,seibert,provost,prentice,oliphant,laporte,hwang,hatchett,hass,greiner,freedman,covert,chilton,byars,wiese,venegas,swank,shrader,roberge,mullis,mortensen,mccune,marlowe,kirchner,keck,isaacson,hostetler,halverson,gunther,griswold,fenner,durden,blackwood,ahrens,sawyers,savoy,nabors,mcswain,mackay,lavender,lash,labbe,jessup,fullerton,cruse,crittenden,correia,centeno,caudle,canady,callender,alarcon,ahern,winfrey,tribble,salley,roden,musgrove,minnick,fortenberry,carrion,bunting,batiste,whited,underhill,stillwell,rauch,pippin,perrin,messenger,mancini,lister,kinard,hartmann,fleck,wilt,treadway,thornhill,spalding,rafferty,pitre,patino,ordonez,linkous,kelleher,homan,galbraith,feeney,curtin,coward,camarillo,buss,bunnell,bolt,beeler,autry,alcala,witte,wentz,stidham,shively,nunley,meacham,martins,lemke,lefebvre,hynes,horowitz,hoppe,holcombe,dunne,derr,cochrane,brittain,bedard,beauregard,torrence,strunk,soria,simonson,shumaker,scoggins,oconner,moriarty,kuntz,ives,hutcheson,horan,hales,garmon,fitts,bohn,atchison,wisniewski,vanwinkle,sturm,sallee,prosser,moen,lundberg,kunz,kohl,keane,jorgenson,jaynes,funderburk,freed,durr,creamer,cosgrove,batson,vanhoose,thomsen,teeter,smyth,redmon,orellana,maness,heflin,goulet,frick,forney,bunker,asbury,aguiar,talbott,southard,mowery,mears,lemmon,krieger,hickson,elston,duong,delgadillo,dayton,dasilva,conaway,catron,bruton,bradbury,bordelon,bivins,bittner,bergstrom,beals,abell,whelan,tejada,pulley,pino,norfleet,nealy,maes,loper,gatewood,frierson,freund,finnegan,cupp,covey,catalano,boehm,bader,yoon,walston,tenney,sipes,rawlins,medlock,mccaskill,mccallister,marcotte,maclean,hughey,henke,harwell,gladney,gilson,chism,caskey,brandenburg,baylor,villasenor,veal,thatcher,stegall,petrie,nowlin,navarrete,lombard,loftin,lemaster,kroll,kovach,kimbrell,kidwell,hershberger,fulcher,cantwell,bustos,boland,bobbitt,binkley,wester,weis,verdin,tong,tiller,sisco,sharkey,seymore,rosenbaum,rohr,quinonez,pinkston,malley,logue,lessard,lerner,lebron,krauss,klinger,halstead,haller,getz,burrow,alger,shores,pfeifer,perron,nelms,munn,mcmaster,mckenney,manns,knudson,hutchens,huskey,goebel,flagg,cushman,click,castellano,carder,bumgarner,wampler,spinks,robson,neel,mcreynolds,mathias,maas,loera,jenson,florez,coons,buckingham,brogan,berryman,wilmoth,wilhite,thrash,shephard,seidel,schulze,roldan,pettis,obryan,maki,mackie,hatley,frazer,fiore,chesser,bottoms,bisson,benefield,allman,wilke,trudeau,timm,shifflett,mundy,milliken,mayers,leake,kohn,huntington,horsley,hermann,guerin,fryer,frizzell,foret,flemming,fife,criswell,carbajal,bozeman,boisvert,angulo,wallen,tapp,silvers,ramsay,oshea,orta,moll,mckeever,mcgehee,linville,kiefer,ketchum,howerton,groce,gass,fusco,corbitt,betz,bartels,amaral,aiello,weddle,sperry,seiler,runyan,raley,overby,osteen,olds,mckeown,matney,lauer,lattimore,hindman,hartwell,fredrickson,fredericks,espino,clegg,carswell,cambell,burkholder,woodbury,welker,totten,thornburg,theriault,stitt,stamm,stackhouse,scholl,saxon,rife,razo,quinlan,pinkerton,olivo,nesmith,nall,mattos,lafferty,justus,giron,geer,fielder,drayton,dortch,conners,conger,boatwright,billiot,barden,armenta,tibbetts,steadman,slattery,rinaldi,raynor,pinckney,pettigrew,milne,matteson,halsey,gonsalves,fellows,durand,desimone,cowley,cowles,brill,barham,barela,barba,ashmore,withrow,valenti,tejeda,spriggs,sayre,salerno,peltier,peel,merriman,matheson,lowman,lindstrom,hyland,giroux,earls,dugas,dabney,collado,briseno,baxley,whyte,wenger,vanover,vanburen,thiel,schindler,schiller,rigby,pomeroy,passmore,marble,manzo,mahaffey,lindgren,laflamme,greathouse,fite,calabrese,bayne,yamamoto,wick,townes,thames,reinhart,peeler,naranjo,montez,mcdade,mast,markley,marchand,leeper,kellum,hudgens,hennessey,hadden,gainey,coppola,borrego,bolling,beane,ault,slaton,pape,null,mulkey,lightner,langer,hillard,ethridge,enright,derosa,baskin,weinberg,turman,somerville,pardo,noll,lashley,ingraham,hiller,hendon,glaze,cothran,cooksey,conte,carrico,abner,wooley,swope,summerlin,sturgis,sturdivant,stott,spurgeon,spillman,speight,roussel,popp,nutter,mckeon,mazza,magnuson,lanning,kozak,jankowski,heyward,forster,corwin,callaghan,bays,wortham,usher,theriot,sayers,sabo,poling,loya,lieberman,laroche,labelle,howes,harr,garay,fogarty,everson,durkin,dominquez,chaves,chambliss,witcher,vieira,vandiver,terrill,stoker,schreiner,moorman,liddell,lawhorn,krug,irons,hylton,hollenbeck,herrin,hembree,goolsby,goodin,gilmer,foltz,dinkins,daughtry,caban,brim,briley,bilodeau,wyant,vergara,tallent,swearingen,stroup,scribner,quillen,pitman,mccants,maxfield,martinson,holtz,flournoy,brookins,brody,baumgardner,straub,sills,roybal,roundtree,oswalt,mcgriff,mcdougall,mccleary,maggard,gragg,gooding,godinez,doolittle,donato,cowell,cassell,bracken,appel,zambrano,reuter,perea,nakamura,monaghan,mickens,mcclinton,mcclary,marler,kish,judkins,gilbreath,freese,flanigan,felts,erdmann,dodds,chew,brownell,boatright,barreto,slayton,sandberg,saldivar,pettway,odum,narvaez,moultrie,montemayor,merrell,lees,keyser,hoke,hardaway,hannan,gilbertson,fogg,dumont,deberry,coggins,buxton,bucher,broadnax,beeson,araujo,appleton,amundson,aguayo,ackley,yocum,worsham,shivers,sanches,sacco,robey,rhoden,pender,ochs,mccurry,madera,luong,knotts,jackman,heinrich,hargrave,gault,comeaux,chitwood,caraway,boettcher,bernhardt,barrientos,zink,wickham,whiteman,thorp,stillman,settles,schoonover,roque,riddell,pilcher,phifer,novotny,macleod,hardee,haase,grider,doucette,clausen,bevins,beamon,badillo,tolley,tindall,soule,snook,seale,pinkney,pellegrino,nowell,nemeth,mondragon,mclane,lundgren,ingalls,hudspeth,hixson,gearhart,furlong,downes,dibble,deyoung,cornejo,camara,brookshire,boyette,wolcott,surratt,sellars,segal,salyer,reeve,rausch,labonte,haro,gower,freeland,fawcett,eads,driggers,donley,collett,bromley,boatman,ballinger,baldridge,volz,trombley,stonge,shanahan,rivard,rhyne,pedroza,matias,jamieson,hedgepeth,hartnett,estevez,eskridge,denman,chiu,chinn,catlett,carmack,buie,bechtel,beardsley,bard,ballou,ulmer,skeen,robledo,rincon,reitz,piazza,munger,moten,mcmichael,loftus,ledet,kersey,groff,fowlkes,crumpton,clouse,bettis,villagomez,timmerman,strom,santoro,roddy,penrod,musselman,macpherson,leboeuf,harless,haddad,guido,golding,fulkerson,fannin,dulaney,dowdell,cottle,ceja,cate,bosley,benge,albritton,voigt,trowbridge,soileau,seely,rohde,pearsall,paulk,orth,nason,mota,mcmullin,marquardt,madigan,hoag,gillum,gabbard,fenwick,danforth,cushing,cress,creed,cazares,bettencourt,barringer,baber,stansberry,schramm,rutter,rivero,oquendo,necaise,mouton,montenegro,miley,mcgough,marra,macmillan,lamontagne,jasso,horst,hetrick,heilman,gaytan,gall,fortney,dingle,desjardins,dabbs,burbank,brigham,breland,beaman,arriola,yarborough,wallin,toscano,stowers,reiss,pichardo,orton,michels,mcnamee,mccrory,leatherman,kell,keister,horning,hargett,guay,ferro,deboer,dagostino,carper,blanks,beaudry,towle,tafoya,stricklin,strader,soper,sonnier,sigmon,schenk,saddler,pedigo,mendes,lunn,lohr,lahr,kingsbury,jarman,hume,holliman,hofmann,haworth,harrelson,hambrick,flick,edmunds,dacosta,crossman,colston,chaplin,carrell,budd,weiler,waits,valentino,trantham,tarr,solorio,roebuck,powe,plank,pettus,pagano,mink,luker,leathers,joslin,hartzell,gambrell,cepeda,carty,caputo,brewington,bedell,ballew,applewhite,warnock,walz,urena,tudor,reel,pigg,parton,mickelson,meagher,mclellan,mcculley,mandel,leech,lavallee,kraemer,kling,kipp,kehoe,hochstetler,harriman,gregoire,grabowski,gosselin,gammon,fancher,edens,desai,brannan,armendariz,woolsey,whitehouse,whetstone,ussery,towne,testa,tallman,studer,strait,steinmetz,sorrells,sauceda,rolfe,paddock,mitchem,mcginn,mccrea,lovato,hazen,gilpin,gaynor,fike,devoe,delrio,curiel,burkhardt,bode,backus,zinn,watanabe,wachter,vanpelt,turnage,shaner,schroder,sato,riordan,quimby,portis,natale,mckoy,mccown,kilmer,hotchkiss,hesse,halbert,gwinn,godsey,delisle,chrisman,canter,arbogast,angell,acree,yancy,woolley,wesson,weatherspoon,trainor,stockman,spiller,sipe,rooks,reavis,propst,porras,neilson,mullens,loucks,llewellyn,kumar,koester,klingensmith,kirsch,kester,honaker,hodson,hennessy,helmick,garrity,garibay,drain,casarez,callis,botello,aycock,avant,wingard,wayman,tully,theisen,szymanski,stansbury,segovia,rainwater,preece,pirtle,padron,mincey,mckelvey,mathes,larrabee,kornegay,klug,ingersoll,hecht,germain,eggers,dykstra,deering,decoteau,deason,dearing,cofield,carrigan,bonham,bahr,aucoin,appleby,almonte,yager,womble,wimmer,weimer,vanderpool,stancil,sprinkle,romine,remington,pfaff,peckham,olivera,meraz,maze,lathrop,koehn,hazelton,halvorson,hallock,haddock,ducharme,dehaven,caruthers,brehm,bosworth,bost,bias,beeman,basile,bane,aikens,wold,walther,tabb,suber,strawn,stocker,shirey,schlosser,riedel,rembert,reimer,pyles,peele,merriweather,letourneau,latta,kidder,hixon,hillis,hight,herbst,henriquez,haygood,hamill,gabel,fritts,eubank,dawes,correll,bushey,buchholz,brotherton,botts,barnwell,auger,atchley,westphal,veilleux,ulloa,stutzman,shriver,ryals,pilkington,moyers,marrs,mangrum,maddux,lockard,laing,kuhl,harney,hammock,hamlett,felker,doerr,depriest,carrasquillo,carothers,bogle,bischoff,bergen,albanese,wyckoff,vermillion,vansickle,thibault,tetreault,stickney,shoemake,ruggiero,rawson,racine,philpot,paschal,mcelhaney,mathison,legrand,lapierre,kwan,kremer,jiles,hilbert,geyer,faircloth,ehlers,egbert,desrosiers,dalrymple,cotten,cashman,cadena,boardman,alcaraz,wyrick,therrien,tankersley,strickler,puryear,plourde,pattison,pardue,mcginty,mcevoy,landreth,kuhns,koon,hewett,giddens,emerick,eades,deangelis,cosme,ceballos,birdsong,benham,bemis,armour,anguiano,welborn,tsosie,storms,shoup,sessoms,samaniego,rood,rojo,rhinehart,raby,northcutt,myer,munguia,morehouse,mcdevitt,mallett,lozada,lemoine,kuehn,hallett,grim,gillard,gaylor,garman,gallaher,feaster,faris,darrow,dardar,coney,carreon,braithwaite,boylan,boyett,bixler,bigham,benford,barragan,barnum,zuber,wyche,westcott,vining,stoltzfus,simonds,shupe,sabin,ruble,rittenhouse,richman,perrone,mulholland,millan,lomeli,kite,jemison,hulett,holler,hickerson,herold,hazelwood,griffen,gause,forde,eisenberg,dilworth,charron,chaisson,bristow,breunig,brace,boutwell,bentz,belk,bayless,batchelder,baran,baeza,zimmermann,weathersby,volk,toole,theis,tedesco,searle,schenck,satterwhite,ruelas,rankins,partida,nesbit,morel,menchaca,levasseur,kaylor,johnstone,hulse,hollar,hersey,harrigan,harbison,guyer,gish,giese,gerlach,geller,geisler,falcone,elwell,doucet,deese,darr,corder,chafin,byler,bussell,burdett,brasher,bowe,bellinger,bastian,barner,alleyne,wilborn,weil,wegner,tatro,spitzer,smithers,schoen,resendez,parisi,overman,obrian,mudd,mahler,maggio,lindner,lalonde,lacasse,laboy,killion,kahl,jessen,jamerson,houk,henshaw,gustin,graber,durst,duenas,davey,cundiff,conlon,colunga,coakley,chiles,capers,buell,bricker,bissonnette,bartz,bagby,zayas,volpe,treece,toombs,thom,terrazas,swinney,skiles,silveira,shouse,senn,ramage,moua,langham,kyles,holston,hoagland,herd,feller,denison,carraway,burford,bickel,ambriz,abercrombie,yamada,weidner,waddle,verduzco,thurmond,swindle,schrock,sanabria,rosenberger,probst,peabody,olinger,nazario,mccafferty,mcbroom,mcabee,mazur,matherne,mapes,leverett,killingsworth,heisler,griego,gosnell,frankel,franke,ferrante,fenn,ehrlich,christopherso,chasse,caton,brunelle,bloomfield,babbitt,azevedo,abramson,ables,abeyta,youmans,wozniak,wainwright,stowell,smitherman,samuelson,runge,rothman,rosenfeld,peake,owings,olmos,munro,moreira,leatherwood,larkins,krantz,kovacs,kizer,kindred,karnes,jaffe,hubbell,hosey,hauck,goodell,erdman,dvorak,doane,cureton,cofer,buehler,bierman,berndt,banta,abdullah,warwick,waltz,turcotte,torrey,stith,seger,sachs,quesada,pinder,peppers,pascual,paschall,parkhurst,ozuna,oster,nicholls,lheureux,lavalley,kimura,jablonski,haun,gourley,gilligan,croy,cotto,cargill,burwell,burgett,buckman,booher,adorno,wrenn,whittemore,urias,szabo,sayles,saiz,rutland,rael,pharr,pelkey,ogrady,nickell,musick,moats,mather,massa,kirschner,kieffer,kellar,hendershot,gott,godoy,gadson,furtado,fiedler,erskine,dutcher,dever,daggett,chevalier,brake,ballesteros,amerson,wingo,waldon,trott,silvey,showers,schlegel,ritz,pepin,pelayo,parsley,palermo,moorehead,mchale,lett,kocher,kilburn,iglesias,humble,hulbert,huckaby,hartford,hardiman,gurney,grigg,grasso,goings,fillmore,farber,depew,dandrea,cowen,covarrubias,burrus,bracy,ardoin,thompkins,standley,radcliffe,pohl,persaud,parenteau,pabon,newson,newhouse,napolitano,mulcahy,malave,keim,hooten,hernandes,heffernan,hearne,greenleaf,glick,fuhrman,fetter,faria,dishman,dickenson,crites,criss,clapper,chenault,castor,casto,bugg,bove,bonney,anderton,allgood,alderson,woodman,warrick,toomey,tooley,tarrant,summerville,stebbins,sokol,searles,schutz,schumann,scheer,remillard,raper,proulx,palmore,monroy,messier,melo,melanson,mashburn,manzano,lussier,jenks,huneycutt,hartwig,grimsley,fulk,fielding,fidler,engstrom,eldred,dantzler,crandell,calder,brumley,breton,brann,bramlett,boykins,bianco,bancroft,almaraz,alcantar,whitmer,whitener,welton,vineyard,rahn,paquin,mizell,mcmillin,mckean,marston,maciel,lundquist,liggins,lampkin,kranz,koski,kirkham,jiminez,hazzard,harrod,graziano,grammer,gendron,garrido,fordham,englert,dryden,demoss,deluna,crabb,comeau,brummett,blume,benally,wessel,vanbuskirk,thorson,stumpf,stockwell,reams,radtke,rackley,pelton,niemi,newland,nelsen,morrissette,miramontes,mcginley,mccluskey,marchant,luevano,lampe,lail,jeffcoat,infante,hinman,gaona,eady,desmarais,decosta,dansby,cisco,choe,breckenridge,bostwick,borg,bianchi,alberts,wilkie,whorton,vargo,tait,soucy,schuman,ousley,mumford,lippert,leath,lavergne,laliberte,kirksey,kenner,johnsen,izzo,hiles,gullett,greenwell,gaspar,galbreath,gaitan,ericson,delapaz,croom,cottingham,clift,bushnell,bice,beason,arrowood,waring,voorhees,truax,shreve,shockey,schatz,sandifer,rubino,rozier,roseberry,pieper,peden,nester,nave,murphey,malinowski,macgregor,lafrance,kunkle,kirkman,hipp,hasty,haddix,gervais,gerdes,gamache,fouts,fitzwater,dillingham,deming,deanda,cedeno,cannady,burson,bouldin,arceneaux,woodhouse,whitford,wescott,welty,weigel,torgerson,toms,surber,sunderland,sterner,setzer,riojas,pumphrey,puga,metts,mcgarry,mccandless,magill,lupo,loveland,llamas,leclerc,koons,kahler,huss,holbert,heintz,haupt,grimmett,gaskill,ellingson,dorr,dingess,deweese,desilva,crossley,cordeiro,converse,conde,caldera,cairns,burmeister,burkhalter,brawner,bott,youngs,vierra,valladares,shrum,shropshire,sevilla,rusk,rodarte,pedraza,nino,merino,mcminn,markle,mapp,lajoie,koerner,kittrell,kato,hyder,hollifield,heiser,hazlett,greenwald,fant,eldredge,dreher,delafuente,cravens,claypool,beecher,aronson,alanis,worthen,wojcik,winger,whitacre,valverde,valdivia,troupe,thrower,swindell,suttles,stroman,spires,slate,shealy,sarver,sartin,sadowski,rondeau,rolon,rascon,priddy,paulino,nolte,munroe,molloy,mciver,lykins,loggins,lenoir,klotz,kempf,hupp,hollowell,hollander,haynie,harkness,harker,gottlieb,frith,eddins,driskell,doggett,densmore,charette,cassady,byrum,burcham,buggs,benn,whitted,warrington,vandusen,vaillancourt,steger,siebert,scofield,quirk,purser,plumb,orcutt,nordstrom,mosely,michalski,mcphail,mcdavid,mccraw,marchese,mannino,lefevre,largent,lanza,kress,isham,hunsaker,hoch,hildebrandt,guarino,grijalva,graybill,fick,ewell,ewald,cusick,crumley,coston,cathcart,carruthers,bullington,bowes,blain,blackford,barboza,yingling,wert,weiland,varga,silverstein,sievers,shuster,shumway,runnels,rumsey,renfroe,provencher,polley,mohler,middlebrooks,kutz,koster,groth,glidden,fazio,deen,chipman,chenoweth,champlin,cedillo,carrero,carmody,buckles,brien,boutin,bosch,berkowitz,altamirano,wilfong,wiegand,waites,truesdale,toussaint,tobey,tedder,steelman,sirois,schnell,robichaud,richburg,plumley,pizarro,piercy,ortego,oberg,neace,mertz,mcnew,matta,lapp,lair,kibler,howlett,hollister,hofer,hatten,hagler,falgoust,engelhardt,eberle,dombrowski,dinsmore,daye,casares,braud,balch,autrey,wendel,tyndall,strobel,stoltz,spinelli,serrato,reber,rathbone,palomino,nickels,mayle,mathers,mach,loeffler,littrell,levinson,leong,lemire,lejeune,lazo,lasley,koller,kennard,hoelscher,hintz,hagerman,greaves,fore,eudy,engler,corrales,cordes,brunet,bidwell,bennet,tyrrell,tharpe,swinton,stribling,southworth,sisneros,savoie,samons,ruvalcaba,ries,ramer,omara,mosqueda,millar,mcpeak,macomber,luckey,litton,lehr,lavin,hubbs,hoard,hibbs,hagans,futrell,exum,evenson,culler,carbaugh,callen,brashear,bloomer,blakeney,bigler,addington,woodford,unruh,tolentino,sumrall,stgermain,smock,sherer,rayner,pooler,oquinn,nero,mcglothlin,linden,kowal,kerrigan,ibrahim,harvell,hanrahan,goodall,geist,fussell,fung,ferebee,eley,eggert,dorsett,dingman,destefano,colucci,clemmer,burnell,brumbaugh,boddie,berryhill,avelar,alcantara,winder,winchell,vandenberg,trotman,thurber,thibeault,stlouis,stilwell,sperling,shattuck,sarmiento,ruppert,rumph,renaud,randazzo,rademacher,quiles,pearman,palomo,mercurio,lowrey,lindeman,lawlor,larosa,lander,labrecque,hovis,holifield,henninger,hawkes,hartfield,hann,hague,genovese,garrick,fudge,frink,eddings,dinh,cribbs,calvillo,bunton,brodeur,bolding,blanding,agosto,zahn,wiener,trussell,tello,teixeira,speck,sharma,shanklin,sealy,scanlan,santamaria,roundy,robichaux,ringer,rigney,prevost,polson,nord,moxley,medford,mccaslin,mcardle,macarthur,lewin,lasher,ketcham,keiser,heine,hackworth,grose,grizzle,gillman,gartner,frazee,fleury,edson,edmonson,derry,cronk,conant,burress,burgin,broom,brockington,bolick,boger,birchfield,billington,baily,bahena,armbruster,anson,yoho,wilcher,tinney,timberlake,thielen,sutphin,stultz,sikora,serra,schulman,scheffler,santillan,rego,preciado,pinkham,mickle,lomas,lizotte,lent,kellerman,keil,johanson,hernadez,hartsfield,haber,gorski,farkas,eberhardt,duquette,delano,cropper,cozart,cockerham,chamblee,cartagena,cahoon,buzzell,brister,brewton,blackshear,benfield,aston,ashburn,arruda,wetmore,weise,vaccaro,tucci,sudduth,stromberg,stoops,showalter,shears,runion,rowden,rosenblum,riffle,renfrow,peres,obryant,leftwich,lark,landeros,kistler,killough,kerley,kastner,hoggard,hartung,guertin,govan,gatling,gailey,fullmer,fulford,flatt,esquibel,endicott,edmiston,edelstein,dufresne,dressler,dickman,chee,busse,bonnett,berard,yoshida,velarde,veach,vanhouten,vachon,tolson,tolman,tennyson,stites,soler,shutt,ruggles,rhone,pegues,neese,muro,moncrief,mefford,mcphee,mcmorris,mceachern,mcclurg,mansour,mader,leija,lecompte,lafountain,labrie,jaquez,heald,hash,hartle,gainer,frisby,farina,eidson,edgerton,dyke,durrett,duhon,cuomo,cobos,cervantez,bybee,brockway,borowski,binion,beery,arguello,amaro,acton,yuen,winton,wigfall,weekley,vidrine,vannoy,tardiff,shoop,shilling,schick,safford,prendergast,pilgrim,pellerin,osuna,nissen,nalley,moller,messner,messick,merrifield,mcguinness,matherly,marcano,mahone,lemos,lebrun,jara,hoffer,herren,hecker,haws,haug,gwin,gober,gilliard,fredette,favela,echeverria,downer,donofrio,desrochers,crozier,corson,bechtold,argueta,aparicio,zamudio,westover,westerman,utter,troyer,thies,tapley,slavin,shirk,sandler,roop,rimmer,raymer,radcliff,otten,moorer,millet,mckibben,mccutchen,mcavoy,mcadoo,mayorga,mastin,martineau,marek,madore,leflore,kroeger,kennon,jimerson,hostetter,hornback,hendley,hance,guardado,granado,gowen,goodale,flinn,fleetwood,fitz,durkee,duprey,dipietro,dilley,clyburn,brawley,beckley,arana,weatherby,vollmer,vestal,tunnell,trigg,tingle,takahashi,sweatt,storer,snapp,shiver,rooker,rathbun,poisson,perrine,perri,parmer,parke,pare,papa,palmieri,midkiff,mecham,mccomas,mcalpine,lovelady,lillard,lally,knopp,kile,kiger,haile,gupta,goldsberry,gilreath,fulks,friesen,franzen,flack,findlay,ferland,dreyer,dore,dennard,deckard,debose,crim,coulombe,chancey,cantor,branton,bissell,barns,woolard,witham,wasserman,spiegel,shoffner,scholz,ruch,rossman,petry,palacio,paez,neary,mortenson,millsap,miele,menke,mckim,mcanally,martines,lemley,larochelle,klaus,klatt,kaufmann,kapp,helmer,hedge,halloran,glisson,frechette,fontana,eagan,distefano,danley,creekmore,chartier,chaffee,carillo,burg,bolinger,berkley,benz,basso,bash,zelaya,woodring,witkowski,wilmot,wilkens,wieland,verdugo,urquhart,tsai,timms,swiger,swaim,sussman,pires,molnar,mcatee,lowder,loos,linker,landes,kingery,hufford,higa,hendren,hammack,hamann,gillam,gerhardt,edelman,delk,deans,curl,constantine,cleaver,claar,casiano,carruth,carlyle,brophy,bolanos,bibbs,bessette,beggs,baugher,bartel,averill,andresen,amin,adames,valente,turnbow,swink,sublett,stroh,stringfellow,ridgway,pugliese,poteat,ohare,neubauer,murchison,mingo,lemmons,kwon,kellam,kean,jarmon,hyden,hudak,hollinger,henkel,hemingway,hasson,hansel,halter,haire,ginsberg,gillispie,fogel,flory,etter,elledge,eckman,deas,currin,crafton,coomer,colter,claxton,bulter,braddock,bowyer,binns,bellows,baskerville,barros,ansley,woolf,wight,waldman,wadley,tull,trull,tesch,stouffer,stadler,slay,shubert,sedillo,santacruz,reinke,poynter,neri,neale,mowry,moralez,monger,mitchum,merryman,manion,macdougall,litchfield,levitt,lepage,lasalle,khoury,kavanagh,karns,ivie,huebner,hodgkins,halpin,garica,eversole,dutra,dunagan,duffey,dillman,dillion,deville,dearborn,damato,courson,coulson,burdine,bousquet,bonin,bish,atencio,westbrooks,wages,vaca,toner,tillis,swett,struble,stanfill,solorzano,slusher,sipple,silvas,shults,schexnayder,saez,rodas,rager,pulver,penton,paniagua,meneses,mcfarlin,mcauley,matz,maloy,magruder,lohman,landa,lacombe,jaimes,holzer,holst,heil,hackler,grundy,gilkey,farnham,durfee,dunton,dunston,duda,dews,craver,corriveau,conwell,colella,chambless,bremer,boutte,bourassa,blaisdell,backman,babineaux,audette,alleman,towner,taveras,tarango,sullins,suiter,stallard,solberg,schlueter,poulos,pimental,owsley,okelley,moffatt,metcalfe,meekins,medellin,mcglynn,mccowan,marriott,marable,lennox,lamoureux,koss,kerby,karp,isenberg,howze,hockenberry,highsmith,hallmark,gusman,greeley,giddings,gaudet,gallup,fleenor,eicher,edington,dimaggio,dement,demello,decastro,bushman,brundage,brooker,bourg,blackstock,bergmann,beaton,banister,argo,appling,wortman,watterson,villalpando,tillotson,tighe,sundberg,sternberg,stamey,shipe,seeger,scarberry,sattler,sain,rothstein,poteet,plowman,pettiford,penland,partain,pankey,oyler,ogletree,ogburn,moton,merkel,lucier,lakey,kratz,kinser,kershaw,josephson,imhoff,hendry,hammon,frisbie,frawley,fraga,forester,eskew,emmert,drennan,doyon,dandridge,cawley,carvajal,bracey,belisle,batey,ahner,wysocki,weiser,veliz,tincher,sansone,sankey,sandstrom,rohrer,risner,pridemore,pfeffer,persinger,peery,oubre,nowicki,musgrave,murdoch,mullinax,mccary,mathieu,livengood,kyser,klink,kimes,kellner,kavanaugh,kasten,imes,hoey,hinshaw,hake,gurule,grube,grillo,geter,gatto,garver,garretson,farwell,eiland,dunford,decarlo,corso,colman,collard,cleghorn,chasteen,cavender,carlile,calvo,byerly,brogdon,broadwater,breault,bono,bergin,behr,ballenger,amick,tamez,stiffler,steinke,simmon,shankle,schaller,salmons,sackett,saad,rideout,ratcliffe,ranson,plascencia,petterson,olszewski,olney,olguin,nilsson,nevels,morelli,montiel,monge,michaelson,mertens,mcchesney,mcalpin,mathewson,loudermilk,lineberry,liggett,kinlaw,kight,jost,hereford,hardeman,halpern,halliday,hafer,gaul,friel,freitag,forsberg,evangelista,doering,dicarlo,dendy,delp,deguzman,dameron,curtiss,cosper,cauthen,bradberry,bouton,bonnell,bixby,bieber,beveridge,bedwell,barhorst,bannon,baltazar,baier,ayotte,attaway,arenas,abrego,turgeon,tunstall,thaxton,tenorio,stotts,sthilaire,shedd,seabolt,scalf,salyers,ruhl,rowlett,robinett,pfister,perlman,pepe,parkman,nunnally,norvell,napper,modlin,mckellar,mcclean,mascarenas,leibowitz,ledezma,kuhlman,kobayashi,hunley,holmquist,hinkley,hazard,hartsell,gribble,gravely,fifield,eliason,doak,crossland,carleton,bridgeman,bojorquez,boggess,auten,woosley,whiteley,wexler,twomey,tullis,townley,standridge,santoyo,rueda,riendeau,revell,pless,ottinger,nigro,nickles,mulvey,menefee,mcshane,mcloughlin,mckinzie,markey,lockridge,lipsey,knisley,knepper,kitts,kiel,jinks,hathcock,godin,gallego,fikes,fecteau,estabrook,ellinger,dunlop,dudek,countryman,chauvin,chatham,bullins,brownfield,boughton,bloodworth,bibb,baucom,barbieri,aubin,armitage,alessi,absher,abbate,zito,woolery,wiggs,wacker,tynes,tolle,telles,tarter,swarey,strode,stockdale,stalnaker,spina,schiff,saari,risley,rameriz,rakes,pettaway,penner,paulus,palladino,omeara,montelongo,melnick,mehta,mcgary,mccourt,mccollough,marchetti,manzanares,lowther,leiva,lauderdale,lafontaine,kowalczyk,knighton,joubert,jaworski,huth,hurdle,housley,hackman,gulick,gordy,gilstrap,gehrke,gebhart,gaudette,foxworth,endres,dunkle,cimino,caddell,brauer,braley,bodine,blackmore,belden,backer,ayer,andress,wisner,vuong,valliere,twigg,tavarez,strahan,steib,staub,sowder,seiber,schutt,scharf,schade,rodriques,risinger,renshaw,rahman,presnell,piatt,nieman,nevins,mcilwain,mcgaha,mccully,mccomb,massengale,macedo,lesher,kearse,jauregui,husted,hudnall,holmberg,hertel,hardie,glidewell,frausto,fassett,dalessandro,dahlgren,corum,constantino,conlin,colquitt,colombo,claycomb,cardin,buller,boney,bocanegra,biggers,benedetto,araiza,andino,albin,zorn,werth,weisman,walley,vanegas,ulibarri,towe,tedford,teasley,suttle,steffens,stcyr,squire,singley,sifuentes,shuck,schram,sass,rieger,ridenhour,rickert,richerson,rayborn,rabe,raab,pendley,pastore,ordway,moynihan,mellott,mckissick,mcgann,mccready,mauney,marrufo,lenhart,lazar,lafave,keele,kautz,jardine,jahnke,jacobo,hord,hardcastle,hageman,giglio,gehring,fortson,duque,duplessis,dicken,derosier,deitz,dalessio,cram,castleman,candelario,callison,caceres,bozarth,biles,bejarano,bashaw,avina,armentrout,alverez,acord,waterhouse,vereen,vanlandingham,strawser,shotwell,severance,seltzer,schoonmaker,schock,schaub,schaffner,roeder,rodrigez,riffe,rasberry,rancourt,railey,quade,pursley,prouty,perdomo,oxley,osterman,nickens,murphree,mounts,merida,maus,mattern,masse,martinelli,mangan,lutes,ludwick,loney,laureano,lasater,knighten,kissinger,kimsey,kessinger,honea,hollingshead,hockett,heyer,heron,gurrola,gove,glasscock,gillett,galan,featherstone,eckhardt,duron,dunson,dasher,culbreth,cowden,cowans,claypoole,churchwell,chabot,caviness,cater,caston,callan,byington,burkey,boden,beckford,atwater,archambault,alvey,alsup,whisenant,weese,voyles,verret,tsang,tessier,sweitzer,sherwin,shaughnessy,revis,remy,prine,philpott,peavy,paynter,parmenter,ovalle,offutt,nightingale,newlin,nakano,myatt,muth,mohan,mcmillon,mccarley,mccaleb,maxson,marinelli,maley,liston,letendre,kain,huntsman,hirst,hagerty,gulledge,greenway,grajeda,gorton,goines,gittens,frederickson,fanelli,embree,eichelberger,dunkin,dixson,dillow,defelice,chumley,burleigh,borkowski,binette,biggerstaff,berglund,beller,audet,arbuckle,allain,alfano,youngman,wittman,weintraub,vanzant,vaden,twitty,stollings,standifer,sines,shope,scalise,saville,posada,pisano,otte,nolasco,mier,merkle,mendiola,melcher,mejias,mcmurry,mccalla,markowitz,manis,mallette,macfarlane,lough,looper,landin,kittle,kinsella,kinnard,hobart,helman,hellman,hartsock,halford,hage,gordan,glasser,gayton,gattis,gastelum,gaspard,frisch,fitzhugh,eckstein,eberly,dowden,despain,crumpler,crotty,cornelison,chouinard,chamness,catlin,cann,bumgardner,budde,branum,bradfield,braddy,borst,birdwell,bazan,banas,bade,arango,ahearn,addis,zumwalt,wurth,wilk,widener,wagstaff,urrutia,terwilliger,tart,steinman,staats,sloat,rives,riggle,revels,reichard,prickett,poff,pitzer,petro,pell,northrup,nicks,moline,mielke,maynor,mallon,magness,lingle,lindell,lieb,lesko,lebeau,lammers,lafond,kiernan,ketron,jurado,holmgren,hilburn,hayashi,hashimoto,harbaugh,guillot,gard,froehlich,feinberg,falco,dufour,drees,doney,diep,delao,daves,dail,crowson,coss,congdon,carner,camarena,butterworth,burlingame,bouffard,bloch,bilyeu,barta,bakke,baillargeon,avent,aquilar,zeringue,yarber,wolfson,vogler,voelker,truss,troxell,thrift,strouse,spielman,sistrunk,sevigny,schuller,schaaf,ruffner,routh,roseman,ricciardi,peraza,pegram,overturf,olander,odaniel,millner,melchor,maroney,machuca,macaluso,livesay,layfield,laskowski,kwiatkowski,kilby,hovey,heywood,hayman,havard,harville,haigh,hagood,grieco,glassman,gebhardt,fleischer,fann,elson,eccles,cunha,crumb,blakley,bardwell,abshire,woodham,wines,welter,wargo,varnado,tutt,traynor,swaney,stricker,stoffel,stambaugh,sickler,shackleford,selman,seaver,sansom,sanmiguel,royston,rourke,rockett,rioux,puleo,pitchford,nardi,mulvaney,middaugh,malek,leos,lathan,kujawa,kimbro,killebrew,houlihan,hinckley,herod,hepler,hamner,hammel,hallowell,gonsalez,gingerich,gambill,funkhouser,fricke,fewell,falkner,endsley,dulin,drennen,deaver,dambrosio,chadwell,castanon,burkes,brune,brisco,brinker,bowker,boldt,berner,beaumont,beaird,bazemore,barrick,albano,younts,wunderlich,weidman,vanness,toland,theobald,stickler,steiger,stanger,spies,spector,sollars,smedley,seibel,scoville,saito,rummel,rowles,rouleau,roos,rogan,roemer,ream,raya,purkey,priester,perreira,penick,paulin,parkins,overcash,oleson,neves,muldrow,minard,midgett,michalak,melgar,mcentire,mcauliffe,marte,lydon,lindholm,leyba,langevin,lagasse,lafayette,kesler,kelton,kaminsky,jaggers,humbert,huck,howarth,hinrichs,higley,gupton,guimond,gravois,giguere,fretwell,fontes,feeley,faucher,eichhorn,ecker,earp,dole,dinger,derryberry,demars,deel,copenhaver,collinsworth,colangelo,cloyd,claiborne,caulfield,carlsen,calzada,caffey,broadus,brenneman,bouie,bodnar,blaney,blanc,beltz,behling,barahona,yockey,winkle,windom,wimer,villatoro,trexler,teran,taliaferro,sydnor,swinson,snelling,smtih,simonton,simoneaux,simoneau,sherrer,seavey,scheel,rushton,rupe,ruano,rippy,reiner,reiff,rabinowitz,quach,penley,odle,nock,minnich,mckown,mccarver,mcandrew,longley,laux,lamothe,lafreniere,kropp,krick,kates,jepson,huie,howse,howie,henriques,haydon,haught,hatter,hartzog,harkey,grimaldo,goshorn,gormley,gluck,gilroy,gillenwater,giffin,fluker,feder,eyre,eshelman,eakins,detwiler,delrosario,davisson,catalan,canning,calton,brammer,botelho,blakney,bartell,averett,askins,aker,witmer,winkelman,widmer,whittier,weitzel,wardell,wagers,ullman,tupper,tingley,tilghman,talton,simard,seda,scheller,sala,rundell,rost,ribeiro,rabideau,primm,pinon,peart,ostrom,ober,nystrom,nussbaum,naughton,murr,moorhead,monti,monteiro,melson,meissner,mclin,mcgruder,marotta,makowski,majewski,madewell,lunt,lukens,leininger,lebel,lakin,kepler,jaques,hunnicutt,hungerford,hoopes,hertz,heins,halliburton,grosso,gravitt,glasper,gallman,gallaway,funke,fulbright,falgout,eakin,dostie,dorado,dewberry,derose,cutshall,crampton,costanzo,colletti,cloninger,claytor,chiang,campagna,burd,brokaw,broaddus,bretz,brainard,binford,bilbrey,alpert,aitken,ahlers,zajac,woolfolk,witten,windle,wayland,tramel,tittle,talavera,suter,straley,specht,sommerville,soloman,skeens,sigman,sibert,shavers,schuck,schmit,sartain,sabol,rosenblatt,rollo,rashid,rabb,polston,nyberg,northrop,navarra,muldoon,mikesell,mcdougald,mcburney,mariscal,lozier,lingerfelt,legere,latour,lagunas,lacour,kurth,killen,kiely,kayser,kahle,isley,huertas,hower,hinz,haugh,gumm,galicia,fortunato,flake,dunleavy,duggins,doby,digiovanni,devaney,deltoro,cribb,corpuz,coronel,coen,charbonneau,caine,burchette,blakey,blakemore,bergquist,beene,beaudette,bayles,ballance,bakker,bailes,asberry,arwood,zucker,willman,whitesell,wald,walcott,vancleave,trump,strasser,simas,shick,schleicher,schaal,saleh,rotz,resnick,rainer,partee,ollis,oller,oday,noles,munday,mong,millican,merwin,mazzola,mansell,magallanes,llanes,lewellen,lepore,kisner,keesee,jeanlouis,ingham,hornbeck,hawn,hartz,harber,haffner,gutshall,guth,grays,gowan,finlay,finkelstein,eyler,enloe,dungan,diez,dearman,cull,crosson,chronister,cassity,campion,callihan,butz,breazeale,blumenthal,berkey,batty,batton,arvizu,alderete,aldana,albaugh,abernethy,wolter,wille,tweed,tollefson,thomasson,teter,testerman,sproul,spates,southwick,soukup,skelly,senter,sealey,sawicki,sargeant,rossiter,rosemond,repp,pifer,ormsby,nickelson,naumann,morabito,monzon,millsaps,millen,mcelrath,marcoux,mantooth,madson,macneil,mackinnon,louque,leister,lampley,kushner,krouse,kirwan,jessee,janson,jahn,jacquez,islas,hutt,holladay,hillyer,hepburn,hensel,harrold,gingrich,geis,gales,fults,finnell,ferri,featherston,epley,ebersole,eames,dunigan,drye,dismuke,devaughn,delorenzo,damiano,confer,collum,clower,clow,claussen,clack,caylor,cawthon,casias,carreno,bluhm,bingaman,bewley,belew,beckner,auld,amey,wolfenbarger,wilkey,wicklund,waltman,villalba,valero,valdovinos,ullrich,tyus,twyman,trost,tardif,tanguay,stripling,steinbach,shumpert,sasaki,sappington,sandusky,reinhold,reinert,quijano,placencia,pinkard,phinney,perrotta,pernell,parrett,oxendine,owensby,orman,nuno,mori,mcroberts,mcneese,mckamey,mccullum,markel,mardis,maines,lueck,lubin,lefler,leffler,larios,labarbera,kershner,josey,jeanbaptiste,izaguirre,hermosillo,haviland,hartshorn,hafner,ginter,getty,franck,fiske,dufrene,doody,davie,dangerfield,dahlberg,cuthbertson,crone,coffelt,chidester,chesson,cauley,caudell,cantara,campo,caines,bullis,bucci,brochu,bogard,bickerstaff,benning,arzola,antonelli,adkinson,zellers,wulf,worsley,woolridge,whitton,westerfield,walczak,vassar,truett,trueblood,trawick,townsley,topping,tobar,telford,steverson,stagg,sitton,sill,sergent,schoenfeld,sarabia,rutkowski,rubenstein,rigdon,prentiss,pomerleau,plumlee,philbrick,patnode,oloughlin,obregon,nuss,morell,mikell,mele,mcinerney,mcguigan,mcbrayer,lollar,kuehl,kinzer,kamp,joplin,jacobi,howells,holstein,hedden,hassler,harty,halle,greig,gouge,goodrum,gerhart,geier,geddes,gast,forehand,ferree,fendley,feltner,esqueda,encarnacion,eichler,egger,edmundson,eatmon,doud,donohoe,donelson,dilorenzo,digiacomo,diggins,delozier,dejong,danford,crippen,coppage,cogswell,clardy,cioffi,cabe,brunette,bresnahan,blomquist,blackstone,biller,bevis,bevan,bethune,benbow,baty,basinger,balcom,andes,aman,aguero,adkisson,yandell,wilds,whisenhunt,weigand,weeden,voight,villar,trottier,tillett,suazo,setser,scurry,schuh,schreck,schauer,samora,roane,rinker,reimers,ratchford,popovich,parkin,natal,melville,mcbryde,magdaleno,loehr,lockman,lingo,leduc,larocca,lamere,laclair,krall,korte,koger,jalbert,hughs,higbee,henton,heaney,haith,gump,greeson,goodloe,gholston,gasper,gagliardi,fregoso,farthing,fabrizio,ensor,elswick,elgin,eklund,eaddy,drouin,dorton,dizon,derouen,deherrera,davy,dampier,cullum,culley,cowgill,cardoso,cardinale,brodsky,broadbent,brimmer,briceno,branscum,bolyard,boley,bennington,beadle,baur,ballentine,azure,aultman,arciniega,aguila,aceves,yepez,woodrum,wethington,weissman,veloz,trusty,troup,trammel,tarpley,stivers,steck,sprayberry,spraggins,spitler,spiers,sohn,seagraves,schiffman,rudnick,rizo,riccio,rennie,quackenbush,puma,plott,pearcy,parada,paiz,munford,moskowitz,mease,mcnary,mccusker,lozoya,longmire,loesch,lasky,kuhlmann,krieg,koziol,kowalewski,konrad,kindle,jowers,jolin,jaco,horgan,hine,hileman,hepner,heise,heady,hawkinson,hannigan,haberman,guilford,grimaldi,garton,gagliano,fruge,follett,fiscus,ferretti,ebner,easterday,eanes,dirks,dimarco,depalma,deforest,cruce,craighead,christner,candler,cadwell,burchell,buettner,brinton,brazier,brannen,brame,bova,bomar,blakeslee,belknap,bangs,balzer,athey,armes,alvis,alverson,alvardo,yeung,wheelock,westlund,wessels,volkman,threadgill,thelen,tague,symons,swinford,sturtevant,straka,stier,stagner,segarra,seawright,rutan,roux,ringler,riker,ramsdell,quattlebaum,purifoy,poulson,permenter,peloquin,pasley,pagel,osman,obannon,nygaard,newcomer,munos,motta,meadors,mcquiston,mcniel,mcmann,mccrae,mayne,matte,legault,lechner,kucera,krohn,kratzer,koopman,jeske,horrocks,hock,hibbler,hesson,hersh,harvin,halvorsen,griner,grindle,gladstone,garofalo,frampton,forbis,eddington,diorio,dingus,dewar,desalvo,curcio,creasy,cortese,cordoba,connally,cluff,cascio,capuano,canaday,calabro,bussard,brayton,borja,bigley,arnone,arguelles,acuff,zamarripa,wooton,widner,wideman,threatt,thiele,templin,teeters,synder,swint,swick,sturges,stogner,stedman,spratt,siegfried,shetler,scull,savino,sather,rothwell,rook,rone,rhee,quevedo,privett,pouliot,poche,pickel,petrillo,pellegrini,peaslee,partlow,otey,nunnery,morelock,morello,meunier,messinger,mckie,mccubbin,mccarron,lerch,lavine,laverty,lariviere,lamkin,kugler,krol,kissel,keeter,hubble,hickox,hetzel,hayner,hagy,hadlock,groh,gottschalk,goodsell,gassaway,garrard,galligan,firth,fenderson,feinstein,etienne,engleman,emrick,ellender,drews,doiron,degraw,deegan,dart,crissman,corr,cookson,coil,cleaves,charest,chapple,chaparro,castano,carpio,byer,bufford,bridgewater,bridgers,brandes,borrero,bonanno,aube,ancheta,abarca,abad,wooster,wimbush,willhite,willams,wigley,weisberg,wardlaw,vigue,vanhook,unknow,torre,tasker,tarbox,strachan,slover,shamblin,semple,schuyler,schrimsher,sayer,salzman,rubalcava,riles,reneau,reichel,rayfield,rabon,pyatt,prindle,poss,polito,plemmons,pesce,perrault,pereyra,ostrowski,nilsen,niemeyer,munsey,mundell,moncada,miceli,meader,mcmasters,mckeehan,matsumoto,marron,marden,lizarraga,lingenfelter,lewallen,langan,lamanna,kovac,kinsler,kephart,keown,kass,kammerer,jeffreys,hysell,hosmer,hardnett,hanner,guyette,greening,glazer,ginder,fromm,fluellen,finkle,fessler,essary,eisele,duren,dittmer,crochet,cosentino,cogan,coelho,cavin,carrizales,campuzano,brough,bopp,bookman,bobb,blouin,beesley,battista,bascom,bakken,badgett,arneson,anselmo,albino,ahumada,woodyard,wolters,wireman,willison,warman,waldrup,vowell,vantassel,twombly,toomer,tennison,teets,tedeschi,swanner,stutz,stelly,sheehy,schermerhorn,scala,sandidge,salters,salo,saechao,roseboro,rolle,ressler,renz,renn,redford,raposa,rainbolt,pelfrey,orndorff,oney,nolin,nimmons,nardone,myhre,morman,menjivar,mcglone,mccammon,maxon,marciano,manus,lowrance,lorenzen,lonergan,lollis,littles,lindahl,lamas,lach,kuster,krawczyk,knuth,knecht,kirkendall,keitt,keever,kantor,jarboe,hoye,houchens,holter,holsinger,hickok,helwig,helgeson,hassett,harner,hamman,hames,hadfield,goree,goldfarb,gaughan,gaudreau,gantz,gallion,frady,foti,flesher,ferrin,faught,engram,donegan,desouza,degroot,cutright,crowl,criner,coan,clinkscales,chewning,chavira,catchings,carlock,bulger,buenrostro,bramblett,brack,boulware,bookout,bitner,birt,baranowski,baisden,allmon,acklin,yoakum,wilbourn,whisler,weinberger,washer,vasques,vanzandt,vanatta,troxler,tomes,tindle,tims,throckmorton,thach,stpeter,stlaurent,stenson,spry,spitz,songer,snavely,shroyer,shortridge,shenk,sevier,seabrook,scrivner,saltzman,rosenberry,rockwood,robeson,roan,reiser,ramires,raber,posner,popham,piotrowski,pinard,peterkin,pelham,peiffer,peay,nadler,musso,millett,mestas,mcgowen,marques,marasco,manriquez,manos,mair,lipps,leiker,krumm,knorr,kinslow,kessel,kendricks,kelm,irick,ickes,hurlburt,horta,hoekstra,heuer,helmuth,heatherly,hampson,hagar,haga,greenlaw,grau,godbey,gingras,gillies,gibb,gayden,gauvin,garrow,fontanez,florio,finke,fasano,ezzell,ewers,eveland,eckenrode,duclos,drumm,dimmick,delancey,defazio,dashiell,cusack,crowther,crigger,cray,coolidge,coldiron,cleland,chalfant,cassel,camire,cabrales,broomfield,brittingham,brisson,brickey,braziel,brazell,bragdon,boulanger,boman,bohannan,beem,barre,azar,ashbaugh,armistead,almazan,adamski,zendejas,winburn,willaims,wilhoit,westberry,wentzel,wendling,visser,vanscoy,vankirk,vallee,tweedy,thornberry,sweeny,spradling,spano,smelser,shim,sechrist,schall,scaife,rugg,rothrock,roesler,riehl,ridings,render,ransdell,radke,pinero,petree,pendergast,peluso,pecoraro,pascoe,panek,oshiro,navarrette,murguia,moores,moberg,michaelis,mcwhirter,mcsweeney,mcquade,mccay,mauk,mariani,marceau,mandeville,maeda,lunde,ludlow,loeb,lindo,linderman,leveille,leith,larock,lambrecht,kulp,kinsley,kimberlin,kesterson,hoyos,helfrich,hanke,grisby,goyette,gouveia,glazier,gile,gerena,gelinas,gasaway,funches,fujimoto,flynt,fenske,fellers,fehr,eslinger,escalera,enciso,duley,dittman,dineen,diller,devault,collings,clymer,clowers,chavers,charland,castorena,castello,camargo,bunce,bullen,boyes,borchers,borchardt,birnbaum,birdsall,billman,benites,bankhead,ange,ammerman,adkison,winegar,wickman,warr,warnke,villeneuve,veasey,vassallo,vannatta,vadnais,twilley,towery,tomblin,tippett,theiss,talkington,talamantes,swart,swanger,streit,stines,stabler,spurling,sobel,sine,simmers,shippy,shiflett,shearin,sauter,sanderlin,rusch,runkle,ruckman,rorie,roesch,richert,rehm,randel,ragin,quesenberry,puentes,plyler,plotkin,paugh,oshaughnessy,ohalloran,norsworthy,niemann,nader,moorefield,mooneyham,modica,miyamoto,mickel,mebane,mckinnie,mazurek,mancilla,lukas,lovins,loughlin,lotz,lindsley,liddle,levan,lederman,leclaire,lasseter,lapoint,lamoreaux,lafollette,kubiak,kirtley,keffer,kaczmarek,housman,hiers,hibbert,herrod,hegarty,hathorn,greenhaw,grafton,govea,futch,furst,franko,forcier,foran,flickinger,fairfield,eure,emrich,embrey,edgington,ecklund,eckard,durante,deyo,delvecchio,dade,currey,creswell,cottrill,casavant,cartier,cargile,capel,cammack,calfee,burse,burruss,brust,brousseau,bridwell,braaten,borkholder,bloomquist,bjork,bartelt,amburgey,yeary,whitefield,vinyard,vanvalkenburg,twitchell,timmins,tapper,stringham,starcher,spotts,slaugh,simonsen,sheffer,sequeira,rosati,rhymes,quint,pollak,peirce,patillo,parkerson,paiva,nilson,nevin,narcisse,mitton,merriam,merced,meiners,mckain,mcelveen,mcbeth,marsden,marez,manke,mahurin,mabrey,luper,krull,hunsicker,hornbuckle,holtzclaw,hinnant,heston,hering,hemenway,hegwood,hearns,halterman,guiterrez,grote,granillo,grainger,glasco,gilder,garren,garlock,garey,fryar,fredricks,fraizer,foshee,ferrel,felty,everitt,evens,esser,elkin,eberhart,durso,duguay,driskill,doster,dewall,deveau,demps,demaio,delreal,deleo,darrah,cumberbatch,culberson,cranmer,cordle,colgan,chesley,cavallo,castellon,castelli,carreras,carnell,carlucci,bontrager,blumberg,blasingame,becton,artrip,andujar,alkire,alder,zukowski,zuckerman,wroblewski,wrigley,woodside,wigginton,westman,westgate,werts,washam,wardlow,walser,waiters,tadlock,stringfield,stimpson,stickley,standish,spurlin,spindler,speller,spaeth,sotomayor,sluder,shryock,shepardson,shatley,scannell,santistevan,rosner,resto,reinhard,rathburn,prisco,poulsen,pinney,phares,pennock,pastrana,oviedo,ostler,nauman,mulford,moise,moberly,mirabal,metoyer,metheny,mentzer,meldrum,mcinturff,mcelyea,mcdougle,massaro,lumpkins,loveday,lofgren,lirette,lesperance,lefkowitz,ledger,lauzon,lachapelle,klassen,keough,kempton,kaelin,jeffords,hsieh,hoyer,horwitz,hoeft,hennig,haskin,gourdine,golightly,girouard,fulgham,fritsch,freer,frasher,foulk,firestone,fiorentino,fedor,ensley,englehart,eells,dunphy,donahoe,dileo,dibenedetto,dabrowski,crick,coonrod,conder,coddington,chunn,chaput,cerna,carreiro,calahan,braggs,bourdon,bollman,bittle,bauder,barreras,aubuchon,anzalone,adamo,zerbe,willcox,westberg,weikel,waymire,vroman,vinci,vallejos,truesdell,troutt,trotta,tollison,toles,tichenor,symonds,surles,strayer,stgeorge,sroka,sorrentino,solares,snelson,silvestri,sikorski,shawver,schumaker,schorr,schooley,scates,satterlee,satchell,rymer,roselli,robitaille,riegel,regis,reames,provenzano,priestley,plaisance,pettey,palomares,nowakowski,monette,minyard,mclamb,mchone,mccarroll,masson,magoon,maddy,lundin,licata,leonhardt,landwehr,kircher,kinch,karpinski,johannsen,hussain,houghtaling,hoskinson,hollaway,holeman,hobgood,hiebert,goggin,geissler,gadbois,gabaldon,fleshman,flannigan,fairman,eilers,dycus,dunmire,duffield,dowler,deloatch,dehaan,deemer,clayborn,christofferso,chilson,chesney,chatfield,carron,canale,brigman,branstetter,bosse,borton,bonar,biron,barroso,arispe,zacharias,zabel,yaeger,woolford,whetzel,weakley,veatch,vandeusen,tufts,troxel,troche,traver,townsel,talarico,swilley,sterrett,stenger,speakman,sowards,sours,souders,souder,soles,sobers,snoddy,smither,shute,shoaf,shahan,schuetz,scaggs,santini,rosson,rolen,robidoux,rentas,recio,pixley,pawlowski,pawlak,paull,overbey,orear,oliveri,oldenburg,nutting,naugle,mossman,misner,milazzo,michelson,mcentee,mccullar,mccree,mcaleer,mazzone,mandell,manahan,malott,maisonet,mailloux,lumley,lowrie,louviere,lipinski,lindemann,leppert,leasure,labarge,kubik,knisely,knepp,kenworthy,kennelly,kelch,kanter,houchin,hosley,hosler,hollon,holleman,heitman,haggins,gwaltney,goulding,gorden,geraci,gathers,frison,feagin,falconer,espada,erving,erikson,eisenhauer,ebeling,durgin,dowdle,dinwiddie,delcastillo,dedrick,crimmins,covell,cournoyer,coria,cohan,cataldo,carpentier,canas,campa,brode,brashears,blaser,bicknell,bednar,barwick,ascencio,althoff,almodovar,alamo,zirkle,zabala,wolverton,winebrenner,wetherell,westlake,wegener,weddington,tuten,trosclair,tressler,theroux,teske,swinehart,swensen,sundquist,southall,socha,sizer,silverberg,shortt,shimizu,sherrard,shaeffer,scheid,scheetz,saravia,sanner,rubinstein,rozell,romer,rheaume,reisinger,randles,pullum,petrella,payan,nordin,norcross,nicoletti,nicholes,newbold,nakagawa,monteith,milstead,milliner,mellen,mccardle,liptak,leitch,latimore,larrison,landau,laborde,koval,izquierdo,hymel,hoskin,holte,hoefer,hayworth,hausman,harrill,harrel,hardt,gully,groover,grinnell,greenspan,graver,grandberry,gorrell,goldenberg,goguen,gilleland,fuson,feldmann,everly,dyess,dunnigan,downie,dolby,deatherage,cosey,cheever,celaya,caver,cashion,caplinger,cansler,byrge,bruder,breuer,breslin,brazelton,botkin,bonneau,bondurant,bohanan,bogue,bodner,boatner,blatt,bickley,belliveau,beiler,beier,beckstead,bachmann,atkin,altizer,alloway,allaire,albro,abron,zellmer,yetter,yelverton,wiens,whidden,viramontes,vanwormer,tarantino,tanksley,sumlin,strauch,strang,stice,spahn,sosebee,sigala,shrout,seamon,schrum,schneck,schantz,ruddy,romig,roehl,renninger,reding,polak,pohlman,pasillas,oldfield,oldaker,ohanlon,ogilvie,norberg,nolette,neufeld,nellis,mummert,mulvihill,mullaney,monteleone,mendonca,meisner,mcmullan,mccluney,mattis,massengill,manfredi,luedtke,lounsbury,liberatore,lamphere,laforge,jourdan,iorio,iniguez,ikeda,hubler,hodgdon,hocking,heacock,haslam,haralson,hanshaw,hannum,hallam,haden,garnes,garces,gammage,gambino,finkel,faucett,ehrhardt,eggen,dusek,durrant,dubay,dones,depasquale,delucia,degraff,decamp,davalos,cullins,conard,clouser,clontz,cifuentes,chappel,chaffins,celis,carwile,byram,bruggeman,bressler,brathwaite,brasfield,bradburn,boose,bodie,blosser,bertsch,bernardi,bernabe,bengtson,barrette,astorga,alday,albee,abrahamson,yarnell,wiltse,wiebe,waguespack,vasser,upham,turek,traxler,torain,tomaszewski,tinnin,tiner,tindell,styron,stahlman,staab,skiba,sheperd,seidl,secor,schutte,sanfilippo,ruder,rondon,rearick,procter,prochaska,pettengill,pauly,neilsen,nally,mullenax,morano,meads,mcnaughton,mcmurtry,mcmath,mckinsey,matthes,massenburg,marlar,margolis,malin,magallon,mackin,lovette,loughran,loring,longstreet,loiselle,lenihan,kunze,koepke,kerwin,kalinowski,kagan,innis,innes,holtzman,heinemann,harshman,haider,haack,grondin,grissett,greenawalt,goudy,goodlett,goldston,gokey,gardea,galaviz,gafford,gabrielson,furlow,fritch,fordyce,folger,elizalde,ehlert,eckhoff,eccleston,ealey,dubin,diemer,deschamps,delapena,decicco,debolt,cullinan,crittendon,crase,cossey,coppock,coots,colyer,cluck,chamberland,burkhead,bumpus,buchan,borman,birkholz,berardi,benda,behnke,barter,amezquita,wotring,wirtz,wingert,wiesner,whitesides,weyant,wainscott,venezia,varnell,tussey,thurlow,tabares,stiver,stell,starke,stanhope,stanek,sisler,sinnott,siciliano,shehan,selph,seager,scurlock,scranton,santucci,santangelo,saltsman,rogge,rettig,renwick,reidy,reider,redfield,premo,parente,paolucci,palmquist,ohler,netherton,mutchler,morita,mistretta,minnis,middendorf,menzel,mendosa,mendelson,meaux,mcspadden,mcquaid,mcnatt,manigault,maney,mager,lukes,lopresti,liriano,letson,lechuga,lazenby,lauria,larimore,krupp,krupa,kopec,kinchen,kifer,kerney,kerner,kennison,kegley,karcher,justis,johson,jellison,janke,huskins,holzman,hinojos,hefley,hatmaker,harte,halloway,hallenbeck,goodwyn,glaspie,geise,fullwood,fryman,frakes,fraire,farrer,enlow,engen,ellzey,eckles,earles,dunkley,drinkard,dreiling,draeger,dinardo,dills,desroches,desantiago,curlee,crumbley,critchlow,coury,courtright,coffield,cleek,charpentier,cardone,caples,cantin,buntin,bugbee,brinkerhoff,brackin,bourland,blassingame,beacham,banning,auguste,andreasen,amann,almon,alejo,adelman,abston,yerger,wymer,woodberry,windley,whiteaker,westfield,weibel,wanner,waldrep,villani,vanarsdale,utterback,updike,triggs,topete,tolar,tigner,thoms,tauber,tarvin,tally,swiney,sweatman,studebaker,stennett,starrett,stannard,stalvey,sonnenberg,smithey,sieber,sickles,shinault,segars,sanger,salmeron,rothe,rizzi,restrepo,ralls,ragusa,quiroga,papenfuss,oropeza,okane,mudge,mozingo,molinaro,mcvicker,mcgarvey,mcfalls,mccraney,matus,magers,llanos,livermore,linehan,leitner,laymon,lawing,lacourse,kwong,kollar,kneeland,kennett,kellett,kangas,janzen,hutter,huling,hofmeister,hewes,harjo,habib,guice,grullon,greggs,grayer,granier,grable,gowdy,giannini,getchell,gartman,garnica,ganey,gallimore,fetters,fergerson,farlow,fagundes,exley,esteves,enders,edenfield,easterwood,drakeford,dipasquale,desousa,deshields,deeter,dedmon,debord,daughtery,cutts,courtemanche,coursey,copple,coomes,collis,cogburn,clopton,choquette,chaidez,castrejon,calhoon,burbach,bulloch,buchman,bruhn,bohon,blough,baynes,barstow,zeman,zackery,yardley,yamashita,wulff,wilken,wiliams,wickersham,wible,whipkey,wedgeworth,walmsley,walkup,vreeland,verrill,umana,traub,swingle,summey,stroupe,stockstill,steffey,stefanski,statler,stapp,speights,solari,soderberg,shunk,shorey,shewmaker,sheilds,schiffer,schank,schaff,sagers,rochon,riser,rickett,reale,raglin,polen,plata,pitcock,percival,palen,orona,oberle,nocera,navas,nault,mullings,montejano,monreal,minick,middlebrook,meece,mcmillion,mccullen,mauck,marshburn,maillet,mahaney,magner,maclin,lucey,litteral,lippincott,leite,leaks,lamarre,jurgens,jerkins,jager,hurwitz,hughley,hotaling,horstman,hohman,hocker,hively,hipps,hessler,hermanson,hepworth,helland,hedlund,harkless,haigler,gutierez,grindstaff,glantz,giardina,gerken,gadsden,finnerty,farnum,encinas,drakes,dennie,cutlip,curtsinger,couto,cortinas,corby,chiasson,carle,carballo,brindle,borum,bober,blagg,berthiaume,beahm,batres,basnight,backes,axtell,atterberry,alvares,alegria,woodell,wojciechowski,winfree,winbush,wiest,wesner,wamsley,wakeman,verner,truex,trafton,toman,thorsen,theus,tellier,tallant,szeto,strope,stills,simkins,shuey,shaul,servin,serio,serafin,salguero,ryerson,rudder,ruark,rother,rohrbaugh,rohrbach,rohan,rogerson,risher,reeser,pryce,prokop,prins,priebe,prejean,pinheiro,petrone,petri,penson,pearlman,parikh,natoli,murakami,mullikin,mullane,motes,morningstar,mcveigh,mcgrady,mcgaughey,mccurley,marchan,manske,lusby,linde,likens,licon,leroux,lemaire,legette,laskey,laprade,laplant,kolar,kittredge,kinley,kerber,kanagy,jetton,janik,ippolito,inouye,hunsinger,howley,howery,horrell,holthaus,hiner,hilson,hilderbrand,hartzler,harnish,harada,hansford,halligan,hagedorn,gwynn,gudino,greenstein,greear,gracey,goudeau,goodner,ginsburg,gerth,gerner,fujii,frier,frenette,folmar,fleisher,fleischmann,fetzer,eisenman,earhart,dupuy,dunkelberger,drexler,dillinger,dilbeck,dewald,demby,deford,craine,chesnut,casady,carstens,carrick,carino,carignan,canchola,bushong,burman,buono,brownlow,broach,britten,brickhouse,boyden,boulton,borland,bohrer,blubaugh,bever,berggren,benevides,arocho,arends,amezcua,almendarez,zalewski,witzel,winkfield,wilhoite,vangundy,vanfleet,vanetten,vandergriff,urbanski,troiano,thibodaux,straus,stoneking,stjean,stillings,stange,speicher,speegle,smeltzer,slawson,simmonds,shuttleworth,serpa,senger,seidman,schweiger,schloss,schimmel,schechter,sayler,sabatini,ronan,rodiguez,riggleman,richins,reamer,prunty,porath,plunk,piland,philbrook,pettitt,perna,peralez,pascale,padula,oboyle,nivens,nickols,mundt,munden,montijo,mcmanis,mcgrane,mccrimmon,manzi,mangold,malick,mahar,maddock,losey,litten,leedy,leavell,ladue,krahn,kluge,junker,iversen,imler,hurtt,huizar,hubbert,howington,hollomon,holdren,hoisington,heiden,hauge,hartigan,gutirrez,griffie,greenhill,gratton,granata,gottfried,gertz,gautreaux,furry,furey,funderburg,flippen,fitzgibbon,drucker,donoghue,dildy,devers,detweiler,despres,denby,degeorge,cueto,cranston,courville,clukey,cirillo,chivers,caudillo,butera,bulluck,buckmaster,braunstein,bracamonte,bourdeau,bonnette".split(","),
45639us_tv_and_film:"you,i,to,that,it,me,what,this,know,i'm,no,have,my,don't,just,not,do,be,your,we,it's,so,but,all,well,oh,about,right,you're,get,here,out,going,like,yeah,if,can,up,want,think,that's,now,go,him,how,got,did,why,see,come,good,really,look,will,okay,back,can't,mean,tell,i'll,hey,he's,could,didn't,yes,something,because,say,take,way,little,make,need,gonna,never,we're,too,she's,i've,sure,our,sorry,what's,let,thing,maybe,down,man,very,there's,should,anything,said,much,any,even,off,please,doing,thank,give,thought,help,talk,god,still,wait,find,nothing,again,things,let's,doesn't,call,told,great,better,ever,night,away,believe,feel,everything,you've,fine,last,keep,does,put,around,stop,they're,i'd,guy,isn't,always,listen,wanted,guys,huh,those,big,lot,happened,thanks,won't,trying,kind,wrong,talking,guess,care,bad,mom,remember,getting,we'll,together,dad,leave,understand,wouldn't,actually,hear,baby,nice,father,else,stay,done,wasn't,course,might,mind,every,enough,try,hell,came,someone,you'll,whole,yourself,idea,ask,must,coming,looking,woman,room,knew,tonight,real,son,hope,went,hmm,happy,pretty,saw,girl,sir,friend,already,saying,next,job,problem,minute,thinking,haven't,heard,honey,matter,myself,couldn't,exactly,having,probably,happen,we've,hurt,boy,dead,gotta,alone,excuse,start,kill,hard,you'd,today,car,ready,without,wants,hold,wanna,yet,seen,deal,once,gone,morning,supposed,friends,head,stuff,worry,live,truth,face,forget,true,cause,soon,knows,telling,wife,who's,chance,run,move,anyone,person,bye,somebody,heart,miss,making,meet,anyway,phone,reason,damn,lost,looks,bring,case,turn,wish,tomorrow,kids,trust,check,change,anymore,least,aren't,working,makes,taking,means,brother,hate,ago,says,beautiful,gave,fact,crazy,sit,afraid,important,rest,fun,kid,word,watch,glad,everyone,sister,minutes,everybody,bit,couple,whoa,either,mrs,feeling,daughter,wow,gets,asked,break,promise,door,close,hand,easy,question,tried,far,walk,needs,mine,killed,hospital,anybody,alright,wedding,shut,able,die,perfect,stand,comes,hit,waiting,dinner,funny,husband,almost,pay,answer,cool,eyes,news,child,shouldn't,yours,moment,sleep,read,where's,sounds,sonny,pick,sometimes,bed,date,plan,hours,lose,hands,serious,shit,behind,inside,ahead,week,wonderful,fight,past,cut,quite,he'll,sick,it'll,eat,nobody,goes,save,seems,finally,lives,worried,upset,carly,met,brought,seem,sort,safe,weren't,leaving,front,shot,loved,asking,running,clear,figure,hot,felt,parents,drink,absolutely,how's,daddy,sweet,alive,sense,meant,happens,bet,blood,ain't,kidding,lie,meeting,dear,seeing,sound,fault,ten,buy,hour,speak,lady,jen,thinks,christmas,outside,hang,possible,worse,mistake,ooh,handle,spend,totally,giving,here's,marriage,realize,unless,sex,send,needed,scared,picture,talked,ass,hundred,changed,completely,explain,certainly,sign,boys,relationship,loves,hair,lying,choice,anywhere,future,weird,luck,she'll,turned,touch,kiss,crane,questions,obviously,wonder,pain,calling,somewhere,throw,straight,cold,fast,words,food,none,drive,feelings,they'll,marry,drop,cannot,dream,protect,twenty,surprise,sweetheart,poor,looked,mad,except,gun,y'know,dance,takes,appreciate,especially,situation,besides,pull,hasn't,worth,sheridan,amazing,expect,swear,piece,busy,happening,movie,we'd,catch,perhaps,step,fall,watching,kept,darling,dog,honor,moving,till,admit,problems,murder,he'd,evil,definitely,feels,honest,eye,broke,missed,longer,dollars,tired,evening,starting,entire,trip,niles,suppose,calm,imagine,fair,caught,blame,sitting,favor,apartment,terrible,clean,learn,frasier,relax,accident,wake,prove,smart,message,missing,forgot,interested,table,nbsp,mouth,pregnant,ring,careful,shall,dude,ride,figured,wear,shoot,stick,follow,angry,write,stopped,ran,standing,forgive,jail,wearing,ladies,kinda,lunch,cristian,greenlee,gotten,hoping,phoebe,thousand,ridge,paper,tough,tape,count,boyfriend,proud,agree,birthday,they've,share,offer,hurry,feet,wondering,decision,ones,finish,voice,herself,would've,mess,deserve,evidence,cute,dress,interesting,hotel,enjoy,quiet,concerned,staying,beat,sweetie,mention,clothes,fell,neither,mmm,fix,respect,prison,attention,holding,calls,surprised,bar,keeping,gift,hadn't,putting,dark,owe,ice,helping,normal,aunt,lawyer,apart,plans,jax,girlfriend,floor,whether,everything's,box,judge,upstairs,sake,mommy,possibly,worst,acting,accept,blow,strange,saved,conversation,plane,mama,yesterday,lied,quick,lately,stuck,difference,store,she'd,bought,doubt,listening,walking,cops,deep,dangerous,buffy,sleeping,chloe,rafe,join,card,crime,gentlemen,willing,window,walked,guilty,likes,fighting,difficult,soul,joke,favorite,uncle,promised,bother,seriously,cell,knowing,broken,advice,somehow,paid,losing,push,helped,killing,boss,liked,innocent,rules,learned,thirty,risk,letting,speaking,ridiculous,afternoon,apologize,nervous,charge,patient,boat,how'd,hide,detective,planning,huge,breakfast,horrible,awful,pleasure,driving,hanging,picked,sell,quit,apparently,dying,notice,congratulations,visit,could've,c'mon,letter,decide,forward,fool,showed,smell,seemed,spell,memory,pictures,slow,seconds,hungry,hearing,kitchen,ma'am,should've,realized,kick,grab,discuss,fifty,reading,idiot,suddenly,agent,destroy,bucks,shoes,peace,arms,demon,livvie,consider,papers,incredible,witch,drunk,attorney,tells,knock,ways,gives,nose,skye,turns,keeps,jealous,drug,sooner,cares,plenty,extra,outta,weekend,matters,gosh,opportunity,impossible,waste,pretend,jump,eating,proof,slept,arrest,breathe,perfectly,warm,pulled,twice,easier,goin,dating,suit,romantic,drugs,comfortable,finds,checked,divorce,begin,ourselves,closer,ruin,smile,laugh,treat,fear,what'd,otherwise,excited,mail,hiding,stole,pacey,noticed,fired,excellent,bringing,bottom,note,sudden,bathroom,honestly,sing,foot,remind,charges,witness,finding,tree,dare,hardly,that'll,steal,silly,contact,teach,shop,plus,colonel,fresh,trial,invited,roll,reach,dirty,choose,emergency,dropped,butt,credit,obvious,locked,loving,nuts,agreed,prue,goodbye,condition,guard,fuckin,grow,cake,mood,crap,crying,belong,partner,trick,pressure,dressed,taste,neck,nurse,raise,lots,carry,whoever,drinking,they'd,breaking,file,lock,wine,spot,paying,assume,asleep,turning,viki,bedroom,shower,nikolas,camera,fill,reasons,forty,bigger,nope,breath,doctors,pants,freak,movies,folks,cream,wild,truly,desk,convince,client,threw,hurts,spending,answers,shirt,chair,rough,doin,sees,ought,empty,wind,aware,dealing,pack,tight,hurting,guest,arrested,salem,confused,surgery,expecting,deacon,unfortunately,goddamn,bottle,beyond,whenever,pool,opinion,starts,jerk,secrets,falling,necessary,barely,dancing,tests,copy,cousin,ahem,twelve,tess,skin,fifteen,speech,orders,complicated,nowhere,escape,biggest,restaurant,grateful,usual,burn,address,someplace,screw,everywhere,regret,goodness,mistakes,details,responsibility,suspect,corner,hero,dumb,terrific,whoo,hole,memories,o'clock,teeth,ruined,bite,stenbeck,liar,showing,cards,desperate,search,pathetic,spoke,scare,marah,afford,settle,stayed,checking,hired,heads,concern,blew,alcazar,champagne,connection,tickets,happiness,saving,kissing,hated,personally,suggest,prepared,onto,downstairs,ticket,it'd,loose,holy,duty,convinced,throwing,kissed,legs,loud,saturday,babies,where'd,warning,miracle,carrying,blind,ugly,shopping,hates,sight,bride,coat,clearly,celebrate,brilliant,wanting,forrester,lips,custody,screwed,buying,toast,thoughts,reality,lexie,attitude,advantage,grandfather,sami,grandma,someday,roof,marrying,powerful,grown,grandmother,fake,must've,ideas,exciting,familiar,bomb,bout,harmony,schedule,capable,practically,correct,clue,forgotten,appointment,deserves,threat,bloody,lonely,shame,jacket,hook,scary,investigation,invite,shooting,lesson,criminal,victim,funeral,considering,burning,strength,harder,sisters,pushed,shock,pushing,heat,chocolate,miserable,corinthos,nightmare,brings,zander,crash,chances,sending,recognize,healthy,boring,feed,engaged,headed,treated,knife,drag,badly,hire,paint,pardon,behavior,closet,warn,gorgeous,milk,survive,ends,dump,rent,remembered,thanksgiving,rain,revenge,prefer,spare,pray,disappeared,aside,statement,sometime,meat,fantastic,breathing,laughing,stood,affair,ours,depends,protecting,jury,brave,fingers,murdered,explanation,picking,blah,stronger,handsome,unbelievable,anytime,shake,oakdale,wherever,pulling,facts,waited,lousy,circumstances,disappointed,weak,trusted,license,nothin,trash,understanding,slip,sounded,awake,friendship,stomach,weapon,threatened,mystery,vegas,understood,basically,switch,frankly,cheap,lifetime,deny,clock,garbage,why'd,tear,ears,indeed,changing,singing,tiny,decent,avoid,messed,filled,touched,disappear,exact,pills,kicked,harm,fortune,pretending,insurance,fancy,drove,cared,belongs,nights,lorelai,lift,timing,guarantee,chest,woke,burned,watched,heading,selfish,drinks,doll,committed,elevator,freeze,noise,wasting,ceremony,uncomfortable,staring,files,bike,stress,permission,thrown,possibility,borrow,fabulous,doors,screaming,bone,xander,what're,meal,apology,anger,honeymoon,bail,parking,fixed,wash,stolen,sensitive,stealing,photo,chose,lets,comfort,worrying,pocket,mateo,bleeding,shoulder,ignore,talent,tied,garage,dies,demons,dumped,witches,rude,crack,bothering,radar,soft,meantime,gimme,kinds,fate,concentrate,throat,prom,messages,intend,ashamed,somethin,manage,guilt,interrupt,guts,tongue,shoe,basement,sentence,purse,glasses,cabin,universe,repeat,mirror,wound,travers,tall,engagement,therapy,emotional,jeez,decisions,soup,thrilled,stake,chef,moves,extremely,moments,expensive,counting,shots,kidnapped,cleaning,shift,plate,impressed,smells,trapped,aidan,knocked,charming,attractive,argue,puts,whip,embarrassed,package,hitting,bust,stairs,alarm,pure,nail,nerve,incredibly,walks,dirt,stamp,terribly,friendly,damned,jobs,suffering,disgusting,stopping,deliver,riding,helps,disaster,bars,crossed,trap,talks,eggs,chick,threatening,spoken,introduce,confession,embarrassing,bags,impression,gate,reputation,presents,chat,suffer,argument,talkin,crowd,homework,coincidence,cancel,pride,solve,hopefully,pounds,pine,mate,illegal,generous,outfit,maid,bath,punch,freaked,begging,recall,enjoying,prepare,wheel,defend,signs,painful,yourselves,maris,that'd,suspicious,cooking,button,warned,sixty,pity,yelling,awhile,confidence,offering,pleased,panic,hers,gettin,refuse,grandpa,testify,choices,cruel,mental,gentleman,coma,cutting,proteus,guests,expert,benefit,faces,jumped,toilet,sneak,halloween,privacy,smoking,reminds,twins,swing,solid,options,commitment,crush,ambulance,wallet,gang,eleven,option,laundry,assure,stays,skip,fail,discussion,clinic,betrayed,sticking,bored,mansion,soda,sheriff,suite,handled,busted,load,happier,studying,romance,procedure,commit,assignment,suicide,minds,swim,yell,llanview,chasing,proper,believes,humor,hopes,lawyers,giant,latest,escaped,parent,tricks,insist,dropping,cheer,medication,flesh,routine,sandwich,handed,false,beating,warrant,awfully,odds,treating,thin,suggesting,fever,sweat,silent,clever,sweater,mall,sharing,assuming,judgment,goodnight,divorced,surely,steps,confess,math,listened,comin,answered,vulnerable,bless,dreaming,chip,zero,pissed,nate,kills,tears,knees,chill,brains,unusual,packed,dreamed,cure,lookin,grave,cheating,breaks,locker,gifts,awkward,thursday,joking,reasonable,dozen,curse,quartermaine,millions,dessert,rolling,detail,alien,delicious,closing,vampires,wore,tail,secure,salad,murderer,spit,offense,dust,conscience,bread,answering,lame,invitation,grief,smiling,pregnancy,prisoner,delivery,guards,virus,shrink,freezing,wreck,massimo,wire,technically,blown,anxious,cave,holidays,cleared,wishes,caring,candles,bound,charm,pulse,jumping,jokes,boom,occasion,silence,nonsense,frightened,slipped,dimera,blowing,relationships,kidnapping,spin,tool,roxy,packing,blaming,wrap,obsessed,fruit,torture,personality,there'll,fairy,necessarily,seventy,print,motel,underwear,grams,exhausted,believing,freaking,carefully,trace,touching,messing,recovery,intention,consequences,belt,sacrifice,courage,enjoyed,attracted,remove,testimony,intense,heal,defending,unfair,relieved,loyal,slowly,buzz,alcohol,surprises,psychiatrist,plain,attic,who'd,uniform,terrified,cleaned,zach,threaten,fella,enemies,satisfied,imagination,hooked,headache,forgetting,counselor,andie,acted,badge,naturally,frozen,sakes,appropriate,trunk,dunno,costume,sixteen,impressive,kicking,junk,grabbed,understands,describe,clients,owns,affect,witnesses,starving,instincts,happily,discussing,deserved,strangers,surveillance,admire,questioning,dragged,barn,deeply,wrapped,wasted,tense,hoped,fellas,roommate,mortal,fascinating,stops,arrangements,agenda,literally,propose,honesty,underneath,sauce,promises,lecture,eighty,torn,shocked,backup,differently,ninety,deck,biological,pheebs,ease,creep,waitress,telephone,ripped,raising,scratch,rings,prints,thee,arguing,ephram,asks,oops,diner,annoying,taggert,sergeant,blast,towel,clown,habit,creature,bermuda,snap,react,paranoid,handling,eaten,therapist,comment,sink,reporter,nurses,beats,priority,interrupting,warehouse,loyalty,inspector,pleasant,excuses,threats,guessing,tend,praying,motive,unconscious,mysterious,unhappy,tone,switched,rappaport,sookie,neighbor,loaded,swore,piss,balance,toss,misery,thief,squeeze,lobby,goa'uld,geez,exercise,forth,booked,sandburg,poker,eighteen,d'you,bury,everyday,digging,creepy,wondered,liver,hmmm,magical,fits,discussed,moral,helpful,searching,flew,depressed,aisle,cris,amen,vows,neighbors,darn,cents,arrange,annulment,useless,adventure,resist,fourteen,celebrating,inch,debt,violent,sand,teal'c,celebration,reminded,phones,paperwork,emotions,stubborn,pound,tension,stroke,steady,overnight,chips,beef,suits,boxes,cassadine,collect,tragedy,spoil,realm,wipe,surgeon,stretch,stepped,nephew,neat,limo,confident,perspective,climb,punishment,finest,springfield,hint,furniture,blanket,twist,proceed,fries,worries,niece,gloves,soap,signature,disappoint,crawl,convicted,flip,counsel,doubts,crimes,accusing,shaking,remembering,hallway,halfway,bothered,madam,gather,cameras,blackmail,symptoms,rope,ordinary,imagined,cigarette,supportive,explosion,trauma,ouch,furious,cheat,avoiding,whew,thick,oooh,boarding,approve,urgent,shhh,misunderstanding,drawer,phony,interfere,catching,bargain,tragic,respond,punish,penthouse,thou,rach,ohhh,insult,bugs,beside,begged,absolute,strictly,socks,senses,sneaking,reward,polite,checks,tale,physically,instructions,fooled,blows,tabby,bitter,adorable,y'all,tested,suggestion,jewelry,alike,jacks,distracted,shelter,lessons,constable,circus,audition,tune,shoulders,mask,helpless,feeding,explains,sucked,robbery,objection,behave,valuable,shadows,courtroom,confusing,talented,smarter,mistaken,customer,bizarre,scaring,motherfucker,alert,vecchio,reverend,foolish,compliment,bastards,worker,wheelchair,protective,gentle,reverse,picnic,knee,cage,wives,wednesday,voices,toes,stink,scares,pour,cheated,slide,ruining,filling,exit,cottage,upside,proves,parked,diary,complaining,confessed,pipe,merely,massage,chop,spill,prayer,betray,waiter,scam,rats,fraud,brush,tables,sympathy,pill,filthy,seventeen,employee,bracelet,pays,fairly,deeper,arrive,tracking,spite,shed,recommend,oughta,nanny,menu,diet,corn,roses,patch,dime,devastated,subtle,bullets,beans,pile,confirm,strings,parade,borrowed,toys,straighten,steak,premonition,planted,honored,exam,convenient,traveling,laying,insisted,dish,aitoro,kindly,grandson,donor,temper,teenager,proven,mothers,denial,backwards,tent,swell,noon,happiest,drives,thinkin,spirits,potion,holes,fence,whatsoever,rehearsal,overheard,lemme,hostage,bench,tryin,taxi,shove,moron,impress,needle,intelligent,instant,disagree,stinks,rianna,recover,groom,gesture,constantly,bartender,suspects,sealed,legally,hears,dresses,sheet,psychic,teenage,knocking,judging,accidentally,waking,rumor,manners,homeless,hollow,desperately,tapes,referring,item,genoa,gear,majesty,cried,tons,spells,instinct,quote,motorcycle,convincing,fashioned,aids,accomplished,grip,bump,upsetting,needing,invisible,forgiveness,feds,compare,bothers,tooth,inviting,earn,compromise,cocktail,tramp,jabot,intimate,dignity,dealt,souls,informed,gods,dressing,cigarettes,alistair,leak,fond,corky,seduce,liquor,fingerprints,enchantment,butters,stuffed,stavros,emotionally,transplant,tips,oxygen,nicely,lunatic,drill,complain,announcement,unfortunate,slap,prayers,plug,opens,oath,o'neill,mutual,yacht,remembers,fried,extraordinary,bait,warton,sworn,stare,safely,reunion,burst,might've,dive,aboard,expose,buddies,trusting,booze,sweep,sore,scudder,properly,parole,ditch,canceled,speaks,glow,wears,thirsty,skull,ringing,dorm,dining,bend,unexpected,pancakes,harsh,flattered,ahhh,troubles,fights,favourite,eats,rage,undercover,spoiled,sloane,shine,destroying,deliberately,conspiracy,thoughtful,sandwiches,plates,nails,miracles,fridge,drank,contrary,beloved,allergic,washed,stalking,solved,sack,misses,forgiven,bent,maciver,involve,dragging,cooked,pointing,foul,dull,beneath,heels,faking,deaf,stunt,jealousy,hopeless,fears,cuts,scenario,necklace,crashed,accuse,restraining,homicide,helicopter,firing,safer,auction,videotape,tore,reservations,pops,appetite,wounds,vanquish,ironic,fathers,excitement,anyhow,tearing,sends,rape,laughed,belly,dealer,cooperate,accomplish,wakes,spotted,sorts,reservation,ashes,tastes,supposedly,loft,intentions,integrity,wished,towels,suspected,investigating,inappropriate,lipstick,lawn,compassion,cafeteria,scarf,precisely,obsession,loses,lighten,infection,granddaughter,explode,balcony,this'll,spying,publicity,depend,cracked,conscious,ally,absurd,vicious,invented,forbid,directions,defendant,bare,announce,screwing,salesman,robbed,leap,lakeview,insanity,reveal,possibilities,kidnap,gown,chairs,wishing,setup,punished,criminals,regrets,raped,quarters,lamp,dentist,anyways,anonymous,semester,risks,owes,lungs,explaining,delicate,tricked,eager,doomed,adoption,stab,sickness,scum,floating,envelope,vault,sorel,pretended,potatoes,plea,photograph,payback,misunderstood,kiddo,healing,cascade,capeside,stabbed,remarkable,brat,privilege,passionate,nerves,lawsuit,kidney,disturbed,cozy,tire,shirts,oven,ordering,delay,risky,monsters,honorable,grounded,closest,breakdown,bald,abandon,scar,collar,worthless,sucking,enormous,disturbing,disturb,distract,deals,conclusions,vodka,dishes,crawling,briefcase,wiped,whistle,sits,roast,rented,pigs,flirting,deposit,bottles,topic,riot,overreacting,logical,hostile,embarrass,casual,beacon,amusing,altar,claus,survival,skirt,shave,porch,ghosts,favors,drops,dizzy,chili,advise,strikes,rehab,photographer,peaceful,leery,heavens,fortunately,fooling,expectations,cigar,weakness,ranch,practicing,examine,cranes,bribe,sail,prescription,hush,fragile,forensics,expense,drugged,cows,bells,visitor,suitcase,sorta,scan,manticore,insecure,imagining,hardest,clerk,wrist,what'll,starters,silk,pump,pale,nicer,haul,flies,boot,thumb,there'd,how're,elders,quietly,pulls,idiots,erase,denying,ankle,amnesia,accepting,heartbeat,devane,confront,minus,legitimate,fixing,arrogant,tuna,supper,slightest,sins,sayin,recipe,pier,paternity,humiliating,genuine,snack,rational,minded,guessed,weddings,tumor,humiliated,aspirin,spray,picks,eyed,drowning,contacts,ritual,perfume,hiring,hating,docks,creatures,visions,thanking,thankful,sock,nineteen,fork,throws,teenagers,stressed,slice,rolls,plead,ladder,kicks,detectives,assured,tellin,shallow,responsibilities,repay,howdy,girlfriends,deadly,comforting,ceiling,verdict,insensitive,spilled,respected,messy,interrupted,halliwell,blond,bleed,wardrobe,takin,murders,backs,underestimate,justify,harmless,frustrated,fold,enzo,communicate,bugging,arson,whack,salary,rumors,obligation,liking,dearest,congratulate,vengeance,rack,puzzle,fires,courtesy,caller,blamed,tops,quiz,prep,curiosity,circles,barbecue,sunnydale,spinning,psychotic,cough,accusations,resent,laughs,freshman,envy,drown,bartlet,asses,sofa,poster,highness,dock,apologies,theirs,stat,stall,realizes,psych,mmmm,fools,understandable,treats,succeed,stir,relaxed,makin,gratitude,faithful,accent,witter,wandering,locate,inevitable,gretel,deed,crushed,controlling,smelled,robe,gossip,gambling,cosmetics,accidents,surprising,stiff,sincere,rushed,refrigerator,preparing,nightmares,mijo,ignoring,hunch,fireworks,drowned,brass,whispering,sophisticated,luggage,hike,explore,emotion,crashing,contacted,complications,shining,rolled,righteous,reconsider,goody,geek,frightening,ethics,creeps,courthouse,camping,affection,smythe,haircut,essay,baked,apologized,vibe,respects,receipt,mami,hats,destructive,adore,adopt,tracked,shorts,reminding,dough,creations,cabot,barrel,snuck,slight,reporters,pressing,magnificent,madame,lazy,glorious,fiancee,bits,visitation,sane,kindness,shoulda,rescued,mattress,lounge,lifted,importantly,glove,enterprises,disappointment,condo,beings,admitting,yelled,waving,spoon,screech,satisfaction,reads,nailed,worm,tick,resting,marvelous,fuss,cortlandt,chased,pockets,luckily,lilith,filing,conversations,consideration,consciousness,worlds,innocence,forehead,aggressive,trailer,slam,quitting,inform,delighted,daylight,danced,confidential,aunts,washing,tossed,spectra,marrow,lined,implying,hatred,grill,corpse,clues,sober,offended,morgue,infected,humanity,distraction,cart,wired,violation,promising,harassment,glue,d'angelo,cursed,brutal,warlocks,wagon,unpleasant,proving,priorities,mustn't,lease,flame,disappearance,depressing,thrill,sitter,ribs,flush,earrings,deadline,corporal,collapsed,update,snapped,smack,melt,figuring,delusional,coulda,burnt,tender,sperm,realise,pork,popped,interrogation,esteem,choosing,undo,pres,prayed,plague,manipulate,insulting,detention,delightful,coffeehouse,betrayal,apologizing,adjust,wrecked,wont,whipped,rides,reminder,monsieur,faint,bake,distress,correctly,complaint,blocked,tortured,risking,pointless,handing,dumping,cups,alibi,struggling,shiny,risked,mummy,mint,hose,hobby,fortunate,fleischman,fitting,curtain,counseling,rode,puppet,modeling,memo,irresponsible,humiliation,hiya,freakin,felony,choke,blackmailing,appreciated,tabloid,suspicion,recovering,pledge,panicked,nursery,louder,jeans,investigator,homecoming,frustrating,buys,busting,buff,sleeve,irony,dope,declare,autopsy,workin,torch,prick,limb,hysterical,goddamnit,fetch,dimension,crowded,clip,climbing,bonding,woah,trusts,negotiate,lethal,iced,fantasies,deeds,bore,babysitter,questioned,outrageous,kiriakis,insulted,grudge,driveway,deserted,definite,beep,wires,suggestions,searched,owed,lend,drunken,demanding,costanza,conviction,bumped,weigh,touches,tempted,shout,resolve,relate,poisoned,meals,invitations,haunted,bogus,autograph,affects,tolerate,stepping,spontaneous,sleeps,probation,manny,fist,spectacular,hostages,heroin,havin,habits,encouraging,consult,burgers,boyfriends,bailed,baggage,watches,troubled,torturing,teasing,sweetest,qualities,postpone,overwhelmed,malkovich,impulse,classy,charging,amazed,policeman,hypocrite,humiliate,hideous,d'ya,costumes,bluffing,betting,bein,bedtime,alcoholic,vegetable,tray,suspicions,spreading,splendid,shrimp,shouting,pressed,nooo,grieving,gladly,fling,eliminate,cereal,aaah,sonofabitch,paralyzed,lotta,locks,guaranteed,dummy,despise,dental,briefing,bluff,batteries,whatta,sounding,servants,presume,handwriting,fainted,dried,allright,acknowledge,whacked,toxic,reliable,quicker,overwhelming,lining,harassing,fatal,endless,dolls,convict,whatcha,unlikely,shutting,positively,overcome,goddam,essence,dose,diagnosis,cured,bully,ahold,yearbook,tempting,shelf,prosecution,pouring,possessed,greedy,wonders,thorough,spine,rath,psychiatric,meaningless,latte,jammed,ignored,fiance,evidently,contempt,compromised,cans,weekends,urge,theft,suing,shipment,scissors,responding,proposition,noises,matching,hormones,hail,grandchildren,gently,smashed,sexually,sentimental,nicest,manipulated,intern,handcuffs,framed,errands,entertaining,crib,carriage,barge,spends,slipping,seated,rubbing,rely,reject,recommendation,reckon,headaches,float,embrace,corners,whining,sweating,skipped,mountie,motives,listens,cristobel,cleaner,cheerleader,balsom,unnecessary,stunning,scent,quartermaines,pose,montega,loosen,info,hottest,haunt,gracious,forgiving,errand,cakes,blames,abortion,sketch,shifts,plotting,perimeter,pals,mere,mattered,lonigan,interference,eyewitness,enthusiasm,diapers,strongest,shaken,punched,portal,catches,backyard,terrorists,sabotage,organs,needy,cuff,civilization,woof,who'll,prank,obnoxious,mates,hereby,gabby,faked,cellar,whitelighter,void,strangle,sour,muffins,interfering,demonic,clearing,boutique,barrington,terrace,smoked,righty,quack,petey,pact,knot,ketchup,disappearing,cordy,uptight,ticking,terrifying,tease,swamp,secretly,rejection,reflection,realizing,rays,mentally,marone,doubted,deception,congressman,cheesy,toto,stalling,scoop,ribbon,immune,expects,destined,bets,bathing,appreciation,accomplice,wander,shoved,sewer,scroll,retire,lasts,fugitive,freezer,discount,cranky,crank,clearance,bodyguard,anxiety,accountant,whoops,volunteered,talents,stinking,remotely,garlic,decency,cord,beds,altogether,uniforms,tremendous,popping,outa,observe,lung,hangs,feelin,dudes,donation,disguise,curb,bites,antique,toothbrush,realistic,predict,landlord,hourglass,hesitate,consolation,babbling,tipped,stranded,smartest,repeating,puke,psst,paycheck,overreacted,macho,juvenile,grocery,freshen,disposal,cuffs,caffeine,vanished,unfinished,ripping,pinch,flattering,expenses,dinners,colleague,ciao,belthazor,attorneys,woulda,whereabouts,waitin,truce,tripped,tasted,steer,poisoning,manipulative,immature,husbands,heel,granddad,delivering,condoms,addict,trashed,raining,pasta,needles,leaning,detector,coolest,batch,appointments,almighty,vegetables,spark,perfection,pains,momma,mole,meow,hairs,getaway,cracking,compliments,behold,verge,tougher,timer,tapped,taped,specialty,snooping,shoots,rendezvous,pentagon,leverage,jeopardize,janitor,grandparents,forbidden,clueless,bidding,ungrateful,unacceptable,tutor,serum,scuse,pajamas,mouths,lure,irrational,doom,cries,beautifully,arresting,approaching,traitor,sympathetic,smug,smash,rental,prostitute,premonitions,jumps,inventory,darlin,committing,banging,asap,worms,violated,vent,traumatic,traced,sweaty,shaft,overboard,insight,healed,grasp,experiencing,crappy,crab,chunk,awww,stain,shack,reacted,pronounce,poured,moms,marriages,jabez,handful,flipped,fireplace,embarrassment,disappears,concussion,bruises,brakes,twisting,swept,summon,splitting,sloppy,settling,reschedule,notch,hooray,grabbing,exquisite,disrespect,thornhart,straw,slapped,shipped,shattered,ruthless,refill,payroll,numb,mourning,manly,hunk,entertain,drift,dreadful,doorstep,confirmation,chops,appreciates,vague,tires,stressful,stashed,stash,sensed,preoccupied,predictable,noticing,madly,gunshot,dozens,dork,confuse,cleaners,charade,chalk,cappuccino,bouquet,amulet,addiction,who've,warming,unlock,satisfy,sacrificed,relaxing,lone,blocking,blend,blankets,addicted,yuck,hunger,hamburger,greeting,greet,gravy,gram,dreamt,dice,caution,backpack,agreeing,whale,taller,supervisor,sacrifices,phew,ounce,irrelevant,gran,felon,favorites,farther,fade,erased,easiest,convenience,compassionate,cane,backstage,agony,adores,veins,tweek,thieves,surgical,strangely,stetson,recital,proposing,productive,meaningful,immunity,hassle,goddamned,frighten,dearly,cease,ambition,wage,unstable,salvage,richer,refusing,raging,pumping,pressuring,mortals,lowlife,intimidated,intentionally,inspire,forgave,devotion,despicable,deciding,dash,comfy,breach,bark,aaaah,switching,swallowed,stove,screamed,scars,russians,pounding,poof,pipes,pawn,legit,invest,farewell,curtains,civilized,caviar,boost,token,superstition,supernatural,sadness,recorder,psyched,motivated,microwave,hallelujah,fraternity,dryer,cocoa,chewing,acceptable,unbelievably,smiled,smelling,simpler,respectable,remarks,khasinau,indication,gutter,grabs,fulfill,flashlight,ellenor,blooded,blink,blessings,beware,uhhh,turf,swings,slips,shovel,shocking,puff,mirrors,locking,heartless,fras,childish,cardiac,utterly,tuscany,ticked,stunned,statesville,sadly,purely,kiddin,jerks,hitch,flirt,fare,equals,dismiss,christening,casket,c'mere,breakup,biting,antibiotics,accusation,abducted,witchcraft,thread,runnin,punching,paramedics,newest,murdering,masks,lawndale,initials,grampa,choking,charms,careless,bushes,buns,bummed,shred,saves,saddle,rethink,regards,precinct,persuade,meds,manipulating,llanfair,leash,hearted,guarantees,fucks,disgrace,deposition,bookstore,boil,vitals,veil,trespassing,sidewalk,sensible,punishing,overtime,optimistic,obsessing,notify,mornin,jeopardy,jaffa,injection,hilarious,desires,confide,cautious,yada,where're,vindictive,vial,teeny,stroll,sittin,scrub,rebuild,posters,ordeal,nuns,intimacy,inheritance,exploded,donate,distracting,despair,crackers,wildwind,virtue,thoroughly,tails,spicy,sketches,sights,sheer,shaving,seize,scarecrow,refreshing,prosecute,platter,napkin,misplaced,merchandise,loony,jinx,heroic,frankenstein,ambitious,syrup,solitary,resemblance,reacting,premature,lavery,flashes,cheque,awright,acquainted,wrapping,untie,salute,realised,priceless,partying,lightly,lifting,kasnoff,insisting,glowing,generator,explosives,cutie,confronted,buts,blouse,ballistic,antidote,analyze,allowance,adjourned,unto,understatement,tucked,touchy,subconscious,screws,sarge,roommates,rambaldi,offend,nerd,knives,irresistible,incapable,hostility,goddammit,fuse,frat,curfew,blackmailed,walkin,starve,sleigh,sarcastic,recess,rebound,pinned,parlor,outfits,livin,heartache,haired,fundraiser,doorman,discreet,dilucca,cracks,considerate,climbed,catering,apophis,zoey,urine,strung,stitches,sordid,sark,protector,phoned,pets,hostess,flaw,flavor,deveraux,consumed,confidentiality,bourbon,straightened,specials,spaghetti,prettier,powerless,playin,playground,paranoia,instantly,havoc,exaggerating,eavesdropping,doughnuts,diversion,deepest,cutest,comb,bela,behaving,anyplace,accessory,workout,translate,stuffing,speeding,slime,royalty,polls,marital,lurking,lottery,imaginary,greetings,fairwinds,elegant,elbow,credibility,credentials,claws,chopped,bridal,bedside,babysitting,witty,unforgivable,underworld,tempt,tabs,sophomore,selfless,secrecy,restless,okey,movin,metaphor,messes,meltdown,lecter,incoming,gasoline,diefenbaker,buckle,admired,adjustment,warmth,throats,seduced,queer,parenting,noses,luckiest,graveyard,gifted,footsteps,dimeras,cynical,wedded,verbal,unpredictable,tuned,stoop,slides,sinking,rigged,plumbing,lingerie,hankey,greed,everwood,elope,dresser,chauffeur,bulletin,bugged,bouncing,temptation,strangest,slammed,sarcasm,pending,packages,orderly,obsessive,murderers,meteor,inconvenience,glimpse,froze,execute,courageous,consulate,closes,bosses,bees,amends,wuss,wolfram,wacky,unemployed,testifying,syringe,stew,startled,sorrow,sleazy,shaky,screams,rsquo,remark,poke,nutty,mentioning,mend,inspiring,impulsive,housekeeper,foam,fingernails,conditioning,baking,whine,thug,starved,sniffing,sedative,programmed,picket,paged,hound,homosexual,homo,hips,forgets,flipping,flea,flatter,dwell,dumpster,choo,assignments,ants,vile,unreasonable,tossing,thanked,steals,souvenir,scratched,psychopath,outs,obstruction,obey,lump,insists,harass,gloat,filth,edgy,didn,coroner,confessing,bruise,betraying,bailing,appealing,adebisi,wrath,wandered,waist,vain,traps,stepfather,poking,obligated,heavenly,dilemma,crazed,contagious,coaster,cheering,bundle,vomit,thingy,speeches,robbing,raft,pumped,pillows,peep,packs,neglected,m'kay,loneliness,intrude,helluva,gardener,forresters,drooling,betcha,vase,supermarket,squat,spitting,rhyme,relieve,receipts,racket,pictured,pause,overdue,motivation,morgendorffer,kidnapper,insect,horns,feminine,eyeballs,dumps,disappointing,crock,convertible,claw,clamp,canned,cambias,bathtub,avanya,artery,weep,warmer,suspense,summoned,spiders,reiber,raving,pushy,postponed,ohhhh,noooo,mold,laughter,incompetent,hugging,groceries,drip,communicating,auntie,adios,wraps,wiser,willingly,weirdest,timmih,thinner,swelling,swat,steroids,sensitivity,scrape,rehearse,prophecy,ledge,justified,insults,hateful,handles,doorway,chatting,buyer,buckaroo,bedrooms,askin,ammo,tutoring,subpoena,scratching,privileges,pager,mart,intriguing,idiotic,grape,enlighten,corrupt,brunch,bridesmaid,barking,applause,acquaintance,wretched,superficial,soak,smoothly,sensing,restraint,posing,pleading,payoff,oprah,nemo,morals,loaf,jumpy,ignorant,herbal,hangin,germs,generosity,flashing,doughnut,clumsy,chocolates,captive,behaved,apologise,vanity,stumbled,preview,poisonous,perjury,parental,onboard,mugged,minding,linen,knots,interviewing,humour,grind,greasy,goons,drastic,coop,comparing,cocky,clearer,bruised,brag,bind,worthwhile,whoop,vanquishing,tabloids,sprung,spotlight,sentencing,racist,provoke,pining,overly,locket,imply,impatient,hovering,hotter,fest,endure,dots,doren,debts,crawled,chained,brit,breaths,weirdo,warmed,wand,troubling,tok'ra,strapped,soaked,skipping,scrambled,rattle,profound,musta,mocking,misunderstand,limousine,kacl,hustle,forensic,enthusiastic,duct,drawers,devastating,conquer,clarify,chores,cheerleaders,cheaper,callin,blushing,barging,abused,yoga,wrecking,wits,waffles,virginity,vibes,uninvited,unfaithful,teller,strangled,scheming,ropes,rescuing,rave,postcard,o'reily,morphine,lotion,lads,kidneys,judgement,itch,indefinitely,grenade,glamorous,genetically,freud,discretion,delusions,crate,competent,bakery,argh,ahhhh,wedge,wager,unfit,tripping,torment,superhero,stirring,spinal,sorority,seminar,scenery,rabble,pneumonia,perks,override,ooooh,mija,manslaughter,mailed,lime,lettuce,intimidate,guarded,grieve,grad,frustration,doorbell,chinatown,authentic,arraignment,annulled,allergies,wanta,verify,vegetarian,tighter,telegram,stalk,spared,shoo,satisfying,saddam,requesting,pens,overprotective,obstacles,notified,nasedo,grandchild,genuinely,flushed,fluids,floss,escaping,ditched,cramp,corny,bunk,bitten,billions,bankrupt,yikes,wrists,ultrasound,ultimatum,thirst,sniff,shakes,salsa,retrieve,reassuring,pumps,neurotic,negotiating,needn't,monitors,millionaire,lydecker,limp,incriminating,hatchet,gracias,gordie,fills,feeds,doubting,decaf,biopsy,whiz,voluntarily,ventilator,unpack,unload,toad,spooked,snitch,schillinger,reassure,persuasive,mystical,mysteries,matrimony,mails,jock,headline,explanations,dispatch,curly,cupid,condolences,comrade,cassadines,bulb,bragging,awaits,assaulted,ambush,adolescent,abort,yank,whit,vaguely,undermine,tying,swamped,stabbing,slippers,slash,sincerely,sigh,setback,secondly,rotting,precaution,pcpd,melting,liaison,hots,hooking,headlines,haha,ganz,fury,felicity,fangs,encouragement,earring,dreidel,dory,donut,dictate,decorating,cocktails,bumps,blueberry,believable,backfired,backfire,apron,adjusting,vous,vouch,vitamins,ummm,tattoos,slimy,sibling,shhhh,renting,peculiar,parasite,paddington,marries,mailbox,magically,lovebirds,knocks,informant,exits,drazen,distractions,disconnected,dinosaurs,dashwood,crooked,conveniently,wink,warped,underestimated,tacky,shoving,seizure,reset,pushes,opener,mornings,mash,invent,indulge,horribly,hallucinating,festive,eyebrows,enjoys,desperation,dealers,darkest,daph,boragora,belts,bagel,authorization,auditions,agitated,wishful,wimp,vanish,unbearable,tonic,suffice,suction,slaying,safest,rocking,relive,puttin,prettiest,noisy,newlyweds,nauseous,misguided,mildly,midst,liable,judgmental,indy,hunted,givin,fascinated,elephants,dislike,deluded,decorate,crummy,contractions,carve,bottled,bonded,bahamas,unavailable,twenties,trustworthy,surgeons,stupidity,skies,remorse,preferably,pies,nausea,napkins,mule,mourn,melted,mashed,inherit,greatness,golly,excused,dumbo,drifting,delirious,damaging,cubicle,compelled,comm,chooses,checkup,boredom,bandages,alarms,windshield,who're,whaddya,transparent,surprisingly,sunglasses,slit,roar,reade,prognosis,probe,pitiful,persistent,peas,nosy,nagging,morons,masterpiece,martinis,limbo,liars,irritating,inclined,hump,hoynes,fiasco,eatin,cubans,concentrating,colorful,clam,cider,brochure,barto,bargaining,wiggle,welcoming,weighing,vanquished,stains,sooo,snacks,smear,sire,resentment,psychologist,pint,overhear,morality,landingham,kisser,hoot,holling,handshake,grilled,formality,elevators,depths,confirms,boathouse,accidental,westbridge,wacko,ulterior,thugs,thighs,tangled,stirred,snag,sling,sleaze,rumour,ripe,remarried,puddle,pins,perceptive,miraculous,longing,lockup,librarian,impressions,immoral,hypothetically,guarding,gourmet,gabe,faxed,extortion,downright,digest,cranberry,bygones,buzzing,burying,bikes,weary,taping,takeout,sweeping,stepmother,stale,senor,seaborn,pros,pepperoni,newborn,ludicrous,injected,geeks,forged,faults,drue,dire,dief,desi,deceiving,caterer,calmed,budge,ankles,vending,typing,tribbiani,there're,squared,snowing,shades,sexist,rewrite,regretted,raises,picky,orphan,mural,misjudged,miscarriage,memorize,leaking,jitters,invade,interruption,illegally,handicapped,glitch,gittes,finer,distraught,dispose,dishonest,digs,dads,cruelty,circling,canceling,butterflies,belongings,barbrady,amusement,alias,zombies,where've,unborn,swearing,stables,squeezed,sensational,resisting,radioactive,questionable,privileged,portofino,owning,overlook,orson,oddly,interrogate,imperative,impeccable,hurtful,hors,heap,graders,glance,disgust,devious,destruct,crazier,countdown,chump,cheeseburger,burglar,berries,ballroom,assumptions,annoyed,allergy,admirer,admirable,activate,underpants,twit,tack,strokes,stool,sham,scrap,retarded,resourceful,remarkably,refresh,pressured,precautions,pointy,nightclub,mustache,maui,lace,hunh,hubby,flare,dont,dokey,dangerously,crushing,clinging,choked,chem,cheerleading,checkbook,cashmere,calmly,blush,believer,amazingly,alas,what've,toilets,tacos,stairwell,spirited,sewing,rubbed,punches,protects,nuisance,motherfuckers,mingle,kynaston,knack,kinkle,impose,gullible,godmother,funniest,friggin,folding,fashions,eater,dysfunctional,drool,dripping,ditto,cruising,criticize,conceive,clone,cedars,caliber,brighter,blinded,birthdays,banquet,anticipate,annoy,whim,whichever,volatile,veto,vested,shroud,rests,reindeer,quarantine,pleases,painless,orphans,orphanage,offence,obliged,negotiation,narcotics,mistletoe,meddling,manifest,lookit,lilah,intrigued,injustice,homicidal,gigantic,exposing,elves,disturbance,disastrous,depended,demented,correction,cooped,cheerful,buyers,brownies,beverage,basics,arvin,weighs,upsets,unethical,swollen,sweaters,stupidest,sensation,scalpel,props,prescribed,pompous,objections,mushrooms,mulwray,manipulation,lured,internship,insignificant,inmate,incentive,fulfilled,disagreement,crypt,cornered,copied,brightest,beethoven,attendant,amaze,yogurt,wyndemere,vocabulary,tulsa,tactic,stuffy,respirator,pretends,polygraph,pennies,ordinarily,olives,necks,morally,martyr,leftovers,joints,hopping,homey,hints,heartbroken,forge,florist,firsthand,fiend,dandy,crippled,corrected,conniving,conditioner,clears,chemo,bubbly,bladder,beeper,baptism,wiring,wench,weaknesses,volunteering,violating,unlocked,tummy,surrogate,subid,stray,startle,specifics,slowing,scoot,robbers,rightful,richest,qfxmjrie,puffs,pierced,pencils,paralysis,makeover,luncheon,linksynergy,jerky,jacuzzi,hitched,hangover,fracture,flock,firemen,disgusted,darned,clams,borrowing,banged,wildest,weirder,unauthorized,stunts,sleeves,sixties,shush,shalt,retro,quits,pegged,painfully,paging,omelet,memorized,lawfully,jackets,intercept,ingredient,grownup,glued,fulfilling,enchanted,delusion,daring,compelling,carton,bridesmaids,bribed,boiling,bathrooms,bandage,awaiting,assign,arrogance,antiques,ainsley,turkeys,trashing,stockings,stalked,stabilized,skates,sedated,robes,respecting,psyche,presumptuous,prejudice,paragraph,mocha,mints,mating,mantan,lorne,loads,listener,itinerary,hepatitis,heave,guesses,fading,examining,dumbest,dishwasher,deceive,cunning,cripple,convictions,confided,compulsive,compromising,burglary,bumpy,brainwashed,benes,arnie,affirmative,adrenaline,adamant,watchin,waitresses,transgenic,toughest,tainted,surround,stormed,spree,spilling,spectacle,soaking,shreds,sewers,severed,scarce,scamming,scalp,rewind,rehearsing,pretentious,potions,overrated,obstacle,nerds,meems,mcmurphy,maternity,maneuver,loathe,fertility,eloping,ecstatic,ecstasy,divorcing,dignan,costing,clubhouse,clocks,candid,bursting,breather,braces,bending,arsonist,adored,absorb,valiant,uphold,unarmed,topolsky,thrilling,thigh,terminate,sustain,spaceship,snore,sneeze,smuggling,salty,quaint,patronize,patio,morbid,mamma,kettle,joyous,invincible,interpret,insecurities,impulses,illusions,holed,exploit,drivin,defenseless,dedicate,cradle,coupon,countless,conjure,cardboard,booking,backseat,accomplishment,wordsworth,wisely,valet,vaccine,urges,unnatural,unlucky,truths,traumatized,tasting,swears,strawberries,steaks,stats,skank,seducing,secretive,scumbag,screwdriver,schedules,rooting,rightfully,rattled,qualifies,puppets,prospects,pronto,posse,polling,pedestal,palms,muddy,morty,microscope,merci,lecturing,inject,incriminate,hygiene,grapefruit,gazebo,funnier,cuter,bossy,booby,aides,zende,winthrop,warrants,valentines,undressed,underage,truthfully,tampered,suffers,speechless,sparkling,sidelines,shrek,railing,puberty,pesky,outrage,outdoors,motions,moods,lunches,litter,kidnappers,itching,intuition,imitation,humility,hassling,gallons,drugstore,dosage,disrupt,dipping,deranged,debating,cuckoo,cremated,craziness,cooperating,circumstantial,chimney,blinking,biscuits,admiring,weeping,triad,trashy,soothing,slumber,slayers,skirts,siren,shindig,sentiment,rosco,riddance,quaid,purity,proceeding,pretzels,panicking,mckechnie,lovin,leaked,intruding,impersonating,ignorance,hamburgers,footprints,fluke,fleas,festivities,fences,feisty,evacuate,emergencies,deceived,creeping,craziest,corpses,conned,coincidences,bounced,bodyguards,blasted,bitterness,baloney,ashtray,apocalypse,zillion,watergate,wallpaper,telesave,sympathize,sweeter,startin,spades,sodas,snowed,sleepover,signor,seein,retainer,restroom,rested,repercussions,reliving,reconcile,prevail,preaching,overreact,o'neil,noose,moustache,manicure,maids,landlady,hypothetical,hopped,homesick,hives,hesitation,herbs,hectic,heartbreak,haunting,gangs,frown,fingerprint,exhausting,everytime,disregard,cling,chevron,chaperone,blinding,bitty,beads,battling,badgering,anticipation,upstanding,unprofessional,unhealthy,turmoil,truthful,toothpaste,tippin,thoughtless,tagataya,shooters,senseless,rewarding,propane,preposterous,pigeons,pastry,overhearing,obscene,negotiable,loner,jogging,itchy,insinuating,insides,hospitality,hormone,hearst,forthcoming,fists,fifties,etiquette,endings,destroys,despises,deprived,cuddy,crust,cloak,circumstance,chewed,casserole,bidder,bearer,artoo,applaud,appalling,vowed,virgins,vigilante,undone,throttle,testosterone,tailor,symptom,swoop,suitcases,stomp,sticker,stakeout,spoiling,snatched,smoochy,smitten,shameless,restraints,researching,renew,refund,reclaim,raoul,puzzles,purposely,punks,prosecuted,plaid,picturing,pickin,parasites,mysteriously,multiply,mascara,jukebox,interruptions,gunfire,furnace,elbows,duplicate,drapes,deliberate,decoy,cryptic,coupla,condemn,complicate,colossal,clerks,clarity,brushed,banished,argon,alarmed,worships,versa,uncanny,technicality,sundae,stumble,stripping,shuts,schmuck,satin,saliva,robber,relentless,reconnect,recipes,rearrange,rainy,psychiatrists,policemen,plunge,plugged,patched,overload,o'malley,mindless,menus,lullaby,lotte,leavin,killin,karinsky,invalid,hides,grownups,griff,flaws,flashy,flaming,fettes,evicted,dread,degrassi,dealings,dangers,cushion,bowel,barged,abide,abandoning,wonderfully,wait'll,violate,suicidal,stayin,sorted,slamming,sketchy,shoplifting,raiser,quizmaster,prefers,needless,motherhood,momentarily,migraine,lifts,leukemia,leftover,keepin,hinks,hellhole,gowns,goodies,gallon,futures,entertained,eighties,conspiring,cheery,benign,apiece,adjustments,abusive,abduction,wiping,whipping,welles,unspeakable,unidentified,trivial,transcripts,textbook,supervise,superstitious,stricken,stimulating,spielberg,slices,shelves,scratches,sabotaged,retrieval,repressed,rejecting,quickie,ponies,peeking,outraged,o'connell,moping,moaning,mausoleum,licked,kovich,klutz,interrogating,interfered,insulin,infested,incompetence,hyper,horrified,handedly,gekko,fraid,fractured,examiner,eloped,disoriented,dashing,crashdown,courier,cockroach,chipped,brushing,bombed,bolts,baths,baptized,astronaut,assurance,anemia,abuela,abiding,withholding,weave,wearin,weaker,suffocating,straws,straightforward,stench,steamed,starboard,sideways,shrinks,shortcut,scram,roasted,roaming,riviera,respectfully,repulsive,psychiatry,provoked,penitentiary,painkillers,ninotchka,mitzvah,milligrams,midge,marshmallows,looky,lapse,kubelik,intellect,improvise,implant,goa'ulds,giddy,geniuses,fruitcake,footing,fightin,drinkin,doork,detour,cuddle,crashes,combo,colonnade,cheats,cetera,bailiff,auditioning,assed,amused,alienate,aiding,aching,unwanted,topless,tongues,tiniest,superiors,soften,sheldrake,rawley,raisins,presses,plaster,nessa,narrowed,minions,merciful,lawsuits,intimidating,infirmary,inconvenient,imposter,hugged,honoring,holdin,hades,godforsaken,fumes,forgery,foolproof,folder,flattery,fingertips,exterminator,explodes,eccentric,dodging,disguised,crave,constructive,concealed,compartment,chute,chinpokomon,bodily,astronauts,alimony,accustomed,abdominal,wrinkle,wallow,valium,untrue,uncover,trembling,treasures,torched,toenails,timed,termites,telly,taunting,taransky,talker,succubus,smarts,sliding,sighting,semen,seizures,scarred,savvy,sauna,saddest,sacrificing,rubbish,riled,ratted,rationally,provenance,phonse,perky,pedal,overdose,nasal,nanites,mushy,movers,missus,midterm,merits,melodramatic,manure,knitting,invading,interpol,incapacitated,hotline,hauling,gunpoint,grail,ganza,framing,flannel,faded,eavesdrop,desserts,calories,breathtaking,bleak,blacked,batter,aggravated,yanked,wigand,whoah,unwind,undoubtedly,unattractive,twitch,trimester,torrance,timetable,taxpayers,strained,stared,slapping,sincerity,siding,shenanigans,shacking,sappy,samaritan,poorer,politely,paste,oysters,overruled,nightcap,mosquito,millimeter,merrier,manhood,lucked,kilos,ignition,hauled,harmed,goodwill,freshmen,fenmore,fasten,farce,exploding,erratic,drunks,ditching,d'artagnan,cramped,contacting,closets,clientele,chimp,bargained,arranging,anesthesia,amuse,altering,afternoons,accountable,abetting,wolek,waved,uneasy,toddy,tattooed,spauldings,sliced,sirens,schibetta,scatter,rinse,remedy,redemption,pleasures,optimism,oblige,mmmmm,masked,malicious,mailing,kosher,kiddies,judas,isolate,insecurity,incidentally,heals,headlights,growl,grilling,glazed,flunk,floats,fiery,fairness,exercising,excellency,disclosure,cupboard,counterfeit,condescending,conclusive,clicked,cleans,cholesterol,cashed,broccoli,brats,blueprints,blindfold,billing,attach,appalled,alrighty,wynant,unsolved,unreliable,toots,tighten,sweatshirt,steinbrenner,steamy,spouse,sonogram,slots,sleepless,shines,retaliate,rephrase,redeem,rambling,quilt,quarrel,prying,proverbial,priced,prescribe,prepped,pranks,possessive,plaintiff,pediatrics,overlooked,outcast,nightgown,mumbo,mediocre,mademoiselle,lunchtime,lifesaver,leaned,lambs,interns,hounding,hellmouth,hahaha,goner,ghoul,gardening,frenzy,foyer,extras,exaggerate,everlasting,enlightened,dialed,devote,deceitful,d'oeuvres,cosmetic,contaminated,conspired,conning,cavern,carving,butting,boiled,blurry,babysit,ascension,aaaaah,wildly,whoopee,whiny,weiskopf,walkie,vultures,vacations,upfront,unresolved,tampering,stockholders,snaps,sleepwalking,shrunk,sermon,seduction,scams,revolve,phenomenal,patrolling,paranormal,ounces,omigod,nightfall,lashing,innocents,infierno,incision,humming,haunts,gloss,gloating,frannie,fetal,feeny,entrapment,discomfort,detonator,dependable,concede,complication,commotion,commence,chulak,caucasian,casually,brainer,bolie,ballpark,anwar,analyzing,accommodations,youse,wring,wallowing,transgenics,thrive,tedious,stylish,strippers,sterile,squeezing,squeaky,sprained,solemn,snoring,shattering,shabby,seams,scrawny,revoked,residue,reeks,recite,ranting,quoting,predicament,plugs,pinpoint,petrified,pathological,passports,oughtta,nighter,navigate,kippie,intrigue,intentional,insufferable,hunky,how've,horrifying,hearty,hamptons,grazie,funerals,forks,fetched,excruciating,enjoyable,endanger,dumber,drying,diabolical,crossword,corry,comprehend,clipped,classmates,candlelight,brutally,brutality,boarded,bathrobe,authorize,assemble,aerobics,wholesome,whiff,vermin,trophies,trait,tragically,toying,testy,tasteful,stocked,spinach,sipping,sidetracked,scrubbing,scraping,sanctity,robberies,ridin,retribution,refrain,realities,radiant,protesting,projector,plutonium,payin,parting,o'reilly,nooooo,motherfucking,measly,manic,lalita,juggling,jerking,intro,inevitably,hypnosis,huddle,horrendous,hobbies,heartfelt,harlin,hairdresser,gonorrhea,fussing,furtwangler,fleeting,flawless,flashed,fetus,eulogy,distinctly,disrespectful,denies,crossbow,cregg,crabs,cowardly,contraction,contingency,confirming,condone,coffins,cleansing,cheesecake,certainty,cages,c'est,briefed,bravest,bosom,boils,binoculars,bachelorette,appetizer,ambushed,alerted,woozy,withhold,vulgar,utmost,unleashed,unholy,unhappiness,unconditional,typewriter,typed,twists,supermodel,subpoenaed,stringing,skeptical,schoolgirl,romantically,rocked,revoir,reopen,puncture,preach,polished,planetarium,penicillin,peacefully,nurturing,more'n,mmhmm,midgets,marklar,lodged,lifeline,jellyfish,infiltrate,hutch,horseback,heist,gents,frickin,freezes,forfeit,flakes,flair,fathered,eternally,epiphany,disgruntled,discouraged,delinquent,decipher,danvers,cubes,credible,coping,chills,cherished,catastrophe,bombshell,birthright,billionaire,ample,affections,admiration,abbotts,whatnot,watering,vinegar,unthinkable,unseen,unprepared,unorthodox,underhanded,uncool,timeless,thump,thermometer,theoretically,tapping,tagged,swung,stares,spiked,solves,smuggle,scarier,saucer,quitter,prudent,powdered,poked,pointers,peril,penetrate,penance,opium,nudge,nostrils,neurological,mockery,mobster,medically,loudly,insights,implicate,hypocritical,humanly,holiness,healthier,hammered,haldeman,gunman,gloom,freshly,francs,flunked,flawed,emptiness,drugging,dozer,derevko,deprive,deodorant,cryin,crocodile,coloring,colder,cognac,clocked,clippings,charades,chanting,certifiable,caterers,brute,brochures,botched,blinders,bitchin,banter,woken,ulcer,tread,thankfully,swine,swimsuit,swans,stressing,steaming,stamped,stabilize,squirm,snooze,shuffle,shredded,seafood,scratchy,savor,sadistic,rhetorical,revlon,realist,prosecuting,prophecies,polyester,petals,persuasion,paddles,o'leary,nuthin,neighbour,negroes,muster,meningitis,matron,lockers,letterman,legged,indictment,hypnotized,housekeeping,hopelessly,hallucinations,grader,goldilocks,girly,flask,envelopes,downside,doves,dissolve,discourage,disapprove,diabetic,deliveries,decorator,crossfire,criminally,containment,comrades,complimentary,chatter,catchy,cashier,cartel,caribou,cardiologist,brawl,booted,barbershop,aryan,angst,administer,zellie,wreak,whistles,vandalism,vamps,uterus,upstate,unstoppable,understudy,tristin,transcript,tranquilizer,toxins,tonsils,stempel,spotting,spectator,spatula,softer,snotty,slinging,showered,sexiest,sensual,sadder,rimbaud,restrain,resilient,remission,reinstate,rehash,recollection,rabies,popsicle,plausible,pediatric,patronizing,ostrich,ortolani,oooooh,omelette,mistrial,marseilles,loophole,laughin,kevvy,irritated,infidelity,hypothermia,horrific,groupie,grinding,graceful,goodspeed,gestures,frantic,extradition,echelon,disks,dawnie,dared,damsel,curled,collateral,collage,chant,calculating,bumping,bribes,boardwalk,blinds,blindly,bleeds,bickering,beasts,backside,avenge,apprehended,anguish,abusing,youthful,yells,yanking,whomever,when'd,vomiting,vengeful,unpacking,unfamiliar,undying,tumble,trolls,treacherous,tipping,tantrum,tanked,summons,straps,stomped,stinkin,stings,staked,squirrels,sprinkles,speculate,sorting,skinned,sicko,sicker,shootin,shatter,seeya,schnapps,s'posed,ronee,respectful,regroup,regretting,reeling,reckoned,ramifications,puddy,projections,preschool,plissken,platonic,permalash,outdone,outburst,mutants,mugging,misfortune,miserably,miraculously,medications,margaritas,manpower,lovemaking,logically,leeches,latrine,kneel,inflict,impostor,hypocrisy,hippies,heterosexual,heightened,hecuba,healer,gunned,grooming,groin,gooey,gloomy,frying,friendships,fredo,firepower,fathom,exhaustion,evils,endeavor,eggnog,dreaded,d'arcy,crotch,coughing,coronary,cookin,consummate,congrats,companionship,caved,caspar,bulletproof,brilliance,breakin,brash,blasting,aloud,airtight,advising,advertise,adultery,aches,wronged,upbeat,trillion,thingies,tending,tarts,surreal,specs,specialize,spade,shrew,shaping,selves,schoolwork,roomie,recuperating,rabid,quart,provocative,proudly,pretenses,prenatal,pharmaceuticals,pacing,overworked,originals,nicotine,murderous,mileage,mayonnaise,massages,losin,interrogated,injunction,impartial,homing,heartbreaker,hacks,glands,giver,fraizh,flips,flaunt,englishman,electrocuted,dusting,ducking,drifted,donating,cylon,crutches,crates,cowards,comfortably,chummy,chitchat,childbirth,businesswoman,brood,blatant,bethy,barring,bagged,awakened,asbestos,airplanes,worshipped,winnings,why're,visualize,unprotected,unleash,trays,thicker,therapists,takeoff,streisand,storeroom,stethoscope,stacked,spiteful,sneaks,snapping,slaughtered,slashed,simplest,silverware,shits,secluded,scruples,scrubs,scraps,ruptured,roaring,receptionist,recap,raditch,radiator,pushover,plastered,pharmacist,perverse,perpetrator,ornament,ointment,nineties,napping,nannies,mousse,moors,momentary,misunderstandings,manipulator,malfunction,laced,kivar,kickin,infuriating,impressionable,holdup,hires,hesitated,headphones,hammering,groundwork,grotesque,graces,gauze,gangsters,frivolous,freeing,fours,forwarding,ferrars,faulty,fantasizing,extracurricular,empathy,divorces,detonate,depraved,demeaning,deadlines,dalai,cursing,cufflink,crows,coupons,comforted,claustrophobic,casinos,camped,busboy,bluth,bennetts,baskets,attacker,aplastic,angrier,affectionate,zapped,wormhole,weaken,unrealistic,unravel,unimportant,unforgettable,twain,suspend,superbowl,stutter,stewardess,stepson,standin,spandex,souvenirs,sociopath,skeletons,shivering,sexier,selfishness,scrapbook,ritalin,ribbons,reunite,remarry,relaxation,rattling,rapist,psychosis,prepping,poses,pleasing,pisses,piling,persecuted,padded,operatives,negotiator,natty,menopause,mennihan,martimmys,loyalties,laynie,lando,justifies,intimately,inexperienced,impotent,immortality,horrors,hooky,hinges,heartbreaking,handcuffed,gypsies,guacamole,grovel,graziella,goggles,gestapo,fussy,ferragamo,feeble,eyesight,explosions,experimenting,enchanting,doubtful,dizziness,dismantle,detectors,deserving,defective,dangling,dancin,crumble,creamed,cramping,conceal,clockwork,chrissakes,chrissake,chopping,cabinets,brooding,bonfire,blurt,bloated,blackmailer,beforehand,bathed,bathe,barcode,banish,badges,babble,await,attentive,aroused,antibodies,animosity,ya'll,wrinkled,wonderland,willed,whisk,waltzing,waitressing,vigilant,upbringing,unselfish,uncles,trendy,trajectory,striped,stamina,stalled,staking,stacks,spoils,snuff,snooty,snide,shrinking,senora,secretaries,scoundrel,saline,salads,rundown,riddles,relapse,recommending,raspberry,plight,pecan,pantry,overslept,ornaments,niner,negligent,negligence,nailing,mucho,mouthed,monstrous,malpractice,lowly,loitering,logged,lingering,lettin,lattes,kamal,juror,jillefsky,jacked,irritate,intrusion,insatiable,infect,impromptu,icing,hmmmm,hefty,gasket,frightens,flapping,firstborn,faucet,estranged,envious,dopey,doesn,disposition,disposable,disappointments,dipped,dignified,deceit,dealership,deadbeat,curses,coven,counselors,concierge,clutches,casbah,callous,cahoots,brotherly,britches,brides,bethie,beige,autographed,attendants,attaboy,astonishing,appreciative,antibiotic,aneurysm,afterlife,affidavit,zoning,whats,whaddaya,vasectomy,unsuspecting,toula,topanga,tonio,toasted,tiring,terrorized,tenderness,tailing,sweats,suffocated,sucky,subconsciously,starvin,sprouts,spineless,sorrows,snowstorm,smirk,slicery,sledding,slander,simmer,signora,sigmund,seventies,sedate,scented,sandals,rollers,retraction,resigning,recuperate,receptive,racketeering,queasy,provoking,priors,prerogative,premed,pinched,pendant,outsiders,orbing,opportunist,olanov,neurologist,nanobot,mommies,molested,misread,mannered,laundromat,intercom,inspect,insanely,infatuation,indulgent,indiscretion,inconsiderate,hurrah,howling,herpes,hasta,harassed,hanukkah,groveling,groosalug,gander,galactica,futile,fridays,flier,fixes,exploiting,exorcism,evasive,endorse,emptied,dreary,dreamy,downloaded,dodged,doctored,disobeyed,disneyland,disable,dehydrated,contemplating,coconuts,cockroaches,clogged,chilling,chaperon,cameraman,bulbs,bucklands,bribing,brava,bracelets,bowels,bluepoint,appetizers,appendix,antics,anointed,analogy,almonds,yammering,winch,weirdness,wangler,vibrations,vendor,unmarked,unannounced,twerp,trespass,travesty,transfusion,trainee,towelie,tiresome,straightening,staggering,sonar,socializing,sinus,sinners,shambles,serene,scraped,scones,scepter,sarris,saberhagen,ridiculously,ridicule,rents,reconciled,radios,publicist,pubes,prune,prude,precrime,postponing,pluck,perish,peppermint,peeled,overdo,nutshell,nostalgic,mulan,mouthing,mistook,meddle,maybourne,martimmy,lobotomy,livelihood,lippman,likeness,kindest,kaffee,jocks,jerked,jeopardizing,jazzed,insured,inquisition,inhale,ingenious,holier,helmets,heirloom,heinous,haste,harmsway,hardship,hanky,gutters,gruesome,groping,goofing,godson,glare,finesse,figuratively,ferrie,endangerment,dreading,dozed,dorky,dmitri,divert,discredit,dialing,cufflinks,crutch,craps,corrupted,cocoon,cleavage,cannery,bystander,brushes,bruising,bribery,brainstorm,bolted,binge,ballistics,astute,arroway,adventurous,adoptive,addicts,addictive,yadda,whitelighters,wematanye,weeds,wedlock,wallets,vulnerability,vroom,vents,upped,unsettling,unharmed,trippin,trifle,tracing,tormenting,thats,syphilis,subtext,stickin,spices,sores,smacked,slumming,sinks,signore,shitting,shameful,shacked,septic,seedy,righteousness,relish,rectify,ravishing,quickest,phoebs,perverted,peeing,pedicure,pastrami,passionately,ozone,outnumbered,oregano,offender,nukes,nosed,nighty,nifty,mounties,motivate,moons,misinterpreted,mercenary,mentality,marsellus,lupus,lumbar,lovesick,lobsters,leaky,laundering,latch,jafar,instinctively,inspires,indoors,incarcerated,hundredth,handkerchief,gynecologist,guittierez,groundhog,grinning,goodbyes,geese,fullest,eyelashes,eyelash,enquirer,endlessly,elusive,disarm,detest,deluding,dangle,cotillion,corsage,conjugal,confessional,cones,commandment,coded,coals,chuckle,christmastime,cheeseburgers,chardonnay,celery,campfire,calming,burritos,brundle,broflovski,brighten,borderline,blinked,bling,beauties,bauers,battered,articulate,alienated,ahhhhh,agamemnon,accountants,y'see,wrongful,wrapper,workaholic,winnebago,whispered,warts,vacate,unworthy,unanswered,tonane,tolerated,throwin,throbbing,thrills,thorns,thereof,there've,tarot,sunscreen,stretcher,stereotype,soggy,sobbing,sizable,sightings,shucks,shrapnel,sever,senile,seaboard,scorned,saver,rebellious,rained,putty,prenup,pores,pinching,pertinent,peeping,paints,ovulating,opposites,occult,nutcracker,nutcase,newsstand,newfound,mocked,midterms,marshmallow,marbury,maclaren,leans,krudski,knowingly,keycard,junkies,juilliard,jolinar,irritable,invaluable,inuit,intoxicating,instruct,insolent,inexcusable,incubator,illustrious,hunsecker,houseguest,homosexuals,homeroom,hernia,harming,handgun,hallways,hallucination,gunshots,groupies,groggy,goiter,gingerbread,giggling,frigging,fledged,fedex,fairies,exchanging,exaggeration,esteemed,enlist,drags,dispense,disloyal,disconnect,desks,dentists,delacroix,degenerate,daydreaming,cushions,cuddly,corroborate,complexion,compensated,cobbler,closeness,chilled,checkmate,channing,carousel,calms,bylaws,benefactor,ballgame,baiting,backstabbing,artifact,airspace,adversary,actin,accuses,accelerant,abundantly,abstinence,zissou,zandt,yapping,witchy,willows,whadaya,vilandra,veiled,undress,undivided,underestimating,ultimatums,twirl,truckload,tremble,toasting,tingling,tents,tempered,sulking,stunk,sponges,spills,softly,snipers,scourge,rooftop,riana,revolting,revisit,refreshments,redecorating,recapture,raysy,pretense,prejudiced,precogs,pouting,poofs,pimple,piles,pediatrician,padre,packets,paces,orvelle,oblivious,objectivity,nighttime,nervosa,mexicans,meurice,melts,matchmaker,maeby,lugosi,lipnik,leprechaun,kissy,kafka,introductions,intestines,inspirational,insightful,inseparable,injections,inadvertently,hussy,huckabees,hittin,hemorrhaging,headin,haystack,hallowed,grudges,granilith,grandkids,grading,gracefully,godsend,gobbles,fragrance,fliers,finchley,farts,eyewitnesses,expendable,existential,dorms,delaying,degrading,deduction,darlings,danes,cylons,counsellor,contraire,consciously,conjuring,congratulating,cokes,buffay,brooch,bitching,bistro,bijou,bewitched,benevolent,bends,bearings,barren,aptitude,amish,amazes,abomination,worldly,whispers,whadda,wayward,wailing,vanishing,upscale,untouchable,unspoken,uncontrollable,unavoidable,unattended,trite,transvestite,toupee,timid,timers,terrorizing,swana,stumped,strolling,storybook,storming,stomachs,stoked,stationery,springtime,spontaneity,spits,spins,soaps,sentiments,scramble,scone,rooftops,retract,reflexes,rawdon,ragged,quirky,quantico,psychologically,prodigal,pounce,potty,pleasantries,pints,petting,perceive,onstage,notwithstanding,nibble,newmans,neutralize,mutilated,millionaires,mayflower,masquerade,mangy,macreedy,lunatics,lovable,locating,limping,lasagna,kwang,keepers,juvie,jaded,ironing,intuitive,intensely,insure,incantation,hysteria,hypnotize,humping,happenin,griet,grasping,glorified,ganging,g'night,focker,flunking,flimsy,flaunting,fixated,fitzwallace,fainting,eyebrow,exonerated,ether,electrician,egotistical,earthly,dusted,dignify,detonation,debrief,dazzling,dan'l,damnedest,daisies,crushes,crucify,contraband,confronting,collapsing,cocked,clicks,cliche,circled,chandelier,carburetor,callers,broads,breathes,bloodshed,blindsided,blabbing,bialystock,bashing,ballerina,aviva,arteries,anomaly,airstrip,agonizing,adjourn,aaaaa,yearning,wrecker,witnessing,whence,warhead,unsure,unheard,unfreeze,unfold,unbalanced,ugliest,troublemaker,toddler,tiptoe,threesome,thirties,thermostat,swipe,surgically,subtlety,stung,stumbling,stubs,stride,strangling,sprayed,socket,smuggled,showering,shhhhh,sabotaging,rumson,rounding,risotto,repairman,rehearsed,ratty,ragging,radiology,racquetball,racking,quieter,quicksand,prowl,prompt,premeditated,prematurely,prancing,porcupine,plated,pinocchio,peeked,peddle,panting,overweight,overrun,outing,outgrown,obsess,nursed,nodding,negativity,negatives,musketeers,mugger,motorcade,merrily,matured,masquerading,marvellous,maniacs,lovey,louse,linger,lilies,lawful,kudos,knuckle,juices,judgments,itches,intolerable,intermission,inept,incarceration,implication,imaginative,huckleberry,holster,heartburn,gunna,groomed,graciously,fulfillment,fugitives,forsaking,forgives,foreseeable,flavors,flares,fixation,fickle,fantasize,famished,fades,expiration,exclamation,erasing,eiffel,eerie,earful,duped,dulles,dissing,dissect,dispenser,dilated,detergent,desdemona,debriefing,damper,curing,crispina,crackpot,courting,cordial,conflicted,comprehension,commie,cleanup,chiropractor,charmer,chariot,cauldron,catatonic,bullied,buckets,brilliantly,breathed,booths,boardroom,blowout,blindness,blazing,biologically,bibles,biased,beseech,barbaric,balraj,audacity,anticipating,alcoholics,airhead,agendas,admittedly,absolution,youre,yippee,wittlesey,withheld,willful,whammy,weakest,washes,virtuous,videotapes,vials,unplugged,unpacked,unfairly,turbulence,tumbling,tricking,tremendously,traitors,torches,tinga,thyroid,teased,tawdry,taker,sympathies,swiped,sundaes,suave,strut,stepdad,spewing,spasm,socialize,slither,simulator,shutters,shrewd,shocks,semantics,schizophrenic,scans,savages,rya'c,runny,ruckus,royally,roadblocks,rewriting,revoke,repent,redecorate,recovers,recourse,ratched,ramali,racquet,quince,quiche,puppeteer,puking,puffed,problemo,praises,pouch,postcards,pooped,poised,piled,phoney,phobia,patching,parenthood,pardner,oozing,ohhhhh,numbing,nostril,nosey,neatly,nappa,nameless,mortuary,moronic,modesty,midwife,mcclane,matuka,maitre,lumps,lucid,loosened,loins,lawnmower,lamotta,kroehner,jinxy,jessep,jamming,jailhouse,jacking,intruders,inhuman,infatuated,indigestion,implore,implanted,hormonal,hoboken,hillbilly,heartwarming,headway,hatched,hartmans,harping,grapevine,gnome,forties,flyin,flirted,fingernail,exhilarating,enjoyment,embark,dumper,dubious,drell,docking,disillusioned,dishonor,disbarred,dicey,custodial,counterproductive,corned,cords,contemplate,concur,conceivable,cobblepot,chickened,checkout,carpe,cap'n,campers,buyin,bullies,braid,boxed,bouncy,blueberries,blubbering,bloodstream,bigamy,beeped,bearable,autographs,alarming,wretch,wimps,widower,whirlwind,whirl,warms,vandelay,unveiling,undoing,unbecoming,turnaround,touche,togetherness,tickles,ticker,teensy,taunt,sweethearts,stitched,standpoint,staffers,spotless,soothe,smothered,sickening,shouted,shepherds,shawl,seriousness,schooled,schoolboy,s'mores,roped,reminders,raggedy,preemptive,plucked,pheromones,particulars,pardoned,overpriced,overbearing,outrun,ohmigod,nosing,nicked,neanderthal,mosquitoes,mortified,milky,messin,mecha,markinson,marivellas,mannequin,manderley,madder,macready,lookie,locusts,lifetimes,lanna,lakhi,kholi,impersonate,hyperdrive,horrid,hopin,hogging,hearsay,harpy,harboring,hairdo,hafta,grasshopper,gobble,gatehouse,foosball,floozy,fished,firewood,finalize,felons,euphemism,entourage,elitist,elegance,drokken,drier,dredge,dossier,diseased,diarrhea,diagnose,despised,defuse,d'amour,contesting,conserve,conscientious,conjured,collars,clogs,chenille,chatty,chamomile,casing,calculator,brittle,breached,blurted,birthing,bikinis,astounding,assaulting,aroma,appliance,antsy,amnio,alienating,aliases,adolescence,xerox,wrongs,workload,willona,whistling,werewolves,wallaby,unwelcome,unseemly,unplug,undermining,ugliness,tyranny,tuesdays,trumpets,transference,ticks,tangible,tagging,swallowing,superheroes,studs,strep,stowed,stomping,steffy,sprain,spouting,sponsoring,sneezing,smeared,slink,shakin,sewed,seatbelt,scariest,scammed,sanctimonious,roasting,rightly,retinal,rethinking,resented,reruns,remover,racks,purest,progressing,presidente,preeclampsia,postponement,portals,poppa,pliers,pinning,pelvic,pampered,padding,overjoyed,ooooo,one'll,octavius,nonono,nicknames,neurosurgeon,narrows,misled,mislead,mishap,milltown,milking,meticulous,mediocrity,meatballs,machete,lurch,layin,knockin,khruschev,jurors,jumpin,jugular,jeweler,intellectually,inquiries,indulging,indestructible,indebted,imitate,ignores,hyperventilating,hyenas,hurrying,hermano,hellish,heheh,harshly,handout,grunemann,glances,giveaway,getup,gerome,furthest,frosting,frail,forwarded,forceful,flavored,flammable,flaky,fingered,fatherly,ethic,embezzlement,duffel,dotted,distressed,disobey,disappearances,dinky,diminish,diaphragm,deuces,creme,courteous,comforts,coerced,clots,clarification,chunks,chickie,chases,chaperoning,cartons,caper,calves,caged,bustin,bulging,bringin,boomhauer,blowin,blindfolded,biscotti,ballplayer,bagging,auster,assurances,aschen,arraigned,anonymity,alters,albatross,agreeable,adoring,abduct,wolfi,weirded,watchers,washroom,warheads,vincennes,urgency,understandably,uncomplicated,uhhhh,twitching,treadmill,thermos,tenorman,tangle,talkative,swarm,surrendering,summoning,strive,stilts,stickers,squashed,spraying,sparring,soaring,snort,sneezed,slaps,skanky,singin,sidle,shreck,shortness,shorthand,sharper,shamed,sadist,rydell,rusik,roulette,resumes,respiration,recount,reacts,purgatory,princesses,presentable,ponytail,plotted,pinot,pigtails,phillippe,peddling,paroled,orbed,offends,o'hara,moonlit,minefield,metaphors,malignant,mainframe,magicks,maggots,maclaine,loathing,leper,leaps,leaping,lashed,larch,larceny,lapses,ladyship,juncture,jiffy,jakov,invoke,infantile,inadmissible,horoscope,hinting,hideaway,hesitating,heddy,heckles,hairline,gripe,gratifying,governess,goebbels,freddo,foresee,fascination,exemplary,executioner,etcetera,escorts,endearing,eaters,earplugs,draped,disrupting,disagrees,dimes,devastate,detain,depositions,delicacy,darklighter,cynicism,cyanide,cutters,cronus,continuance,conquering,confiding,compartments,combing,cofell,clingy,cleanse,christmases,cheered,cheekbones,buttle,burdened,bruenell,broomstick,brained,bozos,bontecou,bluntman,blazes,blameless,bizarro,bellboy,beaucoup,barkeep,awaken,astray,assailant,appease,aphrodisiac,alleys,yesss,wrecks,woodpecker,wondrous,wimpy,willpower,wheeling,weepy,waxing,waive,videotaped,veritable,untouched,unlisted,unfounded,unforeseen,twinge,triggers,traipsing,toxin,tombstone,thumping,therein,testicles,telephones,tarmac,talby,tackled,swirling,suicides,suckered,subtitles,sturdy,strangler,stockbroker,stitching,steered,standup,squeal,sprinkler,spontaneously,splendor,spiking,spender,snipe,snagged,skimming,siddown,showroom,shovels,shotguns,shoelaces,shitload,shellfish,sharpest,shadowy,seizing,scrounge,scapegoat,sayonara,saddled,rummaging,roomful,renounce,reconsidered,recharge,realistically,radioed,quirks,quadrant,punctual,practising,pours,poolhouse,poltergeist,pocketbook,plainly,picnics,pesto,pawing,passageway,partied,oneself,numero,nostalgia,nitwit,neuro,mixer,meanest,mcbeal,matinee,margate,marce,manipulations,manhunt,manger,magicians,loafers,litvack,lightheaded,lifeguard,lawns,laughingstock,ingested,indignation,inconceivable,imposition,impersonal,imbecile,huddled,housewarming,horizons,homicides,hiccups,hearse,hardened,gushing,gushie,greased,goddamit,freelancer,forging,fondue,flustered,flung,flinch,flicker,fixin,festivus,fertilizer,farted,faggots,exonerate,evict,enormously,encrypted,emdash,embracing,duress,dupres,dowser,doormat,disfigured,disciplined,dibbs,depository,deathbed,dazzled,cuttin,cures,crowding,crepe,crammed,copycat,contradict,confidant,condemning,conceited,commute,comatose,clapping,circumference,chuppah,chore,choksondik,chestnuts,briault,bottomless,bonnet,blokes,berluti,beret,beggars,bankroll,bania,athos,arsenic,apperantly,ahhhhhh,afloat,accents,zipped,zeros,zeroes,zamir,yuppie,youngsters,yorkers,wisest,wipes,wield,whyn't,weirdos,wednesdays,vicksburg,upchuck,untraceable,unsupervised,unpleasantness,unhook,unconscionable,uncalled,trappings,tragedies,townie,thurgood,things'll,thine,tetanus,terrorize,temptations,tanning,tampons,swarming,straitjacket,steroid,startling,starry,squander,speculating,sollozzo,sneaked,slugs,skedaddle,sinker,silky,shortcomings,sellin,seasoned,scrubbed,screwup,scrapes,scarves,sandbox,salesmen,rooming,romances,revere,reproach,reprieve,rearranging,ravine,rationalize,raffle,punchy,psychobabble,provocation,profoundly,prescriptions,preferable,polishing,poached,pledges,pirelli,perverts,oversized,overdressed,outdid,nuptials,nefarious,mouthpiece,motels,mopping,mongrel,missin,metaphorically,mertin,memos,melodrama,melancholy,measles,meaner,mantel,maneuvering,mailroom,luring,listenin,lifeless,licks,levon,legwork,kneecaps,kippur,kiddie,kaput,justifiable,insistent,insidious,innuendo,innit,indecent,imaginable,horseshit,hemorrhoid,hella,healthiest,haywire,hamsters,hairbrush,grouchy,grisly,gratuitous,glutton,glimmer,gibberish,ghastly,gentler,generously,geeky,fuhrer,fronting,foolin,faxes,faceless,extinguisher,expel,etched,endangering,ducked,dodgeball,dives,dislocated,discrepancy,devour,derail,dementia,daycare,cynic,crumbling,cowardice,covet,cornwallis,corkscrew,cookbook,commandments,coincidental,cobwebs,clouded,clogging,clicking,clasp,chopsticks,chefs,chaps,cashing,carat,calmer,brazen,brainwashing,bradys,bowing,boned,bloodsucking,bleachers,bleached,bedpan,bearded,barrenger,bachelors,awwww,assures,assigning,asparagus,apprehend,anecdote,amoral,aggravation,afoot,acquaintances,accommodating,yakking,worshipping,wladek,willya,willies,wigged,whoosh,whisked,watered,warpath,volts,violates,valuables,uphill,unwise,untimely,unsavory,unresponsive,unpunished,unexplained,tubby,trolling,toxicology,tormented,toothache,tingly,timmiihh,thursdays,thoreau,terrifies,temperamental,telegrams,talkie,takers,symbiote,swirl,suffocate,stupider,strapping,steckler,springing,someway,sleepyhead,sledgehammer,slant,slams,showgirl,shoveling,shmoopy,sharkbait,shan't,scrambling,schematics,sandeman,sabbatical,rummy,reykjavik,revert,responsive,rescheduled,requisition,relinquish,rejoice,reckoning,recant,rebadow,reassurance,rattlesnake,ramble,primed,pricey,prance,pothole,pocus,persist,perpetrated,pekar,peeling,pastime,parmesan,pacemaker,overdrive,ominous,observant,nothings,noooooo,nonexistent,nodded,nieces,neglecting,nauseating,mutated,musket,mumbling,mowing,mouthful,mooseport,monologue,mistrust,meetin,masseuse,mantini,mailer,madre,lowlifes,locksmith,livid,liven,limos,liberating,lhasa,leniency,leering,laughable,lashes,lasagne,laceration,korben,katan,kalen,jittery,jammies,irreplaceable,intubate,intolerant,inhaler,inhaled,indifferent,indifference,impound,impolite,humbly,heroics,heigh,guillotine,guesthouse,grounding,grips,gossiping,goatee,gnomes,gellar,frutt,frobisher,freudian,foolishness,flagged,femme,fatso,fatherhood,fantasized,fairest,faintest,eyelids,extravagant,extraterrestrial,extraordinarily,escalator,elevate,drivel,dissed,dismal,disarray,dinnertime,devastation,dermatologist,delicately,defrost,debutante,debacle,damone,dainty,cuvee,culpa,crucified,creeped,crayons,courtship,convene,congresswoman,concocted,compromises,comprende,comma,coleslaw,clothed,clinically,chickenshit,checkin,cesspool,caskets,calzone,brothel,boomerang,bodega,blasphemy,bitsy,bicentennial,berlini,beatin,beards,barbas,barbarians,backpacking,arrhythmia,arousing,arbitrator,antagonize,angling,anesthetic,altercation,aggressor,adversity,acathla,aaahhh,wreaking,workup,wonderin,wither,wielding,what'm,what'cha,waxed,vibrating,veterinarian,venting,vasey,valor,validate,upholstery,untied,unscathed,uninterrupted,unforgiving,undies,uncut,twinkies,tucking,treatable,treasured,tranquility,townspeople,torso,tomei,tipsy,tinsel,tidings,thirtieth,tantrums,tamper,talky,swayed,swapping,suitor,stylist,stirs,standoff,sprinklers,sparkly,snobby,snatcher,smoother,sleepin,shrug,shoebox,sheesh,shackles,setbacks,sedatives,screeching,scorched,scanned,satyr,roadblock,riverbank,ridiculed,resentful,repellent,recreate,reconvene,rebuttal,realmedia,quizzes,questionnaire,punctured,pucker,prolong,professionalism,pleasantly,pigsty,penniless,paychecks,patiently,parading,overactive,ovaries,orderlies,oracles,oiled,offending,nudie,neonatal,neighborly,moops,moonlighting,mobilize,mmmmmm,milkshake,menial,meats,mayan,maxed,mangled,magua,lunacy,luckier,liters,lansbury,kooky,knowin,jeopardized,inkling,inhalation,inflated,infecting,incense,inbound,impractical,impenetrable,idealistic,i'mma,hypocrites,hurtin,humbled,hologram,hokey,hocus,hitchhiking,hemorrhoids,headhunter,hassled,harts,hardworking,haircuts,hacksaw,genitals,gazillion,gammy,gamesphere,fugue,footwear,folly,flashlights,fives,filet,extenuating,estrogen,entails,embezzled,eloquent,egomaniac,ducts,drowsy,drones,doree,donovon,disguises,diggin,deserting,depriving,defying,deductible,decorum,decked,daylights,daybreak,dashboard,damnation,cuddling,crunching,crickets,crazies,councilman,coughed,conundrum,complimented,cohaagen,clutching,clued,clader,cheques,checkpoint,chats,channeling,ceases,carasco,capisce,cantaloupe,cancelling,campsite,burglars,breakfasts,bra'tac,blueprint,bleedin,blabbed,beneficiary,basing,avert,atone,arlyn,approves,apothecary,antiseptic,aleikuum,advisement,zadir,wobbly,withnail,whattaya,whacking,wedged,wanders,vaginal,unimaginable,undeniable,unconditionally,uncharted,unbridled,tweezers,tvmegasite,trumped,triumphant,trimming,treading,tranquilizers,toontown,thunk,suture,suppressing,strays,stonewall,stogie,stepdaughter,stace,squint,spouses,splashed,speakin,sounder,sorrier,sorrel,sombrero,solemnly,softened,snobs,snippy,snare,smoothing,slump,slimeball,slaving,silently,shiller,shakedown,sensations,scrying,scrumptious,screamin,saucy,santoses,roundup,roughed,rosary,robechaux,retrospect,rescind,reprehensible,repel,remodeling,reconsidering,reciprocate,railroaded,psychics,promos,prob'ly,pristine,printout,priestess,prenuptial,precedes,pouty,phoning,peppy,pariah,parched,panes,overloaded,overdoing,nymphs,nother,notebooks,nearing,nearer,monstrosity,milady,mieke,mephesto,medicated,marshals,manilow,mammogram,m'lady,lotsa,loopy,lesion,lenient,learner,laszlo,kross,kinks,jinxed,involuntary,insubordination,ingrate,inflatable,incarnate,inane,hypoglycemia,huntin,humongous,hoodlum,honking,hemorrhage,helpin,hathor,hatching,grotto,grandmama,gorillas,godless,girlish,ghouls,gershwin,frosted,flutter,flagpole,fetching,fatter,faithfully,exert,evasion,escalate,enticing,enchantress,elopement,drills,downtime,downloading,dorks,doorways,divulge,dissociative,disgraceful,disconcerting,deteriorate,destinies,depressive,dented,denim,decruz,decidedly,deactivate,daydreams,curls,culprit,cruelest,crippling,cranberries,corvis,copped,commend,coastguard,cloning,cirque,churning,chock,chivalry,catalogues,cartwheels,carols,canister,buttered,bundt,buljanoff,bubbling,brokers,broaden,brimstone,brainless,bores,badmouthing,autopilot,ascertain,aorta,ampata,allenby,accosted,absolve,aborted,aaagh,aaaaaah,yonder,yellin,wyndham,wrongdoing,woodsboro,wigging,wasteland,warranty,waltzed,walnuts,vividly,veggie,unnecessarily,unloaded,unicorns,understated,unclean,umbrellas,twirling,turpentine,tupperware,triage,treehouse,tidbit,tickled,threes,thousandth,thingie,terminally,teething,tassel,talkies,swoon,switchboard,swerved,suspiciously,subsequentlyne,subscribe,strudel,stroking,strictest,stensland,starin,stannart,squirming,squealing,sorely,softie,snookums,sniveling,smidge,sloth,skulking,simian,sightseeing,siamese,shudder,shoppers,sharpen,shannen,semtex,secondhand,seance,scowl,scorn,safekeeping,russe,rummage,roshman,roomies,roaches,rinds,retrace,retires,resuscitate,rerun,reputations,rekall,refreshment,reenactment,recluse,ravioli,raves,raking,purses,punishable,punchline,puked,prosky,previews,poughkeepsie,poppins,polluted,placenta,pissy,petulant,perseverance,pears,pawns,pastries,partake,panky,palate,overzealous,orchids,obstructing,objectively,obituaries,obedient,nothingness,musty,motherly,mooning,momentous,mistaking,minutemen,milos,microchip,meself,merciless,menelaus,mazel,masturbate,mahogany,lysistrata,lillienfield,likable,liberate,leveled,letdown,larynx,lardass,lainey,lagged,klorel,kidnappings,keyed,karmic,jeebies,irate,invulnerable,intrusive,insemination,inquire,injecting,informative,informants,impure,impasse,imbalance,illiterate,hurled,hunts,hematoma,headstrong,handmade,handiwork,growling,gorky,getcha,gesundheit,gazing,galley,foolishly,fondness,floris,ferocious,feathered,fateful,fancies,fakes,faker,expire,ever'body,essentials,eskimos,enlightening,enchilada,emissary,embolism,elsinore,ecklie,drenched,drazi,doped,dogging,doable,dislikes,dishonesty,disengage,discouraging,derailed,deformed,deflect,defer,deactivated,crips,constellations,congressmen,complimenting,clubbing,clawing,chromium,chimes,chews,cheatin,chaste,cellblock,caving,catered,catacombs,calamari,bucking,brulee,brits,brisk,breezes,bounces,boudoir,binks,better'n,bellied,behrani,behaves,bedding,balmy,badmouth,backers,avenging,aromatherapy,armpit,armoire,anythin,anonymously,anniversaries,aftershave,affliction,adrift,admissible,adieu,acquittal,yucky,yearn,whitter,whirlpool,wendigo,watchdog,wannabes,wakey,vomited,voicemail,valedictorian,uttered,unwed,unrequited,unnoticed,unnerving,unkind,unjust,uniformed,unconfirmed,unadulterated,unaccounted,uglier,turnoff,trampled,tramell,toads,timbuktu,throwback,thimble,tasteless,tarantula,tamale,takeovers,swish,supposing,streaking,stargher,stanzi,stabs,squeamish,splattered,spiritually,spilt,speciality,smacking,skywire,skips,skaara,simpatico,shredding,showin,shortcuts,shite,shielding,shamelessly,serafine,sentimentality,seasick,schemer,scandalous,sainted,riedenschneider,rhyming,revel,retractor,retards,resurrect,remiss,reminiscing,remanded,reiben,regains,refuel,refresher,redoing,redheaded,reassured,rearranged,rapport,qumar,prowling,prejudices,precarious,powwow,pondering,plunger,plunged,pleasantville,playpen,phlegm,perfected,pancreas,paley,ovary,outbursts,oppressed,ooohhh,omoroca,offed,o'toole,nurture,nursemaid,nosebleed,necktie,muttering,munchies,mucking,mogul,mitosis,misdemeanor,miscarried,millionth,migraines,midler,manicurist,mandelbaum,manageable,malfunctioned,magnanimous,loudmouth,longed,lifestyles,liddy,lickety,leprechauns,komako,klute,kennel,justifying,irreversible,inventing,intergalactic,insinuate,inquiring,ingenuity,inconclusive,incessant,improv,impersonation,hyena,humperdinck,hubba,housework,hoffa,hither,hissy,hippy,hijacked,heparin,hellooo,hearth,hassles,hairstyle,hahahaha,hadda,guys'll,gutted,gulls,gritty,grievous,graft,gossamer,gooder,gambled,gadgets,fundamentals,frustrations,frolicking,frock,frilly,foreseen,footloose,fondly,flirtation,flinched,flatten,farthest,exposer,evading,escrow,empathize,embryos,embodiment,ellsberg,ebola,dulcinea,dreamin,drawbacks,doting,doose,doofy,disturbs,disorderly,disgusts,detox,denominator,demeanor,deliriously,decode,debauchery,croissant,cravings,cranked,coworkers,councilor,confuses,confiscate,confines,conduit,compress,combed,clouding,clamps,cinch,chinnery,celebratory,catalogs,carpenters,carnal,canin,bundys,bulldozer,buggers,bueller,brainy,booming,bookstores,bloodbath,bittersweet,bellhop,beeping,beanstalk,beady,baudelaire,bartenders,bargains,averted,armadillo,appreciating,appraised,antlers,aloof,allowances,alleyway,affleck,abject,zilch,youore,xanax,wrenching,wouldn,witted,wicca,whorehouse,whooo,whips,vouchers,victimized,vicodin,untested,unsolicited,unfocused,unfettered,unfeeling,unexplainable,understaffed,underbelly,tutorial,tryst,trampoline,towering,tirade,thieving,thang,swimmin,swayzak,suspecting,superstitions,stubbornness,streamers,strattman,stonewalling,stiffs,stacking,spout,splice,sonrisa,smarmy,slows,slicing,sisterly,shrill,shined,seeming,sedley,seatbelts,scour,scold,schoolyard,scarring,salieri,rustling,roxbury,rewire,revved,retriever,reputable,remodel,reins,reincarnation,rance,rafters,rackets,quail,pumbaa,proclaim,probing,privates,pried,prewedding,premeditation,posturing,posterity,pleasurable,pizzeria,pimps,penmanship,penchant,pelvis,overturn,overstepped,overcoat,ovens,outsmart,outed,ooohh,oncologist,omission,offhand,odour,nyazian,notarized,nobody'll,nightie,navel,nabbed,mystique,mover,mortician,morose,moratorium,mockingbird,mobsters,mingling,methinks,messengered,merde,masochist,martouf,martians,marinara,manray,majorly,magnifying,mackerel,lurid,lugging,lonnegan,loathsome,llantano,liberace,leprosy,latinos,lanterns,lamest,laferette,kraut,intestine,innocencia,inhibitions,ineffectual,indisposed,incurable,inconvenienced,inanimate,improbable,implode,hydrant,hustling,hustled,huevos,how'm,hooey,hoods,honcho,hinge,hijack,heimlich,hamunaptra,haladki,haiku,haggle,gutsy,grunting,grueling,gribbs,greevy,grandstanding,godparents,glows,glistening,gimmick,gaping,fraiser,formalities,foreigner,folders,foggy,fitty,fiends,fe'nos,favours,eyeing,extort,expedite,escalating,epinephrine,entitles,entice,eminence,eights,earthlings,eagerly,dunville,dugout,doublemeat,doling,dispensing,dispatcher,discoloration,diners,diddly,dictates,diazepam,derogatory,delights,defies,decoder,dealio,danson,cutthroat,crumbles,croissants,crematorium,craftsmanship,could'a,cordless,cools,conked,confine,concealing,complicates,communique,cockamamie,coasters,clobbered,clipping,clipboard,clemenza,cleanser,circumcision,chanukah,certainaly,cellmate,cancels,cadmium,buzzed,bumstead,bucko,browsing,broth,braver,boggling,bobbing,blurred,birkhead,benet,belvedere,bellies,begrudge,beckworth,banky,baldness,baggy,babysitters,aversion,astonished,assorted,appetites,angina,amiss,ambulances,alibis,airway,admires,adhesive,yoyou,xxxxxx,wreaked,wracking,woooo,wooing,wised,wilshire,wedgie,waging,violets,vincey,uplifting,untrustworthy,unmitigated,uneventful,undressing,underprivileged,unburden,umbilical,tweaking,turquoise,treachery,tosses,torching,toothpick,toasts,thickens,tereza,tenacious,teldar,taint,swill,sweatin,subtly,subdural,streep,stopwatch,stockholder,stillwater,stalkers,squished,squeegee,splinters,spliced,splat,spied,spackle,sophistication,snapshots,smite,sluggish,slithered,skeeters,sidewalks,sickly,shrugs,shrubbery,shrieking,shitless,settin,sentinels,selfishly,scarcely,sangria,sanctum,sahjhan,rustle,roving,rousing,rosomorf,riddled,responsibly,renoir,remoray,remedial,refundable,redirect,recheck,ravenwood,rationalizing,ramus,ramelle,quivering,pyjamas,psychos,provocations,prouder,protestors,prodded,proctologist,primordial,pricks,prickly,precedents,pentangeli,pathetically,parka,parakeet,panicky,overthruster,outsmarted,orthopedic,oncoming,offing,nutritious,nuthouse,nourishment,nibbling,newlywed,narcissist,mutilation,mundane,mummies,mumble,mowed,morvern,mortem,mopes,molasses,misplace,miscommunication,miney,midlife,menacing,memorizing,massaging,masking,magnets,luxuries,lounging,lothario,liposuction,lidocaine,libbets,levitate,leeway,launcelot,larek,lackeys,kumbaya,kryptonite,knapsack,keyhole,katarangura,juiced,jakey,ironclad,invoice,intertwined,interlude,interferes,injure,infernal,indeedy,incur,incorrigible,incantations,impediment,igloo,hysterectomy,hounded,hollering,hindsight,heebie,havesham,hasenfuss,hankering,hangers,hakuna,gutless,gusto,grubbing,grrrr,grazed,gratification,grandeur,gorak,godammit,gnawing,glanced,frostbite,frees,frazzled,fraulein,fraternizing,fortuneteller,formaldehyde,followup,foggiest,flunky,flickering,firecrackers,figger,fetuses,fates,eyeliner,extremities,extradited,expires,exceedingly,evaporate,erupt,epileptic,entrails,emporium,egregious,eggshells,easing,duwayne,droll,dreyfuss,dovey,doubly,doozy,donkeys,donde,distrust,distressing,disintegrate,discreetly,decapitated,dealin,deader,dashed,darkroom,dares,daddies,dabble,cushy,cupcakes,cuffed,croupier,croak,crapped,coursing,coolers,contaminate,consummated,construed,condos,concoction,compulsion,commish,coercion,clemency,clairvoyant,circulate,chesterton,checkered,charlatan,chaperones,categorically,cataracts,carano,capsules,capitalize,burdon,bullshitting,brewed,breathless,breasted,brainstorming,bossing,borealis,bonsoir,bobka,boast,blimp,bleep,bleeder,blackouts,bisque,billboards,beatings,bayberry,bashed,bamboozled,balding,baklava,baffled,backfires,babak,awkwardness,attest,attachments,apologizes,anyhoo,antiquated,alcante,advisable,aahhh,aaahh,zatarc,yearbooks,wuddya,wringing,womanhood,witless,winging,whatsa,wetting,waterproof,wastin,vogelman,vocation,vindicated,vigilance,vicariously,venza,vacuuming,utensils,uplink,unveil,unloved,unloading,uninhibited,unattached,tweaked,turnips,trinkets,toughen,toting,topside,terrors,terrify,technologically,tarnish,tagliati,szpilman,surly,supple,summation,suckin,stepmom,squeaking,splashmore,souffle,solitaire,solicitation,solarium,smokers,slugged,slobbering,skylight,skimpy,sinuses,silenced,sideburns,shrinkage,shoddy,shhhhhh,shelled,shareef,shangri,seuss,serenade,scuffle,scoff,scanners,sauerkraut,sardines,sarcophagus,salvy,rusted,russells,rowboat,rolfsky,ringside,respectability,reparations,renegotiate,reminisce,reimburse,regimen,raincoat,quibble,puzzled,purposefully,pubic,proofing,prescribing,prelim,poisons,poaching,personalized,personable,peroxide,pentonville,payphone,payoffs,paleontology,overflowing,oompa,oddest,objecting,o'hare,o'daniel,notches,nobody'd,nightstand,neutralized,nervousness,nerdy,needlessly,naquadah,nappy,nantucket,nambla,mountaineer,motherfuckin,morrie,monopolizing,mohel,mistreated,misreading,misbehave,miramax,minivan,milligram,milkshakes,metamorphosis,medics,mattresses,mathesar,matchbook,matata,marys,malucci,magilla,lymphoma,lowers,lordy,linens,lindenmeyer,limelight,leapt,laxative,lather,lapel,lamppost,laguardia,kindling,kegger,kawalsky,juries,jokin,jesminder,interning,innermost,injun,infallible,industrious,indulgence,incinerator,impossibility,impart,illuminate,iguanas,hypnotic,hyped,hospitable,hoses,homemaker,hirschmuller,helpers,headset,guardianship,guapo,grubby,granola,granddaddy,goren,goblet,gluttony,globes,giorno,getter,geritol,gassed,gaggle,foxhole,fouled,foretold,floorboards,flippers,flaked,fireflies,feedings,fashionably,farragut,fallback,facials,exterminate,excites,everything'll,evenin,ethically,ensue,enema,empath,eluded,eloquently,eject,edema,dumpling,droppings,dolled,distasteful,disputing,displeasure,disdain,deterrent,dehydration,defied,decomposing,dawned,dailies,custodian,crusts,crucifix,crowning,crier,crept,craze,crawls,couldn,correcting,corkmaster,copperfield,cooties,contraption,consumes,conspire,consenting,consented,conquers,congeniality,complains,communicator,commendable,collide,coladas,colada,clout,clooney,classifieds,clammy,civility,cirrhosis,chink,catskills,carvers,carpool,carelessness,cardio,carbs,capades,butabi,busmalis,burping,burdens,bunks,buncha,bulldozers,browse,brockovich,breakthroughs,bravado,boogety,blossoms,blooming,bloodsucker,blight,betterton,betrayer,belittle,beeps,bawling,barts,bartending,bankbooks,babish,atropine,assertive,armbrust,anyanka,annoyance,anemic,anago,airwaves,aimlessly,aaargh,aaand,yoghurt,writhing,workable,winking,winded,widen,whooping,whiter,whatya,wazoo,voila,virile,vests,vestibule,versed,vanishes,urkel,uproot,unwarranted,unscheduled,unparalleled,undergrad,tweedle,turtleneck,turban,trickery,transponder,toyed,townhouse,thyself,thunderstorm,thinning,thawed,tether,technicalities,tau'ri,tarnished,taffeta,tacked,systolic,swerve,sweepstakes,swabs,suspenders,superwoman,sunsets,succulent,subpoenas,stumper,stosh,stomachache,stewed,steppin,stepatech,stateside,spicoli,sparing,soulless,sonnets,sockets,snatching,smothering,slush,sloman,slashing,sitters,simpleton,sighs,sidra,sickens,shunned,shrunken,showbiz,shopped,shimmering,shagging,semblance,segue,sedation,scuzzlebutt,scumbags,screwin,scoundrels,scarsdale,scabs,saucers,saintly,saddened,runaways,runaround,rheya,resenting,rehashing,rehabilitated,regrettable,refreshed,redial,reconnecting,ravenous,raping,rafting,quandary,pylea,putrid,puffing,psychopathic,prunes,probate,prayin,pomegranate,plummeting,planing,plagues,pinata,pithy,perversion,personals,perched,peeps,peckish,pavarotti,pajama,packin,pacifier,overstepping,okama,obstetrician,nutso,nuance,normalcy,nonnegotiable,nomak,ninny,nines,nicey,newsflash,neutered,nether,negligee,necrosis,navigating,narcissistic,mylie,muses,momento,moisturizer,moderation,misinformed,misconception,minnifield,mikkos,methodical,mebbe,meager,maybes,matchmaking,masry,markovic,malakai,luzhin,lusting,lumberjack,loopholes,loaning,lightening,leotard,launder,lamaze,kubla,kneeling,kibosh,jumpsuit,joliet,jogger,janover,jakovasaurs,irreparable,innocently,inigo,infomercial,inexplicable,indispensable,impregnated,impossibly,imitating,hunches,hummus,houmfort,hothead,hostiles,hooves,hooligans,homos,homie,hisself,heyyy,hesitant,hangout,handsomest,handouts,hairless,gwennie,guzzling,guinevere,grungy,goading,glaring,gavel,gardino,gangrene,fruitful,friendlier,freckle,freakish,forthright,forearm,footnote,flops,fixer,firecracker,finito,figgered,fezzik,fastened,farfetched,fanciful,familiarize,faire,fahrenheit,extravaganza,exploratory,explanatory,everglades,eunuch,estas,escapade,erasers,emptying,embarassing,dweeb,dutiful,dumplings,dries,drafty,dollhouse,dismissing,disgraced,discrepancies,disbelief,disagreeing,digestion,didnt,deviled,deviated,demerol,delectable,decaying,decadent,dears,dateless,d'algout,cultivating,cryto,crumpled,crumbled,cronies,crease,craves,cozying,corduroy,congratulated,confidante,compressions,complicating,compadre,coerce,classier,chums,chumash,chivalrous,chinpoko,charred,chafing,celibacy,carted,carryin,carpeting,carotid,cannibals,candor,butterscotch,busts,busier,bullcrap,buggin,brookside,brodski,brassiere,brainwash,brainiac,botrelle,bonbon,boatload,blimey,blaring,blackness,bipartisan,bimbos,bigamist,biebe,biding,betrayals,bestow,bellerophon,bedpans,bassinet,basking,barzini,barnyard,barfed,backups,audited,asinine,asalaam,arouse,applejack,annoys,anchovies,ampule,alameida,aggravate,adage,accomplices,yokel,y'ever,wringer,witwer,withdrawals,windward,willfully,whorfin,whimsical,whimpering,weddin,weathered,warmest,wanton,volant,visceral,vindication,veggies,urinate,uproar,unwritten,unwrap,unsung,unsubstantiated,unspeakably,unscrupulous,unraveling,unquote,unqualified,unfulfilled,undetectable,underlined,unattainable,unappreciated,ummmm,ulcers,tylenol,tweak,turnin,tuatha,tropez,trellis,toppings,tootin,toodle,tinkering,thrives,thespis,theatrics,thatherton,tempers,tavington,tartar,tampon,swelled,sutures,sustenance,sunflowers,sublet,stubbins,strutting,strewn,stowaway,stoic,sternin,stabilizing,spiraling,spinster,speedometer,speakeasy,soooo,soiled,sneakin,smithereens,smelt,smacks,slaughterhouse,slacks,skids,sketching,skateboards,sizzling,sixes,sirree,simplistic,shouts,shorted,shoelace,sheeit,shards,shackled,sequestered,selmak,seduces,seclusion,seamstress,seabeas,scoops,scooped,scavenger,satch,s'more,rudeness,romancing,rioja,rifkin,rieper,revise,reunions,repugnant,replicating,repaid,renewing,relaxes,rekindle,regrettably,regenerate,reels,reciting,reappear,readin,ratting,rapes,rancher,rammed,rainstorm,railroading,queers,punxsutawney,punishes,pssst,prudy,proudest,protectors,procrastinating,proactive,priss,postmortem,pompoms,poise,pickings,perfectionist,peretti,people'll,pecking,patrolman,paralegal,paragraphs,paparazzi,pankot,pampering,overstep,overpower,outweigh,omnipotent,odious,nuwanda,nurtured,newsroom,neeson,needlepoint,necklaces,neato,muggers,muffler,mousy,mourned,mosey,mopey,mongolians,moldy,misinterpret,minibar,microfilm,mendola,mended,melissande,masturbating,masbath,manipulates,maimed,mailboxes,magnetism,m'lord,m'honey,lymph,lunge,lovelier,lefferts,leezak,ledgers,larraby,laloosh,kundun,kozinski,knockoff,kissin,kiosk,kennedys,kellman,karlo,kaleidoscope,jeffy,jaywalking,instructing,infraction,informer,infarction,impulsively,impressing,impersonated,impeach,idiocy,hyperbole,hurray,humped,huhuh,hsing,hordes,hoodlums,honky,hitchhiker,hideously,heaving,heathcliff,headgear,headboard,hazing,harem,handprint,hairspray,gutiurrez,goosebumps,gondola,glitches,gasping,frolic,freeways,frayed,fortitude,forgetful,forefathers,fonder,foiled,foaming,flossing,flailing,fitzgeralds,firehouse,finders,fiftieth,fellah,fawning,farquaad,faraway,fancied,extremists,exorcist,exhale,ethros,entrust,ennui,energized,encephalitis,embezzling,elster,elixir,electrolytes,duplex,dryers,drexl,dredging,drawback,don'ts,dobisch,divorcee,disrespected,disprove,disobeying,disinfectant,dingy,digress,dieting,dictating,devoured,devise,detonators,desist,deserter,derriere,deron,deceptive,debilitating,deathwok,daffodils,curtsy,cursory,cuppa,cumin,cronkite,cremation,credence,cranking,coverup,courted,countin,counselling,cornball,contentment,consensual,compost,cluett,cleverly,cleansed,cleanliness,chopec,chomp,chins,chime,cheswick,chessler,cheapest,chatted,cauliflower,catharsis,catchin,caress,camcorder,calorie,cackling,bystanders,buttoned,buttering,butted,buries,burgel,buffoon,brogna,bragged,boutros,bogeyman,blurting,blurb,blowup,bloodhound,blissful,birthmark,bigot,bestest,belted,belligerent,beggin,befall,beeswax,beatnik,beaming,barricade,baggoli,badness,awoke,artsy,artful,aroun,armpits,arming,annihilate,anise,angiogram,anaesthetic,amorous,ambiance,alligators,adoration,admittance,adama,abydos,zonked,zhivago,yorkin,wrongfully,writin,wrappers,worrywart,woops,wonderfalls,womanly,wickedness,whoopie,wholeheartedly,whimper,which'll,wheelchairs,what'ya,warranted,wallop,wading,wacked,virginal,vermouth,vermeil,verger,ventriss,veneer,vampira,utero,ushers,urgently,untoward,unshakable,unsettled,unruly,unlocks,ungodly,undue,uncooperative,uncontrollably,unbeatable,twitchy,tumbler,truest,triumphs,triplicate,tribbey,tortures,tongaree,tightening,thorazine,theres,testifies,teenaged,tearful,taxing,taldor,syllabus,swoops,swingin,suspending,sunburn,stuttering,stupor,strides,strategize,strangulation,stooped,stipulation,stingy,stapled,squeaks,squawking,spoilsport,splicing,spiel,spencers,spasms,spaniard,softener,sodding,soapbox,smoldering,smithbauer,skittish,sifting,sickest,sicilians,shuffling,shrivel,segretti,seeping,securely,scurrying,scrunch,scrote,screwups,schenkman,sawing,savin,satine,sapiens,salvaging,salmonella,sacrilege,rumpus,ruffle,roughing,rotted,rondall,ridding,rickshaw,rialto,rhinestone,restrooms,reroute,requisite,repress,rednecks,redeeming,rayed,ravell,raked,raincheck,raffi,racked,pushin,profess,prodding,procure,presuming,preppy,prednisone,potted,posttraumatic,poorhouse,podiatrist,plowed,pledging,playroom,plait,placate,pinback,picketing,photographing,pharoah,petrak,petal,persecuting,perchance,pellets,peeved,peerless,payable,pauses,pathologist,pagliacci,overwrought,overreaction,overqualified,overheated,outcasts,otherworldly,opinionated,oodles,oftentimes,occured,obstinate,nutritionist,numbness,nubile,nooooooo,nobodies,nepotism,neanderthals,mushu,mucus,mothering,mothballs,monogrammed,molesting,misspoke,misspelled,misconstrued,miscalculated,minimums,mince,mildew,mighta,middleman,mementos,mellowed,mayol,mauled,massaged,marmalade,mardi,makings,lundegaard,lovingly,loudest,lotto,loosing,loompa,looming,longs,loathes,littlest,littering,lifelike,legalities,laundered,lapdog,lacerations,kopalski,knobs,knitted,kittridge,kidnaps,kerosene,karras,jungles,jockeys,iranoff,invoices,invigorating,insolence,insincere,insectopia,inhumane,inhaling,ingrates,infestation,individuality,indeterminate,incomprehensible,inadequacy,impropriety,importer,imaginations,illuminating,ignite,hysterics,hypodermic,hyperventilate,hyperactive,humoring,honeymooning,honed,hoist,hoarding,hitching,hiker,hightail,hemoglobin,hell'd,heinie,growin,grasped,grandparent,granddaughters,gouged,goblins,gleam,glades,gigantor,get'em,geriatric,gatekeeper,gargoyles,gardenias,garcon,garbo,gallows,gabbing,futon,fulla,frightful,freshener,fortuitous,forceps,fogged,fodder,foamy,flogging,flaun,flared,fireplaces,feverish,favell,fattest,fattening,fallow,extraordinaire,evacuating,errant,envied,enchant,enamored,egocentric,dussander,dunwitty,dullest,dropout,dredged,dorsia,doornail,donot,dongs,dogged,dodgy,ditty,dishonorable,discriminating,discontinue,dings,dilly,dictation,dialysis,delly,delightfully,daryll,dandruff,cruddy,croquet,cringe,crimp,credo,crackling,courtside,counteroffer,counterfeiting,corrupting,copping,conveyor,contusions,contusion,conspirator,consoling,connoisseur,confetti,composure,compel,colic,coddle,cocksuckers,coattails,cloned,claustrophobia,clamoring,churn,chugga,chirping,chasin,chapped,chalkboard,centimeter,caymans,catheter,casings,caprica,capelli,cannolis,cannoli,camogli,camembert,butchers,butchered,busboys,bureaucrats,buckled,bubbe,brownstone,bravely,brackley,bouquets,botox,boozing,boosters,bodhi,blunders,blunder,blockage,biocyte,betrays,bested,beryllium,beheading,beggar,begbie,beamed,bastille,barstool,barricades,barbecues,barbecued,bandwagon,backfiring,bacarra,avenged,autopsies,aunties,associating,artichoke,arrowhead,appendage,apostrophe,antacid,ansel,annul,amuses,amped,amicable,amberg,alluring,adversaries,admirers,adlai,acupuncture,abnormality,aaaahhhh,zooming,zippity,zipping,zeroed,yuletide,yoyodyne,yengeese,yeahhh,wrinkly,wracked,withered,winks,windmills,whopping,wendle,weigart,waterworks,waterbed,watchful,wantin,wagging,waaah,vying,ventricle,varnish,vacuumed,unreachable,unprovoked,unmistakable,unfriendly,unfolding,underpaid,uncuff,unappealing,unabomber,typhoid,tuxedos,tushie,turds,tumnus,troubadour,trinium,treaters,treads,transpired,transgression,tought,thready,thins,thinners,techs,teary,tattaglia,tassels,tarzana,tanking,tablecloths,synchronize,symptomatic,sycophant,swimmingly,sweatshop,surfboard,superpowers,sunroom,sunblock,sugarplum,stupidly,strumpet,strapless,stooping,stools,stealthy,stalks,stairmaster,staffer,sshhh,squatting,squatters,spectacularly,sorbet,socked,sociable,snubbed,snorting,sniffles,snazzy,snakebite,smuggler,smorgasbord,smooching,slurping,slouch,slingshot,slaved,skimmed,sisterhood,silliest,sidarthur,sheraton,shebang,sharpening,shanghaied,shakers,sendoff,scurvy,scoliosis,scaredy,scagnetti,sawchuk,saugus,sasquatch,sandbag,saltines,s'pose,roston,rostle,riveting,ristle,rifling,revulsion,reverently,retrograde,restful,resents,reptilian,reorganize,renovating,reiterate,reinvent,reinmar,reibers,reechard,recuse,reconciling,recognizance,reclaiming,recitation,recieved,rebate,reacquainted,rascals,railly,quintuplets,quahog,pygmies,puzzling,punctuality,prosthetic,proms,probie,preys,preserver,preppie,poachers,plummet,plumbers,plannin,pitying,pitfalls,piqued,pinecrest,pinches,pillage,pigheaded,physique,pessimistic,persecute,perjure,percentile,pentothal,pensky,penises,peini,pazzi,pastels,parlour,paperweight,pamper,pained,overwhelm,overalls,outrank,outpouring,outhouse,outage,ouija,obstructed,obsessions,obeying,obese,o'riley,o'higgins,nosebleeds,norad,noooooooo,nononono,nonchalant,nippy,neurosis,nekhorvich,necronomicon,naquada,n'est,mystik,mystified,mumps,muddle,mothership,moped,monumentally,monogamous,mondesi,misogynistic,misinterpreting,mindlock,mending,megaphone,meeny,medicating,meanie,masseur,markstrom,marklars,margueritas,manifesting,maharajah,lukewarm,loveliest,loran,lizardo,liquored,lipped,lingers,limey,lemkin,leisurely,lathe,latched,lapping,ladle,krevlorneswath,kosygin,khakis,kenaru,keats,kaitlan,julliard,jollies,jaundice,jargon,jackals,invisibility,insipid,inflamed,inferiority,inexperience,incinerated,incinerate,incendiary,incan,inbred,implicating,impersonator,hunks,horsing,hooded,hippopotamus,hiked,hetson,hetero,hessian,henslowe,hendler,hellstrom,headstone,hayloft,harbucks,handguns,hallucinate,haldol,haggling,gynaecologist,gulag,guilder,guaranteeing,groundskeeper,grindstone,grimoir,grievance,griddle,gribbit,greystone,graceland,gooders,goeth,gentlemanly,gelatin,gawking,ganged,fukes,fromby,frenchmen,foursome,forsley,forbids,footwork,foothold,floater,flinging,flicking,fittest,fistfight,fireballs,fillings,fiddling,fennyman,felonious,felonies,feces,favoritism,fatten,fanatics,faceman,excusing,excepted,entwined,entree,ensconced,eladio,ehrlichman,easterland,dueling,dribbling,drape,downtrodden,doused,dosed,dorleen,dokie,distort,displeased,disown,dismount,disinherited,disarmed,disapproves,diperna,dined,diligent,dicaprio,depress,decoded,debatable,dealey,darsh,damsels,damning,dad'll,d'oeuvre,curlers,curie,cubed,crikey,crepes,countrymen,cornfield,coppers,copilot,copier,cooing,conspiracies,consigliere,condoning,commoner,commies,combust,comas,colds,clawed,clamped,choosy,chomping,chimps,chigorin,chianti,cheep,checkups,cheaters,celibate,cautiously,cautionary,castell,carpentry,caroling,carjacking,caritas,caregiver,cardiology,candlesticks,canasta,cain't,burro,burnin,bunking,bumming,bullwinkle,brummel,brooms,brews,breathin,braslow,bracing,botulism,boorish,bloodless,blayne,blatantly,blankie,bedbugs,becuase,barmaid,bared,baracus,banal,bakes,backpacks,attentions,atrocious,ativan,athame,asunder,astound,assuring,aspirins,asphyxiation,ashtrays,aryans,arnon,apprehension,applauding,anvil,antiquing,antidepressants,annoyingly,amputate,altruistic,alotta,alerting,afterthought,affront,affirm,actuality,abysmal,absentee,yeller,yakushova,wuzzy,wriggle,worrier,woogyman,womanizer,windpipe,windbag,willin,whisking,whimsy,wendall,weeny,weensy,weasels,watery,watcha,wasteful,waski,washcloth,waaay,vouched,viznick,ventriloquist,vendettas,veils,vayhue,vamanos,vadimus,upstage,uppity,unsaid,unlocking,unintentionally,undetected,undecided,uncaring,unbearably,tween,tryout,trotting,trini,trimmings,trickier,treatin,treadstone,trashcan,transcendent,tramps,townsfolk,torturous,torrid,toothpicks,tolerable,tireless,tiptoeing,timmay,tillinghouse,tidying,tibia,thumbing,thrusters,thrashing,these'll,thatos,testicular,teriyaki,tenors,tenacity,tellers,telemetry,tarragon,switchblade,swicker,swells,sweatshirts,swatches,surging,supremely,sump'n,succumb,subsidize,stumbles,stuffs,stoppin,stipulate,stenographer,steamroll,stasis,stagger,squandered,splint,splendidly,splashy,splashing,specter,sorcerers,somewheres,somber,snuggled,snowmobile,sniffed,snags,smugglers,smudged,smirking,smearing,slings,sleet,sleepovers,sleek,slackers,siree,siphoning,singed,sincerest,sickened,shuffled,shriveled,shorthanded,shittin,shish,shipwrecked,shins,sheetrock,shawshank,shamu,sha're,servitude,sequins,seascape,scrapings,scoured,scorching,sandpaper,saluting,salud,ruffled,roughnecks,rougher,rosslyn,rosses,roost,roomy,romping,revolutionize,reprimanded,refute,refrigerated,reeled,redundancies,rectal,recklessly,receding,reassignment,reapers,readout,ration,raring,ramblings,raccoons,quarantined,purging,punters,psychically,premarital,pregnancies,predisposed,precautionary,pollute,podunk,plums,plaything,pixilated,pitting,piranhas,pieced,piddles,pickled,photogenic,phosphorous,pffft,pestilence,pessimist,perspiration,perps,penticoff,passageways,pardons,panics,pancamo,paleontologist,overwhelms,overstating,overpaid,overdid,outlive,orthodontist,orgies,oreos,ordover,ordinates,ooooooh,oooohhh,omelettes,officiate,obtuse,obits,nymph,novocaine,noooooooooo,nipping,nilly,nightstick,negate,neatness,natured,narcotic,narcissism,namun,nakatomi,murky,muchacho,mouthwash,motzah,morsel,morph,morlocks,mooch,moloch,molest,mohra,modus,modicum,mockolate,misdemeanors,miscalculation,middies,meringue,mercilessly,meditating,mayakovsky,maximillian,marlee,markovski,maniacal,maneuvered,magnificence,maddening,lutze,lunged,lovelies,lorry,loosening,lookee,littered,lilac,lightened,laces,kurzon,kurtzweil,kind've,kimono,kenji,kembu,keanu,kazuo,jonesing,jilted,jiggling,jewelers,jewbilee,jacqnoud,jacksons,ivories,insurmountable,innocuous,innkeeper,infantery,indulged,indescribable,incoherent,impervious,impertinent,imperfections,hunnert,huffy,horsies,horseradish,hollowed,hogwash,hockley,hissing,hiromitsu,hidin,hereafter,helpmann,hehehe,haughty,happenings,hankie,handsomely,halliwells,haklar,haise,gunsights,grossly,grope,grocer,grits,gripping,grabby,glorificus,gizzard,gilardi,gibarian,geminon,gasses,garnish,galloping,gairwyn,futterman,futility,fumigated,fruitless,friendless,freon,foregone,forego,floored,flighty,flapjacks,fizzled,ficus,festering,farbman,fabricate,eyghon,extricate,exalted,eventful,esophagus,enterprising,entail,endor,emphatically,embarrasses,electroshock,easel,duffle,drumsticks,dissection,dissected,disposing,disparaging,disorientation,disintegrated,disarming,devoting,dessaline,deprecating,deplorable,delve,degenerative,deduct,decomposed,deathly,dearie,daunting,dankova,cyclotron,cyberspace,cutbacks,culpable,cuddled,crumpets,cruelly,crouching,cranium,cramming,cowering,couric,cordesh,conversational,conclusively,clung,clotting,cleanest,chipping,chimpanzee,chests,cheapen,chainsaws,censure,catapult,caravaggio,carats,captivating,calrissian,butlers,busybody,bussing,bunion,bulimic,budging,brung,browbeat,brokenhearted,brecher,breakdowns,bracebridge,boning,blowhard,blisters,blackboard,bigotry,bialy,bhamra,bended,begat,battering,baste,basquiat,barricaded,barometer,balled,baited,badenweiler,backhand,ascenscion,argumentative,appendicitis,apparition,anxiously,antagonistic,angora,anacott,amniotic,ambience,alonna,aleck,akashic,ageless,abouts,aawwww,aaaaarrrrrrggghhh,aaaaaa,zendi,yuppies,yodel,y'hear,wrangle,wombosi,wittle,withstanding,wisecracks,wiggling,wierd,whittlesley,whipper,whattya,whatsamatter,whatchamacallit,whassup,whad'ya,weakling,warfarin,waponis,wampum,wadn't,vorash,vizzini,virtucon,viridiana,veracity,ventilated,varicose,varcon,vandalized,vamos,vamoose,vaccinated,vacationing,usted,urinal,uppers,unwittingly,unsealed,unplanned,unhinged,unhand,unfathomable,unequivocally,unbreakable,unadvisedly,udall,tynacorp,tuxes,tussle,turati,tunic,tsavo,trussed,troublemakers,trollop,tremors,transsexual,transfusions,toothbrushes,toned,toddlers,tinted,tightened,thundering,thorpey,this'd,thespian,thaddius,tenuous,tenths,tenement,telethon,teleprompter,teaspoon,taunted,tattle,tardiness,taraka,tappy,tapioca,tapeworm,talcum,tacks,swivel,swaying,superpower,summarize,sumbitch,sultry,suburbia,styrofoam,stylings,strolls,strobe,stockpile,stewardesses,sterilized,sterilize,stealin,stakeouts,squawk,squalor,squabble,sprinkled,sportsmanship,spokes,spiritus,sparklers,spareribs,sowing,sororities,sonovabitch,solicit,softy,softness,softening,snuggling,snatchers,snarling,snarky,snacking,smears,slumped,slowest,slithering,sleazebag,slayed,slaughtering,skidded,skated,sivapathasundaram,sissies,silliness,silences,sidecar,sicced,shylock,shtick,shrugged,shriek,shoves,should'a,shortcake,shockingly,shirking,shaves,shatner,sharpener,shapely,shafted,sexless,septum,selflessness,seabea,scuff,screwball,scoping,scooch,scolding,schnitzel,schemed,scalper,santy,sankara,sanest,salesperson,sakulos,safehouse,sabers,runes,rumblings,rumbling,ruijven,ringers,righto,rhinestones,retrieving,reneging,remodelling,relentlessly,regurgitate,refills,reeking,reclusive,recklessness,recanted,ranchers,rafer,quaking,quacks,prophesied,propensity,profusely,problema,prided,prays,postmark,popsicles,poodles,pollyanna,polaroids,pokes,poconos,pocketful,plunging,plugging,pleeease,platters,pitied,pinetti,piercings,phooey,phonies,pestering,periscope,pentagram,pelts,patronized,paramour,paralyze,parachutes,pales,paella,paducci,owatta,overdone,overcrowded,overcompensating,ostracized,ordinate,optometrist,operandi,omens,okayed,oedipal,nuttier,nuptial,nunheim,noxious,nourish,notepad,nitroglycerin,nibblet,neuroses,nanosecond,nabbit,mythic,munchkins,multimillion,mulroney,mucous,muchas,mountaintop,morlin,mongorians,moneybags,mom'll,molto,mixup,misgivings,mindset,michalchuk,mesmerized,merman,mensa,meaty,mbwun,materialize,materialistic,masterminded,marginally,mapuhe,malfunctioning,magnify,macnamara,macinerney,machinations,macadamia,lysol,lurks,lovelorn,lopsided,locator,litback,litany,linea,limousines,limes,lighters,liebkind,levity,levelheaded,letterhead,lesabre,leron,lepers,lefts,leftenant,laziness,layaway,laughlan,lascivious,laryngitis,lapsed,landok,laminated,kurten,kobol,knucklehead,knowed,knotted,kirkeby,kinsa,karnovsky,jolla,jimson,jettison,jeric,jawed,jankis,janitors,jango,jalopy,jailbreak,jackers,jackasses,invalidate,intercepting,intercede,insinuations,infertile,impetuous,impaled,immerse,immaterial,imbeciles,imagines,idyllic,idolized,icebox,i'd've,hypochondriac,hyphen,hurtling,hurried,hunchback,hullo,horsting,hoooo,homeboys,hollandaise,hoity,hijinks,hesitates,herrero,herndorff,helplessly,heeyy,heathen,hearin,headband,harrassment,harpies,halstrom,hahahahaha,hacer,grumbling,grimlocks,grift,greets,grandmothers,grander,grafts,gordievsky,gondorff,godorsky,glscripts,gaudy,gardeners,gainful,fuses,fukienese,frizzy,freshness,freshening,fraught,frantically,foxbooks,fortieth,forked,foibles,flunkies,fleece,flatbed,fisted,firefight,fingerpaint,filibuster,fhloston,fenceline,femur,fatigues,fanucci,fantastically,familiars,falafel,fabulously,eyesore,expedient,ewwww,eviscerated,erogenous,epidural,enchante,embarassed,embarass,embalming,elude,elspeth,electrocute,eigth,eggshell,echinacea,eases,earpiece,earlobe,dumpsters,dumbshit,dumbasses,duloc,duisberg,drummed,drinkers,dressy,dorma,doily,divvy,diverting,dissuade,disrespecting,displace,disorganized,disgustingly,discord,disapproving,diligence,didja,diced,devouring,detach,destructing,desolate,demerits,delude,delirium,degrade,deevak,deemesa,deductions,deduce,debriefed,deadbeats,dateline,darndest,damnable,dalliance,daiquiri,d'agosta,cussing,cryss,cripes,cretins,crackerjack,cower,coveting,couriers,countermission,cotswolds,convertibles,conversationalist,consorting,consoled,consarn,confides,confidentially,commited,commiserate,comme,comforter,comeuppance,combative,comanches,colosseum,colling,coexist,coaxing,cliffside,chutes,chucked,chokes,childlike,childhoods,chickening,chenowith,charmingly,changin,catsup,captioning,capsize,cappucino,capiche,candlewell,cakewalk,cagey,caddie,buxley,bumbling,bulky,buggered,brussel,brunettes,brumby,brotha,bronck,brisket,bridegroom,braided,bovary,bookkeeper,bluster,bloodline,blissfully,blase,billionaires,bicker,berrisford,bereft,berating,berate,bendy,belive,belated,beikoku,beens,bedspread,bawdy,barreling,baptize,banya,balthazar,balmoral,bakshi,bails,badgered,backstreet,awkwardly,auras,attuned,atheists,astaire,assuredly,arrivederci,appetit,appendectomy,apologetic,antihistamine,anesthesiologist,amulets,albie,alarmist,aiight,adstream,admirably,acquaint,abound,abominable,aaaaaaah,zekes,zatunica,wussy,worded,wooed,woodrell,wiretap,windowsill,windjammer,windfall,whisker,whims,whatiya,whadya,weirdly,weenies,waunt,washout,wanto,waning,victimless,verdad,veranda,vandaley,vancomycin,valise,vaguest,upshot,unzip,unwashed,untrained,unstuck,unprincipled,unmentionables,unjustly,unfolds,unemployable,uneducated,unduly,undercut,uncovering,unconsciousness,unconsciously,tyndareus,turncoat,turlock,tulle,tryouts,trouper,triplette,trepkos,tremor,treeger,trapeze,traipse,tradeoff,trach,torin,tommorow,tollan,toity,timpani,thumbprint,thankless,tell'em,telepathy,telemarketing,telekinesis,teevee,teeming,tarred,tambourine,talentless,swooped,switcheroo,swirly,sweatpants,sunstroke,suitors,sugarcoat,subways,subterfuge,subservient,subletting,stunningly,strongbox,striptease,stravanavitch,stradling,stoolie,stodgy,stocky,stifle,stealer,squeezes,squatter,squarely,sprouted,spool,spindly,speedos,soups,soundly,soulmates,somebody'll,soliciting,solenoid,sobering,snowflakes,snowballs,snores,slung,slimming,skulk,skivvies,skewered,skewer,sizing,sistine,sidebar,sickos,shushing,shunt,shugga,shone,shol'va,sharpened,shapeshifter,shadowing,shadoe,selectman,sefelt,seared,scrounging,scribbling,scooping,scintillating,schmoozing,scallops,sapphires,sanitarium,sanded,safes,rudely,roust,rosebush,rosasharn,rondell,roadhouse,riveted,rewrote,revamp,retaliatory,reprimand,replicators,replaceable,remedied,relinquishing,rejoicing,reincarnated,reimbursed,reevaluate,redid,redefine,recreating,reconnected,rebelling,reassign,rearview,rayne,ravings,ratso,rambunctious,radiologist,quiver,quiero,queef,qualms,pyrotechnics,pulsating,psychosomatic,proverb,promiscuous,profanity,prioritize,preying,predisposition,precocious,precludes,prattling,prankster,povich,potting,postpartum,porridge,polluting,plowing,pistachio,pissin,pickpocket,physicals,peruse,pertains,personified,personalize,perjured,perfecting,pepys,pepperdine,pembry,peering,peels,pedophile,patties,passkey,paratrooper,paraphernalia,paralyzing,pandering,paltry,palpable,pagers,pachyderm,overstay,overestimated,overbite,outwit,outgrow,outbid,ooops,oomph,oohhh,oldie,obliterate,objectionable,nygma,notting,noches,nitty,nighters,newsstands,newborns,neurosurgery,nauseated,nastiest,narcolepsy,mutilate,muscled,murmur,mulva,mulling,mukada,muffled,morgues,moonbeams,monogamy,molester,molestation,molars,moans,misprint,mismatched,mirth,mindful,mimosas,millander,mescaline,menstrual,menage,mellowing,medevac,meddlesome,matey,manicures,malevolent,madmen,macaroons,lydell,lycra,lunchroom,lunching,lozenges,looped,litigious,liquidate,linoleum,lingk,limitless,limber,lilacs,ligature,liftoff,lemmiwinks,leggo,learnin,lazarre,lawyered,lactose,knelt,kenosha,kemosabe,jussy,junky,jordy,jimmies,jeriko,jakovasaur,issacs,isabela,irresponsibility,ironed,intoxication,insinuated,inherits,ingest,ingenue,inflexible,inflame,inevitability,inedible,inducement,indignant,indictments,indefensible,incomparable,incommunicado,improvising,impounded,illogical,ignoramus,hydrochloric,hydrate,hungover,humorless,humiliations,hugest,hoverdrone,hovel,hmmph,hitchhike,hibernating,henchman,helloooo,heirlooms,heartsick,headdress,hatches,harebrained,hapless,hanen,handsomer,hallows,habitual,guten,gummy,guiltier,guidebook,gstaad,gruff,griss,grieved,grata,gorignak,goosed,goofed,glowed,glitz,glimpses,glancing,gilmores,gianelli,geraniums,garroway,gangbusters,gamblers,galls,fuddy,frumpy,frowning,frothy,fro'tak,frere,fragrances,forgettin,follicles,flowery,flophouse,floatin,flirts,flings,flatfoot,fingerprinting,fingerprinted,fingering,finald,fillet,fianc,femoral,federales,fawkes,fascinates,farfel,fambly,falsified,fabricating,exterminators,expectant,excusez,excrement,excercises,evian,etins,esophageal,equivalency,equate,equalizer,entrees,enquire,endearment,empathetic,emailed,eggroll,earmuffs,dyslexic,duper,duesouth,drunker,druggie,dreadfully,dramatics,dragline,downplay,downers,dominatrix,doers,docket,docile,diversify,distracts,disloyalty,disinterested,discharging,disagreeable,dirtier,dinghy,dimwitted,dimoxinil,dimmy,diatribe,devising,deviate,detriment,desertion,depressants,depravity,deniability,delinquents,defiled,deepcore,deductive,decimate,deadbolt,dauthuille,dastardly,daiquiris,daggers,dachau,curiouser,curdled,cucamonga,cruller,cruces,crosswalk,crinkle,crescendo,cremate,counseled,couches,cornea,corday,copernicus,contrition,contemptible,constipated,conjoined,confounded,condescend,concoct,conch,compensating,committment,commandeered,comely,coddled,cockfight,cluttered,clunky,clownfish,cloaked,clenched,cleanin,civilised,circumcised,cimmeria,cilantro,chutzpah,chucking,chiseled,chicka,chattering,cervix,carrey,carpal,carnations,cappuccinos,candied,calluses,calisthenics,bushy,burners,budington,buchanans,brimming,braids,boycotting,bouncers,botticelli,botherin,bookkeeping,bogyman,bogged,bloodthirsty,blintzes,blanky,binturong,billable,bigboote,bewildered,betas,bequeath,behoove,befriend,bedpost,bedded,baudelaires,barreled,barboni,barbeque,bangin,baltus,bailout,backstabber,baccarat,awning,augie,arguillo,archway,apricots,apologising,annyong,anchorman,amenable,amazement,allspice,alannis,airfare,airbags,ahhhhhhhhh,ahhhhhhhh,ahhhhhhh,agitator,adrenal,acidosis,achoo,accessorizing,accentuate,abrasions,abductor,aaaahhh,aaaaaaaa,aaaaaaa,zeroing,zelner,zeldy,yevgeny,yeska,yellows,yeesh,yeahh,yamuri,wouldn't've,workmanship,woodsman,winnin,winked,wildness,whoring,whitewash,whiney,when're,wheezer,wheelman,wheelbarrow,westerburg,weeding,watermelons,washboard,waltzes,wafting,voulez,voluptuous,vitone,vigilantes,videotaping,viciously,vices,veruca,vermeer,verifying,vasculitis,valets,upholstered,unwavering,untold,unsympathetic,unromantic,unrecognizable,unpredictability,unmask,unleashing,unintentional,unglued,unequivocal,underrated,underfoot,unchecked,unbutton,unbind,unbiased,unagi,uhhhhh,tugging,triads,trespasses,treehorn,traviata,trappers,transplants,trannie,tramping,tracheotomy,tourniquet,tooty,toothless,tomarrow,toasters,thruster,thoughtfulness,thornwood,tengo,tenfold,telltale,telephoto,telephoned,telemarketer,tearin,tastic,tastefully,tasking,taser,tamed,tallow,taketh,taillight,tadpoles,tachibana,syringes,sweated,swarthy,swagger,surges,supermodels,superhighway,sunup,sun'll,sulfa,sugarless,sufficed,subside,strolled,stringy,strengthens,straightest,straightens,storefront,stopper,stockpiling,stimulant,stiffed,steyne,sternum,stepladder,stepbrother,steers,steelheads,steakhouse,stathis,stankylecartmankennymr,standoffish,stalwart,squirted,spritz,sprig,sprawl,spousal,sphincter,spenders,spearmint,spatter,spangled,southey,soured,sonuvabitch,somethng,snuffed,sniffs,smokescreen,smilin,slobs,sleepwalker,sleds,slays,slayage,skydiving,sketched,skanks,sixed,siphoned,siphon,simpering,sigfried,sidearm,siddons,sickie,shuteye,shuffleboard,shrubberies,shrouded,showmanship,shouldn't've,shoplift,shiatsu,sentries,sentance,sensuality,seething,secretions,searing,scuttlebutt,sculpt,scowling,scouring,scorecard,schoolers,schmucks,scepters,scaly,scalps,scaffolding,sauces,sartorius,santen,salivating,sainthood,saget,saddens,rygalski,rusting,ruination,rueland,rudabaga,rottweiler,roofies,romantics,rollerblading,roldy,roadshow,rickets,rible,rheza,revisiting,retentive,resurface,restores,respite,resounding,resorting,resists,repulse,repressing,repaying,reneged,refunds,rediscover,redecorated,reconstructive,recommitted,recollect,receptacle,reassess,reanimation,realtors,razinin,rationalization,ratatouille,rashum,rasczak,rancheros,rampler,quizzing,quips,quartered,purring,pummeling,puede,proximo,prospectus,pronouncing,prolonging,procreation,proclamations,principled,prides,preoccupation,prego,precog,prattle,pounced,potshots,potpourri,porque,pomegranates,polenta,plying,pluie,plesac,playmates,plantains,pillowcase,piddle,pickers,photocopied,philistine,perpetuate,perpetually,perilous,pawned,pausing,pauper,parter,parlez,parlay,pally,ovulation,overtake,overstate,overpowering,overpowered,overconfident,overbooked,ovaltine,outweighs,outings,ottos,orrin,orifice,orangutan,oopsy,ooooooooh,oooooo,ooohhhh,ocular,obstruct,obscenely,o'dwyer,nutjob,nunur,notifying,nostrand,nonny,nonfat,noblest,nimble,nikes,nicht,newsworthy,nestled,nearsighted,ne'er,nastier,narco,nakedness,muted,mummified,mudda,mozzarella,moxica,motivator,motility,mothafucka,mortmain,mortgaged,mores,mongers,mobbed,mitigating,mistah,misrepresented,mishke,misfortunes,misdirection,mischievous,mineshaft,millaney,microwaves,metzenbaum,mccovey,masterful,masochistic,marliston,marijawana,manya,mantumbi,malarkey,magnifique,madrona,madox,machida,m'hidi,lullabies,loveliness,lotions,looka,lompoc,litterbug,litigator,lithe,liquorice,linds,limericks,lightbulb,lewises,letch,lemec,layover,lavatory,laurels,lateness,laparotomy,laboring,kuato,kroff,krispy,krauts,knuckleheads,kitschy,kippers,kimbrow,keypad,keepsake,kebab,karloff,junket,judgemental,jointed,jezzie,jetting,jeeze,jeeter,jeesus,jeebs,janeane,jails,jackhammer,ixnay,irritates,irritability,irrevocable,irrefutable,irked,invoking,intricacies,interferon,intents,insubordinate,instructive,instinctive,inquisitive,inlay,injuns,inebriated,indignity,indecisive,incisors,incacha,inalienable,impresses,impregnate,impregnable,implosion,idolizes,hypothyroidism,hypoglycemic,huseni,humvee,huddling,honing,hobnobbing,hobnob,histrionics,histamine,hirohito,hippocratic,hindquarters,hikita,hikes,hightailed,hieroglyphics,heretofore,herbalist,hehey,hedriks,heartstrings,headmistress,headlight,hardheaded,happend,handlebars,hagitha,habla,gyroscope,guys'd,guy'd,guttersnipe,grump,growed,grovelling,groan,greenbacks,gravedigger,grating,grasshoppers,grandiose,grandest,grafted,gooood,goood,gooks,godsakes,goaded,glamorama,giveth,gingham,ghostbusters,germane,georgy,gazzo,gazelles,gargle,garbled,galgenstein,gaffe,g'day,fyarl,furnish,furies,fulfills,frowns,frowned,frighteningly,freebies,freakishly,forewarned,foreclose,forearms,fordson,fonics,flushes,flitting,flemmer,flabby,fishbowl,fidgeting,fevers,feigning,faxing,fatigued,fathoms,fatherless,fancier,fanatical,factored,eyelid,eyeglasses,expresso,expletive,expectin,excruciatingly,evidentiary,ever'thing,eurotrash,eubie,estrangement,erlich,epitome,entrap,enclose,emphysema,embers,emasculating,eighths,eardrum,dyslexia,duplicitous,dumpty,dumbledore,dufus,duddy,duchamp,drunkenness,drumlin,drowns,droid,drinky,drifts,drawbridge,dramamine,douggie,douchebag,dostoyevsky,doodling,don'tcha,domineering,doings,dogcatcher,doctoring,ditzy,dissimilar,dissecting,disparage,disliking,disintegrating,dishwalla,dishonored,dishing,disengaged,disavowed,dippy,diorama,dimmed,dilate,digitalis,diggory,dicing,diagnosing,devola,desolation,dennings,denials,deliverance,deliciously,delicacies,degenerates,degas,deflector,defile,deference,decrepit,deciphered,dawdle,dauphine,daresay,dangles,dampen,damndest,cucumbers,cucaracha,cryogenically,croaks,croaked,criticise,crisper,creepiest,creams,crackle,crackin,covertly,counterintelligence,corrosive,cordially,cops'll,convulsions,convoluted,conversing,conga,confrontational,confab,condolence,condiments,complicit,compiegne,commodus,comings,cometh,collusion,collared,cockeyed,clobber,clemonds,clarithromycin,cienega,christmasy,christmassy,chloroform,chippie,chested,cheeco,checklist,chauvinist,chandlers,chambermaid,chakras,cellophane,caveat,cataloguing,cartmanland,carples,carny,carded,caramels,cappy,caped,canvassing,callback,calibrated,calamine,buttermilk,butterfingers,bunsen,bulimia,bukatari,buildin,budged,brobich,bringer,brendell,brawling,bratty,braised,boyish,boundless,botch,boosh,bookies,bonbons,bodes,bobunk,bluntly,blossoming,bloomers,bloodstains,bloodhounds,blech,biter,biometric,bioethics,bijan,bigoted,bicep,bereaved,bellowing,belching,beholden,beached,batmobile,barcodes,barch,barbecuing,bandanna,backwater,backtrack,backdraft,augustino,atrophy,atrocity,atley,atchoo,asthmatic,assoc,armchair,arachnids,aptly,appetizing,antisocial,antagonizing,anorexia,anini,andersons,anagram,amputation,alleluia,airlock,aimless,agonized,agitate,aggravating,aerosol,acing,accomplishing,accidently,abuser,abstain,abnormally,aberration,aaaaahh,zlotys,zesty,zerzura,zapruder,zantopia,yelburton,yeess,y'knowwhati'msayin,wwhat,wussies,wrenched,would'a,worryin,wormser,wooooo,wookiee,wolchek,wishin,wiseguys,windbreaker,wiggy,wieners,wiedersehen,whoopin,whittled,wherefore,wharvey,welts,wellstone,wedges,wavered,watchit,wastebasket,wango,waken,waitressed,wacquiem,vrykolaka,voula,vitally,visualizing,viciousness,vespers,vertes,verily,vegetarians,vater,vaporize,vannacutt,vallens,ussher,urinating,upping,unwitting,untangle,untamed,unsanitary,unraveled,unopened,unisex,uninvolved,uninteresting,unintelligible,unimaginative,undeserving,undermines,undergarments,unconcerned,tyrants,typist,tykes,tybalt,twosome,twits,tutti,turndown,tularemia,tuberculoma,tsimshian,truffaut,truer,truant,trove,triumphed,tripe,trigonometry,trifled,trifecta,tribulations,tremont,tremoille,transcends,trafficker,touchin,tomfoolery,tinkered,tinfoil,tightrope,thousan,thoracotomy,thesaurus,thawing,thatta,tessio,temps,taxidermist,tator,tachycardia,t'akaya,swelco,sweetbreads,swatting,supercollider,sunbathing,summarily,suffocation,sueleen,succinct,subsided,submissive,subjecting,subbing,subatomic,stupendous,stunted,stubble,stubbed,streetwalker,strategizing,straining,straightaway,stoli,stiffer,stickup,stens,steamroller,steadwell,steadfast,stateroom,stans,sshhhh,squishing,squinting,squealed,sprouting,sprimp,spreadsheets,sprawled,spotlights,spooning,spirals,speedboat,spectacles,speakerphone,southglen,souse,soundproof,soothsayer,sommes,somethings,solidify,soars,snorted,snorkeling,snitches,sniping,snifter,sniffin,snickering,sneer,snarl,smila,slinking,slanted,slanderous,slammin,skimp,skilosh,siteid,sirloin,singe,sighing,sidekicks,sicken,showstopper,shoplifter,shimokawa,sherborne,shavadai,sharpshooters,sharking,shagged,shaddup,senorita,sesterces,sensuous,seahaven,scullery,scorcher,schotzie,schnoz,schmooze,schlep,schizo,scents,scalping,scalped,scallop,scalding,sayeth,saybrooke,sawed,savoring,sardine,sandstorm,sandalwood,salutations,sagman,s'okay,rsvp'd,rousted,rootin,romper,romanovs,rollercoaster,rolfie,robinsons,ritzy,ritualistic,ringwald,rhymed,rheingold,rewrites,revoking,reverts,retrofit,retort,retinas,respirations,reprobate,replaying,repaint,renquist,renege,relapsing,rekindled,rejuvenating,rejuvenated,reinstating,recriminations,rechecked,reassemble,rears,reamed,reacquaint,rayanne,ravish,rathole,raspail,rarest,rapists,rants,racketeer,quittin,quitters,quintessential,queremos,quellek,quelle,quasimodo,pyromaniac,puttanesca,puritanical,purer,puree,pungent,pummel,puedo,psychotherapist,prosecutorial,prosciutto,propositioning,procrastination,probationary,primping,preventative,prevails,preservatives,preachy,praetorians,practicality,powders,potus,postop,positives,poser,portolano,portokalos,poolside,poltergeists,pocketed,poach,plummeted,plucking,plimpton,playthings,plastique,plainclothes,pinpointed,pinkus,pinks,pigskin,piffle,pictionary,piccata,photocopy,phobias,perignon,perfumes,pecks,pecked,patently,passable,parasailing,paramus,papier,paintbrush,pacer,paaiint,overtures,overthink,overstayed,overrule,overestimate,overcooked,outlandish,outgrew,outdoorsy,outdo,orchestrate,oppress,opposable,oooohh,oomupwah,okeydokey,okaaay,ohashi,of'em,obscenities,oakie,o'gar,nurection,nostradamus,norther,norcom,nooch,nonsensical,nipped,nimbala,nervously,neckline,nebbleman,narwhal,nametag,n'n't,mycenae,muzak,muumuu,mumbled,mulvehill,muggings,muffet,mouthy,motivates,motaba,moocher,mongi,moley,moisturize,mohair,mocky,mmkay,mistuh,missis,misdeeds,mincemeat,miggs,miffed,methadone,messieur,menopausal,menagerie,mcgillicuddy,mayflowers,matrimonial,matick,masai,marzipan,maplewood,manzelle,mannequins,manhole,manhandle,malfunctions,madwoman,machiavelli,lynley,lynched,lurconis,lujack,lubricant,looove,loons,loofah,lonelyhearts,lollipops,lineswoman,lifers,lexter,lepner,lemony,leggy,leafy,leadeth,lazerus,lazare,lawford,languishing,lagoda,ladman,kundera,krinkle,krendler,kreigel,kowolski,knockdown,knifed,kneed,kneecap,kids'll,kennie,kenmore,keeled,kazootie,katzenmoyer,kasdan,karak,kapowski,kakistos,julyan,jockstrap,jobless,jiggly,jaunt,jarring,jabbering,irrigate,irrevocably,irrationally,ironies,invitro,intimated,intently,intentioned,intelligently,instill,instigator,instep,inopportune,innuendoes,inflate,infects,infamy,indiscretions,indiscreet,indio,indignities,indict,indecision,inconspicuous,inappropriately,impunity,impudent,impotence,implicates,implausible,imperfection,impatience,immutable,immobilize,idealist,iambic,hysterically,hyperspace,hygienist,hydraulics,hydrated,huzzah,husks,hunched,huffed,hubris,hubbub,hovercraft,houngan,hosed,horoscopes,hopelessness,hoodwinked,honorably,honeysuckle,homegirl,holiest,hippity,hildie,hieroglyphs,hexton,herein,heckle,heaping,healthilizer,headfirst,hatsue,harlot,hardwired,halothane,hairstyles,haagen,haaaaa,gutting,gummi,groundless,groaning,gristle,grills,graynamore,grabbin,goodes,goggle,glittering,glint,gleaming,glassy,girth,gimbal,giblets,gellers,geezers,geeze,garshaw,gargantuan,garfunkel,gangway,gandarium,gamut,galoshes,gallivanting,gainfully,gachnar,fusionlips,fusilli,furiously,frugal,fricking,frederika,freckling,frauds,fountainhead,forthwith,forgo,forgettable,foresight,foresaw,fondling,fondled,fondle,folksy,fluttering,fluffing,floundering,flirtatious,flexing,flatterer,flaring,fixating,finchy,figurehead,fiendish,fertilize,ferment,fending,fellahs,feelers,fascinate,fantabulous,falsify,fallopian,faithless,fairer,fainter,failings,facetious,eyepatch,exxon,extraterrestrials,extradite,extracurriculars,extinguish,expunged,expelling,exorbitant,exhilarated,exertion,exerting,excercise,everbody,evaporated,escargot,escapee,erases,epizootics,epithelials,ephrum,entanglements,enslave,engrossed,emphatic,emeralds,ember,emancipated,elevates,ejaculate,effeminate,eccentricities,easygoing,earshot,dunks,dullness,dulli,dulled,drumstick,dropper,driftwood,dregs,dreck,dreamboat,draggin,downsizing,donowitz,dominoes,diversions,distended,dissipate,disraeli,disqualify,disowned,dishwashing,disciplining,discerning,disappoints,dinged,digested,dicking,detonating,despising,depressor,depose,deport,dents,defused,deflecting,decryption,decoys,decoupage,decompress,decibel,decadence,deafening,dawning,dater,darkened,dappy,dallying,dagon,czechoslovakians,cuticles,cuteness,cupboards,culottes,cruisin,crosshairs,cronyn,criminalistics,creatively,creaming,crapping,cranny,cowed,contradicting,constipation,confining,confidences,conceiving,conceivably,concealment,compulsively,complainin,complacent,compels,communing,commode,comming,commensurate,columnists,colonoscopy,colchicine,coddling,clump,clubbed,clowning,cliffhanger,clang,cissy,choosers,choker,chiffon,channeled,chalet,cellmates,cathartic,caseload,carjack,canvass,canisters,candlestick,candlelit,camry,calzones,calitri,caldy,byline,butterball,bustier,burlap,bureaucrat,buffoons,buenas,brookline,bronzed,broiled,broda,briss,brioche,briar,breathable,brays,brassieres,boysenberry,bowline,boooo,boonies,booklets,bookish,boogeyman,boogey,bogas,boardinghouse,bluuch,blundering,bluer,blowed,blotchy,blossomed,bloodwork,bloodied,blithering,blinks,blathering,blasphemous,blacking,birdson,bings,bfmid,bfast,bettin,berkshires,benjamins,benevolence,benched,benatar,bellybutton,belabor,behooves,beddy,beaujolais,beattle,baxworth,baseless,barfing,bannish,bankrolled,banek,ballsy,ballpoint,baffling,badder,badda,bactine,backgammon,baako,aztreonam,authoritah,auctioning,arachtoids,apropos,aprons,apprised,apprehensive,anythng,antivenin,antichrist,anorexic,anoint,anguished,angioplasty,angio,amply,ampicillin,amphetamines,alternator,alcove,alabaster,airlifted,agrabah,affidavits,admonished,admonish,addled,addendum,accuser,accompli,absurdity,absolved,abrusso,abreast,aboot,abductions,abducting,aback,ababwa,aaahhhh,zorin,zinthar,zinfandel,zillions,zephyrs,zatarcs,zacks,youuu,yokels,yardstick,yammer,y'understand,wynette,wrung,wreaths,wowed,wouldn'ta,worming,wormed,workday,woodsy,woodshed,woodchuck,wojadubakowski,withering,witching,wiseass,wiretaps,wining,willoby,wiccaning,whupped,whoopi,whoomp,wholesaler,whiteness,whiner,whatchya,wharves,wenus,weirdoes,weaning,watusi,waponi,waistband,wackos,vouching,votre,vivica,viveca,vivant,vivacious,visor,visitin,visage,vicrum,vetted,ventriloquism,venison,varnsen,vaporized,vapid,vanstock,uuuuh,ushering,urologist,urination,upstart,uprooted,unsubtitled,unspoiled,unseat,unseasonably,unseal,unsatisfying,unnerve,unlikable,unleaded,uninsured,uninspired,unicycle,unhooked,unfunny,unfreezing,unflattering,unfairness,unexpressed,unending,unencumbered,unearth,undiscovered,undisciplined,understan,undershirt,underlings,underline,undercurrent,uncivilized,uncharacteristic,umpteenth,uglies,tuney,trumps,truckasaurus,trubshaw,trouser,tringle,trifling,trickster,trespassers,trespasser,traumas,trattoria,trashes,transgressions,trampling,tp'ed,toxoplasmosis,tounge,tortillas,topsy,topple,topnotch,tonsil,tions,timmuh,timithious,tilney,tighty,tightness,tightens,tidbits,ticketed,thyme,threepio,thoughtfully,thorkel,thommo,thing'll,thefts,that've,thanksgivings,tetherball,testikov,terraforming,tepid,tendonitis,tenboom,telex,teenybopper,tattered,tattaglias,tanneke,tailspin,tablecloth,swooping,swizzle,swiping,swindled,swilling,swerving,sweatshops,swaddling,swackhammer,svetkoff,supossed,superdad,sumptuous,sugary,sugai,subvert,substantiate,submersible,sublimating,subjugation,stymied,strychnine,streetlights,strassmans,stranglehold,strangeness,straddling,straddle,stowaways,stotch,stockbrokers,stifling,stepford,steerage,steena,statuary,starlets,staggeringly,ssshhh,squaw,spurt,spungeon,spritzer,sprightly,sprays,sportswear,spoonful,splittin,splitsville,speedily,specialise,spastic,sparrin,souvlaki,southie,sourpuss,soupy,soundstage,soothes,somebody'd,softest,sociopathic,socialized,snyders,snowmobiles,snowballed,snatches,smugness,smoothest,smashes,sloshed,sleight,skyrocket,skied,skewed,sixpence,sipowicz,singling,simulates,shyness,shuvanis,showoff,shortsighted,shopkeeper,shoehorn,shithouse,shirtless,shipshape,shifu,shelve,shelbyville,sheepskin,sharpens,shaquille,shanshu,servings,sequined,seizes,seashells,scrambler,scopes,schnauzer,schmo,schizoid,scampered,savagely,saudis,santas,sandovals,sanding,saleswoman,sagging,s'cuse,rutting,ruthlessly,runneth,ruffians,rubes,rosalita,rollerblades,rohypnol,roasts,roadies,ritten,rippling,ripples,rigoletto,richardo,rethought,reshoot,reserving,reseda,rescuer,reread,requisitions,repute,reprogram,replenish,repetitious,reorganizing,reinventing,reinvented,reheat,refrigerators,reenter,recruiter,recliner,rawdy,rashes,rajeski,raison,raisers,rages,quinine,questscape,queller,pygmalion,pushers,pusan,purview,pumpin,pubescent,prudes,provolone,propriety,propped,procrastinate,processional,preyed,pretrial,portent,pooling,poofy,polloi,policia,poacher,pluses,pleasuring,platitudes,plateaued,plaguing,pittance,pinheads,pincushion,pimply,pimped,piggyback,piecing,phillipe,philipse,philby,pharaohs,petyr,petitioner,peshtigo,pesaram,persnickety,perpetrate,percolating,pepto,penne,penell,pemmican,peeks,pedaling,peacemaker,pawnshop,patting,pathologically,patchouli,pasts,pasties,passin,parlors,paltrow,palamon,padlock,paddling,oversleep,overheating,overdosed,overcharge,overblown,outrageously,ornery,opportune,oooooooooh,oohhhh,ohhhhhh,ogres,odorless,obliterated,nyong,nymphomaniac,ntozake,novocain,nough,nonnie,nonissue,nodules,nightmarish,nightline,niceties,newsman,needra,nedry,necking,navour,nauseam,nauls,narim,namath,nagged,naboo,n'sync,myslexia,mutator,mustafi,musketeer,murtaugh,murderess,munching,mumsy,muley,mouseville,mortifying,morgendorffers,moola,montel,mongoloid,molestered,moldings,mocarbies,mo'ss,mixers,misrell,misnomer,misheard,mishandled,miscreant,misconceptions,miniscule,millgate,mettle,metricconverter,meteors,menorah,mengele,melding,meanness,mcgruff,mcarnold,matzoh,matted,mastectomy,massager,marveling,marooned,marmaduke,marick,manhandled,manatees,man'll,maltin,maliciously,malfeasance,malahide,maketh,makeovers,maiming,machismo,lumpectomy,lumbering,lucci,lording,lorca,lookouts,loogie,loners,loathed,lissen,lighthearted,lifer,lickin,lewen,levitation,lestercorp,lessee,lentils,legislate,legalizing,lederhosen,lawmen,lasskopf,lardner,lambeau,lamagra,ladonn,lactic,lacquer,labatier,krabappel,kooks,knickknacks,klutzy,kleynach,klendathu,kinross,kinkaid,kind'a,ketch,kesher,karikos,karenina,kanamits,junshi,jumbled,joust,jotted,jobson,jingling,jigalong,jerries,jellies,jeeps,javna,irresistable,internist,intercranial,inseminated,inquisitor,infuriate,inflating,infidelities,incessantly,incensed,incase,incapacitate,inasmuch,inaccuracies,imploding,impeding,impediments,immaturity,illegible,iditarod,icicles,ibuprofen,i'i'm,hymie,hydrolase,hunker,humps,humons,humidor,humdinger,humbling,huggin,huffing,housecleaning,hothouse,hotcakes,hosty,hootenanny,hootchie,hoosegow,honks,honeymooners,homily,homeopathic,hitchhikers,hissed,hillnigger,hexavalent,hewwo,hershe,hermey,hergott,henny,hennigans,henhouse,hemolytic,helipad,heifer,hebrews,hebbing,heaved,headlock,harrowing,harnessed,hangovers,handi,handbasket,halfrek,hacene,gyges,guys're,gundersons,gumption,gruntmaster,grubs,grossie,groped,grins,greaseball,gravesite,gratuity,granma,grandfathers,grandbaby,gradski,gracing,gossips,gooble,goners,golitsyn,gofer,godsake,goddaughter,gnats,gluing,glares,givers,ginza,gimmie,gimmee,gennero,gemme,gazpacho,gazed,gassy,gargling,gandhiji,galvanized,gallbladder,gaaah,furtive,fumigation,fucka,fronkonsteen,frills,freezin,freewald,freeloader,frailty,forger,foolhardy,fondest,fomin,followin,follicle,flotation,flopping,floodgates,flogged,flicked,flenders,fleabag,fixings,fixable,fistful,firewater,firelight,fingerbang,finalizing,fillin,filipov,fiderer,felling,feldberg,feign,faunia,fatale,farkus,fallible,faithfulness,factoring,eyeful,extramarital,exterminated,exhume,exasperated,eviscerate,estoy,esmerelda,escapades,epoxy,enticed,enthused,entendre,engrossing,endorphins,emptive,emmys,eminently,embezzler,embarressed,embarrassingly,embalmed,eludes,eling,elated,eirie,egotitis,effecting,eerily,eecom,eczema,earthy,earlobes,eally,dyeing,dwells,duvet,duncans,dulcet,droves,droppin,drools,drey'auc,downriver,domesticity,dollop,doesnt,dobler,divulged,diversionary,distancing,dispensers,disorienting,disneyworld,dismissive,disingenuous,disheveled,disfiguring,dinning,dimming,diligently,dilettante,dilation,dickensian,diaphragms,devastatingly,destabilize,desecrate,deposing,deniece,demony,delving,delicates,deigned,defraud,deflower,defibrillator,defiantly,defenceless,defacing,deconstruction,decompose,deciphering,decibels,deceptively,deceptions,decapitation,debutantes,debonair,deadlier,dawdling,davic,darwinism,darnit,darks,danke,danieljackson,dangled,cytoxan,cutout,cutlery,curveball,curfews,cummerbund,crunches,crouched,crisps,cripples,crilly,cribs,crewman,creepin,creeds,credenza,creak,crawly,crawlin,crawlers,crated,crackheads,coworker,couldn't've,corwins,coriander,copiously,convenes,contraceptives,contingencies,contaminating,conniption,condiment,concocting,comprehending,complacency,commendatore,comebacks,com'on,collarbone,colitis,coldly,coiffure,coffers,coeds,codependent,cocksucking,cockney,cockles,clutched,closeted,cloistered,cleve,cleats,clarifying,clapped,cinnabar,chunnel,chumps,cholinesterase,choirboy,chocolatey,chlamydia,chigliak,cheesie,chauvinistic,chasm,chartreuse,charo,charnier,chapil,chalked,chadway,certifiably,cellulite,celled,cavalcade,cataloging,castrated,cassio,cashews,cartouche,carnivore,carcinogens,capulet,captivated,capt'n,cancellations,campin,callate,callar,caffeinated,cadavers,cacophony,cackle,buzzes,buttoning,busload,burglaries,burbs,buona,bunions,bullheaded,buffs,bucyk,buckling,bruschetta,browbeating,broomsticks,broody,bromly,brolin,briefings,brewskies,breathalyzer,breakups,bratwurst,brania,braiding,brags,braggin,bradywood,bottomed,bossa,bordello,bookshelf,boogida,bondsman,bolder,boggles,bludgeoned,blowtorch,blotter,blips,blemish,bleaching,blainetologists,blading,blabbermouth,birdseed,bimmel,biloxi,biggly,bianchinni,betadine,berenson,belus,belloq,begets,befitting,beepers,beelzebub,beefed,bedridden,bedevere,beckons,beaded,baubles,bauble,battleground,bathrobes,basketballs,basements,barroom,barnacle,barkin,barked,baretta,bangles,bangler,banality,bambang,baltar,ballplayers,bagman,baffles,backroom,babysat,baboons,averse,audiotape,auctioneer,atten,atcha,astonishment,arugula,arroz,antihistamines,annoyances,anesthesiology,anatomically,anachronism,amiable,amaretto,allahu,alight,aimin,ailment,afterglow,affronte,advil,adrenals,actualization,acrost,ached,accursed,accoutrements,absconded,aboveboard,abetted,aargh,aaaahh,zuwicky,zolda,ziploc,zakamatak,youve,yippie,yesterdays,yella,yearns,yearnings,yearned,yawning,yalta,yahtzee,y'mean,y'are,wuthering,wreaks,worrisome,workiiing,wooooooo,wonky,womanizing,wolodarsky,wiwith,withdraws,wishy,wisht,wipers,wiper,winos,windthorne,windsurfing,windermere,wiggled,wiggen,whwhat,whodunit,whoaaa,whittling,whitesnake,whereof,wheezing,wheeze,whatd'ya,whataya,whammo,whackin,wellll,weightless,weevil,wedgies,webbing,weasly,wayside,waxes,waturi,washy,washrooms,wandell,waitaminute,waddya,waaaah,vornac,vishnoor,virulent,vindictiveness,vinceres,villier,vigeous,vestigial,ventilate,vented,venereal,veering,veered,veddy,vaslova,valosky,vailsburg,vaginas,vagas,urethra,upstaged,uploading,unwrapping,unwieldy,untapped,unsatisfied,unquenchable,unnerved,unmentionable,unlovable,unknowns,uninformed,unimpressed,unhappily,unguarded,unexplored,undergarment,undeniably,unclench,unclaimed,uncharacteristically,unbuttoned,unblemished,ululd,uhhhm,tweeze,tutsami,tushy,tuscarora,turkle,turghan,turbinium,tubers,trucoat,troxa,tropicana,triquetra,trimmers,triceps,trespassed,traya,traumatizing,transvestites,trainors,tradin,trackers,townies,tourelles,toucha,tossin,tortious,topshop,topes,tonics,tongs,tomsk,tomorrows,toiling,toddle,tizzy,tippers,timmi,thwap,thusly,ththe,thrusts,throwers,throwed,throughway,thickening,thermonuclear,thelwall,thataway,terrifically,tendons,teleportation,telepathically,telekinetic,teetering,teaspoons,tarantulas,tapas,tanned,tangling,tamales,tailors,tahitian,tactful,tachy,tablespoon,syrah,synchronicity,synch,synapses,swooning,switchman,swimsuits,sweltering,sweetly,suvolte,suslov,surfed,supposition,suppertime,supervillains,superfluous,superego,sunspots,sunning,sunless,sundress,suckah,succotash,sublevel,subbasement,studious,striping,strenuously,straights,stonewalled,stillness,stilettos,stevesy,steno,steenwyck,stargates,stammering,staedert,squiggly,squiggle,squashing,squaring,spreadsheet,spramp,spotters,sporto,spooking,splendido,spittin,spirulina,spiky,spate,spartacus,spacerun,soonest,something'll,someth,somepin,someone'll,sofas,soberly,sobered,snowmen,snowbank,snowballing,snivelling,sniffling,snakeskin,snagging,smush,smooter,smidgen,smackers,slumlord,slossum,slimmer,slighted,sleepwalk,sleazeball,skokie,skeptic,sitarides,sistah,sipped,sindell,simpletons,simony,silkwood,silks,silken,sightless,sideboard,shuttles,shrugging,shrouds,showy,shoveled,shouldn'ta,shoplifters,shitstorm,sheeny,shapetype,shaming,shallows,shackle,shabbily,shabbas,seppuku,senility,semite,semiautomatic,selznick,secretarial,sebacio,scuzzy,scummy,scrutinized,scrunchie,scribbled,scotches,scolded,scissor,schlub,scavenging,scarin,scarfing,scallions,scald,savour,savored,saute,sarcoidosis,sandbar,saluted,salish,saith,sailboats,sagittarius,sacre,saccharine,sacamano,rushdie,rumpled,rumba,rulebook,rubbers,roughage,rotisserie,rootie,roofy,roofie,romanticize,rittle,ristorante,rippin,rinsing,ringin,rincess,rickety,reveling,retest,retaliating,restorative,reston,restaurateur,reshoots,resetting,resentments,reprogramming,repossess,repartee,renzo,remore,remitting,remeber,relaxants,rejuvenate,rejections,regenerated,refocus,referrals,reeno,recycles,recrimination,reclining,recanting,reattach,reassigning,razgul,raved,rattlesnakes,rattles,rashly,raquetball,ransack,raisinettes,raheem,radisson,radishes,raban,quoth,qumari,quints,quilts,quilting,quien,quarreled,purty,purblind,punchbowl,publically,psychotics,psychopaths,psychoanalyze,pruning,provasik,protectin,propping,proportioned,prophylactic,proofed,prompter,procreate,proclivities,prioritizing,prinze,pricked,press'll,presets,prescribes,preocupe,prejudicial,prefex,preconceived,precipice,pralines,pragmatist,powerbar,pottie,pottersville,potsie,potholes,posses,posies,portkey,porterhouse,pornographers,poring,poppycock,poppers,pomponi,pokin,poitier,podiatry,pleeze,pleadings,playbook,platelets,plane'arium,placebos,place'll,pistachios,pirated,pinochle,pineapples,pinafore,pimples,piggly,piddling,picon,pickpockets,picchu,physiologically,physic,phobic,philandering,phenomenally,pheasants,pewter,petticoat,petronis,petitioning,perturbed,perpetuating,permutat,perishable,perimeters,perfumed,percocet,per'sus,pepperjack,penalize,pelting,pellet,peignoir,pedicures,peckers,pecans,pawning,paulsson,pattycake,patrolmen,patois,pathos,pasted,parishioner,parcheesi,parachuting,papayas,pantaloons,palpitations,palantine,paintballing,overtired,overstress,oversensitive,overnights,overexcited,overanxious,overachiever,outwitted,outvoted,outnumber,outlast,outlander,out've,orphey,orchestrating,openers,ooooooo,okies,ohhhhhhhhh,ohhhhhhhh,ogling,offbeat,obsessively,obeyed,o'hana,o'bannon,o'bannion,numpce,nummy,nuked,nuances,nourishing,nosedive,norbu,nomlies,nomine,nixed,nihilist,nightshift,newmeat,neglectful,neediness,needin,naphthalene,nanocytes,nanite,naivete,n'yeah,mystifying,myhnegon,mutating,musing,mulled,muggy,muerto,muckraker,muchachos,mountainside,motherless,mosquitos,morphed,mopped,moodoo,moncho,mollem,moisturiser,mohicans,mocks,mistresses,misspent,misinterpretation,miscarry,minuses,mindee,mimes,millisecond,milked,mightn't,mightier,mierzwiak,microchips,meyerling,mesmerizing,mershaw,meecrob,medicate,meddled,mckinnons,mcgewan,mcdunnough,mcats,mbien,matzah,matriarch,masturbated,masselin,martialed,marlboros,marksmanship,marinate,marchin,manicured,malnourished,malign,majorek,magnon,magnificently,macking,machiavellian,macdougal,macchiato,macaws,macanaw,m'self,lydells,lusts,lucite,lubricants,lopper,lopped,loneliest,lonelier,lomez,lojack,loath,liquefy,lippy,limps,likin,lightness,liesl,liebchen,licious,libris,libation,lhamo,leotards,leanin,laxatives,lavished,latka,lanyard,lanky,landmines,lameness,laddies,lacerated,labored,l'amour,kreskin,kovitch,kournikova,kootchy,konoss,knknow,knickety,knackety,kmart,klicks,kiwanis,kissable,kindergartners,kilter,kidnet,kid'll,kicky,kickbacks,kickback,kholokov,kewpie,kendo,katra,kareoke,kafelnikov,kabob,junjun,jumba,julep,jordie,jondy,jolson,jenoff,jawbone,janitorial,janiro,ipecac,invigorated,intruded,intros,intravenously,interruptus,interrogations,interject,interfacing,interestin,insuring,instilled,insensitivity,inscrutable,inroads,innards,inlaid,injector,ingratitude,infuriates,infra,infliction,indelicate,incubators,incrimination,inconveniencing,inconsolable,incestuous,incas,incarcerate,inbreeding,impudence,impressionists,impeached,impassioned,imipenem,idling,idiosyncrasies,icebergs,hypotensive,hydrochloride,hushed,humus,humph,hummm,hulking,hubcaps,hubald,howya,howbout,how'll,housebroken,hotwire,hotspots,hotheaded,horrace,hopsfield,honto,honkin,honeymoons,homewrecker,hombres,hollers,hollerin,hoedown,hoboes,hobbling,hobble,hoarse,hinky,highlighters,hexes,heru'ur,hernias,heppleman,hell're,heighten,heheheheheh,heheheh,hedging,heckling,heckled,heavyset,heatshield,heathens,heartthrob,headpiece,hayseed,haveo,hauls,hasten,harridan,harpoons,hardens,harcesis,harbouring,hangouts,halkein,haleh,halberstam,hairnet,hairdressers,hacky,haaaa,h'yah,gusta,gushy,gurgling,guilted,gruel,grudging,grrrrrr,grosses,groomsmen,griping,gravest,gratified,grated,goulash,goopy,goona,goodly,godliness,godawful,godamn,glycerin,glutes,glowy,globetrotters,glimpsed,glenville,glaucoma,girlscout,giraffes,gilbey,gigglepuss,ghora,gestating,gelato,geishas,gearshift,gayness,gasped,gaslighting,garretts,garba,gablyczyck,g'head,fumigating,fumbling,fudged,fuckwad,fuck're,fuchsia,fretting,freshest,frenchies,freezers,fredrica,fraziers,fraidy,foxholes,fourty,fossilized,forsake,forfeits,foreclosed,foreal,footsies,florists,flopped,floorshow,floorboard,flinching,flecks,flaubert,flatware,flatulence,flatlined,flashdance,flail,flagging,fiver,fitzy,fishsticks,finetti,finelli,finagle,filko,fieldstone,fibber,ferrini,feedin,feasting,favore,fathering,farrouhk,farmin,fairytale,fairservice,factoid,facedown,fabled,eyeballin,extortionist,exquisitely,expedited,exorcise,existentialist,execs,exculpatory,exacerbate,everthing,eventuality,evander,euphoric,euphemisms,estamos,erred,entitle,enquiries,enormity,enfants,endive,encyclopedias,emulating,embittered,effortless,ectopic,ecirc,easely,earphones,earmarks,dweller,durslar,durned,dunois,dunking,dunked,dumdum,dullard,dudleys,druthers,druggist,drossos,drooled,driveways,drippy,dreamless,drawstring,drang,drainpipe,dozing,dotes,dorkface,doorknobs,doohickey,donnatella,doncha,domicile,dokos,dobermans,dizzying,divola,ditsy,distaste,disservice,dislodged,dislodge,disinherit,disinformation,discounting,dinka,dimly,digesting,diello,diddling,dictatorships,dictators,diagnostician,devours,devilishly,detract,detoxing,detours,detente,destructs,desecrated,derris,deplore,deplete,demure,demolitions,demean,delish,delbruck,delaford,degaulle,deftly,deformity,deflate,definatly,defector,decrypted,decontamination,decapitate,decanter,dardis,dampener,damme,daddy'll,dabbling,dabbled,d'etre,d'argent,d'alene,d'agnasti,czechoslovakian,cymbal,cyberdyne,cutoffs,cuticle,curvaceous,curiousity,crowing,crowed,croutons,cropped,criminy,crescentis,crashers,cranwell,coverin,courtrooms,countenance,cosmically,cosign,corroboration,coroners,cornflakes,copperpot,copperhead,copacetic,coordsize,convulsing,consults,conjures,congenial,concealer,compactor,commercialism,cokey,cognizant,clunkers,clumsily,clucking,cloves,cloven,cloths,clothe,clods,clocking,clings,clavicle,classless,clashing,clanking,clanging,clamping,civvies,citywide,circulatory,circuited,chronisters,chromic,choos,chloroformed,chillun,cheesed,chatterbox,chaperoned,channukah,cerebellum,centerpieces,centerfold,ceecee,ccedil,cavorting,cavemen,cauterized,cauldwell,catting,caterine,cassiopeia,carves,cartwheel,carpeted,carob,caressing,carelessly,careening,capricious,capitalistic,capillaries,candidly,camaraderie,callously,calfskin,caddies,buttholes,busywork,busses,burps,burgomeister,bunkhouse,bungchow,bugler,buffets,buffed,brutish,brusque,bronchitis,bromden,brolly,broached,brewskis,brewin,brean,breadwinner,brana,bountiful,bouncin,bosoms,borgnine,bopping,bootlegs,booing,bombosity,bolting,boilerplate,bluey,blowback,blouses,bloodsuckers,bloodstained,bloat,bleeth,blackface,blackest,blackened,blacken,blackballed,blabs,blabbering,birdbrain,bipartisanship,biodegradable,biltmore,bilked,big'uns,bidet,besotted,bernheim,benegas,bendiga,belushi,bellboys,belittling,behinds,begone,bedsheets,beckoning,beaute,beaudine,beastly,beachfront,bathes,batak,baser,baseballs,barbella,bankrolling,bandaged,baerly,backlog,backin,babying,azkaban,awwwww,aviary,authorizes,austero,aunty,attics,atreus,astounded,astonish,artemus,arses,arintero,appraiser,apathetic,anybody'd,anxieties,anticlimactic,antar,anglos,angleman,anesthetist,androscoggin,andolini,andale,amway,amuck,amniocentesis,amnesiac,americano,amara,alvah,altruism,alternapalooza,alphabetize,alpaca,allus,allergist,alexandros,alaikum,akimbo,agoraphobia,agides,aggrhh,aftertaste,adoptions,adjuster,addictions,adamantium,activator,accomplishes,aberrant,aaaaargh,aaaaaaaaaaaaa,a'ight,zzzzzzz,zucchini,zookeeper,zirconia,zippers,zequiel,zellary,zeitgeist,zanuck,zagat,you'n,ylang,yes'm,yenta,yecchh,yecch,yawns,yankin,yahdah,yaaah,y'got,xeroxed,wwooww,wristwatch,wrangled,wouldst,worthiness,worshiping,wormy,wormtail,wormholes,woosh,wollsten,wolfing,woefully,wobbling,wintry,wingding,windstorm,windowtext,wiluna,wilting,wilted,willick,willenholly,wildflowers,wildebeest,whyyy,whoppers,whoaa,whizzing,whizz,whitest,whistled,whist,whinny,wheelies,whazzup,whatwhatwhaaat,whato,whatdya,what'dya,whacks,wewell,wetsuit,welluh,weeps,waylander,wavin,wassail,wasnt,warneford,warbucks,waltons,wallbanger,waiving,waitwait,vowing,voucher,vornoff,vorhees,voldemort,vivre,vittles,vindaloo,videogames,vichyssoise,vicarious,vesuvius,verguenza,ven't,velveteen,velour,velociraptor,vastness,vasectomies,vapors,vanderhof,valmont,validates,valiantly,vacuums,usurp,usernum,us'll,urinals,unyielding,unvarnished,unturned,untouchables,untangled,unsecured,unscramble,unreturned,unremarkable,unpretentious,unnerstand,unmade,unimpeachable,unfashionable,underwrite,underlining,underling,underestimates,underappreciated,uncouth,uncork,uncommonly,unclog,uncircumcised,unchallenged,uncas,unbuttoning,unapproved,unamerican,unafraid,umpteen,umhmm,uhwhy,ughuh,typewriters,twitches,twitched,twirly,twinkling,twinges,twiddling,turners,turnabout,tumblin,tryed,trowel,trousseau,trivialize,trifles,tribianni,trenchcoat,trembled,traumatize,transitory,transients,transfuse,transcribing,tranq,trampy,traipsed,trainin,trachea,traceable,touristy,toughie,toscanini,tortola,tortilla,torreon,toreador,tommorrow,tollbooth,tollans,toidy,togas,tofurkey,toddling,toddies,toasties,toadstool,to've,tingles,timin,timey,timetables,tightest,thuggee,thrusting,thrombus,throes,thrifty,thornharts,thinnest,thicket,thetas,thesulac,tethered,testaburger,tersenadine,terrif,terdlington,tepui,temping,tector,taxidermy,tastebuds,tartlets,tartabull,tar'd,tantamount,tangy,tangles,tamer,tabula,tabletops,tabithia,szechwan,synthedyne,svenjolly,svengali,survivalists,surmise,surfboards,surefire,suprise,supremacists,suppositories,superstore,supercilious,suntac,sunburned,summercliff,sullied,sugared,suckle,subtleties,substantiated,subsides,subliminal,subhuman,strowman,stroked,stroganoff,streetlight,straying,strainer,straighter,straightener,stoplight,stirrups,stewing,stereotyping,stepmommy,stephano,stashing,starshine,stairwells,squatsie,squandering,squalid,squabbling,squab,sprinkling,spreader,spongy,spokesmen,splintered,spittle,spitter,spiced,spews,spendin,spect,spearchucker,spatulas,southtown,soused,soshi,sorter,sorrowful,sooth,some'in,soliloquy,soiree,sodomized,sobriki,soaping,snows,snowcone,snitching,snitched,sneering,snausages,snaking,smoothed,smoochies,smarten,smallish,slushy,slurring,sluman,slithers,slippin,sleuthing,sleeveless,skinless,skillfully,sketchbook,skagnetti,sista,sinning,singularly,sinewy,silverlake,siguto,signorina,sieve,sidearms,shying,shunning,shtud,shrieks,shorting,shortbread,shopkeepers,shmancy,shizzit,shitheads,shitfaced,shipmates,shiftless,shelving,shedlow,shavings,shatters,sharifa,shampoos,shallots,shafter,sha'nauc,sextant,serviceable,sepsis,senores,sendin,semis,semanski,selflessly,seinfelds,seers,seeps,seductress,secaucus,sealant,scuttling,scusa,scrunched,scissorhands,schreber,schmancy,scamps,scalloped,savoir,savagery,sarong,sarnia,santangel,samool,sallow,salino,safecracker,sadism,sacrilegious,sabrini,sabath,s'aright,ruttheimer,rudest,rubbery,rousting,rotarian,roslin,roomed,romari,romanica,rolltop,rolfski,rockettes,roared,ringleader,riffing,ribcage,rewired,retrial,reting,resuscitated,restock,resale,reprogrammed,replicant,repentant,repellant,repays,repainting,renegotiating,rendez,remem,relived,relinquishes,relearn,relaxant,rekindling,rehydrate,refueled,refreshingly,refilling,reexamine,reeseman,redness,redeemable,redcoats,rectangles,recoup,reciprocated,reassessing,realy,realer,reachin,re'kali,rawlston,ravages,rappaports,ramoray,ramming,raindrops,rahesh,radials,racists,rabartu,quiches,quench,quarreling,quaintly,quadrants,putumayo,put'em,purifier,pureed,punitis,pullout,pukin,pudgy,puddings,puckering,pterodactyl,psychodrama,psats,protestations,protectee,prosaic,propositioned,proclivity,probed,printouts,prevision,pressers,preset,preposition,preempt,preemie,preconceptions,prancan,powerpuff,potties,potpie,poseur,porthole,poops,pooping,pomade,polyps,polymerized,politeness,polisher,polack,pocketknife,poatia,plebeian,playgroup,platonically,platitude,plastering,plasmapheresis,plaids,placemats,pizzazz,pintauro,pinstripes,pinpoints,pinkner,pincer,pimento,pileup,pilates,pigmen,pieeee,phrased,photocopies,phoebes,philistines,philanderer,pheromone,phasers,pfeffernuesse,pervs,perspire,personify,perservere,perplexed,perpetrating,perkiness,perjurer,periodontist,perfunctory,perdido,percodan,pentameter,pentacle,pensive,pensione,pennybaker,pennbrooke,penhall,pengin,penetti,penetrates,pegnoir,peeve,peephole,pectorals,peckin,peaky,peaksville,paxcow,paused,patted,parkishoff,parkers,pardoning,paraplegic,paraphrasing,paperers,papered,pangs,paneling,palooza,palmed,palmdale,palatable,pacify,pacified,owwwww,oversexed,overrides,overpaying,overdrawn,overcompensate,overcomes,overcharged,outmaneuver,outfoxed,oughtn't,ostentatious,oshun,orthopedist,or'derves,ophthalmologist,operagirl,oozes,oooooooh,onesie,omnis,omelets,oktoberfest,okeydoke,ofthe,ofher,obstetrical,obeys,obeah,o'henry,nyquil,nyanyanyanyah,nuttin,nutsy,nutball,nurhachi,numbskull,nullifies,nullification,nucking,nubbin,nourished,nonspecific,noing,noinch,nohoho,nobler,nitwits,newsprint,newspaperman,newscaster,neuropathy,netherworld,neediest,navasky,narcissists,napped,nafta,mache,mykonos,mutilating,mutherfucker,mutha,mutates,mutate,musn't,murchy,multitasking,mujeeb,mudslinging,muckraking,mousetrap,mourns,mournful,motherf,mostro,morphing,morphate,moralistic,moochy,mooching,monotonous,monopolize,monocle,molehill,moland,mofet,mockup,mobilizing,mmmmmmm,mitzvahs,mistreating,misstep,misjudge,misinformation,misdirected,miscarriages,miniskirt,mindwarped,minced,milquetoast,miguelito,mightily,midstream,midriff,mideast,microbe,methuselah,mesdames,mescal,men'll,memma,megaton,megara,megalomaniac,meeee,medulla,medivac,meaninglessness,mcnuggets,mccarthyism,maypole,may've,mauve,mateys,marshack,markles,marketable,mansiere,manservant,manse,manhandling,mallomars,malcontent,malaise,majesties,mainsail,mailmen,mahandra,magnolias,magnified,magev,maelstrom,machu,macado,m'boy,m'appelle,lustrous,lureen,lunges,lumped,lumberyard,lulled,luego,lucks,lubricated,loveseat,loused,lounger,loski,lorre,loora,looong,loonies,loincloth,lofts,lodgers,lobbing,loaner,livered,liqueur,ligourin,lifesaving,lifeguards,lifeblood,liaisons,let'em,lesbianism,lence,lemonlyman,legitimize,leadin,lazars,lazarro,lawyering,laugher,laudanum,latrines,lations,laters,lapels,lakefront,lahit,lafortunata,lachrymose,l'italien,kwaini,kruczynski,kramerica,kowtow,kovinsky,korsekov,kopek,knowakowski,knievel,knacks,kiowas,killington,kickball,keyworth,keymaster,kevie,keveral,kenyons,keggers,keepsakes,kechner,keaty,kavorka,karajan,kamerev,kaggs,jujyfruit,jostled,jonestown,jokey,joists,jocko,jimmied,jiggled,jests,jenzen,jenko,jellyman,jedediah,jealitosis,jaunty,jarmel,jankle,jagoff,jagielski,jackrabbits,jabbing,jabberjaw,izzat,irresponsibly,irrepressible,irregularity,irredeemable,inuvik,intuitions,intubated,intimates,interminable,interloper,intercostal,instyle,instigate,instantaneously,ining,ingrown,ingesting,infusing,infringe,infinitum,infact,inequities,indubitably,indisputable,indescribably,indentation,indefinable,incontrovertible,inconsequential,incompletes,incoherently,inclement,incidentals,inarticulate,inadequacies,imprudent,improprieties,imprison,imprinted,impressively,impostors,importante,imperious,impale,immodest,immobile,imbedded,imbecilic,illegals,idn't,hysteric,hypotenuse,hygienic,hyeah,hushpuppies,hunhh,humpback,humored,hummed,humiliates,humidifier,huggy,huggers,huckster,hotbed,hosing,hosers,horsehair,homebody,homebake,holing,holies,hoisting,hogwallop,hocks,hobbits,hoaxes,hmmmmm,hisses,hippest,hillbillies,hilarity,heurh,herniated,hermaphrodite,hennifer,hemlines,hemline,hemery,helplessness,helmsley,hellhound,heheheheh,heeey,hedda,heartbeats,heaped,healers,headstart,headsets,headlong,hawkland,havta,haulin,harvey'll,hanta,hansom,hangnail,handstand,handrail,handoff,hallucinogen,hallor,halitosis,haberdashery,gypped,guy'll,gumbel,guerillas,guava,guardrail,grunther,grunick,groppi,groomer,grodin,gripes,grinds,grifters,gretch,greevey,greasing,graveyards,grandkid,grainy,gouging,gooney,googly,goldmuff,goldenrod,goingo,godly,gobbledygook,gobbledegook,glues,gloriously,glengarry,glassware,glamor,gimmicks,giggly,giambetti,ghoulish,ghettos,ghali,gether,geriatrics,gerbils,geosynchronous,georgio,gente,gendarme,gelbman,gazillionth,gayest,gauging,gastro,gaslight,gasbag,garters,garish,garas,gantu,gangy,gangly,gangland,galling,gadda,furrowed,funnies,funkytown,fugimotto,fudging,fuckeen,frustrates,froufrou,froot,fromberge,frizzies,fritters,frightfully,friendliest,freeloading,freelancing,freakazoid,fraternization,framers,fornication,fornicating,forethought,footstool,foisting,focussing,focking,flurries,fluffed,flintstones,fledermaus,flayed,flawlessly,flatters,flashbang,flapped,fishies,firmer,fireproof,firebug,fingerpainting,finessed,findin,financials,finality,fillets,fiercest,fiefdom,fibbing,fervor,fentanyl,fenelon,fedorchuk,feckless,feathering,faucets,farewells,fantasyland,fanaticism,faltered,faggy,faberge,extorting,extorted,exterminating,exhumation,exhilaration,exhausts,exfoliate,excels,exasperating,exacting,everybody'd,evasions,espressos,esmail,errrr,erratically,eroding,ernswiler,epcot,enthralled,ensenada,enriching,enrage,enhancer,endear,encrusted,encino,empathic,embezzle,emanates,electricians,eking,egomaniacal,egging,effacing,ectoplasm,eavesdropped,dummkopf,dugray,duchaisne,drunkard,drudge,droop,droids,drips,dripped,dribbles,drazens,downy,downsize,downpour,dosages,doppelganger,dopes,doohicky,dontcha,doneghy,divining,divest,diuretics,diuretic,distrustful,disrupts,dismemberment,dismember,disinfect,disillusionment,disheartening,discourteous,discotheque,discolored,dirtiest,diphtheria,dinks,dimpled,didya,dickwad,diatribes,diathesis,diabetics,deviants,detonates,detests,detestable,detaining,despondent,desecration,derision,derailing,deputized,depressors,dependant,dentures,denominators,demur,demonology,delts,dellarte,delacour,deflated,defib,defaced,decorators,deaqon,davola,datin,darwinian,darklighters,dandelions,dampened,damaskinos,dalrimple,d'peshu,d'hoffryn,d'astier,cynics,cutesy,cutaway,curmudgeon,curdle,culpability,cuisinart,cuffing,crypts,cryptid,crunched,crumblers,crudely,crosscheck,croon,crissake,crevasse,creswood,creepo,creases,creased,creaky,cranks,crabgrass,coveralls,couple'a,coughs,coslaw,corporeal,cornucopia,cornering,corks,cordoned,coolly,coolin,cookbooks,contrite,contented,constrictor,confound,confit,confiscating,condoned,conditioners,concussions,comprendo,comers,combustible,combusted,collingswood,coldness,coitus,codicil,coasting,clydesdale,cluttering,clunker,clunk,clumsiness,clotted,clothesline,clinches,clincher,cleverness,clench,clein,cleanses,claymores,clammed,chugging,chronically,christsakes,choque,chompers,chiseling,chirpy,chirp,chinks,chingachgook,chickenpox,chickadee,chewin,chessboard,chargin,chanteuse,chandeliers,chamdo,chagrined,chaff,certs,certainties,cerreno,cerebrum,censured,cemetary,caterwauling,cataclysmic,casitas,cased,carvel,carting,carrear,carolling,carolers,carnie,cardiogram,carbuncle,capulets,canines,candaules,canape,caldecott,calamitous,cadillacs,cachet,cabeza,cabdriver,buzzards,butai,businesswomen,bungled,bumpkins,bummers,bulldoze,buffybot,bubut,bubbies,brrrrr,brownout,brouhaha,bronzing,bronchial,broiler,briskly,briefcases,bricked,breezing,breeher,breakable,breadstick,bravenet,braved,brandies,brainwaves,brainiest,braggart,bradlee,boys're,boys'll,boys'd,boutonniere,bossed,bosomy,borans,boosts,bookshelves,bookends,boneless,bombarding,bollo,boinked,boink,bluest,bluebells,bloodshot,blockhead,blockbusters,blithely,blather,blankly,bladders,blackbeard,bitte,bippy,biogenetics,bilge,bigglesworth,bicuspids,beususe,betaseron,besmirch,bernece,bereavement,bentonville,benchley,benching,bembe,bellyaching,bellhops,belie,beleaguered,behrle,beginnin,begining,beenie,beefs,beechwood,becau,beaverhausen,beakers,bazillion,baudouin,barrytown,barringtons,barneys,barbs,barbers,barbatus,bankrupted,bailiffs,backslide,baby'd,baaad,b'fore,awwwk,aways,awakes,automatics,authenticate,aught,aubyn,attired,attagirl,atrophied,asystole,astroturf,assertiveness,artichokes,arquillians,aright,archenemy,appraise,appeased,antin,anspaugh,anesthetics,anaphylactic,amscray,ambivalence,amalio,alriiight,alphabetized,alpena,alouette,allora,alliteration,allenwood,allegiances,algerians,alcerro,alastor,ahaha,agitators,aforethought,advertises,admonition,adirondacks,adenoids,acupuncturist,acula,actuarial,activators,actionable,achingly,accusers,acclimated,acclimate,absurdly,absorbent,absolvo,absolutes,absences,abdomenizer,aaaaaaaaah,aaaaaaaaaa,a'right".split(","),
45640male_names:"james,john,robert,michael,william,david,richard,charles,joseph,thomas,christopher,daniel,paul,mark,donald,george,kenneth,steven,edward,brian,ronald,anthony,kevin,jason,matthew,gary,timothy,jose,larry,jeffrey,frank,scott,eric,stephen,andrew,raymond,gregory,joshua,jerry,dennis,walter,patrick,peter,harold,douglas,henry,carl,arthur,ryan,roger,joe,juan,jack,albert,jonathan,justin,terry,gerald,keith,samuel,willie,ralph,lawrence,nicholas,roy,benjamin,bruce,brandon,adam,harry,fred,wayne,billy,steve,louis,jeremy,aaron,randy,eugene,carlos,russell,bobby,victor,ernest,phillip,todd,jesse,craig,alan,shawn,clarence,sean,philip,chris,johnny,earl,jimmy,antonio,danny,bryan,tony,luis,mike,stanley,leonard,nathan,dale,manuel,rodney,curtis,norman,marvin,vincent,glenn,jeffery,travis,jeff,chad,jacob,melvin,alfred,kyle,francis,bradley,jesus,herbert,frederick,ray,joel,edwin,don,eddie,ricky,troy,randall,barry,bernard,mario,leroy,francisco,marcus,micheal,theodore,clifford,miguel,oscar,jay,jim,tom,calvin,alex,jon,ronnie,bill,lloyd,tommy,leon,derek,darrell,jerome,floyd,leo,alvin,tim,wesley,dean,greg,jorge,dustin,pedro,derrick,dan,zachary,corey,herman,maurice,vernon,roberto,clyde,glen,hector,shane,ricardo,sam,rick,lester,brent,ramon,tyler,gilbert,gene,marc,reginald,ruben,brett,nathaniel,rafael,edgar,milton,raul,ben,cecil,duane,andre,elmer,brad,gabriel,ron,roland,jared,adrian,karl,cory,claude,erik,darryl,neil,christian,javier,fernando,clinton,ted,mathew,tyrone,darren,lonnie,lance,cody,julio,kurt,allan,clayton,hugh,max,dwayne,dwight,armando,felix,jimmie,everett,ian,ken,bob,jaime,casey,alfredo,alberto,dave,ivan,johnnie,sidney,byron,julian,isaac,clifton,willard,daryl,virgil,andy,salvador,kirk,sergio,seth,kent,terrance,rene,eduardo,terrence,enrique,freddie,stuart,fredrick,arturo,alejandro,joey,nick,luther,wendell,jeremiah,evan,julius,donnie,otis,trevor,luke,homer,gerard,doug,kenny,hubert,angelo,shaun,lyle,matt,alfonso,orlando,rex,carlton,ernesto,pablo,lorenzo,omar,wilbur,blake,horace,roderick,kerry,abraham,rickey,ira,andres,cesar,johnathan,malcolm,rudolph,damon,kelvin,rudy,preston,alton,archie,marco,pete,randolph,garry,geoffrey,jonathon,felipe,bennie,gerardo,dominic,loren,delbert,colin,guillermo,earnest,benny,noel,rodolfo,myron,edmund,salvatore,cedric,lowell,gregg,sherman,devin,sylvester,roosevelt,israel,jermaine,forrest,wilbert,leland,simon,irving,owen,rufus,woodrow,sammy,kristopher,levi,marcos,gustavo,jake,lionel,marty,gilberto,clint,nicolas,laurence,ismael,orville,drew,ervin,dewey,wilfred,josh,hugo,ignacio,caleb,tomas,sheldon,erick,frankie,darrel,rogelio,terence,alonzo,elias,bert,elbert,ramiro,conrad,noah,grady,phil,cornelius,lamar,rolando,clay,percy,bradford,merle,darin,amos,terrell,moses,irvin,saul,roman,darnell,randal,tommie,timmy,darrin,brendan,toby,van,abel,dominick,emilio,elijah,cary,domingo,aubrey,emmett,marlon,emanuel,jerald,edmond,emil,dewayne,otto,teddy,reynaldo,bret,jess,trent,humberto,emmanuel,stephan,louie,vicente,lamont,garland,micah,efrain,heath,rodger,demetrius,ethan,eldon,rocky,pierre,eli,bryce,antoine,robbie,kendall,royce,sterling,grover,elton,cleveland,dylan,chuck,damian,reuben,stan,leonardo,russel,erwin,benito,hans,monte,blaine,ernie,curt,quentin,agustin,jamal,devon,adolfo,tyson,wilfredo,bart,jarrod,vance,denis,damien,joaquin,harlan,desmond,elliot,darwin,gregorio,kermit,roscoe,esteban,anton,solomon,norbert,elvin,nolan,carey,rod,quinton,hal,brain,rob,elwood,kendrick,darius,moises,marlin,fidel,thaddeus,cliff,marcel,ali,raphael,bryon,armand,alvaro,jeffry,dane,joesph,thurman,ned,sammie,rusty,michel,monty,rory,fabian,reggie,kris,isaiah,gus,avery,loyd,diego,adolph,millard,rocco,gonzalo,derick,rodrigo,gerry,rigoberto,alphonso,rickie,noe,vern,elvis,bernardo,mauricio,hiram,donovan,basil,nickolas,scot,vince,quincy,eddy,sebastian,federico,ulysses,heriberto,donnell,denny,gavin,emery,romeo,jayson,dion,dante,clement,coy,odell,jarvis,bruno,issac,dudley,sanford,colby,carmelo,nestor,hollis,stefan,donny,linwood,beau,weldon,galen,isidro,truman,delmar,johnathon,silas,frederic,irwin,merrill,charley,marcelino,carlo,trenton,kurtis,aurelio,winfred,vito,collin,denver,leonel,emory,pasquale,mohammad,mariano,danial,landon,dirk,branden,adan,numbers,clair,buford,bernie,wilmer,emerson,zachery,jacques,errol,josue,edwardo,wilford,theron,raymundo,daren,tristan,robby,lincoln,jame,genaro,octavio,cornell,hung,arron,antony,herschel,alva,giovanni,garth,cyrus,cyril,ronny,stevie,lon,kennith,carmine,augustine,erich,chadwick,wilburn,russ,myles,jonas,mitchel,mervin,zane,jamel,lazaro,alphonse,randell,johnie,jarrett,ariel,abdul,dusty,luciano,seymour,scottie,eugenio,mohammed,arnulfo,lucien,ferdinand,thad,ezra,aldo,rubin,mitch,earle,abe,marquis,lanny,kareem,jamar,boris,isiah,emile,elmo,aron,leopoldo,everette,josef,eloy,dorian,rodrick,reinaldo,lucio,jerrod,weston,hershel,lemuel,lavern,burt,jules,gil,eliseo,ahmad,nigel,efren,antwan,alden,margarito,refugio,dino,osvaldo,les,deandre,normand,kieth,ivory,trey,norberto,napoleon,jerold,fritz,rosendo,milford,sang,deon,christoper,alfonzo,lyman,josiah,brant,wilton,rico,jamaal,dewitt,brenton,yong,olin,faustino,claudio,judson,gino,edgardo,alec,jarred,donn,trinidad,tad,porfirio,odis,lenard,chauncey,tod,mel,marcelo,kory,augustus,keven,hilario,bud,sal,orval,mauro,dannie,zachariah,olen,anibal,milo,jed,thanh,amado,lenny,tory,richie,horacio,brice,mohamed,delmer,dario,mac,jonah,jerrold,robt,hank,sung,rupert,rolland,kenton,damion,chi,antone,waldo,fredric,bradly,kip,burl,tyree,jefferey,ahmed,willy,stanford,oren,moshe,mikel,enoch,brendon,quintin,jamison,florencio,darrick,tobias,minh,hassan,giuseppe,demarcus,cletus,tyrell,lyndon,keenan,werner,theo,geraldo,columbus,chet,bertram,markus,huey,hilton,dwain,donte,tyron,omer,isaias,hipolito,fermin,chung,adalberto,jamey,teodoro,mckinley,maximo,raleigh,lawerence,abram,rashad,emmitt,daron,chong,samual,otha,miquel,eusebio,dong,domenic,darron,wilber,renato,hoyt,haywood,ezekiel,chas,florentino,elroy,clemente,arden,neville,edison,deshawn,carrol,shayne,nathanial,jordon,danilo,claud,sherwood,raymon,rayford,cristobal,ambrose,titus,hyman,felton,ezequiel,erasmo,lonny,milan,lino,jarod,herb,andreas,rhett,jude,douglass,cordell,oswaldo,ellsworth,virgilio,toney,nathanael,benedict,mose,hong,isreal,garret,fausto,arlen,zack,modesto,francesco,manual,gaylord,gaston,filiberto,deangelo,michale,granville,malik,zackary,tuan,nicky,cristopher,antione,malcom,korey,jospeh,colton,waylon,hosea,shad,santo,rudolf,rolf,renaldo,marcellus,lucius,kristofer,harland,arnoldo,rueben,leandro,kraig,jerrell,jeromy,hobert,cedrick,arlie,winford,wally,luigi,keneth,jacinto,graig,franklyn,edmundo,leif,jeramy,willian,vincenzo,shon,michal,lynwood,jere,elden,darell,broderick,alonso".split(",")},module.exports=frequency_lists;
45641
45642},{}],4:[function(require,module,exports){
45643var feedback,matching,scoring,time,time_estimates,zxcvbn;matching=require("./matching"),scoring=require("./scoring"),time_estimates=require("./time_estimates"),feedback=require("./feedback"),time=function(){return(new Date).getTime()},zxcvbn=function(e,t){var i,n,c,s,a,r,m,o,u,g,_;for(null==t&&(t=[]),g=time(),u=[],c=0,s=t.length;c<s;c++)i=t[c],"string"!=(m=typeof i)&&"number"!==m&&"boolean"!==m||u.push(i.toString().toLowerCase());matching.set_user_input_dictionary(u),a=matching.omnimatch(e),o=scoring.most_guessable_match_sequence(e,a),o.calc_time=time()-g,n=time_estimates.estimate_attack_times(o.guesses);for(r in n)_=n[r],o[r]=_;return o.feedback=feedback.get_feedback(o.score,o.sequence),o},module.exports=zxcvbn;
45644
45645},{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
45646var DATE_MAX_YEAR,DATE_MIN_YEAR,DATE_SPLITS,GRAPHS,L33T_TABLE,RANKED_DICTIONARIES,REGEXEN,adjacency_graphs,build_ranked_dict,frequency_lists,lst,matching,name,scoring;frequency_lists=require("./frequency_lists"),adjacency_graphs=require("./adjacency_graphs"),scoring=require("./scoring"),build_ranked_dict=function(e){var t,n,r,i,a;for(i={},t=1,r=0,n=e.length;r<n;r++)a=e[r],i[a]=t,t+=1;return i},RANKED_DICTIONARIES={};for(name in frequency_lists)lst=frequency_lists[name],RANKED_DICTIONARIES[name]=build_ranked_dict(lst);GRAPHS={qwerty:adjacency_graphs.qwerty,dvorak:adjacency_graphs.dvorak,keypad:adjacency_graphs.keypad,mac_keypad:adjacency_graphs.mac_keypad},L33T_TABLE={a:["4","@"],b:["8"],c:["(","{","[","<"],e:["3"],g:["6","9"],i:["1","!","|"],l:["1","|","7"],o:["0"],s:["$","5"],t:["+","7"],x:["%"],z:["2"]},REGEXEN={recent_year:/19\d\d|200\d|201\d/g},DATE_MAX_YEAR=2050,DATE_MIN_YEAR=1e3,DATE_SPLITS={4:[[1,2],[2,3]],5:[[1,3],[2,3]],6:[[1,2],[2,4],[4,5]],7:[[1,3],[2,3],[4,5],[4,6]],8:[[2,4],[4,6]]},matching={empty:function(e){var t;return 0===function(){var n;n=[];for(t in e)n.push(t);return n}().length},extend:function(e,t){return e.push.apply(e,t)},translate:function(e,t){var n;return function(){var r,i,a,s;for(a=e.split(""),s=[],i=0,r=a.length;i<r;i++)n=a[i],s.push(t[n]||n);return s}().join("")},mod:function(e,t){return(e%t+t)%t},sorted:function(e){return e.sort(function(e,t){return e.i-t.i||e.j-t.j})},omnimatch:function(e){var t,n,r,i,a;for(i=[],r=[this.dictionary_match,this.reverse_dictionary_match,this.l33t_match,this.spatial_match,this.repeat_match,this.sequence_match,this.regex_match,this.date_match],a=0,t=r.length;a<t;a++)n=r[a],this.extend(i,n.call(this,e));return this.sorted(i)},dictionary_match:function(e,t){var n,r,i,a,s,o,h,u,c,l,_,f,d,p;null==t&&(t=RANKED_DICTIONARIES),s=[],a=e.length,u=e.toLowerCase();for(n in t)for(l=t[n],r=o=0,_=a;0<=_?o<_:o>_;r=0<=_?++o:--o)for(i=h=f=r,d=a;f<=d?h<d:h>d;i=f<=d?++h:--h)u.slice(r,+i+1||9e9)in l&&(p=u.slice(r,+i+1||9e9),c=l[p],s.push({pattern:"dictionary",i:r,j:i,token:e.slice(r,+i+1||9e9),matched_word:p,rank:c,dictionary_name:n,reversed:!1,l33t:!1}));return this.sorted(s)},reverse_dictionary_match:function(e,t){var n,r,i,a,s,o;for(null==t&&(t=RANKED_DICTIONARIES),o=e.split("").reverse().join(""),i=this.dictionary_match(o,t),a=0,n=i.length;a<n;a++)r=i[a],r.token=r.token.split("").reverse().join(""),r.reversed=!0,s=[e.length-1-r.j,e.length-1-r.i],r.i=s[0],r.j=s[1];return this.sorted(i)},set_user_input_dictionary:function(e){return RANKED_DICTIONARIES.user_inputs=build_ranked_dict(e.slice())},relevant_l33t_subtable:function(e,t){var n,r,i,a,s,o,h,u,c,l;for(s={},o=e.split(""),a=0,r=o.length;a<r;a++)n=o[a],s[n]=!0;l={};for(i in t)c=t[i],h=function(){var e,t,n;for(n=[],t=0,e=c.length;t<e;t++)u=c[t],u in s&&n.push(u);return n}(),h.length>0&&(l[i]=h);return l},enumerate_l33t_subs:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p;a=function(){var t;t=[];for(i in e)t.push(i);return t}(),p=[[]],n=function(e){var t,n,r,a,s,o,h,u;for(n=[],s={},o=0,a=e.length;o<a;o++)h=e[o],t=function(){var e,t,n;for(n=[],u=t=0,e=h.length;t<e;u=++t)i=h[u],n.push([i,u]);return n}(),t.sort(),r=function(){var e,n,r;for(r=[],u=n=0,e=t.length;n<e;u=++n)i=t[u],r.push(i+","+u);return r}().join("-"),r in s||(s[r]=!0,n.push(h));return n},r=function(t){var i,a,s,o,h,u,c,l,_,f,d,g,m,A,E,y;if(t.length){for(a=t[0],m=t.slice(1),c=[],d=e[a],l=0,h=d.length;l<h;l++)for(o=d[l],_=0,u=p.length;_<u;_++){for(A=p[_],i=-1,s=f=0,g=A.length;0<=g?f<g:f>g;s=0<=g?++f:--f)if(A[s][0]===o){i=s;break}i===-1?(y=A.concat([[o,a]]),c.push(y)):(E=A.slice(0),E.splice(i,1),E.push([o,a]),c.push(A),c.push(E))}return p=n(c),r(m)}},r(a),d=[];for(u=0,o=p.length;u<o;u++){for(_=p[u],f={},c=0,h=_.length;c<h;c++)l=_[c],s=l[0],t=l[1],f[s]=t;d.push(f)}return d},l33t_match:function(e,t,n){var r,i,a,s,o,h,u,c,l,_,f,d,p,g,m,A;for(null==t&&(t=RANKED_DICTIONARIES),null==n&&(n=L33T_TABLE),u=[],_=this.enumerate_l33t_subs(this.relevant_l33t_subtable(e,n)),c=0,a=_.length;c<a&&(d=_[c],!this.empty(d));c++)for(g=this.translate(e,d),f=this.dictionary_match(g,t),l=0,s=f.length;l<s;l++)if(o=f[l],m=e.slice(o.i,+o.j+1||9e9),m.toLowerCase()!==o.matched_word){h={};for(p in d)r=d[p],m.indexOf(p)!==-1&&(h[p]=r);o.l33t=!0,o.token=m,o.sub=h,o.sub_display=function(){var e;e=[];for(i in h)A=h[i],e.push(i+" -> "+A);return e}().join(", "),u.push(o)}return this.sorted(u.filter(function(e){return e.token.length>1}))},spatial_match:function(e,t){var n,r,i;null==t&&(t=GRAPHS),i=[];for(r in t)n=t[r],this.extend(i,this.spatial_match_helper(e,n,r));return this.sorted(i)},SHIFTED_RX:/[~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?]/,spatial_match_helper:function(e,t,n){var r,i,a,s,o,h,u,c,l,_,f,d,p,g,m;for(f=[],u=0;u<e.length-1;)for(c=u+1,l=null,m=0,g="qwerty"!==n&&"dvorak"!==n||!this.SHIFTED_RX.exec(e.charAt(u))?0:1;;){if(p=e.charAt(c-1),o=!1,h=-1,s=-1,i=t[p]||[],c<e.length)for(a=e.charAt(c),d=0,_=i.length;d<_;d++)if(r=i[d],s+=1,r&&r.indexOf(a)!==-1){o=!0,h=s,1===r.indexOf(a)&&(g+=1),l!==h&&(m+=1,l=h);break}if(!o){c-u>2&&f.push({pattern:"spatial",i:u,j:c-1,token:e.slice(u,c),graph:n,turns:m,shifted_count:g}),u=c;break}c+=1}return f},repeat_match:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p;for(d=[],a=/(.+)\1+/g,c=/(.+?)\1+/g,l=/^(.+?)\1+$/,u=0;u<e.length&&(a.lastIndex=c.lastIndex=u,s=a.exec(e),_=c.exec(e),null!=s);)s[0].length>_[0].length?(f=s,i=l.exec(f[0])[1]):(f=_,i=f[1]),p=[f.index,f.index+f[0].length-1],o=p[0],h=p[1],t=scoring.most_guessable_match_sequence(i,this.omnimatch(i)),r=t.sequence,n=t.guesses,d.push({pattern:"repeat",i:o,j:h,token:f[0],base_token:i,base_guesses:n,base_matches:r,repeat_count:f[0].length/i.length}),u=h+1;return d},MAX_DELTA:5,sequence_match:function(e){var t,n,r,i,a,s,o,h,u;if(1===e.length)return[];for(u=function(t){return function(n,r,i){var a,s,o,u;if((r-n>1||1===Math.abs(i))&&0<(a=Math.abs(i))&&a<=t.MAX_DELTA)return u=e.slice(n,+r+1||9e9),/^[a-z]+$/.test(u)?(s="lower",o=26):/^[A-Z]+$/.test(u)?(s="upper",o=26):/^\d+$/.test(u)?(s="digits",o=10):(s="unicode",o=26),h.push({pattern:"sequence",i:n,j:r,token:e.slice(n,+r+1||9e9),sequence_name:s,sequence_space:o,ascending:i>0})}}(this),h=[],n=0,a=null,i=s=1,o=e.length;1<=o?s<o:s>o;i=1<=o?++s:--s)t=e.charCodeAt(i)-e.charCodeAt(i-1),null==a&&(a=t),t!==a&&(r=i-1,u(n,r,a),n=r,a=t);return u(n,e.length-1,a),h},regex_match:function(e,t){var n,r,i,a;null==t&&(t=REGEXEN),n=[];for(name in t)for(r=t[name],r.lastIndex=0;i=r.exec(e);)a=i[0],n.push({pattern:"regex",token:a,i:i.index,j:i.index+i[0].length-1,regex_name:name,regex_match:i});return this.sorted(n)},date_match:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p,g,m,A,E,y,v,I,R,T,D,k,x,j,b,N,S,q,L,M;for(_=[],f=/^\d{4,8}$/,d=/^(\d{1,4})([\s\/\\_.-])(\d{1,2})\2(\d{1,4})$/,s=m=0,v=e.length-4;0<=v?m<=v:m>=v;s=0<=v?++m:--m)for(o=A=I=s+3,R=s+7;(I<=R?A<=R:A>=R)&&!(o>=e.length);o=I<=R?++A:--A)if(M=e.slice(s,+o+1||9e9),f.exec(M)){for(r=[],T=DATE_SPLITS[M.length],E=0,c=T.length;E<c;E++)D=T[E],h=D[0],u=D[1],a=this.map_ints_to_dmy([parseInt(M.slice(0,h)),parseInt(M.slice(h,u)),parseInt(M.slice(u))]),null!=a&&r.push(a);if(r.length>0){for(t=r[0],p=function(e){return Math.abs(e.year-scoring.REFERENCE_YEAR)},g=p(r[0]),k=r.slice(1),y=0,l=k.length;y<l;y++)n=k[y],i=p(n),i<g&&(x=[n,i],t=x[0],g=x[1]);_.push({pattern:"date",token:M,i:s,j:o,separator:"",year:t.year,month:t.month,day:t.day})}}for(s=q=0,j=e.length-6;0<=j?q<=j:q>=j;s=0<=j?++q:--q)for(o=L=b=s+5,N=s+9;(b<=N?L<=N:L>=N)&&!(o>=e.length);o=b<=N?++L:--L)M=e.slice(s,+o+1||9e9),S=d.exec(M),null!=S&&(a=this.map_ints_to_dmy([parseInt(S[1]),parseInt(S[3]),parseInt(S[4])]),null!=a&&_.push({pattern:"date",token:M,i:s,j:o,separator:S[2],year:a.year,month:a.month,day:a.day}));return this.sorted(_.filter(function(e){var t,n,r,i;for(t=!1,i=0,n=_.length;i<n;i++)if(r=_[i],e!==r&&r.i<=e.i&&r.j>=e.j){t=!0;break}return!t}))},map_ints_to_dmy:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p,g;if(!(e[1]>31||e[1]<=0)){for(o=0,h=0,p=0,s=0,r=e.length;s<r;s++){if(n=e[s],99<n&&n<DATE_MIN_YEAR||n>DATE_MAX_YEAR)return;n>31&&(h+=1),n>12&&(o+=1),n<=0&&(p+=1)}if(!(h>=2||3===o||p>=2)){for(c=[[e[2],e.slice(0,2)],[e[0],e.slice(1,3)]],u=0,i=c.length;u<i;u++)if(_=c[u],g=_[0],d=_[1],DATE_MIN_YEAR<=g&&g<=DATE_MAX_YEAR)return t=this.map_ints_to_dm(d),null!=t?{year:g,month:t.month,day:t.day}:void 0;for(l=0,a=c.length;l<a;l++)if(f=c[l],g=f[0],d=f[1],t=this.map_ints_to_dm(d),null!=t)return g=this.two_to_four_digit_year(g),{year:g,month:t.month,day:t.day}}}},map_ints_to_dm:function(e){var t,n,r,i,a,s;for(a=[e,e.slice().reverse()],i=0,n=a.length;i<n;i++)if(s=a[i],t=s[0],r=s[1],1<=t&&t<=31&&1<=r&&r<=12)return{day:t,month:r}},two_to_four_digit_year:function(e){return e>99?e:e>50?e+1900:e+2e3}},module.exports=matching;
45647
45648},{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
45649var BRUTEFORCE_CARDINALITY,MIN_GUESSES_BEFORE_GROWING_SEQUENCE,MIN_SUBMATCH_GUESSES_MULTI_CHAR,MIN_SUBMATCH_GUESSES_SINGLE_CHAR,adjacency_graphs,calc_average_degree,k,scoring,v;adjacency_graphs=require("./adjacency_graphs"),calc_average_degree=function(e){var t,r,n,s,a,u;t=0;for(n in e)a=e[n],t+=function(){var e,t,r;for(r=[],t=0,e=a.length;t<e;t++)s=a[t],s&&r.push(s);return r}().length;return t/=function(){var t;t=[];for(r in e)u=e[r],t.push(r);return t}().length},BRUTEFORCE_CARDINALITY=10,MIN_GUESSES_BEFORE_GROWING_SEQUENCE=1e4,MIN_SUBMATCH_GUESSES_SINGLE_CHAR=10,MIN_SUBMATCH_GUESSES_MULTI_CHAR=50,scoring={nCk:function(e,t){var r,n,s,a;if(t>e)return 0;if(0===t)return 1;for(s=1,r=n=1,a=t;1<=a?n<=a:n>=a;r=1<=a?++n:--n)s*=e,s/=r,e-=1;return s},log10:function(e){return Math.log(e)/Math.log(10)},log2:function(e){return Math.log(e)/Math.log(2)},factorial:function(e){var t,r,n,s;if(e<2)return 1;for(t=1,r=n=2,s=e;2<=s?n<=s:n>=s;r=2<=s?++n:--n)t*=r;return t},most_guessable_match_sequence:function(e,t,r){var n,s,a,u,i,_,o,h,E,c,g,f,l,p,A,S,R,v,I,M,N,C,U,T;for(null==r&&(r=!1),l=e.length,f=function(){var e,t,r;for(r=[],n=e=0,t=l;0<=t?e<t:e>t;n=0<=t?++e:--e)r.push([]);return r}(),p=0,_=t.length;p<_;p++)c=t[p],f[c.j].push(c);for(v=0,o=f.length;v<o;v++)E=f[v],E.sort(function(e,t){return e.i-t.i});for(A={m:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}(),pi:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}(),g:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}()},U=function(t){return function(n,s){var a,u,i,_,o,h;_=n.j,o=t.estimate_guesses(n,e),s>1&&(o*=A.pi[n.i-1][s-1]),i=t.factorial(s)*o,r||(i+=Math.pow(MIN_GUESSES_BEFORE_GROWING_SEQUENCE,s-1)),h=A.g[_];for(u in h)if(a=h[u],!(u>s)&&a<=i)return;return A.g[_][s]=i,A.m[_][s]=n,A.pi[_][s]=o}}(this),s=function(e){return function(e){var t,r,n,s,a,u;for(c=g(0,e),U(c,1),a=[],t=u=1,s=e;1<=s?u<=s:u>=s;t=1<=s?++u:--u)c=g(t,e),a.push(function(){var e,s;e=A.m[t-1],s=[];for(r in e)n=e[r],r=parseInt(r),"bruteforce"!==n.pattern&&s.push(U(c,r+1));return s}());return a}}(this),g=function(t){return function(t,r){return{pattern:"bruteforce",token:e.slice(t,+r+1||9e9),i:t,j:r}}}(this),C=function(e){return function(e){var t,r,n,s,a,u,i;u=[],s=e-1,a=void 0,n=1/0,i=A.g[s];for(r in i)t=i[r],t<n&&(a=r,n=t);for(;s>=0;)c=A.m[s][a],u.unshift(c),s=c.i-1,a--;return u}}(this),u=N=0,I=l;0<=I?N<I:N>I;u=0<=I?++N:--N){for(M=f[u],T=0,h=M.length;T<h;T++)if(c=M[T],c.i>0)for(i in A.m[c.i-1])i=parseInt(i),U(c,i+1);else U(c,1);s(u)}return R=C(l),S=R.length,a=0===e.length?1:A.g[l-1][S],{password:e,guesses:a,guesses_log10:this.log10(a),sequence:R}},estimate_guesses:function(e,t){var r,n,s;return null!=e.guesses?e.guesses:(s=1,e.token.length<t.length&&(s=1===e.token.length?MIN_SUBMATCH_GUESSES_SINGLE_CHAR:MIN_SUBMATCH_GUESSES_MULTI_CHAR),r={bruteforce:this.bruteforce_guesses,dictionary:this.dictionary_guesses,spatial:this.spatial_guesses,repeat:this.repeat_guesses,sequence:this.sequence_guesses,regex:this.regex_guesses,date:this.date_guesses},n=r[e.pattern].call(this,e),e.guesses=Math.max(n,s),e.guesses_log10=this.log10(e.guesses),e.guesses)},bruteforce_guesses:function(e){var t,r;return t=Math.pow(BRUTEFORCE_CARDINALITY,e.token.length),r=1===e.token.length?MIN_SUBMATCH_GUESSES_SINGLE_CHAR+1:MIN_SUBMATCH_GUESSES_MULTI_CHAR+1,Math.max(t,r)},repeat_guesses:function(e){return e.base_guesses*e.repeat_count},sequence_guesses:function(e){var t,r;return r=e.token.charAt(0),t="a"===r||"A"===r||"z"===r||"Z"===r||"0"===r||"1"===r||"9"===r?4:r.match(/\d/)?10:26,e.ascending||(t*=2),t*e.token.length},MIN_YEAR_SPACE:20,REFERENCE_YEAR:2016,regex_guesses:function(e){var t,r;if(t={alpha_lower:26,alpha_upper:26,alpha:52,alphanumeric:62,digits:10,symbols:33},e.regex_name in t)return Math.pow(t[e.regex_name],e.token.length);switch(e.regex_name){case"recent_year":return r=Math.abs(parseInt(e.regex_match[0])-this.REFERENCE_YEAR),r=Math.max(r,this.MIN_YEAR_SPACE)}},date_guesses:function(e){var t,r;return r=Math.max(Math.abs(e.year-this.REFERENCE_YEAR),this.MIN_YEAR_SPACE),t=365*r,e.separator&&(t*=4),t},KEYBOARD_AVERAGE_DEGREE:calc_average_degree(adjacency_graphs.qwerty),KEYPAD_AVERAGE_DEGREE:calc_average_degree(adjacency_graphs.keypad),KEYBOARD_STARTING_POSITIONS:function(){var e,t;e=adjacency_graphs.qwerty,t=[];for(k in e)v=e[k],t.push(k);return t}().length,KEYPAD_STARTING_POSITIONS:function(){var e,t;e=adjacency_graphs.keypad,t=[];for(k in e)v=e[k],t.push(k);return t}().length,spatial_guesses:function(e){var t,r,n,s,a,u,i,_,o,h,E,c,g,f,l,p,A,S;for("qwerty"===(E=e.graph)||"dvorak"===E?(l=this.KEYBOARD_STARTING_POSITIONS,s=this.KEYBOARD_AVERAGE_DEGREE):(l=this.KEYPAD_STARTING_POSITIONS,s=this.KEYPAD_AVERAGE_DEGREE),a=0,t=e.token.length,A=e.turns,u=_=2,c=t;2<=c?_<=c:_>=c;u=2<=c?++_:--_)for(o=Math.min(A,u-1),i=h=1,g=o;1<=g?h<=g:h>=g;i=1<=g?++h:--h)a+=this.nCk(u-1,i-1)*l*Math.pow(s,i);if(e.shifted_count)if(r=e.shifted_count,n=e.token.length-e.shifted_count,0===r||0===n)a*=2;else{for(p=0,u=S=1,f=Math.min(r,n);1<=f?S<=f:S>=f;u=1<=f?++S:--S)p+=this.nCk(r+n,u);a*=p}return a},dictionary_guesses:function(e){var t;return e.base_guesses=e.rank,e.uppercase_variations=this.uppercase_variations(e),e.l33t_variations=this.l33t_variations(e),t=e.reversed&&2||1,e.base_guesses*e.uppercase_variations*e.l33t_variations*t},START_UPPER:/^[A-Z][^A-Z]+$/,END_UPPER:/^[^A-Z]+[A-Z]$/,ALL_UPPER:/^[^a-z]+$/,ALL_LOWER:/^[^A-Z]+$/,uppercase_variations:function(e){var t,r,n,s,a,u,i,_,o,h,E,c;if(c=e.token,c.match(this.ALL_LOWER)||c.toLowerCase()===c)return 1;for(_=[this.START_UPPER,this.END_UPPER,this.ALL_UPPER],u=0,a=_.length;u<a;u++)if(h=_[u],c.match(h))return 2;for(r=function(){var e,t,r,s;for(r=c.split(""),s=[],t=0,e=r.length;t<e;t++)n=r[t],n.match(/[A-Z]/)&&s.push(n);return s}().length,t=function(){var e,t,r,s;for(r=c.split(""),s=[],t=0,e=r.length;t<e;t++)n=r[t],n.match(/[a-z]/)&&s.push(n);return s}().length,E=0,s=i=1,o=Math.min(r,t);1<=o?i<=o:i>=o;s=1<=o?++i:--i)E+=this.nCk(r+t,s);return E},l33t_variations:function(e){var t,r,n,s,a,u,i,_,o,h,E,c,g;if(!e.l33t)return 1;g=1,o=e.sub;for(E in o)if(c=o[E],s=e.token.toLowerCase().split(""),t=function(){var e,t,r;for(r=[],t=0,e=s.length;t<e;t++)n=s[t],n===E&&r.push(n);return r}().length,r=function(){var e,t,r;for(r=[],t=0,e=s.length;t<e;t++)n=s[t],n===c&&r.push(n);return r}().length,0===t||0===r)g*=2;else{for(i=Math.min(r,t),_=0,a=u=1,h=i;1<=h?u<=h:u>=h;a=1<=h?++u:--u)_+=this.nCk(r+t,a);g*=_}return g}},module.exports=scoring;
45650
45651},{"./adjacency_graphs":1}],7:[function(require,module,exports){
45652var time_estimates;time_estimates={estimate_attack_times:function(e){var t,n,s,o;n={online_throttling_100_per_hour:e/(100/3600),online_no_throttling_10_per_second:e/10,offline_slow_hashing_1e4_per_second:e/1e4,offline_fast_hashing_1e10_per_second:e/1e10},t={};for(s in n)o=n[s],t[s]=this.display_time(o);return{crack_times_seconds:n,crack_times_display:t,score:this.guesses_to_score(e)}},guesses_to_score:function(e){var t;return t=5,e<1e3+t?0:e<1e6+t?1:e<1e8+t?2:e<1e10+t?3:4},display_time:function(e){var t,n,s,o,_,r,i,a,u,c;return i=60,r=60*i,s=24*r,a=31*s,c=12*a,n=100*c,u=e<1?[null,"less than a second"]:e<i?(t=Math.round(e),[t,t+" second"]):e<r?(t=Math.round(e/i),[t,t+" minute"]):e<s?(t=Math.round(e/r),[t,t+" hour"]):e<a?(t=Math.round(e/s),[t,t+" day"]):e<c?(t=Math.round(e/a),[t,t+" month"]):e<n?(t=Math.round(e/c),[t,t+" year"]):[null,"centuries"],o=u[0],_=u[1],null!=o&&1!==o&&(_+="s"),_}},module.exports=time_estimates;
45653
45654},{}]},{},[4])(4)
45655});
861750ae 45656
95f04905
IC
45657</script>
45658 <script>/*
45659 * Detects entropy from a string.
45660 *
45661 * Formats include:
45662 * binary [0-1]
45663 * base 6 [0-5]
45664 * dice 6 [1-6]
45665 * decimal [0-9]
45666 * hexadecimal [0-9A-F]
9e97eb76 45667 * card [A2-9TJQK][CDHS]
95f04905
IC
45668 *
45669 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
45670 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
45671 * entropy.
45672 */
45673
45674window.Entropy = new (function() {
45675
78b8d604
IC
45676 var TWO = new BigInteger(2);
45677
95f04905
IC
45678 // matchers returns an array of the matched events for each type of entropy.
45679 // eg
45680 // matchers.binary("010") returns ["0", "1", "0"]
45681 // matchers.binary("a10") returns ["1", "0"]
45682 // matchers.hex("a10") returns ["a", "1", "0"]
45683 var matchers = {
45684 binary: function(str) {
45685 return str.match(/[0-1]/gi) || [];
45686 },
45687 base6: function(str) {
45688 return str.match(/[0-5]/gi) || [];
45689 },
45690 dice: function(str) {
45691 return str.match(/[1-6]/gi) || []; // ie dice numbers
45692 },
45693 base10: function(str) {
45694 return str.match(/[0-9]/gi) || [];
45695 },
45696 hex: function(str) {
45697 return str.match(/[0-9A-F]/gi) || [];
45698 },
45699 card: function(str) {
45700 // Format is NumberSuit, eg
45701 // AH ace of hearts
45702 // 8C eight of clubs
45703 // TD ten of diamonds
45704 // JS jack of spades
45705 // QH queen of hearts
45706 // KC king of clubs
45707 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
45708 }
45709 }
45710
45711 // Convert array of cards from ["ac", "4d", "ks"]
45712 // to numbers between 0 and 51 [0, 16, 51]
45713 function convertCardsToInts(cards) {
45714 var ints = [];
45715 var values = "a23456789tjqk";
45716 var suits = "cdhs";
45717 for (var i=0; i<cards.length; i++) {
45718 var card = cards[i].toLowerCase();
45719 var value = card[0];
45720 var suit = card[1];
45721 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
45722 ints.push(asInt);
45723 }
45724 return ints;
45725 }
45726
45727 this.fromString = function(rawEntropyStr) {
45728 // Find type of entropy being used (binary, hex, dice etc)
45729 var base = getBase(rawEntropyStr);
45730 // Convert dice to base6 entropy (ie 1-6 to 0-5)
45731 // This is done by changing all 6s to 0s
45732 if (base.str == "dice") {
45733 var newParts = [];
45734 var newInts = [];
45735 for (var i=0; i<base.parts.length; i++) {
45736 var c = base.parts[i];
45737 if ("12345".indexOf(c) > -1) {
45738 newParts[i] = base.parts[i];
45739 newInts[i] = base.ints[i];
45740 }
45741 else {
45742 newParts[i] = "0";
45743 newInts[i] = 0;
45744 }
45745 }
45746 base.str = "base 6 (dice)";
45747 base.ints = newInts;
45748 base.parts = newParts;
45749 base.matcher = matchers.base6;
45750 }
45751 // Detect empty entropy
45752 if (base.parts.length == 0) {
45753 return {
45754 binaryStr: "",
45755 cleanStr: "",
45756 cleanHtml: "",
45757 base: base,
45758 };
45759 }
45760 // Convert base.ints to BigInteger.
45761 // Due to using unusual bases, eg cards of base52, this is not as simple as
45762 // using BigInteger.parse()
45763 var entropyInt = BigInteger.ZERO;
45764 for (var i=base.ints.length-1; i>=0; i--) {
45765 var thisInt = BigInteger.parse(base.ints[i]);
45766 var power = (base.ints.length - 1) - i;
45767 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
45768 entropyInt = entropyInt.add(additionalEntropy);
45769 }
45770 // Convert entropy to binary
45771 var entropyBin = entropyInt.toString(2);
45772 // If the first integer is small, it must be padded with zeros.
45773 // Otherwise the chance of the first bit being 1 is 100%, which is
45774 // obviously incorrect.
45775 // This is not perfect for non-2^n bases.
45776 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
45777 while (entropyBin.length < expectedBits) {
45778 entropyBin = "0" + entropyBin;
45779 }
94959756
IC
45780 // Calculate the number of bits per event
45781 var bitsPerEvent = Math.log2(base.asInt);
ea87f1d3 45782 // Cards binary must be handled differently, since they're not replaced
9e97eb76 45783 if (base.asInt == 52) {
94959756
IC
45784 var cardEntropy = processCardEntropy(base.parts);
45785 entropyBin = cardEntropy.binaryStr;
45786 bitsPerEvent = cardEntropy.bitsPerEvent;
9e97eb76 45787 }
95f04905
IC
45788 // Supply a 'filtered' entropy string for display purposes
45789 var entropyClean = base.parts.join("");
45790 var entropyHtml = base.parts.join("");
45791 if (base.asInt == 52) {
45792 entropyClean = base.parts.join(" ").toUpperCase();
45793 entropyClean = entropyClean.replace(/C/g, "\u2663");
45794 entropyClean = entropyClean.replace(/D/g, "\u2666");
45795 entropyClean = entropyClean.replace(/H/g, "\u2665");
45796 entropyClean = entropyClean.replace(/S/g, "\u2660");
45797 entropyHtml = base.parts.join(" ").toUpperCase();
45798 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
45799 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
45800 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
45801 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
45802 }
9e97eb76 45803 // Return the result
95f04905
IC
45804 var e = {
45805 binaryStr: entropyBin,
45806 cleanStr: entropyClean,
45807 cleanHtml: entropyHtml,
94959756 45808 bitsPerEvent: bitsPerEvent,
95f04905
IC
45809 base: base,
45810 }
45811 return e;
45812 }
45813
78b8d604
IC
45814 function getSortedDeck() {
45815 var s = [];
45816 var suits = "CDHS";
45817 var values = "A23456789TJQK";
45818 for (var i=0; i<suits.length; i++) {
45819 for (var j=0; j<values.length; j++) {
45820 s.push(values[j]+suits[i]);
45821 }
45822 }
45823 return s;
45824 }
45825
95f04905
IC
45826 function getBase(str) {
45827 // Need to get the lowest base for the supplied entropy.
45828 // This prevents interpreting, say, dice rolls as hexadecimal.
45829 var binaryMatches = matchers.binary(str);
45830 var hexMatches = matchers.hex(str);
45831 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
45832 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
45833 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
45834 return {
45835 ints: ints,
45836 parts: binaryMatches,
45837 matcher: matchers.binary,
45838 asInt: 2,
45839 str: "binary",
45840 }
45841 }
45842 var cardMatches = matchers.card(str);
45843 if (cardMatches.length >= hexMatches.length / 2) {
45844 var ints = convertCardsToInts(cardMatches);
45845 return {
45846 ints: ints,
45847 parts: cardMatches,
45848 matcher: matchers.card,
45849 asInt: 52,
45850 str: "card",
45851 }
45852 }
45853 var diceMatches = matchers.dice(str);
45854 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
45855 var ints = diceMatches.map(function(i) { return parseInt(i) });
45856 return {
45857 ints: ints,
45858 parts: diceMatches,
45859 matcher: matchers.dice,
45860 asInt: 6,
45861 str: "dice",
45862 }
45863 }
45864 var base6Matches = matchers.base6(str);
45865 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
45866 var ints = base6Matches.map(function(i) { return parseInt(i) });
45867 return {
45868 ints: ints,
45869 parts: base6Matches,
45870 matcher: matchers.base6,
45871 asInt: 6,
45872 str: "base 6",
45873 }
45874 }
45875 var base10Matches = matchers.base10(str);
45876 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
45877 var ints = base10Matches.map(function(i) { return parseInt(i) });
45878 return {
45879 ints: ints,
45880 parts: base10Matches,
45881 matcher: matchers.base10,
45882 asInt: 10,
45883 str: "base 10",
45884 }
45885 }
45886 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
45887 return {
45888 ints: ints,
45889 parts: hexMatches,
45890 matcher: matchers.hex,
45891 asInt: 16,
45892 str: "hexadecimal",
45893 }
45894 }
45895
ea87f1d3
IC
45896 // Assume cards are NOT replaced.
45897 // Additional entropy decreases as more cards are used. This means
45898 // total possible entropy is measured using n!, not base^n.
45899 // eg the second last card can be only one of two, not one of fifty two
45900 // so the added entropy for that card is only one bit at most
94959756 45901 function processCardEntropy(cards) {
ea87f1d3
IC
45902 // Track how many instances of each card have been used, and thus
45903 // how many decks are in use.
45904 var cardCounts = {};
45905 var numberOfDecks = 0;
45906 // Work out number of decks by max(duplicates)
45907 for (var i=0; i<cards.length; i++) {
45908 // Get the card that was drawn
45909 var cardLower = cards[i];
45910 var card = cardLower.toUpperCase();
45911 // Initialize the count for this card if needed
45912 if (!(card in cardCounts)) {
45913 cardCounts[card] = 0;
45914 }
45915 cardCounts[card] += 1;
45916 // See if this is max(duplicates)
45917 if (cardCounts[card] > numberOfDecks) {
45918 numberOfDecks = cardCounts[card];
45919 }
45920 }
45921 // Work out the total number of bits for this many decks
45922 // See http://crypto.stackexchange.com/q/41886
fc7c248f
IC
45923 var gainedBits = 0;
45924 // Equivalent of Math.log2(factorial(52*numberOfDecks))
45925 // which becomes infinity for numberOfDecks > 4
45926 for (var i=1; i<=52*numberOfDecks; i++) {
45927 gainedBits = gainedBits + Math.log2(i);
45928 }
ea87f1d3
IC
45929 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
45930 var maxBits = gainedBits - lostBits;
45931 // Convert the drawn cards to a binary representation.
45932 // The exact technique for doing this is unclear.
45933 // See
45934 // http://crypto.stackexchange.com/a/41896
45935 // "I even doubt that this is well defined (only the average entropy
45936 // is, I believe)."
45937 // See
45938 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
45939 // "The binary representation can be the first log(permutations,2) bits
45940 // of the sha-2 hash of the normalized deck string."
45941 //
45942 // In this specific implementation, the first N bits of the hash of the
45943 // normalized cards string is being used. Uppercase, no spaces; eg
45944 // sha256("AH8DQSTC2H")
45945 var totalCards = numberOfDecks * 52;
45946 var percentUsed = cards.length / totalCards;
45947 // Calculate the average number of bits of entropy for the number of
45948 // cards drawn.
45949 var numberOfBits = Math.floor(maxBits * percentUsed);
45950 // Create a normalized string of the selected cards
45951 var normalizedCards = cards.join("").toUpperCase();
45952 // Convert to binary using the SHA256 hash of the normalized cards.
434caecd 45953 // If the number of bits is more than 256, multiple hashes
ea87f1d3
IC
45954 // are used until the required number of bits is reached.
45955 var entropyBin = "";
45956 var iterations = 0;
45957 while (entropyBin.length < numberOfBits) {
434caecd 45958 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
ea87f1d3
IC
45959 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
45960 for (var i=0; i<hashHex.length; i++) {
45961 var decimal = parseInt(hashHex[i], 16);
45962 var binary = decimal.toString(2);
45963 while (binary.length < 4) {
45964 binary = "0" + binary;
45965 }
45966 entropyBin = entropyBin + binary;
45967 }
45968 iterations = iterations + 1;
45969 }
45970 // Truncate to the appropriate number of bits.
45971 entropyBin = entropyBin.substring(0, numberOfBits);
94959756
IC
45972 // Get the number of bits per event
45973 bitsPerEvent = maxBits / totalCards;
45974 return {
45975 binaryStr: entropyBin,
45976 bitsPerEvent: bitsPerEvent,
45977 }
ea87f1d3
IC
45978 }
45979
95f04905
IC
45980 // Polyfill for Math.log2
45981 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
45982 Math.log2 = Math.log2 || function(x) {
45983 // The polyfill isn't good enough because of the poor accuracy of
45984 // Math.LOG2E
45985 // log2(8) gave 2.9999999999999996 which when floored causes issues.
45986 // So instead use the BigInteger library to get it right.
45987 return BigInteger.log(x) / BigInteger.log(2);
45988 };
45989
9e97eb76
IC
45990 // Depends on BigInteger
45991 function factorial(n) {
45992 if (n == 0) {
45993 return 1;
45994 }
45995 f = BigInteger.ONE;
45996 for (var i=1; i<=n; i++) {
45997 f = f.multiply(new BigInteger(i));
45998 }
45999 return f;
46000 }
46001
95f04905 46002})();
c6624d51
IC
46003</script>
46004 <script>(function() {
46005
46006 // mnemonics is populated as required by getLanguage
46007 var mnemonics = { "english": new Mnemonic("english") };
46008 var mnemonic = mnemonics["english"];
3725abb5 46009 var seed = null;
c6624d51
IC
46010 var bip32RootKey = null;
46011 var bip32ExtendedKey = null;
9987f0c1 46012 var network = bitcoinjs.bitcoin.networks.bitcoin;
c6624d51
IC
46013 var addressRowTemplate = $("#address-row-template");
46014
46015 var showIndex = true;
46016 var showAddress = true;
46017 var showPubKey = true;
46018 var showPrivKey = true;
52da415f 46019 var showQr = false;
8d18f379 46020 var litecoinUseLtub = false;
c6624d51
IC
46021
46022 var entropyChangeTimeoutEvent = null;
46023 var phraseChangeTimeoutEvent = null;
46024 var rootKeyChangedTimeoutEvent = null;
46025
40892aba
IC
46026 var generationProcesses = [];
46027
c6624d51
IC
46028 var DOM = {};
46029 DOM.network = $(".network");
56530adc 46030 DOM.bip32Client = $("#bip32-client");
c6624d51
IC
46031 DOM.phraseNetwork = $("#network-phrase");
46032 DOM.useEntropy = $(".use-entropy");
46033 DOM.entropyContainer = $(".entropy-container");
46034 DOM.entropy = $(".entropy");
2a6dd137
IC
46035 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
46036 DOM.entropyType = DOM.entropyContainer.find(".type");
f1e5d484 46037 DOM.entropyCrackTime = DOM.entropyContainer.find(".crack-time");
2a6dd137
IC
46038 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
46039 DOM.entropyBits = DOM.entropyContainer.find(".bits");
46040 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
46041 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
46042 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
46043 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
9ff30bab 46044 DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning");
c6624d51
IC
46045 DOM.phrase = $(".phrase");
46046 DOM.passphrase = $(".passphrase");
46047 DOM.generateContainer = $(".generate-container");
46048 DOM.generate = $(".generate");
46049 DOM.seed = $(".seed");
46050 DOM.rootKey = $(".root-key");
8d18f379
IC
46051 DOM.litecoinLtubContainer = $(".litecoin-ltub-container");
46052 DOM.litecoinUseLtub = $(".litecoin-use-ltub");
c6624d51
IC
46053 DOM.extendedPrivKey = $(".extended-priv-key");
46054 DOM.extendedPubKey = $(".extended-pub-key");
46055 DOM.bip32tab = $("#bip32-tab");
46056 DOM.bip44tab = $("#bip44-tab");
9987f0c1 46057 DOM.bip49tab = $("#bip49-tab");
c6624d51
IC
46058 DOM.bip32panel = $("#bip32");
46059 DOM.bip44panel = $("#bip44");
9987f0c1 46060 DOM.bip49panel = $("#bip49");
c6624d51
IC
46061 DOM.bip32path = $("#bip32-path");
46062 DOM.bip44path = $("#bip44-path");
46063 DOM.bip44purpose = $("#bip44 .purpose");
46064 DOM.bip44coin = $("#bip44 .coin");
46065 DOM.bip44account = $("#bip44 .account");
20083ab9
IC
46066 DOM.bip44accountXprv = $("#bip44 .account-xprv");
46067 DOM.bip44accountXpub = $("#bip44 .account-xpub");
c6624d51 46068 DOM.bip44change = $("#bip44 .change");
9987f0c1
IC
46069 DOM.bip49unavailable = $("#bip49 .unavailable");
46070 DOM.bip49available = $("#bip49 .available");
46071 DOM.bip49path = $("#bip49-path");
46072 DOM.bip49purpose = $("#bip49 .purpose");
46073 DOM.bip49coin = $("#bip49 .coin");
46074 DOM.bip49account = $("#bip49 .account");
46075 DOM.bip49accountXprv = $("#bip49 .account-xprv");
46076 DOM.bip49accountXpub = $("#bip49 .account-xpub");
46077 DOM.bip49change = $("#bip49 .change");
18abe53b 46078 DOM.generatedStrength = $(".generate-container .strength");
c6624d51 46079 DOM.hardenedAddresses = $(".hardened-addresses");
0a8d06d0 46080 DOM.useP2wpkhNestedInP2sh = $(".p2wpkh-nested-in-p2sh");
0f6b34d6
IC
46081 DOM.useBitpayAddressesContainer = $(".use-bitpay-addresses-container");
46082 DOM.useBitpayAddresses = $(".use-bitpay-addresses");
c6624d51
IC
46083 DOM.addresses = $(".addresses");
46084 DOM.rowsToAdd = $(".rows-to-add");
46085 DOM.more = $(".more");
924727ed 46086 DOM.moreRowsStartIndex = $(".more-rows-start-index");
c6624d51
IC
46087 DOM.feedback = $(".feedback");
46088 DOM.tab = $(".derivation-type a");
46089 DOM.indexToggle = $(".index-toggle");
46090 DOM.addressToggle = $(".address-toggle");
46091 DOM.publicKeyToggle = $(".public-key-toggle");
46092 DOM.privateKeyToggle = $(".private-key-toggle");
46093 DOM.languages = $(".languages a");
e00964cc 46094 DOM.qrContainer = $(".qr-container");
52da415f 46095 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
e00964cc
IC
46096 DOM.qrImage = DOM.qrContainer.find(".qr-image");
46097 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
46098 DOM.showQrEls = $("[data-show-qr]");
c6624d51
IC
46099
46100 function init() {
46101 // Events
46102 DOM.network.on("change", networkChanged);
56530adc 46103 DOM.bip32Client.on("change", bip32ClientChanged);
c6624d51
IC
46104 DOM.useEntropy.on("change", setEntropyVisibility);
46105 DOM.entropy.on("input", delayedEntropyChanged);
18abe53b 46106 DOM.entropyMnemonicLength.on("change", entropyChanged);
c6624d51
IC
46107 DOM.phrase.on("input", delayedPhraseChanged);
46108 DOM.passphrase.on("input", delayedPhraseChanged);
46109 DOM.generate.on("click", generateClicked);
46110 DOM.more.on("click", showMore);
46111 DOM.rootKey.on("input", delayedRootKeyChanged);
8d18f379 46112 DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged);
c6624d51 46113 DOM.bip32path.on("input", calcForDerivationPath);
c6624d51
IC
46114 DOM.bip44account.on("input", calcForDerivationPath);
46115 DOM.bip44change.on("input", calcForDerivationPath);
9987f0c1
IC
46116 DOM.bip49account.on("input", calcForDerivationPath);
46117 DOM.bip49change.on("input", calcForDerivationPath);
0f6b34d6 46118 DOM.tab.on("shown.bs.tab", tabChanged);
c6624d51 46119 DOM.hardenedAddresses.on("change", calcForDerivationPath);
0a8d06d0 46120 DOM.useP2wpkhNestedInP2sh.on("change", calcForDerivationPath);
c6624d51
IC
46121 DOM.indexToggle.on("click", toggleIndexes);
46122 DOM.addressToggle.on("click", toggleAddresses);
46123 DOM.publicKeyToggle.on("click", togglePublicKeys);
46124 DOM.privateKeyToggle.on("click", togglePrivateKeys);
46125 DOM.languages.on("click", languageChanged);
0f6b34d6 46126 DOM.useBitpayAddresses.on("change", useBitpayAddressesChange);
e00964cc 46127 setQrEvents(DOM.showQrEls);
c6624d51
IC
46128 disableForms();
46129 hidePending();
46130 hideValidationError();
46131 populateNetworkSelect();
56530adc 46132 populateClientSelect();
c6624d51
IC
46133 }
46134
46135 // Event handlers
46136
46137 function networkChanged(e) {
9987f0c1
IC
46138 clearDerivedKeys();
46139 clearAddressesList();
8d18f379 46140 DOM.litecoinLtubContainer.addClass("hidden");
0f6b34d6 46141 DOM.useBitpayAddressesContainer.addClass("hidden");
c6624d51 46142 var networkIndex = e.target.value;
9987f0c1
IC
46143 var network = networks[networkIndex];
46144 network.onSelect();
0a8d06d0
IC
46145 if (network.p2wpkhNestedInP2shAvailable) {
46146 showP2wpkhNestedInP2shAvailable();
9987f0c1
IC
46147 }
46148 else {
0a8d06d0 46149 showP2wpkhNestedInP2shUnavailable();
9987f0c1 46150 }
c6624d51
IC
46151 if (seed != null) {
46152 phraseChanged();
46153 }
46154 else {
46155 rootKeyChanged();
46156 }
46157 }
46158
56530adc
IC
46159 function bip32ClientChanged(e) {
46160 var clientIndex = DOM.bip32Client.val();
46161 if (clientIndex == "custom") {
46162 DOM.bip32path.prop("readonly", false);
46163 }
46164 else {
46165 DOM.bip32path.prop("readonly", true);
46166 clients[clientIndex].onSelect();
46167 if (seed != null) {
46168 phraseChanged();
46169 }
46170 else {
46171 rootKeyChanged();
46172 }
46173 }
46174 }
46175
c6624d51
IC
46176 function setEntropyVisibility() {
46177 if (isUsingOwnEntropy()) {
46178 DOM.entropyContainer.removeClass("hidden");
46179 DOM.generateContainer.addClass("hidden");
46180 DOM.phrase.prop("readonly", true);
46181 DOM.entropy.focus();
46182 entropyChanged();
46183 }
46184 else {
46185 DOM.entropyContainer.addClass("hidden");
46186 DOM.generateContainer.removeClass("hidden");
46187 DOM.phrase.prop("readonly", false);
18abe53b 46188 hidePending();
c6624d51
IC
46189 }
46190 }
46191
46192 function delayedPhraseChanged() {
46193 hideValidationError();
f128bd58
IC
46194 seed = null;
46195 bip32RootKey = null;
46196 bip32ExtendedKey = null;
46197 clearAddressesList();
c6624d51
IC
46198 showPending();
46199 if (phraseChangeTimeoutEvent != null) {
46200 clearTimeout(phraseChangeTimeoutEvent);
46201 }
46202 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
46203 }
46204
46205 function phraseChanged() {
46206 showPending();
c6624d51
IC
46207 setMnemonicLanguage();
46208 // Get the mnemonic phrase
46209 var phrase = DOM.phrase.val();
46210 var errorText = findPhraseErrors(phrase);
46211 if (errorText) {
46212 showValidationError(errorText);
46213 return;
46214 }
46215 // Calculate and display
46216 var passphrase = DOM.passphrase.val();
46217 calcBip32RootKeyFromSeed(phrase, passphrase);
46218 calcForDerivationPath();
c6624d51
IC
46219 }
46220
0f6b34d6
IC
46221 function tabChanged() {
46222 showPending();
46223 adjustNetworkForBip49();
46224 var phrase = DOM.phrase.val();
46225 if (phrase != "") {
46226 // Calculate and display for mnemonic
46227 var errorText = findPhraseErrors(phrase);
46228 if (errorText) {
46229 showValidationError(errorText);
46230 return;
46231 }
46232 // Calculate and display
46233 var passphrase = DOM.passphrase.val();
46234 calcBip32RootKeyFromSeed(phrase, passphrase);
46235 }
46236 else {
46237 // Calculate and display for root key
46238 var rootKeyBase58 = DOM.rootKey.val();
46239 var errorText = validateRootKey(rootKeyBase58);
46240 if (errorText) {
46241 showValidationError(errorText);
46242 return;
46243 }
46244 // Calculate and display
46245 calcBip32RootKeyFromBase58(rootKeyBase58);
46246 }
46247 calcForDerivationPath();
46248 }
46249
c6624d51
IC
46250 function delayedEntropyChanged() {
46251 hideValidationError();
46252 showPending();
46253 if (entropyChangeTimeoutEvent != null) {
46254 clearTimeout(entropyChangeTimeoutEvent);
46255 }
46256 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
46257 }
46258
46259 function entropyChanged() {
18abe53b
IC
46260 // If blank entropy, clear mnemonic, addresses, errors
46261 if (DOM.entropy.val().trim().length == 0) {
46262 clearDisplay();
2a6dd137 46263 clearEntropyFeedback();
18abe53b
IC
46264 DOM.phrase.val("");
46265 showValidationError("Blank entropy");
46266 return;
46267 }
46268 // Get the current phrase to detect changes
46269 var phrase = DOM.phrase.val();
46270 // Set the phrase from the entropy
c6624d51 46271 setMnemonicFromEntropy();
18abe53b
IC
46272 // Recalc addresses if the phrase has changed
46273 var newPhrase = DOM.phrase.val();
46274 if (newPhrase != phrase) {
46275 if (newPhrase.length == 0) {
46276 clearDisplay();
46277 }
46278 else {
46279 phraseChanged();
46280 }
46281 }
46282 else {
46283 hidePending();
46284 }
c6624d51
IC
46285 }
46286
46287 function delayedRootKeyChanged() {
46288 // Warn if there is an existing mnemonic or passphrase.
46289 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
46290 if (!confirm("This will clear existing mnemonic and passphrase")) {
46291 DOM.rootKey.val(bip32RootKey);
46292 return
46293 }
46294 }
46295 hideValidationError();
46296 showPending();
46297 // Clear existing mnemonic and passphrase
46298 DOM.phrase.val("");
46299 DOM.passphrase.val("");
46300 seed = null;
46301 if (rootKeyChangedTimeoutEvent != null) {
46302 clearTimeout(rootKeyChangedTimeoutEvent);
46303 }
46304 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
46305 }
46306
46307 function rootKeyChanged() {
46308 showPending();
46309 hideValidationError();
c6624d51
IC
46310 var rootKeyBase58 = DOM.rootKey.val();
46311 var errorText = validateRootKey(rootKeyBase58);
46312 if (errorText) {
46313 showValidationError(errorText);
46314 return;
46315 }
46316 // Calculate and display
46317 calcBip32RootKeyFromBase58(rootKeyBase58);
46318 calcForDerivationPath();
c6624d51
IC
46319 }
46320
8d18f379
IC
46321 function litecoinUseLtubChanged() {
46322 litecoinUseLtub = DOM.litecoinUseLtub.prop("checked");
46323 if (litecoinUseLtub) {
46324 network = bitcoinjs.bitcoin.networks.litecoinLtub;
46325 }
46326 else {
46327 network = bitcoinjs.bitcoin.networks.litecoin;
46328 }
46329 phraseChanged();
46330 }
46331
c6624d51 46332 function calcForDerivationPath() {
9987f0c1 46333 clearDerivedKeys();
ba3cb9ec 46334 clearAddressesList();
f128bd58 46335 showPending();
9987f0c1
IC
46336 // Don't show bip49 if it's selected but network doesn't support it
46337 if (bip49TabSelected() && !networkHasBip49()) {
46338 return;
46339 }
c6624d51
IC
46340 // Get the derivation path
46341 var derivationPath = getDerivationPath();
46342 var errorText = findDerivationPathErrors(derivationPath);
46343 if (errorText) {
46344 showValidationError(errorText);
46345 return;
46346 }
20083ab9
IC
46347 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
46348 if (bip44TabSelected()) {
46349 displayBip44Info();
46350 }
9987f0c1
IC
46351 if (bip49TabSelected()) {
46352 displayBip49Info();
46353 }
c6624d51 46354 displayBip32Info();
c6624d51
IC
46355 }
46356
46357 function generateClicked() {
46358 if (isUsingOwnEntropy()) {
46359 return;
46360 }
46361 clearDisplay();
46362 showPending();
46363 setTimeout(function() {
46364 setMnemonicLanguage();
46365 var phrase = generateRandomPhrase();
46366 if (!phrase) {
46367 return;
46368 }
46369 phraseChanged();
46370 }, 50);
46371 }
46372
46373 function languageChanged() {
46374 setTimeout(function() {
46375 setMnemonicLanguage();
46376 if (DOM.phrase.val().length > 0) {
46377 var newPhrase = convertPhraseToNewLanguage();
46378 DOM.phrase.val(newPhrase);
46379 phraseChanged();
46380 }
46381 else {
46382 DOM.generate.trigger("click");
46383 }
46384 }, 50);
46385 }
46386
0f6b34d6
IC
46387 function useBitpayAddressesChange() {
46388 setBitcoinCashNetworkValues();
46389 phraseChanged();
46390 }
46391
c6624d51
IC
46392 function toggleIndexes() {
46393 showIndex = !showIndex;
46394 $("td.index span").toggleClass("invisible");
46395 }
46396
46397 function toggleAddresses() {
46398 showAddress = !showAddress;
46399 $("td.address span").toggleClass("invisible");
46400 }
46401
46402 function togglePublicKeys() {
46403 showPubKey = !showPubKey;
46404 $("td.pubkey span").toggleClass("invisible");
46405 }
46406
46407 function togglePrivateKeys() {
46408 showPrivKey = !showPrivKey;
46409 $("td.privkey span").toggleClass("invisible");
46410 }
46411
46412 // Private methods
46413
46414 function generateRandomPhrase() {
46415 if (!hasStrongRandom()) {
46416 var errorText = "This browser does not support strong randomness";
46417 showValidationError(errorText);
46418 return;
46419 }
18abe53b 46420 var numWords = parseInt(DOM.generatedStrength.val());
c6624d51
IC
46421 var strength = numWords / 3 * 32;
46422 var words = mnemonic.generate(strength);
46423 DOM.phrase.val(words);
46424 return words;
46425 }
46426
46427 function calcBip32RootKeyFromSeed(phrase, passphrase) {
46428 seed = mnemonic.toSeed(phrase, passphrase);
9987f0c1 46429 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
c6624d51
IC
46430 }
46431
46432 function calcBip32RootKeyFromBase58(rootKeyBase58) {
9987f0c1 46433 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
c6624d51
IC
46434 }
46435
46436 function calcBip32ExtendedKey(path) {
0a1f0259
IC
46437 // Check there's a root key to derive from
46438 if (!bip32RootKey) {
46439 return bip32RootKey;
46440 }
20083ab9 46441 var extendedKey = bip32RootKey;
c6624d51
IC
46442 // Derive the key from the path
46443 var pathBits = path.split("/");
ebd8d4e8
IC
46444 for (var i=0; i<pathBits.length; i++) {
46445 var bit = pathBits[i];
46446 var index = parseInt(bit);
46447 if (isNaN(index)) {
46448 continue;
46449 }
46450 var hardened = bit[bit.length-1] == "'";
9987f0c1 46451 var isPriv = !(extendedKey.isNeutered());
ba3cb9ec
IC
46452 var invalidDerivationPath = hardened && !isPriv;
46453 if (invalidDerivationPath) {
46454 extendedKey = null;
46455 }
46456 else if (hardened) {
20083ab9 46457 extendedKey = extendedKey.deriveHardened(index);
ebd8d4e8
IC
46458 }
46459 else {
20083ab9 46460 extendedKey = extendedKey.derive(index);
ebd8d4e8
IC
46461 }
46462 }
20083ab9 46463 return extendedKey
ebd8d4e8
IC
46464 }
46465
46466 function showValidationError(errorText) {
46467 DOM.feedback
46468 .text(errorText)
46469 .show();
46470 }
46471
46472 function hideValidationError() {
46473 DOM.feedback
46474 .text("")
46475 .hide();
46476 }
46477
46478 function findPhraseErrors(phrase) {
ebd8d4e8 46479 // Preprocess the words
783981de 46480 phrase = mnemonic.normalizeString(phrase);
0515eeec 46481 var words = phraseToWordArray(phrase);
18abe53b
IC
46482 // Detect blank phrase
46483 if (words.length == 0) {
46484 return "Blank mnemonic";
46485 }
563e401a 46486 // Check each word
0515eeec
IC
46487 for (var i=0; i<words.length; i++) {
46488 var word = words[i];
46489 var language = getLanguage();
46490 if (WORDLISTS[language].indexOf(word) == -1) {
563e401a
IC
46491 console.log("Finding closest match to " + word);
46492 var nearestWord = findNearestWord(word);
46493 return word + " not in wordlist, did you mean " + nearestWord + "?";
46494 }
46495 }
ebd8d4e8 46496 // Check the words are valid
0515eeec 46497 var properPhrase = wordArrayToPhrase(words);
ebd8d4e8
IC
46498 var isValid = mnemonic.check(properPhrase);
46499 if (!isValid) {
46500 return "Invalid mnemonic";
46501 }
46502 return false;
46503 }
46504
efe41586
IC
46505 function validateRootKey(rootKeyBase58) {
46506 try {
0a8d06d0 46507 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
efe41586
IC
46508 }
46509 catch (e) {
46510 return "Invalid root key";
46511 }
46512 return "";
46513 }
46514
38523d36 46515 function getDerivationPath() {
20083ab9 46516 if (bip44TabSelected()) {
38523d36
IC
46517 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
46518 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
46519 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
46520 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
46521 var path = "m/";
46522 path += purpose + "'/";
46523 path += coin + "'/";
46524 path += account + "'/";
46525 path += change;
46526 DOM.bip44path.val(path);
46527 var derivationPath = DOM.bip44path.val();
46528 console.log("Using derivation path from BIP44 tab: " + derivationPath);
46529 return derivationPath;
46530 }
9987f0c1
IC
46531 if (bip49TabSelected()) {
46532 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
46533 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
46534 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
46535 var change = parseIntNoNaN(DOM.bip49change.val(), 0);
46536 var path = "m/";
46537 path += purpose + "'/";
46538 path += coin + "'/";
46539 path += account + "'/";
46540 path += change;
46541 DOM.bip49path.val(path);
46542 var derivationPath = DOM.bip49path.val();
46543 console.log("Using derivation path from BIP49 tab: " + derivationPath);
46544 return derivationPath;
46545 }
20083ab9 46546 else if (bip32TabSelected()) {
38523d36
IC
46547 var derivationPath = DOM.bip32path.val();
46548 console.log("Using derivation path from BIP32 tab: " + derivationPath);
46549 return derivationPath;
46550 }
46551 else {
46552 console.log("Unknown derivation path");
46553 }
46554 }
46555
ebd8d4e8 46556 function findDerivationPathErrors(path) {
30c9e79d
IC
46557 // TODO is not perfect but is better than nothing
46558 // Inspired by
46559 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
46560 // and
46561 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
46562 var maxDepth = 255; // TODO verify this!!
46563 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
46564 if (path[0] != "m") {
46565 return "First character must be 'm'";
46566 }
46567 if (path.length > 1) {
46568 if (path[1] != "/") {
46569 return "Separator must be '/'";
46570 }
46571 var indexes = path.split("/");
46572 if (indexes.length > maxDepth) {
46573 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
46574 }
46575 for (var depth = 1; depth<indexes.length; depth++) {
46576 var index = indexes[depth];
46577 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
46578 if (invalidChars.length > 0) {
46579 return "Invalid characters " + invalidChars + " found at depth " + depth;
46580 }
46581 var indexValue = parseInt(index.replace("'", ""));
46582 if (isNaN(depth)) {
46583 return "Invalid number at depth " + depth;
46584 }
46585 if (indexValue > maxIndexValue) {
46586 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
46587 }
46588 }
46589 }
0a1f0259
IC
46590 // Check root key exists or else derivation path is useless!
46591 if (!bip32RootKey) {
46592 return "No root key";
46593 }
ba3cb9ec 46594 // Check no hardened derivation path when using xpub keys
8d18f379
IC
46595 var hardenedPath = path.indexOf("'") > -1;
46596 var hardenedAddresses = bip32TabSelected() && DOM.hardenedAddresses.prop("checked");
46597 var hardened = hardenedPath || hardenedAddresses;
9987f0c1 46598 var isXpubkey = bip32RootKey.isNeutered();
ba3cb9ec
IC
46599 if (hardened && isXpubkey) {
46600 return "Hardened derivation path is invalid with xpub key";
46601 }
ebd8d4e8
IC
46602 return false;
46603 }
46604
20083ab9
IC
46605 function displayBip44Info() {
46606 // Get the derivation path for the account
46607 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
46608 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
46609 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
46610 var path = "m/";
46611 path += purpose + "'/";
46612 path += coin + "'/";
46613 path += account + "'/";
46614 // Calculate the account extended keys
46615 var accountExtendedKey = calcBip32ExtendedKey(path);
46616 var accountXprv = accountExtendedKey.toBase58();
9987f0c1 46617 var accountXpub = accountExtendedKey.neutered().toBase58();
20083ab9
IC
46618 // Display the extended keys
46619 DOM.bip44accountXprv.val(accountXprv);
46620 DOM.bip44accountXpub.val(accountXpub);
46621 }
46622
9987f0c1
IC
46623 function displayBip49Info() {
46624 // Get the derivation path for the account
46625 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
46626 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
46627 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
46628 var path = "m/";
46629 path += purpose + "'/";
46630 path += coin + "'/";
46631 path += account + "'/";
46632 // Calculate the account extended keys
46633 var accountExtendedKey = calcBip32ExtendedKey(path);
46634 var accountXprv = accountExtendedKey.toBase58();
46635 var accountXpub = accountExtendedKey.neutered().toBase58();
46636 // Display the extended keys
46637 DOM.bip49accountXprv.val(accountXprv);
46638 DOM.bip49accountXpub.val(accountXpub);
46639 }
46640
ebd8d4e8
IC
46641 function displayBip32Info() {
46642 // Display the key
73161a92 46643 DOM.seed.val(seed);
ebd8d4e8
IC
46644 var rootKey = bip32RootKey.toBase58();
46645 DOM.rootKey.val(rootKey);
ba3cb9ec 46646 var xprvkeyB58 = "NA";
9987f0c1 46647 if (!bip32ExtendedKey.isNeutered()) {
ba3cb9ec
IC
46648 xprvkeyB58 = bip32ExtendedKey.toBase58();
46649 }
46650 var extendedPrivKey = xprvkeyB58;
ebd8d4e8 46651 DOM.extendedPrivKey.val(extendedPrivKey);
9987f0c1 46652 var extendedPubKey = bip32ExtendedKey.neutered().toBase58();
ebd8d4e8
IC
46653 DOM.extendedPubKey.val(extendedPubKey);
46654 // Display the addresses and privkeys
46655 clearAddressesList();
46656 displayAddresses(0, 20);
46657 }
46658
46659 function displayAddresses(start, total) {
40892aba
IC
46660 generationProcesses.push(new (function() {
46661
46662 var rows = [];
46663
46664 this.stop = function() {
46665 for (var i=0; i<rows.length; i++) {
46666 rows[i].shouldGenerate = false;
46667 }
f128bd58 46668 hidePending();
40892aba
IC
46669 }
46670
46671 for (var i=0; i<total; i++) {
46672 var index = i + start;
f128bd58
IC
46673 var isLast = i == total - 1;
46674 rows.push(new TableRow(index, isLast));
40892aba
IC
46675 }
46676
46677 })());
80c4dd2a
IC
46678 }
46679
0f6b34d6
IC
46680 function P2wpkhNestedInP2shSelected() {
46681 return bip49TabSelected() || (bip32TabSelected() && useP2wpkhNestedInP2sh());
46682 }
46683
f128bd58 46684 function TableRow(index, isLast) {
80c4dd2a 46685
40892aba
IC
46686 var self = this;
46687 this.shouldGenerate = true;
1975bfbc 46688 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
0f6b34d6 46689 var isP2wpkhNestedInP2sh = P2wpkhNestedInP2shSelected();
0a8d06d0 46690 var p2wpkhNestedInP2shAvailable = networkHasBip49();
1975bfbc 46691
80c4dd2a
IC
46692 function init() {
46693 calculateValues();
46694 }
46695
46696 function calculateValues() {
46697 setTimeout(function() {
40892aba
IC
46698 if (!self.shouldGenerate) {
46699 return;
46700 }
9987f0c1 46701 var key = "NA";
1975bfbc
IC
46702 if (useHardenedAddresses) {
46703 key = bip32ExtendedKey.deriveHardened(index);
46704 }
46705 else {
46706 key = bip32ExtendedKey.derive(index);
46707 }
80c4dd2a 46708 var address = key.getAddress().toString();
ba3cb9ec 46709 var privkey = "NA";
9987f0c1
IC
46710 if (!key.isNeutered()) {
46711 privkey = key.keyPair.toWIF(network);
ba3cb9ec 46712 }
9987f0c1 46713 var pubkey = key.getPublicKeyBuffer().toString('hex');
38523d36 46714 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
46715 if (useHardenedAddresses) {
46716 indexText = indexText + "'";
46717 }
8b095871 46718 // Ethereum values are different
534481b6 46719 if (networks[DOM.network.val()].name == "ETH - Ethereum") {
9987f0c1 46720 var privKeyBuffer = key.keyPair.d.toBuffer();
8b095871
IC
46721 privkey = privKeyBuffer.toString('hex');
46722 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
49b21f12
IC
46723 var hexAddress = addressBuffer.toString('hex');
46724 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
46725 address = ethUtil.addHexPrefix(checksumAddress);
920eb591
IC
46726 privkey = ethUtil.addHexPrefix(privkey);
46727 pubkey = ethUtil.addHexPrefix(pubkey);
8b095871 46728 }
8a1f452d 46729 // Ripple values are different
534481b6 46730 if (networks[DOM.network.val()].name == "XRP - Ripple") {
8a1f452d 46731 privkey = convertRipplePriv(privkey);
46732 address = convertRippleAdrr(address);
46733 }
9987f0c1 46734 // BIP49 addresses are different
0a8d06d0
IC
46735 if (isP2wpkhNestedInP2sh) {
46736 if (!p2wpkhNestedInP2shAvailable) {
9987f0c1
IC
46737 return;
46738 }
46739 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
46740 var scriptsig = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
46741 var addressbytes = bitcoinjs.bitcoin.crypto.hash160(scriptsig);
46742 var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes);
46743 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
46744 }
1b12b2f5 46745 addAddressToList(indexText, address, pubkey, privkey);
f128bd58
IC
46746 if (isLast) {
46747 hidePending();
46748 }
80c4dd2a 46749 }, 50)
ebd8d4e8 46750 }
80c4dd2a
IC
46751
46752 init();
46753
ebd8d4e8
IC
46754 }
46755
46756 function showMore() {
ebd8d4e8
IC
46757 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
46758 if (isNaN(rowsToAdd)) {
46759 rowsToAdd = 20;
46760 DOM.rowsToAdd.val("20");
46761 }
924727ed
IC
46762 var start = parseInt(DOM.moreRowsStartIndex.val())
46763 if (isNaN(start)) {
46764 start = lastIndexInTable() + 1;
46765 }
46766 else {
46767 var newStart = start + rowsToAdd;
46768 DOM.moreRowsStartIndex.val(newStart);
46769 }
ebd8d4e8
IC
46770 if (rowsToAdd > 200) {
46771 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
46772 msg += "Do you want to continue?";
46773 if (!confirm(msg)) {
46774 return;
46775 }
46776 }
ebd8d4e8 46777 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
46778 }
46779
46780 function clearDisplay() {
46781 clearAddressesList();
9987f0c1 46782 clearKeys();
ebd8d4e8
IC
46783 hideValidationError();
46784 }
46785
46786 function clearAddressesList() {
46787 DOM.addresses.empty();
40892aba
IC
46788 stopGenerating();
46789 }
46790
46791 function stopGenerating() {
46792 while (generationProcesses.length > 0) {
46793 var generation = generationProcesses.shift();
46794 generation.stop();
46795 }
ebd8d4e8
IC
46796 }
46797
9987f0c1
IC
46798 function clearKeys() {
46799 clearRootKey();
46800 clearDerivedKeys();
46801 }
46802
46803 function clearRootKey() {
ebd8d4e8 46804 DOM.rootKey.val("");
9987f0c1
IC
46805 }
46806
46807 function clearDerivedKeys() {
ebd8d4e8
IC
46808 DOM.extendedPrivKey.val("");
46809 DOM.extendedPubKey.val("");
9987f0c1
IC
46810 DOM.bip44accountXprv.val("");
46811 DOM.bip44accountXpub.val("");
ebd8d4e8
IC
46812 }
46813
1b12b2f5 46814 function addAddressToList(indexText, address, pubkey, privkey) {
ebd8d4e8 46815 var row = $(addressRowTemplate.html());
80c4dd2a
IC
46816 // Elements
46817 var indexCell = row.find(".index span");
46818 var addressCell = row.find(".address span");
1b12b2f5 46819 var pubkeyCell = row.find(".pubkey span");
80c4dd2a
IC
46820 var privkeyCell = row.find(".privkey span");
46821 // Content
ae30fed8 46822 indexCell.text(indexText);
80c4dd2a 46823 addressCell.text(address);
1b12b2f5 46824 pubkeyCell.text(pubkey);
80c4dd2a
IC
46825 privkeyCell.text(privkey);
46826 // Visibility
46827 if (!showIndex) {
46828 indexCell.addClass("invisible");
46829 }
46830 if (!showAddress) {
46831 addressCell.addClass("invisible");
46832 }
1b12b2f5
IC
46833 if (!showPubKey) {
46834 pubkeyCell.addClass("invisible");
46835 }
80c4dd2a 46836 if (!showPrivKey) {
6d628db7 46837 privkeyCell.addClass("invisible");
80c4dd2a 46838 }
ebd8d4e8 46839 DOM.addresses.append(row);
e00964cc
IC
46840 var rowShowQrEls = row.find("[data-show-qr]");
46841 setQrEvents(rowShowQrEls);
ebd8d4e8
IC
46842 }
46843
46844 function hasStrongRandom() {
46845 return 'crypto' in window && window['crypto'] !== null;
46846 }
46847
46848 function disableForms() {
46849 $("form").on("submit", function(e) {
46850 e.preventDefault();
46851 });
46852 }
46853
ebd8d4e8
IC
46854 function parseIntNoNaN(val, defaultVal) {
46855 var v = parseInt(val);
46856 if (isNaN(v)) {
46857 return defaultVal;
46858 }
46859 return v;
46860 }
46861
46862 function showPending() {
46863 DOM.feedback
46864 .text("Calculating...")
46865 .show();
46866 }
46867
563e401a 46868 function findNearestWord(word) {
0515eeec
IC
46869 var language = getLanguage();
46870 var words = WORDLISTS[language];
563e401a
IC
46871 var minDistance = 99;
46872 var closestWord = words[0];
46873 for (var i=0; i<words.length; i++) {
46874 var comparedTo = words[i];
6ea15134
IC
46875 if (comparedTo.indexOf(word) == 0) {
46876 return comparedTo;
46877 }
563e401a
IC
46878 var distance = Levenshtein.get(word, comparedTo);
46879 if (distance < minDistance) {
46880 closestWord = comparedTo;
46881 minDistance = distance;
46882 }
46883 }
46884 return closestWord;
46885 }
46886
ebd8d4e8
IC
46887 function hidePending() {
46888 DOM.feedback
46889 .text("")
46890 .hide();
46891 }
46892
ab78acc6
IC
46893 function populateNetworkSelect() {
46894 for (var i=0; i<networks.length; i++) {
46895 var network = networks[i];
46896 var option = $("<option>");
46897 option.attr("value", i);
46898 option.text(network.name);
b3cc3930
IC
46899 if (network.name == "BTC - Bitcoin") {
46900 option.prop("selected", true);
46901 }
ab78acc6
IC
46902 DOM.phraseNetwork.append(option);
46903 }
46904 }
46905
56530adc
IC
46906 function populateClientSelect() {
46907 for (var i=0; i<clients.length; i++) {
46908 var client = clients[i];
46909 var option = $("<option>");
46910 option.attr("value", i);
46911 option.text(client.name);
46912 DOM.bip32Client.append(option);
46913 }
46914 }
46915
0515eeec
IC
46916 function getLanguage() {
46917 var defaultLanguage = "english";
46918 // Try to get from existing phrase
46919 var language = getLanguageFromPhrase();
46920 // Try to get from url if not from phrase
46921 if (language.length == 0) {
46922 language = getLanguageFromUrl();
46923 }
46924 // Default to English if no other option
46925 if (language.length == 0) {
46926 language = defaultLanguage;
46927 }
46928 return language;
46929 }
46930
46931 function getLanguageFromPhrase(phrase) {
46932 // Check if how many words from existing phrase match a language.
46933 var language = "";
46934 if (!phrase) {
46935 phrase = DOM.phrase.val();
46936 }
46937 if (phrase.length > 0) {
46938 var words = phraseToWordArray(phrase);
46939 var languageMatches = {};
46940 for (l in WORDLISTS) {
46941 // Track how many words match in this language
46942 languageMatches[l] = 0;
46943 for (var i=0; i<words.length; i++) {
46944 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
46945 if (wordInLanguage) {
46946 languageMatches[l]++;
46947 }
46948 }
46949 // Find languages with most word matches.
46950 // This is made difficult due to commonalities between Chinese
46951 // simplified vs traditional.
46952 var mostMatches = 0;
46953 var mostMatchedLanguages = [];
46954 for (var l in languageMatches) {
46955 var numMatches = languageMatches[l];
46956 if (numMatches > mostMatches) {
46957 mostMatches = numMatches;
46958 mostMatchedLanguages = [l];
46959 }
46960 else if (numMatches == mostMatches) {
46961 mostMatchedLanguages.push(l);
46962 }
46963 }
46964 }
46965 if (mostMatchedLanguages.length > 0) {
46966 // Use first language and warn if multiple detected
46967 language = mostMatchedLanguages[0];
46968 if (mostMatchedLanguages.length > 1) {
46969 console.warn("Multiple possible languages");
46970 console.warn(mostMatchedLanguages);
46971 }
46972 }
46973 }
46974 return language;
46975 }
46976
46977 function getLanguageFromUrl() {
c6624d51
IC
46978 for (var language in WORDLISTS) {
46979 if (window.location.hash.indexOf(language) > -1) {
46980 return language;
46981 }
46982 }
46983 return "";
0515eeec
IC
46984 }
46985
46986 function setMnemonicLanguage() {
46987 var language = getLanguage();
46988 // Load the bip39 mnemonic generator for this language if required
46989 if (!(language in mnemonics)) {
46990 mnemonics[language] = new Mnemonic(language);
46991 }
46992 mnemonic = mnemonics[language];
46993 }
46994
46995 function convertPhraseToNewLanguage() {
46996 var oldLanguage = getLanguageFromPhrase();
46997 var newLanguage = getLanguageFromUrl();
46998 var oldPhrase = DOM.phrase.val();
46999 var oldWords = phraseToWordArray(oldPhrase);
47000 var newWords = [];
47001 for (var i=0; i<oldWords.length; i++) {
47002 var oldWord = oldWords[i];
47003 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
47004 var newWord = WORDLISTS[newLanguage][index];
47005 newWords.push(newWord);
47006 }
47007 newPhrase = wordArrayToPhrase(newWords);
47008 return newPhrase;
47009 }
47010
47011 // TODO look at jsbip39 - mnemonic.splitWords
47012 function phraseToWordArray(phrase) {
47013 var words = phrase.split(/\s/g);
47014 var noBlanks = [];
47015 for (var i=0; i<words.length; i++) {
47016 var word = words[i];
47017 if (word.length > 0) {
47018 noBlanks.push(word);
47019 }
47020 }
47021 return noBlanks;
47022 }
47023
47024 // TODO look at jsbip39 - mnemonic.joinWords
47025 function wordArrayToPhrase(words) {
47026 var phrase = words.join(" ");
47027 var language = getLanguageFromPhrase(phrase);
47028 if (language == "japanese") {
47029 phrase = words.join("\u3000");
47030 }
47031 return phrase;
47032 }
47033
c6624d51
IC
47034 function isUsingOwnEntropy() {
47035 return DOM.useEntropy.prop("checked");
47036 }
47037
47038 function setMnemonicFromEntropy() {
2a6dd137 47039 clearEntropyFeedback();
18abe53b 47040 // Get entropy value
c6624d51 47041 var entropyStr = DOM.entropy.val();
18abe53b 47042 // Work out minimum base for entropy
c6624d51 47043 var entropy = Entropy.fromString(entropyStr);
18abe53b 47044 if (entropy.binaryStr.length == 0) {
c6624d51
IC
47045 return;
47046 }
47047 // Show entropy details
18abe53b
IC
47048 showEntropyFeedback(entropy);
47049 // Use entropy hash if not using raw entropy
47050 var bits = entropy.binaryStr;
47051 var mnemonicLength = DOM.entropyMnemonicLength.val();
47052 if (mnemonicLength != "raw") {
47053 // Get bits by hashing entropy with SHA256
47054 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
47055 var hex = sjcl.codec.hex.fromBits(hash);
47056 bits = BigInteger.parse(hex, 16).toString(2);
53aaab27 47057 while (bits.length % 256 != 0) {
18abe53b
IC
47058 bits = "0" + bits;
47059 }
47060 // Truncate hash to suit number of words
47061 mnemonicLength = parseInt(mnemonicLength);
47062 var numberOfBits = 32 * mnemonicLength / 3;
47063 bits = bits.substring(0, numberOfBits);
c6624d51 47064 }
c6624d51 47065 // Discard trailing entropy
18abe53b 47066 var bitsToUse = Math.floor(bits.length / 32) * 32;
2a6dd137
IC
47067 var start = bits.length - bitsToUse;
47068 var binaryStr = bits.substring(start);
c6624d51
IC
47069 // Convert entropy string to numeric array
47070 var entropyArr = [];
18abe53b
IC
47071 for (var i=0; i<binaryStr.length / 8; i++) {
47072 var byteAsBits = binaryStr.substring(i*8, i*8+8);
47073 var entropyByte = parseInt(byteAsBits, 2);
c6624d51
IC
47074 entropyArr.push(entropyByte)
47075 }
47076 // Convert entropy array to mnemonic
47077 var phrase = mnemonic.toMnemonic(entropyArr);
47078 // Set the mnemonic in the UI
47079 DOM.phrase.val(phrase);
47080 }
47081
2a6dd137 47082 function clearEntropyFeedback() {
f1e5d484 47083 DOM.entropyCrackTime.text("...");
18abe53b 47084 DOM.entropyType.text("");
2a6dd137
IC
47085 DOM.entropyWordCount.text("0");
47086 DOM.entropyEventCount.text("0");
47087 DOM.entropyBitsPerEvent.text("0");
47088 DOM.entropyBits.text("0");
47089 DOM.entropyFiltered.html("&nbsp;");
47090 DOM.entropyBinary.html("&nbsp;");
c6624d51
IC
47091 }
47092
18abe53b 47093 function showEntropyFeedback(entropy) {
9e97eb76 47094 var numberOfBits = entropy.binaryStr.length;
f1e5d484 47095 var timeToCrack = "unknown";
95f04905
IC
47096 try {
47097 var z = zxcvbn(entropy.base.parts.join(""));
f1e5d484
IC
47098 timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second;
47099 if (z.feedback.warning != "") {
47100 timeToCrack = timeToCrack + " - " + z.feedback.warning;
47101 };
18abe53b 47102 }
95f04905 47103 catch (e) {
95f04905
IC
47104 console.log("Error detecting entropy strength with zxcvbn:");
47105 console.log(e);
47106 }
95f04905 47107 var entropyTypeStr = getEntropyTypeStr(entropy);
9e97eb76 47108 var wordCount = Math.floor(numberOfBits / 32) * 3;
94959756 47109 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
2a6dd137 47110 DOM.entropyFiltered.html(entropy.cleanHtml);
95f04905 47111 DOM.entropyType.text(entropyTypeStr);
f1e5d484 47112 DOM.entropyCrackTime.text(timeToCrack);
18abe53b 47113 DOM.entropyEventCount.text(entropy.base.ints.length);
9e97eb76 47114 DOM.entropyBits.text(numberOfBits);
2a6dd137
IC
47115 DOM.entropyWordCount.text(wordCount);
47116 DOM.entropyBinary.text(entropy.binaryStr);
9e97eb76 47117 DOM.entropyBitsPerEvent.text(bitsPerEvent);
9ff30bab
IC
47118 // detect and warn of filtering
47119 var rawNoSpaces = DOM.entropy.val().replace(/\s/g, "");
47120 var cleanNoSpaces = entropy.cleanStr.replace(/\s/g, "");
47121 var isFiltered = rawNoSpaces.length != cleanNoSpaces.length;
47122 if (isFiltered) {
47123 DOM.entropyFilterWarning.removeClass('hidden');
47124 }
47125 else {
47126 DOM.entropyFilterWarning.addClass('hidden');
47127 }
95f04905
IC
47128 }
47129
47130 function getEntropyTypeStr(entropy) {
47131 var typeStr = entropy.base.str;
47132 // Add some detail if these are cards
47133 if (entropy.base.asInt == 52) {
47134 var cardDetail = []; // array of message strings
47135 // Detect duplicates
47136 var dupes = [];
47137 var dupeTracker = {};
47138 for (var i=0; i<entropy.base.parts.length; i++) {
47139 var card = entropy.base.parts[i];
9e97eb76
IC
47140 var cardUpper = card.toUpperCase();
47141 if (cardUpper in dupeTracker) {
95f04905
IC
47142 dupes.push(card);
47143 }
9e97eb76 47144 dupeTracker[cardUpper] = true;
95f04905
IC
47145 }
47146 if (dupes.length > 0) {
47147 var dupeWord = "duplicates";
47148 if (dupes.length == 1) {
47149 dupeWord = "duplicate";
47150 }
47151 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
47152 if (dupes.length > 3) {
47153 msg += "...";
47154 }
47155 cardDetail.push(msg);
47156 }
47157 // Detect full deck
47158 var uniqueCards = [];
47159 for (var uniqueCard in dupeTracker) {
47160 uniqueCards.push(uniqueCard);
47161 }
47162 if (uniqueCards.length == 52) {
47163 cardDetail.unshift("full deck");
47164 }
9e97eb76
IC
47165 // Detect missing cards
47166 var values = "A23456789TJQK";
47167 var suits = "CDHS";
47168 var missingCards = [];
47169 for (var i=0; i<suits.length; i++) {
47170 for (var j=0; j<values.length; j++) {
47171 var card = values[j] + suits[i];
47172 if (!(card in dupeTracker)) {
47173 missingCards.push(card);
47174 }
47175 }
47176 }
47177 // Display missing cards if six or less, ie clearly going for full deck
47178 if (missingCards.length > 0 && missingCards.length <= 6) {
47179 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
47180 if (missingCards.length > 3) {
47181 msg += "...";
47182 }
47183 cardDetail.push(msg);
47184 }
95f04905
IC
47185 // Add card details to typeStr
47186 if (cardDetail.length > 0) {
47187 typeStr += " (" + cardDetail.join(", ") + ")";
47188 }
47189 }
47190 return typeStr;
47191 }
47192
e00964cc
IC
47193 function setQrEvents(els) {
47194 els.on("mouseenter", createQr);
47195 els.on("mouseleave", destroyQr);
47196 els.on("click", toggleQr);
47197 }
47198
47199 function createQr(e) {
47200 var content = e.target.textContent || e.target.value;
47201 if (content) {
47202 var size = 130;
47203 DOM.qrImage.qrcode({width: size, height: size, text: content});
47204 if (!showQr) {
52da415f
IC
47205 DOM.qrHider.addClass("hidden");
47206 }
47207 else {
47208 DOM.qrHider.removeClass("hidden");
e00964cc
IC
47209 }
47210 DOM.qrContainer.removeClass("hidden");
47211 }
47212 }
47213
47214 function destroyQr() {
47215 DOM.qrImage.text("");
47216 DOM.qrContainer.addClass("hidden");
47217 }
47218
47219 function toggleQr() {
47220 showQr = !showQr;
52da415f 47221 DOM.qrHider.toggleClass("hidden");
e00964cc
IC
47222 DOM.qrHint.toggleClass("hidden");
47223 }
47224
20083ab9
IC
47225 function bip44TabSelected() {
47226 return DOM.bip44tab.hasClass("active");
47227 }
47228
47229 function bip32TabSelected() {
47230 return DOM.bip32tab.hasClass("active");
47231 }
47232
0a8d06d0
IC
47233 function useP2wpkhNestedInP2sh() {
47234 return DOM.useP2wpkhNestedInP2sh.prop("checked");
47235 }
47236
9987f0c1 47237 function networkHasBip49() {
0a8d06d0 47238 return networks[DOM.network.val()].p2wpkhNestedInP2shAvailable;
9987f0c1
IC
47239 }
47240
47241 function bip49TabSelected() {
47242 return DOM.bip49tab.hasClass("active");
47243 }
47244
47245 function setHdCoin(coinValue) {
47246 DOM.bip44coin.val(coinValue);
47247 DOM.bip49coin.val(coinValue);
47248 }
47249
0a8d06d0 47250 function showP2wpkhNestedInP2shAvailable() {
9987f0c1
IC
47251 DOM.bip49unavailable.addClass("hidden");
47252 DOM.bip49available.removeClass("hidden");
0a8d06d0 47253 DOM.useP2wpkhNestedInP2sh.prop("disabled", false);
9987f0c1
IC
47254 }
47255
0a8d06d0 47256 function showP2wpkhNestedInP2shUnavailable() {
9987f0c1
IC
47257 DOM.bip49available.addClass("hidden");
47258 DOM.bip49unavailable.removeClass("hidden");
0a8d06d0
IC
47259 DOM.useP2wpkhNestedInP2sh.prop("disabled", true);
47260 DOM.useP2wpkhNestedInP2sh.prop("checked", false);
9987f0c1
IC
47261 }
47262
0f6b34d6
IC
47263 function useBitpayAddresses() {
47264 return !(DOM.useBitpayAddresses.prop("checked"));
47265 }
47266
47267 function setBitcoinCashNetworkValues() {
47268 if (useBitpayAddresses()) {
47269 network = bitcoinjs.bitcoin.networks.bitcoin;
47270 }
47271 else {
47272 network = bitcoinjs.bitcoin.networks.bitcoinCashBitbpay;
47273 }
47274 }
47275
47276 function adjustNetworkForBip49() {
47277 // If bip49 is selected the xpub/xprv prefixes need to be adjusted
47278 // to avoid accidentally importing BIP49 xpub to BIP44 watch only
47279 // wallet.
47280 // See https://github.com/iancoleman/bip39/issues/125
47281 if (P2wpkhNestedInP2shSelected()) {
47282 if (network == bitcoinjs.bitcoin.networks.bitcoin) {
47283 network = bitcoinjs.bitcoin.networks.bitcoinBip49;
47284 }
47285 else if (network == bitcoinjs.bitcoin.networks.testnet) {
47286 network = bitcoinjs.bitcoin.networks.testnetBip49;
47287 }
47288 else if (network == bitcoinjs.bitcoin.networks.litecoin) {
47289 network = bitcoinjs.bitcoin.networks.litecoinBip49;
47290 }
47291 }
47292 else {
47293 if (network == bitcoinjs.bitcoin.networks.bitcoinBip49) {
47294 network = bitcoinjs.bitcoin.networks.bitcoin;
47295 }
47296 else if (network == bitcoinjs.bitcoin.networks.testnetBip49) {
47297 network = bitcoinjs.bitcoin.networks.testnet;
47298 }
47299 else if (network == bitcoinjs.bitcoin.networks.litecoinBip49) {
47300 network = bitcoinjs.bitcoin.networks.litecoin;
47301 }
47302 }
47303 }
47304
924727ed
IC
47305 function lastIndexInTable() {
47306 var pathText = DOM.addresses.find(".index").last().text();
47307 var pathBits = pathText.split("/");
47308 var lastBit = pathBits[pathBits.length-1];
47309 var lastBitClean = lastBit.replace("'", "");
47310 return parseInt(lastBitClean);
47311 }
47312
ab78acc6 47313 var networks = [
b3cc3930
IC
47314 {
47315 name: "BCH - Bitcoin Cash",
0a8d06d0 47316 p2wpkhNestedInP2shAvailable: false,
b3cc3930 47317 onSelect: function() {
0f6b34d6
IC
47318 DOM.useBitpayAddressesContainer.removeClass("hidden");
47319 setBitcoinCashNetworkValues();
b3cc3930
IC
47320 setHdCoin(145);
47321 },
47322 },
ab78acc6 47323 {
534481b6 47324 name: "BTC - Bitcoin",
0a8d06d0 47325 p2wpkhNestedInP2shAvailable: true,
ab78acc6 47326 onSelect: function() {
9987f0c1
IC
47327 network = bitcoinjs.bitcoin.networks.bitcoin;
47328 setHdCoin(0);
ab78acc6
IC
47329 },
47330 },
47331 {
534481b6 47332 name: "BTC - Bitcoin Testnet",
0a8d06d0 47333 p2wpkhNestedInP2shAvailable: true,
ab78acc6 47334 onSelect: function() {
9987f0c1
IC
47335 network = bitcoinjs.bitcoin.networks.testnet;
47336 setHdCoin(1);
ab78acc6
IC
47337 },
47338 },
39608073
RS
47339 {
47340 name: "BTG - Bitcoin Gold",
47341 p2wpkhNestedInP2shAvailable: true,
47342 onSelect: function() {
47343 network = bitcoinjs.bitcoin.networks.bgold;
47344 setHdCoin(0);
47345 },
47346 },
ab78acc6 47347 {
534481b6 47348 name: "CLAM - Clams",
0a8d06d0 47349 p2wpkhNestedInP2shAvailable: false,
ab78acc6 47350 onSelect: function() {
9987f0c1
IC
47351 network = bitcoinjs.bitcoin.networks.clam;
47352 setHdCoin(23);
ab78acc6
IC
47353 },
47354 },
0921f370 47355 {
47356 name: "CRW - Crown",
0a8d06d0 47357 p2wpkhNestedInP2shAvailable: false,
0921f370 47358 onSelect: function() {
9987f0c1
IC
47359 network = bitcoinjs.bitcoin.networks.crown;
47360 setHdCoin(72);
0921f370 47361 },
47362 },
ab78acc6 47363 {
534481b6 47364 name: "DASH - Dash",
0a8d06d0 47365 p2wpkhNestedInP2shAvailable: false,
d5dc92fd 47366 onSelect: function() {
9987f0c1
IC
47367 network = bitcoinjs.bitcoin.networks.dash;
47368 setHdCoin(5);
d5dc92fd
IC
47369 },
47370 },
c0386f3b 47371 {
534481b6 47372 name: "DASH - Dash Testnet",
0a8d06d0 47373 p2wpkhNestedInP2shAvailable: false,
c0386f3b 47374 onSelect: function() {
9987f0c1
IC
47375 network = bitcoinjs.bitcoin.networks.dashtn;
47376 setHdCoin(1);
c0386f3b
KR
47377 },
47378 },
d5dc92fd 47379 {
534481b6 47380 name: "DOGE - Dogecoin",
0a8d06d0 47381 p2wpkhNestedInP2shAvailable: false,
534481b6 47382 onSelect: function() {
9987f0c1
IC
47383 network = bitcoinjs.bitcoin.networks.dogecoin;
47384 setHdCoin(3);
534481b6 47385 },
47386 },
47387 {
47388 name: "ETH - Ethereum",
0a8d06d0 47389 p2wpkhNestedInP2shAvailable: false,
d5dc92fd 47390 onSelect: function() {
9987f0c1
IC
47391 network = bitcoinjs.bitcoin.networks.bitcoin;
47392 setHdCoin(60);
d5dc92fd
IC
47393 },
47394 },
1102f201
IC
47395 {
47396 name: "FJC - Fujicoin",
47397 p2wpkhNestedInP2shAvailable: false,
47398 onSelect: function() {
47399 network = bitcoinjs.bitcoin.networks.fujicoin;
47400 setHdCoin(75);
47401 },
47402 },
f88fab20 47403 {
534481b6 47404 name: "GAME - GameCredits",
0a8d06d0 47405 p2wpkhNestedInP2shAvailable: false,
f88fab20 47406 onSelect: function() {
9987f0c1
IC
47407 network = bitcoinjs.bitcoin.networks.game;
47408 setHdCoin(101);
f88fab20 47409 },
47410 },
a3baa26e 47411 {
534481b6 47412 name: "JBS - Jumbucks",
0a8d06d0 47413 p2wpkhNestedInP2shAvailable: false,
a3baa26e 47414 onSelect: function() {
9987f0c1
IC
47415 network = bitcoinjs.bitcoin.networks.jumbucks;
47416 setHdCoin(26);
a3baa26e
IC
47417 },
47418 },
47419 {
534481b6 47420 name: "LTC - Litecoin",
0f6b34d6 47421 p2wpkhNestedInP2shAvailable: true,
a3baa26e 47422 onSelect: function() {
9987f0c1
IC
47423 network = bitcoinjs.bitcoin.networks.litecoin;
47424 setHdCoin(2);
8d18f379 47425 DOM.litecoinLtubContainer.removeClass("hidden");
a3baa26e
IC
47426 },
47427 },
56ad9601
JS
47428 {
47429 name: "MAZA - Maza",
0a8d06d0 47430 p2wpkhNestedInP2shAvailable: false,
56ad9601
JS
47431 onSelect: function() {
47432 network = bitcoinjs.bitcoin.networks.maza;
47433 setHdCoin(13);
47434 },
47435 },
924727ed
IC
47436 {
47437 name: "MONA - Monacoin",
47438 p2wpkhNestedInP2shAvailable: true,
47439 onSelect: function() {
47440 network = bitcoinjs.bitcoin.networks.monacoin,
47441 setHdCoin(22);
47442 },
47443 },
a3baa26e 47444 {
534481b6 47445 name: "NMC - Namecoin",
0a8d06d0 47446 p2wpkhNestedInP2shAvailable: false,
a3baa26e 47447 onSelect: function() {
9987f0c1
IC
47448 network = bitcoinjs.bitcoin.networks.namecoin;
47449 setHdCoin(7);
a3baa26e
IC
47450 },
47451 },
f128bd58
IC
47452 {
47453 name: "PIVX - PIVX",
0a8d06d0 47454 p2wpkhNestedInP2shAvailable: false,
f128bd58
IC
47455 onSelect: function() {
47456 network = bitcoinjs.bitcoin.networks.pivx;
47457 setHdCoin(119);
47458 },
47459 },
47460 {
47461 name: "PIVX - PIVX Testnet",
0a8d06d0 47462 p2wpkhNestedInP2shAvailable: false,
f128bd58
IC
47463 onSelect: function() {
47464 network = bitcoinjs.bitcoin.networks.pivxtestnet;
47465 setHdCoin(1);
47466 },
47467 },
5c434a8a 47468 {
534481b6 47469 name: "PPC - Peercoin",
0a8d06d0 47470 p2wpkhNestedInP2shAvailable: false,
5c434a8a 47471 onSelect: function() {
9987f0c1
IC
47472 network = bitcoinjs.bitcoin.networks.peercoin;
47473 setHdCoin(6);
5c434a8a
CM
47474 },
47475 },
8a1f452d 47476 {
534481b6 47477 name: "SDC - ShadowCash",
0a8d06d0 47478 p2wpkhNestedInP2shAvailable: false,
5493efc3 47479 onSelect: function() {
9987f0c1
IC
47480 network = bitcoinjs.bitcoin.networks.shadow;
47481 setHdCoin(35);
5493efc3 47482 },
47483 },
07ac4350 47484 {
534481b6 47485 name: "SDC - ShadowCash Testnet",
0a8d06d0 47486 p2wpkhNestedInP2shAvailable: false,
07ac4350 47487 onSelect: function() {
9987f0c1
IC
47488 network = bitcoinjs.bitcoin.networks.shadowtn;
47489 setHdCoin(1);
07ac4350 47490 },
47491 },
01e81e53 47492 {
534481b6 47493 name: "SLM - Slimcoin",
0a8d06d0 47494 p2wpkhNestedInP2shAvailable: false,
01e81e53 47495 onSelect: function() {
9987f0c1
IC
47496 network = bitcoinjs.bitcoin.networks.slimcoin;
47497 setHdCoin(63);
01e81e53
GH
47498 },
47499 },
47500 {
534481b6 47501 name: "SLM - Slimcoin Testnet",
0a8d06d0 47502 p2wpkhNestedInP2shAvailable: false,
01e81e53 47503 onSelect: function() {
9987f0c1
IC
47504 network = bitcoinjs.bitcoin.networks.slimcointn;
47505 setHdCoin(111);
01e81e53
GH
47506 },
47507 },
0f6b34d6
IC
47508 {
47509 name: "USNBT - NuBits",
47510 p2wpkhNestedInP2shAvailable: false,
47511 onSelect: function() {
47512 network = bitcoinjs.bitcoin.networks.nubits;
47513 setHdCoin(12);
47514 },
47515 },
07ac4350 47516 {
534481b6 47517 name: "VIA - Viacoin",
0a8d06d0 47518 p2wpkhNestedInP2shAvailable: false,
07ac4350 47519 onSelect: function() {
9987f0c1
IC
47520 network = bitcoinjs.bitcoin.networks.viacoin;
47521 setHdCoin(14);
07ac4350 47522 },
47523 },
8b095871 47524 {
534481b6 47525 name: "VIA - Viacoin Testnet",
0a8d06d0 47526 p2wpkhNestedInP2shAvailable: false,
8b095871 47527 onSelect: function() {
9987f0c1
IC
47528 network = bitcoinjs.bitcoin.networks.viacointestnet;
47529 setHdCoin(1);
8b095871
IC
47530 },
47531 },
b3cc3930
IC
47532 {
47533 name: "XMY - Myriadcoin",
0a8d06d0 47534 p2wpkhNestedInP2shAvailable: false,
b3cc3930
IC
47535 onSelect: function() {
47536 network = bitcoinjs.bitcoin.networks.myriadcoin;
47537 setHdCoin(90);
47538 },
47539 },
534481b6 47540 {
47541 name: "XRP - Ripple",
0a8d06d0 47542 p2wpkhNestedInP2shAvailable: false,
534481b6 47543 onSelect: function() {
9987f0c1
IC
47544 network = bitcoinjs.bitcoin.networks.bitcoin;
47545 setHdCoin(144);
534481b6 47546 },
47547 }
ab78acc6
IC
47548 ]
47549
56530adc
IC
47550 var clients = [
47551 {
47552 name: "Bitcoin Core",
47553 onSelect: function() {
47554 DOM.bip32path.val("m/0'/0'");
47555 DOM.hardenedAddresses.prop('checked', true);
47556 },
47557 },
47558 {
47559 name: "blockchain.info",
47560 onSelect: function() {
47561 DOM.bip32path.val("m/44'/0'/0'");
47562 DOM.hardenedAddresses.prop('checked', false);
47563 },
47564 },
47565 {
47566 name: "MultiBit HD",
47567 onSelect: function() {
47568 DOM.bip32path.val("m/0'/0");
47569 DOM.hardenedAddresses.prop('checked', false);
47570 },
47571 }
47572 ]
47573
ebd8d4e8
IC
47574 init();
47575
47576})();
dc55c6b0 47577</script>
ebd8d4e8
IC
47578 </body>
47579</html>