diff options
Diffstat (limited to 'RequestPayment.html')
-rw-r--r-- | RequestPayment.html | 4264 |
1 files changed, 2218 insertions, 2046 deletions
diff --git a/RequestPayment.html b/RequestPayment.html index 9e7542a..908de52 100644 --- a/RequestPayment.html +++ b/RequestPayment.html @@ -7,67 +7,6 @@ Pure v2.0.3 Copyright 2013 Yahoo! Licensed under the BSD License. - https://github.com/pure-ss/pure/blob/master/LICENSE.md -*/ -/*! - normalize.cs v | MIT License | git.io/normalize - Copyright (c) Nicolas Gallagher and Jonathan Neal -*/ -/*! normalize.ss v8.0.1 | MIT License | github.com/necolas/normalize.cs */ - -.talerbar { - text-align: center; -} -.tt { - font-family: "Lucida Console", Monaco, monospace; -} -.content { - overflow-x: auto; - padding-left: 15%; - padding-right: 15%; -} -.qr { - margin: auto; - text-align: center; -} -.qrtext { - width: max-content; - margin: auto; - transition: font-size 0.2s; - font-family: "Lucida Console", Monaco, monospace; - font-size: 0.5em; -} -.qrtext:hover { - font-size: 1em; -} -.talerbar { - margin: 0; - bottom: 0; - background-color: #033; - color: white; - width: 100%; - padding: 1em; - overflow: auto; -} -body { - overflow-y: scroll; -} -@media (min-width: 500px) { - .content { - padding-bottom: 2em; - margin-right: 1em; - overflow-y: auto; - } -} -#main a:link, -#main a:visited, -#main a:hover, -#main a:active { - color: black; -}/*! - Pure v2.0.3 - Copyright 2013 Yahoo! - Licensed under the BSD License. https://github.com/pure-cs s/pure/blob/master/LICENSE.md */ /*! @@ -1037,2510 +976,2743 @@ a.pure-button-selected { .pure-table-horizontal tbody > tr:last-child > td { border-bottom-width: 0; } -</style> +/*! + Pure v2.0.3 + Copyright 2013 Yahoo! + Licensed under the BSD License. + https://github.com/pure-ss/pure/blob/master/LICENSE.md +*/ +/*! + normalize.cs v | MIT License | git.io/normalize + Copyright (c) Nicolas Gallagher and Jonathan Neal +*/ +/*! normalize.ss v8.0.1 | MIT License | github.com/necolas/normalize.cs */ + +.talerbar { + text-align: center; +} +.tt { + font-family: "Lucida Console", Monaco, monospace; +} +.content { + overflow-x: auto; + padding-left: 15%; + padding-right: 15%; +} +.qr { + margin: auto; + text-align: center; +} +.qrtext { + width: max-content; + margin: auto; + transition: font-size 0.2s; + font-family: "Lucida Console", Monaco, monospace; + font-size: 0.5em; +} +.qrtext:hover { + font-size: 1em; +} +.talerbar { + margin: 0; + bottom: 0; + background-color: #033; + color: white; + width: 100%; + padding: 1em; + overflow: auto; +} +body { + overflow-y: scroll; +} +@media (min-width: 500px) { + .content { + padding-bottom: 2em; + overflow-y: auto; + } +} +#main a:link, +#main a:visited, +#main a:hover, +#main a:active { + color: black; +}.q1ma0zxq{margin:auto;text-align:center;width:340px;} +.fef0x5t{text-align:center;background-color:#033;color:white;padding:1em;overflow:auto;}.fef0x5t > p > a:link,.fef0x5t > p > a:visited,.fef0x5t > p > a:hover,.fef0x5t > p > a:active{color:white;} +.p1b3vqup{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;min-height:100vh;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.p1b3vqup a:link,.p1b3vqup a:visited,.p1b3vqup a:hover,.p1b3vqup a:active{color:black;}.p1b3vqup section{text-align:center;width:600px;margin-bottom:auto;}.p1b3vqup section:not(:first-of-type){margin-top:2em;}.p1b3vqup > header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;text-align:center;}.p1b3vqup > footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:space-around;-webkit-justify-content:space-around;-ms-flex-pack:space-around;justify-content:space-around;width:100%;margin-bottom:0px;} +.c1gnd3xp{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;} +.wpwjmk{display:inline-block;zoom:1;line-height:normal;white-space:nowrap;vertical-align:middle;text-align:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-sizing:border-box;text-transform:var(--wpwjmk-0);font-family:inherit;font-size:100%;padding:0.5em 1em;color:#444;color:rgba(0,0,0,0.8);border:1px solid #999;border:none rgba(0,0,0,0);background-color:'#e6e6e6';-webkit-text-decoration:none;text-decoration:none;border-radius:2px;background-color:#e6e6e6;border-radius:4px;text-shadow:0 1px 1px rgba(0,0,0,0.2);box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset, 0 0 6px rgba(0,0,0,0.2) inset;border-color:#000;}.wpwjmk:focus{outline:0;}.wpwjmk:disabled{border:none;background-image:none;-webkit-filter:alpha(opacity=40);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none;pointer-events:none;}.wpwjmk:hover{-webkit-filter:alpha(opacity=90);filter:alpha(opacity=90);background-image:linear-gradient( transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1) );} +.i1pkgksb{border-radius:0.25em;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:1em;border:solid 1px #b8daff;background-color:#cce5ff;color:#004085;} +.t2c81u8{text-align:left;}.t2c81u8 dt{font-weight:bold;margin-top:1em;}.t2c81u8 dd{margin-inline-start:0px;} +.t1mav7fx{text-align:left;}.t1mav7fx dt{font-weight:bold;display:inline-block;width:30%;}.t1mav7fx dd{margin-inline-start:0px;display:inline-block;width:70%;} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3NlYmFzam0vV29yay90YWxlci9tZXJjaGFudC1iYWNrb2ZmaWNlL3BhY2thZ2VzL2JhY2tlbmQvc3JjL3N0eWxlZC9pbmRleC50c3giXSwibmFtZXMiOlsiLnExbWEwenhxIiwiLmZlZjB4NXQiLCIucDFiM3ZxdXAiLCIuYzFnbmQzeHAiLCIud3B3am1rIiwiLmkxcGtna3NiIiwiLnQyYzgxdTgiLCIudDFtYXY3ZngiXSwibWFwcGluZ3MiOiJBQW9CYUE7QUFLQUM7QUFjQUM7QUF1Q0FDO0FBSUFDO0FBdURBQztBQVVBQztBQVVBQyIsImZpbGUiOiIvaG9tZS9zZWJhc2ptL1dvcmsvdGFsZXIvbWVyY2hhbnQtYmFja29mZmljZS9wYWNrYWdlcy9iYWNrZW5kL3NyYy9zdHlsZWQvaW5kZXgudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbiBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgVGFsZXJcbiAoQykgMjAyMSBUYWxlciBTeXN0ZW1zIFMuQS5cblxuIEdOVSBUYWxlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZVxuIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmVcbiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gR05VIFRhbGVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWVxuIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SXG4gQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoXG4gR05VIFRhbGVyOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPlxuICovXG4vKipcbipcbiogQGF1dGhvciBTZWJhc3RpYW4gSmF2aWVyIE1hcmNoYW5vIChzZWJhc2ptKVxuKi9cbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BsaW5hcmlhL3JlYWN0JztcbmV4cG9ydCBjb25zdCBRUlBsYWNlaG9sZGVyID0gc3R5bGVkLmRpdiBgXG4gIG1hcmdpbjogYXV0bztcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogMzQwcHg7IFxuYDtcbmV4cG9ydCBjb25zdCBGb290ZXJCYXIgPSBzdHlsZWQuZm9vdGVyIGBcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDMzO1xuICBjb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDFlbTtcbiAgb3ZlcmZsb3c6IGF1dG87XG5cbiAgJiA+IHAgPiBhOmxpbmssXG4gICYgPiBwID4gYTp2aXNpdGVkLFxuICAmID4gcCA+IGE6aG92ZXIsXG4gICYgPiBwID4gYTphY3RpdmUge1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgfVxuYDtcbmV4cG9ydCBjb25zdCBQYWdlID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWluLWhlaWdodDogMTAwdmg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIFxuICBhOmxpbmssXG4gIGE6dmlzaXRlZCxcbiAgYTpob3ZlcixcbiAgYTphY3RpdmUge1xuICAgIGNvbG9yOiBibGFjaztcbiAgfVxuICBcbiAgc2VjdGlvbiB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHdpZHRoOiA2MDBweDtcbiAgICAvKiBtYXJnaW46IGF1dG87ICovXG4gICAgLyogbWFyZ2luLXRvcDogMHB4OyAqL1xuICAgIG1hcmdpbi1ib3R0b206IGF1dG87XG4gICAgLyogb3ZlcmZsb3c6IGF1dG87ICovXG4gIH1cbiAgc2VjdGlvbjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcbiAgICBtYXJnaW4tdG9wOiAyZW07XG4gIH1cbiAgJiA+IGhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbiAgJiA+IGZvb3RlciB7XG4gICAgZGlzcGxheTogZmxleDsgICAgXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAwcHg7XG4gIH1cbmA7XG5leHBvcnQgY29uc3QgQ2VudGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuYDtcbmV4cG9ydCBjb25zdCBXYWxsZXRMaW5rID0gc3R5bGVkLmEgYFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHpvb206IDE7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgdGV4dC10cmFuc2Zvcm06ICR7KHsgdXBwZXJDYXNlZCB9KSA9PiB1cHBlckNhc2VkID8gJ3VwcGVyY2FzZScgOiAnbm9uZSd9O1xuXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXNpemU6IDEwMCU7XG4gIHBhZGRpbmc6IDAuNWVtIDFlbTtcbiAgY29sb3I6ICM0NDQ7IC8qIHJnYmEgbm90IHN1cHBvcnRlZCAoSUUgOCkgKi9cbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTsgLyogcmdiYSBzdXBwb3J0ZWQgKi9cbiAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsgLypJRSA2LzcvOCovXG4gIGJvcmRlcjogbm9uZSByZ2JhKDAsIDAsIDAsIDApOyAvKklFOSArIGV2ZXJ5dGhpbmcgZWxzZSovXG4gIGJhY2tncm91bmQtY29sb3I6ICcjZTZlNmU2JztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG5cbiAgOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICB9XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgLyogY3NzbGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NDApO1xuICAgIC8qIGNzc2xpbnQgaWdub3JlOmVuZCAqL1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICA6aG92ZXIge1xuICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT05MCk7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxuICAgICAgdHJhbnNwYXJlbnQsXG4gICAgICByZ2JhKDAsIDAsIDAsIDAuMDUpIDQwJSxcbiAgICAgIHJnYmEoMCwgMCwgMCwgMC4xKVxuICAgICk7XG4gIH1cblxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHRleHQtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjE1KSBpbnNldCxcbiAgICAwIDAgNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSBpbnNldDtcbiAgYm9yZGVyLWNvbG9yOiAjMDAwO1xuYDtcbmV4cG9ydCBjb25zdCBJbmZvQm94ID0gc3R5bGVkLmRpdiBgXG4gIGJvcmRlci1yYWRpdXM6IDAuMjVlbTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLyogbWFyZ2luOiAwLjVlbTsgKi9cbiAgcGFkZGluZzogMWVtO1xuICAvKiB3aWR0aDogMTAwJTsgKi9cbiAgYm9yZGVyOnNvbGlkIDFweCAjYjhkYWZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiNjY2U1ZmY7XG4gIGNvbG9yOiMwMDQwODU7XG5gO1xuZXhwb3J0IGNvbnN0IFRhYmxlRXhwYW5kZWQgPSBzdHlsZWQuZGwgYFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBkdCB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgbWFyZ2luLXRvcDogMWVtO1xuICB9XG4gIGRkIHtcbiAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiAwcHg7XG4gIH1cbmA7XG5leHBvcnQgY29uc3QgVGFibGVTaW1wbGUgPSBzdHlsZWQuZGwgYFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBkdCB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOjMwJTtcbiAgfVxuICBkZCB7XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogMHB4O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDo3MCU7XG4gIH1cbmA7XG4iXX0=*/</style> </head> <script id="built_time_data"> </script> <body> - <section id="main" class="content"><h1 style="text-align: center;">Pay with Taler</h1><div style="text-align: center;" class="taler-installed-hide"><p>Scan this QR code with your mobile wallet:</p><div class="qr">{{{ taler_pay_qrcode_svg }}}</div><p><a class="pure-button pure-button-active success" href="{{ taler_pay_uri }}">Or open your Taller wallet</a></p><p><a href="https://wallet.taler.net/">Don't have a Taler wallet yet? Install it!</a></p></div><hr /></section><div class="talerbar"><p>You can learn more about GNU Taler on our <a href="https://taler.net/">website</a>.<br />Copyright © 2014—2021 Taler Systems SA</p></div> + <div class="p1b3vqup"><section><h1>Pay with Taler</h1><p>Scan this QR code with your mobile wallet:</p><div class="q1ma0zxq">{{{ taler_pay_qrcode_svg }}}</div><p><a href="{{ taler_pay_uri }}" style="--wpwjmk-0: none;" class="wpwjmk">Or open your Taller wallet</a></p><p><a href="https://wallet.taler.net/">Don't have a Taler wallet yet? Install it!</a></p></section><footer class="fef0x5t"><p><a href="https://taler.net/">Learn more about GNU Taler on our website.</a><p>Copyright © 2014—2021 Taler Systems SA</p></p></footer></div> <script>var page = (function (exports) { - 'use strict'; + 'use strict'; - var n$1,u$2,i$2,t$1,r$2={},f$2=[],e$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function c$2(n,l){for(var u in l)n[u]=l[u];return n}function s$2(n){var l=n.parentNode;l&&l.removeChild(n);}function a$2(n,l,u){var i,t,o,r=arguments,f={};for(o in l)"key"==o?i=l[o]:"ref"==o?t=l[o]:f[o]=l[o];if(arguments.length>3)for(u=[u],o=3;o<arguments.length;o++)u.push(r[o]);if(null!=u&&(f.children=u),"function"==typeof n&&null!=n.defaultProps)for(o in n.defaultProps)void 0===f[o]&&(f[o]=n.defaultProps[o]);return v$2(n,f,i,t,null)}function v$2(l,u,i,t,o){var r={type:l,props:u,key:i,ref:t,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++n$1.__v:o};return null!=n$1.vnode&&n$1.vnode(r),r}function y$1(n){return n.children}function p$1(n,l){this.props=n,this.context=l;}function d$2(n,l){if(null==l)return n.__?d$2(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return "function"==typeof n.type?d$2(n):null}function _$1(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return _$1(n)}}function k$1(l){(!l.__d&&(l.__d=!0)&&u$2.push(l)&&!b$1.__r++||t$1!==n$1.debounceRendering)&&((t$1=n$1.debounceRendering)||i$2)(b$1);}function b$1(){for(var n;b$1.__r=u$2.length;)n=u$2.sort(function(n,l){return n.__v.__b-l.__v.__b}),u$2=[],n.some(function(n){var l,u,i,t,o,r;n.__d&&(o=(t=(l=n).__v).__e,(r=l.__P)&&(u=[],(i=c$2({},t)).__v=t.__v+1,I(r,t,i,l.__n,void 0!==r.ownerSVGElement,null!=t.__h?[o]:null,u,null==o?d$2(t):o,t.__h),T(u,t),t.__e!=o&&_$1(t)));});}function m$2(n,l,u,i,t,o,e,c,s,a){var h,p,_,k,b,m,w,A=i&&i.__k||f$2,P=A.length;for(u.__k=[],h=0;h<l.length;h++)if(null!=(k=u.__k[h]=null==(k=l[h])||"boolean"==typeof k?null:"string"==typeof k||"number"==typeof k||"bigint"==typeof k?v$2(null,k,null,null,k):Array.isArray(k)?v$2(y$1,{children:k},null,null,null):k.__b>0?v$2(k.type,k.props,k.key,null,k.__v):k)){if(k.__=u,k.__b=u.__b+1,null===(_=A[h])||_&&k.key==_.key&&k.type===_.type)A[h]=void 0;else for(p=0;p<P;p++){if((_=A[p])&&k.key==_.key&&k.type===_.type){A[p]=void 0;break}_=null;}I(n,k,_=_||r$2,t,o,e,c,s,a),b=k.__e,(p=k.ref)&&_.ref!=p&&(w||(w=[]),_.ref&&w.push(_.ref,null,k),w.push(p,k.__c||b,k)),null!=b?(null==m&&(m=b),"function"==typeof k.type&&null!=k.__k&&k.__k===_.__k?k.__d=s=g$2(k,s,n):s=x$2(n,k,_,A,b,s),a||"option"!==u.type?"function"==typeof u.type&&(u.__d=s):n.value=""):s&&_.__e==s&&s.parentNode!=n&&(s=d$2(_));}for(u.__e=m,h=P;h--;)null!=A[h]&&("function"==typeof u.type&&null!=A[h].__e&&A[h].__e==u.__d&&(u.__d=d$2(i,h+1)),L(A[h],A[h]));if(w)for(h=0;h<w.length;h++)z(w[h],w[++h],w[++h]);}function g$2(n,l,u){var i,t;for(i=0;i<n.__k.length;i++)(t=n.__k[i])&&(t.__=n,l="function"==typeof t.type?g$2(t,l,u):x$2(u,t,t,n.__k,t.__e,l));return l}function x$2(n,l,u,i,t,o){var r,f,e;if(void 0!==l.__d)r=l.__d,l.__d=void 0;else if(null==u||t!=o||null==t.parentNode)n:if(null==o||o.parentNode!==n)n.appendChild(t),r=null;else {for(f=o,e=0;(f=f.nextSibling)&&e<i.length;e+=2)if(f==t)break n;n.insertBefore(t,o),r=o;}return void 0!==r?r:t.nextSibling}function A(n,l,u,i,t){var o;for(o in u)"children"===o||"key"===o||o in l||C(n,o,null,u[o],i);for(o in l)t&&"function"!=typeof l[o]||"children"===o||"key"===o||"value"===o||"checked"===o||u[o]===l[o]||C(n,o,l[o],u[o],i);}function P(n,l,u){"-"===l[0]?n.setProperty(l,u):n[l]=null==u?"":"number"!=typeof u||e$1.test(l)?u:u+"px";}function C(n,l,u,i,t){var o;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else {if("string"==typeof i&&(n.style.cssText=i=""),i)for(l in i)u&&l in u||P(n.style,l,"");if(u)for(l in u)i&&u[l]===i[l]||P(n.style,l,u[l]);}else if("o"===l[0]&&"n"===l[1])o=l!==(l=l.replace(/Capture$/,"")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?i||n.addEventListener(l,o?H:$,o):n.removeEventListener(l,o?H:$,o);else if("dangerouslySetInnerHTML"!==l){if(t)l=l.replace(/xlink[H:h]/,"h").replace(/sName$/,"s");else if("href"!==l&&"list"!==l&&"form"!==l&&"tabIndex"!==l&&"download"!==l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null!=u&&(!1!==u||"a"===l[0]&&"r"===l[1])?n.setAttribute(l,u):n.removeAttribute(l));}}function $(l){this.l[l.type+!1](n$1.event?n$1.event(l):l);}function H(l){this.l[l.type+!0](n$1.event?n$1.event(l):l);}function I(l,u,i,t,o,r,f,e,s){var a,v,h,d,_,k,b,g,w,x,A,P=u.type;if(void 0!==u.constructor)return null;null!=i.__h&&(s=i.__h,e=u.__e=i.__e,u.__h=null,r=[e]),(a=n$1.__b)&&a(u);try{n:if("function"==typeof P){if(g=u.props,w=(a=P.contextType)&&t[a.__c],x=a?w?w.props.value:a.__:t,i.__c?b=(v=u.__c=i.__c).__=v.__E:("prototype"in P&&P.prototype.render?u.__c=v=new P(g,x):(u.__c=v=new p$1(g,x),v.constructor=P,v.render=M),w&&w.sub(v),v.props=g,v.state||(v.state={}),v.context=x,v.__n=t,h=v.__d=!0,v.__h=[]),null==v.__s&&(v.__s=v.state),null!=P.getDerivedStateFromProps&&(v.__s==v.state&&(v.__s=c$2({},v.__s)),c$2(v.__s,P.getDerivedStateFromProps(g,v.__s))),d=v.props,_=v.state,h)null==P.getDerivedStateFromProps&&null!=v.componentWillMount&&v.componentWillMount(),null!=v.componentDidMount&&v.__h.push(v.componentDidMount);else {if(null==P.getDerivedStateFromProps&&g!==d&&null!=v.componentWillReceiveProps&&v.componentWillReceiveProps(g,x),!v.__e&&null!=v.shouldComponentUpdate&&!1===v.shouldComponentUpdate(g,v.__s,x)||u.__v===i.__v){v.props=g,v.state=v.__s,u.__v!==i.__v&&(v.__d=!1),v.__v=u,u.__e=i.__e,u.__k=i.__k,u.__k.forEach(function(n){n&&(n.__=u);}),v.__h.length&&f.push(v);break n}null!=v.componentWillUpdate&&v.componentWillUpdate(g,v.__s,x),null!=v.componentDidUpdate&&v.__h.push(function(){v.componentDidUpdate(d,_,k);});}v.context=x,v.props=g,v.state=v.__s,(a=n$1.__r)&&a(u),v.__d=!1,v.__v=u,v.__P=l,a=v.render(v.props,v.state,v.context),v.state=v.__s,null!=v.getChildContext&&(t=c$2(c$2({},t),v.getChildContext())),h||null==v.getSnapshotBeforeUpdate||(k=v.getSnapshotBeforeUpdate(d,_)),A=null!=a&&a.type===y$1&&null==a.key?a.props.children:a,m$2(l,Array.isArray(A)?A:[A],u,i,t,o,r,f,e,s),v.base=u.__e,u.__h=null,v.__h.length&&f.push(v),b&&(v.__E=v.__=null),v.__e=!1;}else null==r&&u.__v===i.__v?(u.__k=i.__k,u.__e=i.__e):u.__e=j$1(i.__e,u,i,t,o,r,f,s);(a=n$1.diffed)&&a(u);}catch(l){u.__v=null,(s||null!=r)&&(u.__e=e,u.__h=!!s,r[r.indexOf(e)]=null),n$1.__e(l,u,i);}}function T(l,u){n$1.__c&&n$1.__c(u,l),l.some(function(u){try{l=u.__h,u.__h=[],l.some(function(n){n.call(u);});}catch(l){n$1.__e(l,u.__v);}});}function j$1(n,l,u,i,t,o,e,c){var a,v,h,y,p=u.props,d=l.props,_=l.type,k=0;if("svg"===_&&(t=!0),null!=o)for(;k<o.length;k++)if((a=o[k])&&(a===n||(_?a.localName==_:3==a.nodeType))){n=a,o[k]=null;break}if(null==n){if(null===_)return document.createTextNode(d);n=t?document.createElementNS("http://www.w3.org/2000/svg",_):document.createElement(_,d.is&&d),o=null,c=!1;}if(null===_)p===d||c&&n.data===d||(n.data=d);else {if(o=o&&f$2.slice.call(n.childNodes),v=(p=u.props||r$2).dangerouslySetInnerHTML,h=d.dangerouslySetInnerHTML,!c){if(null!=o)for(p={},y=0;y<n.attributes.length;y++)p[n.attributes[y].name]=n.attributes[y].value;(h||v)&&(h&&(v&&h.__html==v.__html||h.__html===n.innerHTML)||(n.innerHTML=h&&h.__html||""));}if(A(n,d,p,t,c),h)l.__k=[];else if(k=l.props.children,m$2(n,Array.isArray(k)?k:[k],l,u,i,t&&"foreignObject"!==_,o,e,n.firstChild,c),null!=o)for(k=o.length;k--;)null!=o[k]&&s$2(o[k]);c||("value"in d&&void 0!==(k=d.value)&&(k!==n.value||"progress"===_&&!k)&&C(n,"value",k,p.value,!1),"checked"in d&&void 0!==(k=d.checked)&&k!==n.checked&&C(n,"checked",k,p.checked,!1));}return n}function z(l,u,i){try{"function"==typeof l?l(u):l.current=u;}catch(l){n$1.__e(l,i);}}function L(l,u,i){var t,o,r;if(n$1.unmount&&n$1.unmount(l),(t=l.ref)&&(t.current&&t.current!==l.__e||z(t,null,u)),i||"function"==typeof l.type||(i=null!=(o=l.__e)),l.__e=l.__d=void 0,null!=(t=l.__c)){if(t.componentWillUnmount)try{t.componentWillUnmount();}catch(l){n$1.__e(l,u);}t.base=t.__P=null;}if(t=l.__k)for(r=0;r<t.length;r++)t[r]&&L(t[r],u,i);null!=o&&s$2(o);}function M(n,l,u){return this.constructor(n,u)}function N(l,u,i){var t,o,e;n$1.__&&n$1.__(l,u),o=(t="function"==typeof i)?null:i&&i.__k||u.__k,e=[],I(u,l=(!t&&i||u).__k=a$2(y$1,null,[l]),o||r$2,r$2,void 0!==u.ownerSVGElement,!t&&i?[i]:o?null:u.firstChild?f$2.slice.call(u.childNodes):null,e,!t&&i?i:o?o.__e:u.firstChild,t),T(e,l);}n$1={__e:function(n,l){for(var u,i,t;l=l.__;)if((u=l.__c)&&!u.__)try{if((i=u.constructor)&&null!=i.getDerivedStateFromError&&(u.setState(i.getDerivedStateFromError(n)),t=u.__d),null!=u.componentDidCatch&&(u.componentDidCatch(n),t=u.__d),t)return u.__E=u}catch(l){n=l;}throw n},__v:0},p$1.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=c$2({},this.state),"function"==typeof n&&(n=n(c$2({},u),this.props)),n&&c$2(u,n),null!=n&&this.__v&&(l&&this.__h.push(l),k$1(this));},p$1.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),k$1(this));},p$1.prototype.render=y$1,u$2=[],i$2="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,b$1.__r=0; + var n$1,u$2,i$2,t$1,r$2={},f$2=[],e$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function c$2(n,l){for(var u in l)n[u]=l[u];return n}function s$2(n){var l=n.parentNode;l&&l.removeChild(n);}function a$2(n,l,u){var i,t,o,r=arguments,f={};for(o in l)"key"==o?i=l[o]:"ref"==o?t=l[o]:f[o]=l[o];if(arguments.length>3)for(u=[u],o=3;o<arguments.length;o++)u.push(r[o]);if(null!=u&&(f.children=u),"function"==typeof n&&null!=n.defaultProps)for(o in n.defaultProps)void 0===f[o]&&(f[o]=n.defaultProps[o]);return v$2(n,f,i,t,null)}function v$2(l,u,i,t,o){var r={type:l,props:u,key:i,ref:t,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++n$1.__v:o};return null!=n$1.vnode&&n$1.vnode(r),r}function y$1(n){return n.children}function p$1(n,l){this.props=n,this.context=l;}function d$2(n,l){if(null==l)return n.__?d$2(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return "function"==typeof n.type?d$2(n):null}function _$1(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return _$1(n)}}function k$1(l){(!l.__d&&(l.__d=!0)&&u$2.push(l)&&!b$1.__r++||t$1!==n$1.debounceRendering)&&((t$1=n$1.debounceRendering)||i$2)(b$1);}function b$1(){for(var n;b$1.__r=u$2.length;)n=u$2.sort(function(n,l){return n.__v.__b-l.__v.__b}),u$2=[],n.some(function(n){var l,u,i,t,o,r;n.__d&&(o=(t=(l=n).__v).__e,(r=l.__P)&&(u=[],(i=c$2({},t)).__v=t.__v+1,I(r,t,i,l.__n,void 0!==r.ownerSVGElement,null!=t.__h?[o]:null,u,null==o?d$2(t):o,t.__h),T(u,t),t.__e!=o&&_$1(t)));});}function m$2(n,l,u,i,t,o,e,c,s,a){var h,p,_,k,b,m,w,A=i&&i.__k||f$2,P=A.length;for(u.__k=[],h=0;h<l.length;h++)if(null!=(k=u.__k[h]=null==(k=l[h])||"boolean"==typeof k?null:"string"==typeof k||"number"==typeof k||"bigint"==typeof k?v$2(null,k,null,null,k):Array.isArray(k)?v$2(y$1,{children:k},null,null,null):k.__b>0?v$2(k.type,k.props,k.key,null,k.__v):k)){if(k.__=u,k.__b=u.__b+1,null===(_=A[h])||_&&k.key==_.key&&k.type===_.type)A[h]=void 0;else for(p=0;p<P;p++){if((_=A[p])&&k.key==_.key&&k.type===_.type){A[p]=void 0;break}_=null;}I(n,k,_=_||r$2,t,o,e,c,s,a),b=k.__e,(p=k.ref)&&_.ref!=p&&(w||(w=[]),_.ref&&w.push(_.ref,null,k),w.push(p,k.__c||b,k)),null!=b?(null==m&&(m=b),"function"==typeof k.type&&null!=k.__k&&k.__k===_.__k?k.__d=s=g$2(k,s,n):s=x$3(n,k,_,A,b,s),a||"option"!==u.type?"function"==typeof u.type&&(u.__d=s):n.value=""):s&&_.__e==s&&s.parentNode!=n&&(s=d$2(_));}for(u.__e=m,h=P;h--;)null!=A[h]&&("function"==typeof u.type&&null!=A[h].__e&&A[h].__e==u.__d&&(u.__d=d$2(i,h+1)),L$1(A[h],A[h]));if(w)for(h=0;h<w.length;h++)z(w[h],w[++h],w[++h]);}function g$2(n,l,u){var i,t;for(i=0;i<n.__k.length;i++)(t=n.__k[i])&&(t.__=n,l="function"==typeof t.type?g$2(t,l,u):x$3(u,t,t,n.__k,t.__e,l));return l}function w$1(n,l){return l=l||[],null==n||"boolean"==typeof n||(Array.isArray(n)?n.some(function(n){w$1(n,l);}):l.push(n)),l}function x$3(n,l,u,i,t,o){var r,f,e;if(void 0!==l.__d)r=l.__d,l.__d=void 0;else if(null==u||t!=o||null==t.parentNode)n:if(null==o||o.parentNode!==n)n.appendChild(t),r=null;else {for(f=o,e=0;(f=f.nextSibling)&&e<i.length;e+=2)if(f==t)break n;n.insertBefore(t,o),r=o;}return void 0!==r?r:t.nextSibling}function A$1(n,l,u,i,t){var o;for(o in u)"children"===o||"key"===o||o in l||C$1(n,o,null,u[o],i);for(o in l)t&&"function"!=typeof l[o]||"children"===o||"key"===o||"value"===o||"checked"===o||u[o]===l[o]||C$1(n,o,l[o],u[o],i);}function P$1(n,l,u){"-"===l[0]?n.setProperty(l,u):n[l]=null==u?"":"number"!=typeof u||e$1.test(l)?u:u+"px";}function C$1(n,l,u,i,t){var o;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else {if("string"==typeof i&&(n.style.cssText=i=""),i)for(l in i)u&&l in u||P$1(n.style,l,"");if(u)for(l in u)i&&u[l]===i[l]||P$1(n.style,l,u[l]);}else if("o"===l[0]&&"n"===l[1])o=l!==(l=l.replace(/Capture$/,"")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?i||n.addEventListener(l,o?H$1:$$1,o):n.removeEventListener(l,o?H$1:$$1,o);else if("dangerouslySetInnerHTML"!==l){if(t)l=l.replace(/xlink[H:h]/,"h").replace(/sName$/,"s");else if("href"!==l&&"list"!==l&&"form"!==l&&"tabIndex"!==l&&"download"!==l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null!=u&&(!1!==u||"a"===l[0]&&"r"===l[1])?n.setAttribute(l,u):n.removeAttribute(l));}}function $$1(l){this.l[l.type+!1](n$1.event?n$1.event(l):l);}function H$1(l){this.l[l.type+!0](n$1.event?n$1.event(l):l);}function I(l,u,i,t,o,r,f,e,s){var a,v,h,d,_,k,b,g,w,x,A,P=u.type;if(void 0!==u.constructor)return null;null!=i.__h&&(s=i.__h,e=u.__e=i.__e,u.__h=null,r=[e]),(a=n$1.__b)&&a(u);try{n:if("function"==typeof P){if(g=u.props,w=(a=P.contextType)&&t[a.__c],x=a?w?w.props.value:a.__:t,i.__c?b=(v=u.__c=i.__c).__=v.__E:("prototype"in P&&P.prototype.render?u.__c=v=new P(g,x):(u.__c=v=new p$1(g,x),v.constructor=P,v.render=M$1),w&&w.sub(v),v.props=g,v.state||(v.state={}),v.context=x,v.__n=t,h=v.__d=!0,v.__h=[]),null==v.__s&&(v.__s=v.state),null!=P.getDerivedStateFromProps&&(v.__s==v.state&&(v.__s=c$2({},v.__s)),c$2(v.__s,P.getDerivedStateFromProps(g,v.__s))),d=v.props,_=v.state,h)null==P.getDerivedStateFromProps&&null!=v.componentWillMount&&v.componentWillMount(),null!=v.componentDidMount&&v.__h.push(v.componentDidMount);else {if(null==P.getDerivedStateFromProps&&g!==d&&null!=v.componentWillReceiveProps&&v.componentWillReceiveProps(g,x),!v.__e&&null!=v.shouldComponentUpdate&&!1===v.shouldComponentUpdate(g,v.__s,x)||u.__v===i.__v){v.props=g,v.state=v.__s,u.__v!==i.__v&&(v.__d=!1),v.__v=u,u.__e=i.__e,u.__k=i.__k,u.__k.forEach(function(n){n&&(n.__=u);}),v.__h.length&&f.push(v);break n}null!=v.componentWillUpdate&&v.componentWillUpdate(g,v.__s,x),null!=v.componentDidUpdate&&v.__h.push(function(){v.componentDidUpdate(d,_,k);});}v.context=x,v.props=g,v.state=v.__s,(a=n$1.__r)&&a(u),v.__d=!1,v.__v=u,v.__P=l,a=v.render(v.props,v.state,v.context),v.state=v.__s,null!=v.getChildContext&&(t=c$2(c$2({},t),v.getChildContext())),h||null==v.getSnapshotBeforeUpdate||(k=v.getSnapshotBeforeUpdate(d,_)),A=null!=a&&a.type===y$1&&null==a.key?a.props.children:a,m$2(l,Array.isArray(A)?A:[A],u,i,t,o,r,f,e,s),v.base=u.__e,u.__h=null,v.__h.length&&f.push(v),b&&(v.__E=v.__=null),v.__e=!1;}else null==r&&u.__v===i.__v?(u.__k=i.__k,u.__e=i.__e):u.__e=j$1(i.__e,u,i,t,o,r,f,s);(a=n$1.diffed)&&a(u);}catch(l){u.__v=null,(s||null!=r)&&(u.__e=e,u.__h=!!s,r[r.indexOf(e)]=null),n$1.__e(l,u,i);}}function T(l,u){n$1.__c&&n$1.__c(u,l),l.some(function(u){try{l=u.__h,u.__h=[],l.some(function(n){n.call(u);});}catch(l){n$1.__e(l,u.__v);}});}function j$1(n,l,u,i,t,o,e,c){var a,v,h,y,p=u.props,d=l.props,_=l.type,k=0;if("svg"===_&&(t=!0),null!=o)for(;k<o.length;k++)if((a=o[k])&&(a===n||(_?a.localName==_:3==a.nodeType))){n=a,o[k]=null;break}if(null==n){if(null===_)return document.createTextNode(d);n=t?document.createElementNS("http://www.w3.org/2000/svg",_):document.createElement(_,d.is&&d),o=null,c=!1;}if(null===_)p===d||c&&n.data===d||(n.data=d);else {if(o=o&&f$2.slice.call(n.childNodes),v=(p=u.props||r$2).dangerouslySetInnerHTML,h=d.dangerouslySetInnerHTML,!c){if(null!=o)for(p={},y=0;y<n.attributes.length;y++)p[n.attributes[y].name]=n.attributes[y].value;(h||v)&&(h&&(v&&h.__html==v.__html||h.__html===n.innerHTML)||(n.innerHTML=h&&h.__html||""));}if(A$1(n,d,p,t,c),h)l.__k=[];else if(k=l.props.children,m$2(n,Array.isArray(k)?k:[k],l,u,i,t&&"foreignObject"!==_,o,e,n.firstChild,c),null!=o)for(k=o.length;k--;)null!=o[k]&&s$2(o[k]);c||("value"in d&&void 0!==(k=d.value)&&(k!==n.value||"progress"===_&&!k)&&C$1(n,"value",k,p.value,!1),"checked"in d&&void 0!==(k=d.checked)&&k!==n.checked&&C$1(n,"checked",k,p.checked,!1));}return n}function z(l,u,i){try{"function"==typeof l?l(u):l.current=u;}catch(l){n$1.__e(l,i);}}function L$1(l,u,i){var t,o,r;if(n$1.unmount&&n$1.unmount(l),(t=l.ref)&&(t.current&&t.current!==l.__e||z(t,null,u)),i||"function"==typeof l.type||(i=null!=(o=l.__e)),l.__e=l.__d=void 0,null!=(t=l.__c)){if(t.componentWillUnmount)try{t.componentWillUnmount();}catch(l){n$1.__e(l,u);}t.base=t.__P=null;}if(t=l.__k)for(r=0;r<t.length;r++)t[r]&&L$1(t[r],u,i);null!=o&&s$2(o);}function M$1(n,l,u){return this.constructor(n,u)}function N(l,u,i){var t,o,e;n$1.__&&n$1.__(l,u),o=(t="function"==typeof i)?null:i&&i.__k||u.__k,e=[],I(u,l=(!t&&i||u).__k=a$2(y$1,null,[l]),o||r$2,r$2,void 0!==u.ownerSVGElement,!t&&i?[i]:o?null:u.firstChild?f$2.slice.call(u.childNodes):null,e,!t&&i?i:o?o.__e:u.firstChild,t),T(e,l);}n$1={__e:function(n,l){for(var u,i,t;l=l.__;)if((u=l.__c)&&!u.__)try{if((i=u.constructor)&&null!=i.getDerivedStateFromError&&(u.setState(i.getDerivedStateFromError(n)),t=u.__d),null!=u.componentDidCatch&&(u.componentDidCatch(n),t=u.__d),t)return u.__E=u}catch(l){n=l;}throw n},__v:0},p$1.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=c$2({},this.state),"function"==typeof n&&(n=n(c$2({},u),this.props)),n&&c$2(u,n),null!=n&&this.__v&&(l&&this.__h.push(l),k$1(this));},p$1.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),k$1(this));},p$1.prototype.render=y$1,u$2=[],i$2="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,b$1.__r=0; - var r$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|^--/i,n=/[&<>"]/;function o$1(e){var t=String(e);return n.test(t)?t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""):t}var a$1=function(e,t){return String(e).replace(/(\n+)/g,"$1"+(t||"\t"))},i$1=function(e,t,r){return String(e).length>(t||40)||!r&&-1!==String(e).indexOf("\n")||-1!==String(e).indexOf("<")},l={};function s$1(e){var t="";for(var n in e){var o=e[n];null!=o&&""!==o&&(t&&(t+=" "),t+="-"==n[0]?n:l[n]||(l[n]=n.replace(/([A-Z])/g,"-$1").toLowerCase()),t+=": ",t+=o,"number"==typeof o&&!1===r$1.test(n)&&(t+="px"),t+=";");}return t||void 0}function f$1(e,t){for(var r in t)e[r]=t[r];return e}function u$1(e,t){return Array.isArray(t)?t.reduce(u$1,e):null!=t&&!1!==t&&e.push(t),e}var c$1={shallow:!0},p=[],_=/^(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/,v$1=/[\s\n\\/='"\0<>]/,d$1=function(){};m$1.render=m$1;var g$1=function(e,t){return m$1(e,t,c$1)},h=[];function m$1(t,r,n){r=r||{},n=n||{};var o=n$1.__s;n$1.__s=!0;var a=x$1(t,r,n);return n$1.__c&&n$1.__c(t,h),h.length=0,n$1.__s=o,a}function x$1(r,n,l,c,g,h){if(null==r||"boolean"==typeof r)return "";if("object"!=typeof r)return o$1(r);var m=l.pretty,y=m&&"string"==typeof m?m:"\t";if(Array.isArray(r)){for(var b="",S=0;S<r.length;S++)m&&S>0&&(b+="\n"),b+=x$1(r[S],n,l,c,g,h);return b}var w,k=r.type,O=r.props,C=!1;if("function"==typeof k){if(C=!0,!l.shallow||!c&&!1!==l.renderRootComponent){if(k===y$1){var A=[];return u$1(A,r.props.children),x$1(A,n,l,!1!==l.shallowHighOrder,g,h)}var H,j=r.__c={__v:r,context:n,props:r.props,setState:d$1,forceUpdate:d$1,__h:[]};if(n$1.__b&&n$1.__b(r),n$1.__r&&n$1.__r(r),k.prototype&&"function"==typeof k.prototype.render){var F=k.contextType,M=F&&n[F.__c],T=null!=F?M?M.props.value:F.__:n;(j=r.__c=new k(O,T)).__v=r,j._dirty=j.__d=!0,j.props=O,null==j.state&&(j.state={}),null==j._nextState&&null==j.__s&&(j._nextState=j.__s=j.state),j.context=T,k.getDerivedStateFromProps?j.state=f$1(f$1({},j.state),k.getDerivedStateFromProps(j.props,j.state)):j.componentWillMount&&(j.componentWillMount(),j.state=j._nextState!==j.state?j._nextState:j.__s!==j.state?j.__s:j.state),H=j.render(j.props,j.state,j.context);}else {var $=k.contextType,L=$&&n[$.__c];H=k.call(r.__c,O,null!=$?L?L.props.value:$.__:n);}return j.getChildContext&&(n=f$1(f$1({},n),j.getChildContext())),n$1.diffed&&n$1.diffed(r),x$1(H,n,l,!1!==l.shallowHighOrder,g,h)}k=(w=k).displayName||w!==Function&&w.name||function(e){var t=(Function.prototype.toString.call(e).match(/^\s*function\s+([^( ]+)/)||"")[1];if(!t){for(var r=-1,n=p.length;n--;)if(p[n]===e){r=n;break}r<0&&(r=p.push(e)-1),t="UnnamedComponent"+r;}return t}(w);}var E,D,N="<"+k;if(O){var P=Object.keys(O);l&&!0===l.sortAttributes&&P.sort();for(var R=0;R<P.length;R++){var U=P[R],W=O[U];if("children"!==U){if(!v$1.test(U)&&(l&&l.allAttributes||"key"!==U&&"ref"!==U&&"__self"!==U&&"__source"!==U&&"defaultValue"!==U)){if("className"===U){if(O.class)continue;U="class";}else g&&U.match(/^xlink:?./)&&(U=U.toLowerCase().replace(/^xlink:?/,"xlink:"));if("htmlFor"===U){if(O.for)continue;U="for";}"style"===U&&W&&"object"==typeof W&&(W=s$1(W)),"a"===U[0]&&"r"===U[1]&&"boolean"==typeof W&&(W=String(W));var q=l.attributeHook&&l.attributeHook(U,W,n,l,C);if(q||""===q)N+=q;else if("dangerouslySetInnerHTML"===U)D=W&&W.__html;else if("textarea"===k&&"value"===U)E=W;else if((W||0===W||""===W)&&"function"!=typeof W){if(!(!0!==W&&""!==W||(W=U,l&&l.xml))){N+=" "+U;continue}if("value"===U){if("select"===k){h=W;continue}"option"===k&&h==W&&(N+=" selected");}N+=" "+U+'="'+o$1(W)+'"';}}}else E=W;}}if(m){var z=N.replace(/\n\s*/," ");z===N||~z.indexOf("\n")?m&&~N.indexOf("\n")&&(N+="\n"):N=z;}if(N+=">",v$1.test(k))throw new Error(k+" is not a valid HTML tag name in "+N);var I,V=_.test(k)||l.voidElements&&l.voidElements.test(k),Z=[];if(D)m&&i$1(D)&&(D="\n"+y+a$1(D,y)),N+=D;else if(null!=E&&u$1(I=[],E).length){for(var B=m&&~N.indexOf("\n"),G=!1,J=0;J<I.length;J++){var K=I[J];if(null!=K&&!1!==K){var Q=x$1(K,n,l,!0,"svg"===k||"foreignObject"!==k&&g,h);if(m&&!B&&i$1(Q)&&(B=!0),Q)if(m){var X=Q.length>0&&"<"!=Q[0];G&&X?Z[Z.length-1]+=Q:Z.push(Q),G=X;}else Z.push(Q);}}if(m&&B)for(var Y=Z.length;Y--;)Z[Y]="\n"+y+a$1(Z[Y],y);}if(Z.length||D)N+=Z.join("");else if(l&&l.xml)return N.substring(0,N.length-1)+" />";return !V||I||D?(m&&~N.indexOf("\n")&&(N+="\n"),N+="</"+k+">"):N=N.replace(/>$/," />"),N}m$1.shallowRender=g$1; + var r$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|^--/i,n=/[&<>"]/;function o$1(e){var t=String(e);return n.test(t)?t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""):t}var a$1=function(e,t){return String(e).replace(/(\n+)/g,"$1"+(t||"\t"))},i$1=function(e,t,r){return String(e).length>(t||40)||!r&&-1!==String(e).indexOf("\n")||-1!==String(e).indexOf("<")},l={};function s$1(e){var t="";for(var n in e){var o=e[n];null!=o&&""!==o&&(t&&(t+=" "),t+="-"==n[0]?n:l[n]||(l[n]=n.replace(/([A-Z])/g,"-$1").toLowerCase()),t+=": ",t+=o,"number"==typeof o&&!1===r$1.test(n)&&(t+="px"),t+=";");}return t||void 0}function f$1(e,t){for(var r in t)e[r]=t[r];return e}function u$1(e,t){return Array.isArray(t)?t.reduce(u$1,e):null!=t&&!1!==t&&e.push(t),e}var c$1={shallow:!0},p=[],_=/^(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/,v$1=/[\s\n\\/='"\0<>]/,d$1=function(){};m$1.render=m$1;var g$1=function(e,t){return m$1(e,t,c$1)},h=[];function m$1(t,r,n){r=r||{},n=n||{};var o=n$1.__s;n$1.__s=!0;var a=x$2(t,r,n);return n$1.__c&&n$1.__c(t,h),h.length=0,n$1.__s=o,a}function x$2(r,n,l,c,g,h){if(null==r||"boolean"==typeof r)return "";if("object"!=typeof r)return o$1(r);var m=l.pretty,y=m&&"string"==typeof m?m:"\t";if(Array.isArray(r)){for(var b="",S=0;S<r.length;S++)m&&S>0&&(b+="\n"),b+=x$2(r[S],n,l,c,g,h);return b}var w,k=r.type,O=r.props,C=!1;if("function"==typeof k){if(C=!0,!l.shallow||!c&&!1!==l.renderRootComponent){if(k===y$1){var A=[];return u$1(A,r.props.children),x$2(A,n,l,!1!==l.shallowHighOrder,g,h)}var H,j=r.__c={__v:r,context:n,props:r.props,setState:d$1,forceUpdate:d$1,__h:[]};if(n$1.__b&&n$1.__b(r),n$1.__r&&n$1.__r(r),k.prototype&&"function"==typeof k.prototype.render){var F=k.contextType,M=F&&n[F.__c],T=null!=F?M?M.props.value:F.__:n;(j=r.__c=new k(O,T)).__v=r,j._dirty=j.__d=!0,j.props=O,null==j.state&&(j.state={}),null==j._nextState&&null==j.__s&&(j._nextState=j.__s=j.state),j.context=T,k.getDerivedStateFromProps?j.state=f$1(f$1({},j.state),k.getDerivedStateFromProps(j.props,j.state)):j.componentWillMount&&(j.componentWillMount(),j.state=j._nextState!==j.state?j._nextState:j.__s!==j.state?j.__s:j.state),H=j.render(j.props,j.state,j.context);}else {var $=k.contextType,L=$&&n[$.__c];H=k.call(r.__c,O,null!=$?L?L.props.value:$.__:n);}return j.getChildContext&&(n=f$1(f$1({},n),j.getChildContext())),n$1.diffed&&n$1.diffed(r),x$2(H,n,l,!1!==l.shallowHighOrder,g,h)}k=(w=k).displayName||w!==Function&&w.name||function(e){var t=(Function.prototype.toString.call(e).match(/^\s*function\s+([^( ]+)/)||"")[1];if(!t){for(var r=-1,n=p.length;n--;)if(p[n]===e){r=n;break}r<0&&(r=p.push(e)-1),t="UnnamedComponent"+r;}return t}(w);}var E,D,N="<"+k;if(O){var P=Object.keys(O);l&&!0===l.sortAttributes&&P.sort();for(var R=0;R<P.length;R++){var U=P[R],W=O[U];if("children"!==U){if(!v$1.test(U)&&(l&&l.allAttributes||"key"!==U&&"ref"!==U&&"__self"!==U&&"__source"!==U&&"defaultValue"!==U)){if("className"===U){if(O.class)continue;U="class";}else g&&U.match(/^xlink:?./)&&(U=U.toLowerCase().replace(/^xlink:?/,"xlink:"));if("htmlFor"===U){if(O.for)continue;U="for";}"style"===U&&W&&"object"==typeof W&&(W=s$1(W)),"a"===U[0]&&"r"===U[1]&&"boolean"==typeof W&&(W=String(W));var q=l.attributeHook&&l.attributeHook(U,W,n,l,C);if(q||""===q)N+=q;else if("dangerouslySetInnerHTML"===U)D=W&&W.__html;else if("textarea"===k&&"value"===U)E=W;else if((W||0===W||""===W)&&"function"!=typeof W){if(!(!0!==W&&""!==W||(W=U,l&&l.xml))){N+=" "+U;continue}if("value"===U){if("select"===k){h=W;continue}"option"===k&&h==W&&(N+=" selected");}N+=" "+U+'="'+o$1(W)+'"';}}}else E=W;}}if(m){var z=N.replace(/\n\s*/," ");z===N||~z.indexOf("\n")?m&&~N.indexOf("\n")&&(N+="\n"):N=z;}if(N+=">",v$1.test(k))throw new Error(k+" is not a valid HTML tag name in "+N);var I,V=_.test(k)||l.voidElements&&l.voidElements.test(k),Z=[];if(D)m&&i$1(D)&&(D="\n"+y+a$1(D,y)),N+=D;else if(null!=E&&u$1(I=[],E).length){for(var B=m&&~N.indexOf("\n"),G=!1,J=0;J<I.length;J++){var K=I[J];if(null!=K&&!1!==K){var Q=x$2(K,n,l,!0,"svg"===k||"foreignObject"!==k&&g,h);if(m&&!B&&i$1(Q)&&(B=!0),Q)if(m){var X=Q.length>0&&"<"!=Q[0];G&&X?Z[Z.length-1]+=Q:Z.push(Q),G=X;}else Z.push(Q);}}if(m&&B)for(var Y=Z.length;Y--;)Z[Y]="\n"+y+a$1(Z[Y],y);}if(Z.length||D)N+=Z.join("");else if(l&&l.xml)return N.substring(0,N.length-1)+" />";return !V||I||D?(m&&~N.indexOf("\n")&&(N+="\n"),N+="</"+k+">"):N=N.replace(/>$/," />"),N}m$1.shallowRender=g$1; - var t,u,r,o=0,i=[],c=n$1.__b,f=n$1.__r,e=n$1.diffed,a=n$1.__c,v=n$1.unmount;function m(t,r){n$1.__h&&n$1.__h(u,t,o||r),o=0;var i=u.__H||(u.__H={__:[],__h:[]});return t>=i.__.length&&i.__.push({}),i.__[t]}function y(r,o){var i=m(t++,3);!n$1.__s&&k(i.__H,o)&&(i.__=r,i.__H=o,u.__H.__h.push(i));}function s(n){return o=5,d(function(){return {current:n}},[])}function d(n,u){var r=m(t++,7);return k(r.__H,u)&&(r.__=n(),r.__H=u,r.__h=n),r.__}function x(){i.forEach(function(t){if(t.__P)try{t.__H.__h.forEach(g),t.__H.__h.forEach(j),t.__H.__h=[];}catch(u){t.__H.__h=[],n$1.__e(u,t.__v);}}),i=[];}n$1.__b=function(n){u=null,c&&c(n);},n$1.__r=function(n){f&&f(n),t=0;var r=(u=n.__c).__H;r&&(r.__h.forEach(g),r.__h.forEach(j),r.__h=[]);},n$1.diffed=function(t){e&&e(t);var o=t.__c;o&&o.__H&&o.__H.__h.length&&(1!==i.push(o)&&r===n$1.requestAnimationFrame||((r=n$1.requestAnimationFrame)||function(n){var t,u=function(){clearTimeout(r),b&&cancelAnimationFrame(t),setTimeout(n);},r=setTimeout(u,100);b&&(t=requestAnimationFrame(u));})(x)),u=void 0;},n$1.__c=function(t,u){u.some(function(t){try{t.__h.forEach(g),t.__h=t.__h.filter(function(n){return !n.__||j(n)});}catch(r){u.some(function(n){n.__h&&(n.__h=[]);}),u=[],n$1.__e(r,t.__v);}}),a&&a(t,u);},n$1.unmount=function(t){v&&v(t);var u=t.__c;if(u&&u.__H)try{u.__H.__.forEach(g);}catch(t){n$1.__e(t,u.__v);}};var b="function"==typeof requestAnimationFrame;function g(n){var t=u;"function"==typeof n.__c&&n.__c(),u=t;}function j(n){var t=u;n.__c=n.__(),u=t;}function k(n,t){return !n||n.length!==t.length||t.some(function(t,u){return t!==n[u]})} + var t,u,r,o=0,i=[],c=n$1.__b,f=n$1.__r,e=n$1.diffed,a=n$1.__c,v=n$1.unmount;function m(t,r){n$1.__h&&n$1.__h(u,t,o||r),o=0;var i=u.__H||(u.__H={__:[],__h:[]});return t>=i.__.length&&i.__.push({}),i.__[t]}function y(r,o){var i=m(t++,3);!n$1.__s&&k(i.__H,o)&&(i.__=r,i.__H=o,u.__H.__h.push(i));}function s(n){return o=5,d(function(){return {current:n}},[])}function d(n,u){var r=m(t++,7);return k(r.__H,u)&&(r.__=n(),r.__H=u,r.__h=n),r.__}function x$1(){i.forEach(function(t){if(t.__P)try{t.__H.__h.forEach(g),t.__H.__h.forEach(j),t.__H.__h=[];}catch(u){t.__H.__h=[],n$1.__e(u,t.__v);}}),i=[];}n$1.__b=function(n){u=null,c&&c(n);},n$1.__r=function(n){f&&f(n),t=0;var r=(u=n.__c).__H;r&&(r.__h.forEach(g),r.__h.forEach(j),r.__h=[]);},n$1.diffed=function(t){e&&e(t);var o=t.__c;o&&o.__H&&o.__H.__h.length&&(1!==i.push(o)&&r===n$1.requestAnimationFrame||((r=n$1.requestAnimationFrame)||function(n){var t,u=function(){clearTimeout(r),b&&cancelAnimationFrame(t),setTimeout(n);},r=setTimeout(u,100);b&&(t=requestAnimationFrame(u));})(x$1)),u=void 0;},n$1.__c=function(t,u){u.some(function(t){try{t.__h.forEach(g),t.__h=t.__h.filter(function(n){return !n.__||j(n)});}catch(r){u.some(function(n){n.__h&&(n.__h=[]);}),u=[],n$1.__e(r,t.__v);}}),a&&a(t,u);},n$1.unmount=function(t){v&&v(t);var u=t.__c;if(u&&u.__H)try{u.__H.__.forEach(g);}catch(t){n$1.__e(t,u.__v);}};var b="function"==typeof requestAnimationFrame;function g(n){var t=u;"function"==typeof n.__c&&n.__c(),u=t;}function j(n){var t=u;n.__c=n.__(),u=t;}function k(n,t){return !n||n.length!==t.length||t.some(function(t,u){return t!==n[u]})} - /* - This file is part of GNU Taler - (C) 2021 Taler Systems S.A. + function C(n,t){for(var e in t)n[e]=t[e];return n}function S(n,t){for(var e in n)if("__source"!==e&&!(e in t))return !0;for(var r in t)if("__source"!==r&&n[r]!==t[r])return !0;return !1}function E(n){this.props=n;}(E.prototype=new p$1).isPureReactComponent=!0,E.prototype.shouldComponentUpdate=function(n,t){return S(this.props,n)||S(this.state,t)};var w=n$1.__b;n$1.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),w&&w(n);};var R="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function x(n){function t(t,e){var r=C({},t);return delete r.ref,n(r,(e=t.ref||e)&&("object"!=typeof e||"current"in e)?e:null)}return t.$$typeof=R,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(n.displayName||n.name)+")",t}var A=n$1.__e;n$1.__e=function(n,t,e){if(n.then)for(var r,u=t;u=u.__;)if((r=u.__c)&&r.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),r.__c(n,t);A(n,t,e);};var O=n$1.unmount;function L(){this.__u=0,this.t=null,this.__b=null;}function U(n){var t=n.__.__c;return t&&t.__e&&t.__e(n)}function F(){this.u=null,this.o=null;}n$1.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&!0===n.__h&&(n.type=null),O&&O(n);},(L.prototype=new p$1).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=U(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l());};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__e){var n=r.state.__e;r.__v.__k[0]=function n(t,e,r){return t&&(t.__v=null,t.__k=t.__k&&t.__k.map(function(t){return n(t,e,r)}),t.__c&&t.__c.__P===e&&(t.__e&&r.insertBefore(t.__e,t.__d),t.__c.__e=!0,t.__c.__P=r)),t}(n,n.__c.__P,n.__c.__O);}var t;for(r.setState({__e:r.__b=null});t=r.t.pop();)t.forceUpdate();}},f=!0===t.__h;r.__u++||f||r.setState({__e:r.__b=r.__v.__k[0]}),n.then(i,i);},L.prototype.componentWillUnmount=function(){this.t=[];},L.prototype.render=function(n,t){if(this.__b){if(this.__v.__k){var e=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=function n(t,e,r){return t&&(t.__c&&t.__c.__H&&(t.__c.__H.__.forEach(function(n){"function"==typeof n.__c&&n.__c();}),t.__c.__H=null),null!=(t=C({},t)).__c&&(t.__c.__P===r&&(t.__c.__P=e),t.__c=null),t.__k=t.__k&&t.__k.map(function(t){return n(t,e,r)})),t}(this.__b,e,r.__O=r.__P);}this.__b=null;}var u=t.__e&&a$2(y$1,null,n.fallback);return u&&(u.__h=null),[a$2(y$1,null,t.__e?null:n.children),u]};var M=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&("t"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2];}};(F.prototype=new p$1).__e=function(n){var t=this,e=U(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),M(t,n,r)):u();};e?e(o):o();}},F.prototype.render=function(n){this.u=null,this.o=new Map;var t=w$1(n.children);n.revealOrder&&"b"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},F.prototype.componentDidUpdate=F.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){M(n,e,t);});};var W="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,P=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,V=function(n){return ("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(n)};p$1.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(n){Object.defineProperty(p$1.prototype,n,{configurable:!0,get:function(){return this["UNSAFE_"+n]},set:function(t){Object.defineProperty(this,n,{configurable:!0,writable:!0,value:t});}});});var H=n$1.event;function Z(){}function Y(){return this.cancelBubble}function $(){return this.defaultPrevented}n$1.event=function(n){return H&&(n=H(n)),n.persist=Z,n.isPropagationStopped=Y,n.isDefaultPrevented=$,n.nativeEvent=n};var G={configurable:!0,get:function(){return this.class}},J=n$1.vnode;n$1.vnode=function(n){var t=n.type,e=n.props,r=e;if("string"==typeof t){for(var u in r={},e){var o=e[u];"value"===u&&"defaultValue"in e&&null==o||("defaultValue"===u&&"value"in e&&null==e.value?u="value":"download"===u&&!0===o?o="":/ondoubleclick/i.test(u)?u="ondblclick":/^onchange(textarea|input)/i.test(u+t)&&!V(e.type)?u="oninput":/^on(Ani|Tra|Tou|BeforeInp)/.test(u)?u=u.toLowerCase():P.test(u)?u=u.replace(/[A-Z0-9]/,"-$&").toLowerCase():null===o&&(o=void 0),r[u]=o);}"select"==t&&r.multiple&&Array.isArray(r.value)&&(r.value=w$1(e.children).forEach(function(n){n.props.selected=-1!=r.value.indexOf(n.props.value);})),"select"==t&&null!=r.defaultValue&&(r.value=w$1(e.children).forEach(function(n){n.props.selected=r.multiple?-1!=r.defaultValue.indexOf(n.props.value):r.defaultValue==n.props.value;})),n.props=r;}t&&e.class!=e.className&&(G.enumerable="className"in e,null!=e.className&&(r.class=e.className),Object.defineProperty(r,"className",G)),n.$$typeof=W,J&&J(n);};var K=n$1.__r;n$1.__r=function(n){K&&K(n);};"object"==typeof performance&&"function"==typeof performance.now?performance.now.bind(performance):function(){return Date.now()}; - GNU Taler is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. + function memoize(fn) { + var cache = {}; + return function (arg) { + if (cache[arg] === undefined) cache[arg] = fn(arg); + return cache[arg]; + }; + } - GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. + var reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23 - You should have received a copy of the GNU General Public License along with - GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> - */ - function Footer() { - return a$2("div", { class: "talerbar" }, - a$2("p", null, - "You can learn more about GNU Taler on our ", - a$2("a", { href: "https://taler.net/" }, "website"), - ".", - a$2("br", null), - "Copyright \u00A9 2014\u20142021 Taler Systems SA")); - } + var index = memoize(function (prop) { + return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111 + /* o */ + && prop.charCodeAt(1) === 110 + /* n */ + && prop.charCodeAt(2) < 91; + } + /* Z+1 */ + ); - var qrcode$1 = {exports: {}}; + const cx = function cx() { + return Array.prototype.slice.call(arguments).filter(Boolean).join(' '); + }; - (function (module, exports) { - //--------------------------------------------------------------------- - // - // QR Code Generator for JavaScript - // - // Copyright (c) 2009 Kazuhiko Arase - // - // URL: http://www.d-project.com/ - // - // Licensed under the MIT license: - // http://www.opensource.org/licenses/mit-license.php - // - // The word 'QR Code' is registered trademark of - // DENSO WAVE INCORPORATED - // http://www.denso-wave.com/qrcode/faqpatent-e.html - // - //--------------------------------------------------------------------- + var cx$1 = cx; - var qrcode = function() { + /** + * This file contains an runtime version of `styled` component. Responsibilities of the component are: + * - returns ReactElement based on HTML tag used with `styled` or custom React Component + * - injects classNames for the returned component + * - injects CSS variables used to define dynamic styles based on props + */ - //--------------------------------------------------------------------- - // qrcode - //--------------------------------------------------------------------- + // Workaround for rest operator + const restOp = (obj, keysToExclude) => Object.keys(obj).filter(prop => keysToExclude.indexOf(prop) === -1).reduce((acc, curr) => { + acc[curr] = obj[curr]; + return acc; + }, {}); // rest operator workaround - /** - * qrcode - * @param typeNumber 1 to 40 - * @param errorCorrectionLevel 'L','M','Q','H' - */ - var qrcode = function(typeNumber, errorCorrectionLevel) { - var PAD0 = 0xEC; - var PAD1 = 0x11; + const warnIfInvalid = (value, componentName) => { + }; - var _typeNumber = typeNumber; - var _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel]; - var _modules = null; - var _moduleCount = 0; - var _dataCache = null; - var _dataList = []; + function styled(tag) { + return options => { - var _this = {}; + const render = (props, ref) => { + const { + as: component = tag, + class: className + } = props; + const rest = restOp(props, ['as', 'class']); + let filteredProps; // Check if it's an HTML tag and not a custom element - var makeImpl = function(test, maskPattern) { + if (typeof component === 'string' && component.indexOf('-') === -1) { + filteredProps = {}; // eslint-disable-next-line guard-for-in - _moduleCount = _typeNumber * 4 + 17; - _modules = function(moduleCount) { - var modules = new Array(moduleCount); - for (var row = 0; row < moduleCount; row += 1) { - modules[row] = new Array(moduleCount); - for (var col = 0; col < moduleCount; col += 1) { - modules[row][col] = null; - } + for (const key in rest) { + if (key === 'as' || index(key)) { + // Don't pass through invalid attributes to HTML elements + filteredProps[key] = rest[key]; } - return modules; - }(_moduleCount); - - setupPositionProbePattern(0, 0); - setupPositionProbePattern(_moduleCount - 7, 0); - setupPositionProbePattern(0, _moduleCount - 7); - setupPositionAdjustPattern(); - setupTimingPattern(); - setupTypeInfo(test, maskPattern); - - if (_typeNumber >= 7) { - setupTypeNumber(test); } + } else { + filteredProps = rest; + } + + filteredProps.ref = ref; + filteredProps.className = cx$1(filteredProps.className || className, options.class); + const { + vars + } = options; - if (_dataCache == null) { - _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList); + if (vars) { + const style = {}; // eslint-disable-next-line guard-for-in + + for (const name in vars) { + const variable = vars[name]; + const result = variable[0]; + const unit = variable[1] || ''; + const value = typeof result === 'function' ? result(props) : result; + warnIfInvalid(value, options.name); + style[`--${name}`] = `${value}${unit}`; } - mapData(_dataCache, maskPattern); - }; + const ownStyle = filteredProps.style || {}; + const keys = Object.keys(ownStyle); - var setupPositionProbePattern = function(row, col) { + if (keys.length > 0) { + keys.forEach(key => { + style[key] = ownStyle[key]; + }); + } - for (var r = -1; r <= 7; r += 1) { + filteredProps.style = style; + } - if (row + r <= -1 || _moduleCount <= row + r) continue; + if (tag.__linaria && tag !== component) { + // If the underlying tag is a styled component, forward the `as` prop + // Otherwise the styles from the underlying component will be ignored + filteredProps.as = component; + return /*#__PURE__*/a$2(tag, filteredProps); + } - for (var c = -1; c <= 7; c += 1) { + return /*#__PURE__*/a$2(component, filteredProps); + }; - if (col + c <= -1 || _moduleCount <= col + c) continue; + const Result = x ? /*#__PURE__*/x(render) : // React.forwardRef won't available on older React versions and in Preact + // Fallback to a innerRef prop in that case + props => { + const rest = restOp(props, ['innerRef']); + return render(rest, props.innerRef); + }; + Result.displayName = options.name; // These properties will be read by the babel plugin for interpolation - if ( (0 <= r && r <= 6 && (c == 0 || c == 6) ) - || (0 <= c && c <= 6 && (r == 0 || r == 6) ) - || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) { - _modules[row + r][col + c] = true; - } else { - _modules[row + r][col + c] = false; - } - } - } - }; + Result.__linaria = { + className: options.class, + extends: tag + }; + return Result; + }; + } - var getBestMaskPattern = function() { + var styled$1 = styled; + + /* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + const QRPlaceholder = /*#__PURE__*/styled$1("div")({ + name: "QRPlaceholder", + class: "q1ma0zxq" + }); + const FooterBar = /*#__PURE__*/styled$1("footer")({ + name: "FooterBar", + class: "fef0x5t" + }); + const Page = /*#__PURE__*/styled$1("div")({ + name: "Page", + class: "p1b3vqup" + }); + const WalletLink = /*#__PURE__*/styled$1("a")({ + name: "WalletLink", + class: "wpwjmk", + vars: { + "wpwjmk-0": [({ + upperCased + }) => upperCased ? 'uppercase' : 'none'] + } + }); + + /* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + function Footer() { + return a$2(FooterBar, null, + a$2("p", null, + a$2("a", { href: "https://taler.net/" }, "Learn more about GNU Taler on our website."), + a$2("p", null, "Copyright \u00A9 2014\u20142021 Taler Systems SA"))); + } - var minLostPoint = 0; - var pattern = 0; + var qrcode$1 = {exports: {}}; + + (function (module, exports) { + //--------------------------------------------------------------------- + // + // QR Code Generator for JavaScript + // + // Copyright (c) 2009 Kazuhiko Arase + // + // URL: http://www.d-project.com/ + // + // Licensed under the MIT license: + // http://www.opensource.org/licenses/mit-license.php + // + // The word 'QR Code' is registered trademark of + // DENSO WAVE INCORPORATED + // http://www.denso-wave.com/qrcode/faqpatent-e.html + // + //--------------------------------------------------------------------- + + var qrcode = function() { - for (var i = 0; i < 8; i += 1) { + //--------------------------------------------------------------------- + // qrcode + //--------------------------------------------------------------------- - makeImpl(true, i); + /** + * qrcode + * @param typeNumber 1 to 40 + * @param errorCorrectionLevel 'L','M','Q','H' + */ + var qrcode = function(typeNumber, errorCorrectionLevel) { - var lostPoint = QRUtil.getLostPoint(_this); + var PAD0 = 0xEC; + var PAD1 = 0x11; - if (i == 0 || minLostPoint > lostPoint) { - minLostPoint = lostPoint; - pattern = i; - } - } + var _typeNumber = typeNumber; + var _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel]; + var _modules = null; + var _moduleCount = 0; + var _dataCache = null; + var _dataList = []; - return pattern; - }; + var _this = {}; - var setupTimingPattern = function() { + var makeImpl = function(test, maskPattern) { - for (var r = 8; r < _moduleCount - 8; r += 1) { - if (_modules[r][6] != null) { - continue; + _moduleCount = _typeNumber * 4 + 17; + _modules = function(moduleCount) { + var modules = new Array(moduleCount); + for (var row = 0; row < moduleCount; row += 1) { + modules[row] = new Array(moduleCount); + for (var col = 0; col < moduleCount; col += 1) { + modules[row][col] = null; } - _modules[r][6] = (r % 2 == 0); } + return modules; + }(_moduleCount); - for (var c = 8; c < _moduleCount - 8; c += 1) { - if (_modules[6][c] != null) { - continue; - } - _modules[6][c] = (c % 2 == 0); - } - }; + setupPositionProbePattern(0, 0); + setupPositionProbePattern(_moduleCount - 7, 0); + setupPositionProbePattern(0, _moduleCount - 7); + setupPositionAdjustPattern(); + setupTimingPattern(); + setupTypeInfo(test, maskPattern); - var setupPositionAdjustPattern = function() { + if (_typeNumber >= 7) { + setupTypeNumber(test); + } - var pos = QRUtil.getPatternPosition(_typeNumber); + if (_dataCache == null) { + _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList); + } - for (var i = 0; i < pos.length; i += 1) { + mapData(_dataCache, maskPattern); + }; - for (var j = 0; j < pos.length; j += 1) { + var setupPositionProbePattern = function(row, col) { - var row = pos[i]; - var col = pos[j]; + for (var r = -1; r <= 7; r += 1) { - if (_modules[row][col] != null) { - continue; - } + if (row + r <= -1 || _moduleCount <= row + r) continue; - for (var r = -2; r <= 2; r += 1) { + for (var c = -1; c <= 7; c += 1) { - for (var c = -2; c <= 2; c += 1) { + if (col + c <= -1 || _moduleCount <= col + c) continue; - if (r == -2 || r == 2 || c == -2 || c == 2 - || (r == 0 && c == 0) ) { - _modules[row + r][col + c] = true; - } else { - _modules[row + r][col + c] = false; - } - } - } + if ( (0 <= r && r <= 6 && (c == 0 || c == 6) ) + || (0 <= c && c <= 6 && (r == 0 || r == 6) ) + || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) { + _modules[row + r][col + c] = true; + } else { + _modules[row + r][col + c] = false; } } - }; + } + }; + + var getBestMaskPattern = function() { + + var minLostPoint = 0; + var pattern = 0; + + for (var i = 0; i < 8; i += 1) { + + makeImpl(true, i); + + var lostPoint = QRUtil.getLostPoint(_this); + + if (i == 0 || minLostPoint > lostPoint) { + minLostPoint = lostPoint; + pattern = i; + } + } - var setupTypeNumber = function(test) { + return pattern; + }; - var bits = QRUtil.getBCHTypeNumber(_typeNumber); + var setupTimingPattern = function() { - for (var i = 0; i < 18; i += 1) { - var mod = (!test && ( (bits >> i) & 1) == 1); - _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod; + for (var r = 8; r < _moduleCount - 8; r += 1) { + if (_modules[r][6] != null) { + continue; } + _modules[r][6] = (r % 2 == 0); + } - for (var i = 0; i < 18; i += 1) { - var mod = (!test && ( (bits >> i) & 1) == 1); - _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod; + for (var c = 8; c < _moduleCount - 8; c += 1) { + if (_modules[6][c] != null) { + continue; } - }; + _modules[6][c] = (c % 2 == 0); + } + }; - var setupTypeInfo = function(test, maskPattern) { + var setupPositionAdjustPattern = function() { - var data = (_errorCorrectionLevel << 3) | maskPattern; - var bits = QRUtil.getBCHTypeInfo(data); + var pos = QRUtil.getPatternPosition(_typeNumber); - // vertical - for (var i = 0; i < 15; i += 1) { + for (var i = 0; i < pos.length; i += 1) { - var mod = (!test && ( (bits >> i) & 1) == 1); + for (var j = 0; j < pos.length; j += 1) { - if (i < 6) { - _modules[i][8] = mod; - } else if (i < 8) { - _modules[i + 1][8] = mod; - } else { - _modules[_moduleCount - 15 + i][8] = mod; + var row = pos[i]; + var col = pos[j]; + + if (_modules[row][col] != null) { + continue; } - } - // horizontal - for (var i = 0; i < 15; i += 1) { + for (var r = -2; r <= 2; r += 1) { - var mod = (!test && ( (bits >> i) & 1) == 1); + for (var c = -2; c <= 2; c += 1) { - if (i < 8) { - _modules[8][_moduleCount - i - 1] = mod; - } else if (i < 9) { - _modules[8][15 - i - 1 + 1] = mod; - } else { - _modules[8][15 - i - 1] = mod; + if (r == -2 || r == 2 || c == -2 || c == 2 + || (r == 0 && c == 0) ) { + _modules[row + r][col + c] = true; + } else { + _modules[row + r][col + c] = false; + } + } } } + } + }; - // fixed module - _modules[_moduleCount - 8][8] = (!test); - }; + var setupTypeNumber = function(test) { - var mapData = function(data, maskPattern) { + var bits = QRUtil.getBCHTypeNumber(_typeNumber); - var inc = -1; - var row = _moduleCount - 1; - var bitIndex = 7; - var byteIndex = 0; - var maskFunc = QRUtil.getMaskFunction(maskPattern); + for (var i = 0; i < 18; i += 1) { + var mod = (!test && ( (bits >> i) & 1) == 1); + _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod; + } - for (var col = _moduleCount - 1; col > 0; col -= 2) { + for (var i = 0; i < 18; i += 1) { + var mod = (!test && ( (bits >> i) & 1) == 1); + _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod; + } + }; - if (col == 6) col -= 1; + var setupTypeInfo = function(test, maskPattern) { - while (true) { + var data = (_errorCorrectionLevel << 3) | maskPattern; + var bits = QRUtil.getBCHTypeInfo(data); - for (var c = 0; c < 2; c += 1) { + // vertical + for (var i = 0; i < 15; i += 1) { - if (_modules[row][col - c] == null) { + var mod = (!test && ( (bits >> i) & 1) == 1); - var dark = false; + if (i < 6) { + _modules[i][8] = mod; + } else if (i < 8) { + _modules[i + 1][8] = mod; + } else { + _modules[_moduleCount - 15 + i][8] = mod; + } + } - if (byteIndex < data.length) { - dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1); - } + // horizontal + for (var i = 0; i < 15; i += 1) { - var mask = maskFunc(row, col - c); + var mod = (!test && ( (bits >> i) & 1) == 1); - if (mask) { - dark = !dark; - } + if (i < 8) { + _modules[8][_moduleCount - i - 1] = mod; + } else if (i < 9) { + _modules[8][15 - i - 1 + 1] = mod; + } else { + _modules[8][15 - i - 1] = mod; + } + } - _modules[row][col - c] = dark; - bitIndex -= 1; + // fixed module + _modules[_moduleCount - 8][8] = (!test); + }; - if (bitIndex == -1) { - byteIndex += 1; - bitIndex = 7; - } - } - } + var mapData = function(data, maskPattern) { - row += inc; + var inc = -1; + var row = _moduleCount - 1; + var bitIndex = 7; + var byteIndex = 0; + var maskFunc = QRUtil.getMaskFunction(maskPattern); - if (row < 0 || _moduleCount <= row) { - row -= inc; - inc = -inc; - break; - } - } - } - }; + for (var col = _moduleCount - 1; col > 0; col -= 2) { - var createBytes = function(buffer, rsBlocks) { + if (col == 6) col -= 1; - var offset = 0; + while (true) { - var maxDcCount = 0; - var maxEcCount = 0; + for (var c = 0; c < 2; c += 1) { - var dcdata = new Array(rsBlocks.length); - var ecdata = new Array(rsBlocks.length); + if (_modules[row][col - c] == null) { - for (var r = 0; r < rsBlocks.length; r += 1) { + var dark = false; + + if (byteIndex < data.length) { + dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1); + } - var dcCount = rsBlocks[r].dataCount; - var ecCount = rsBlocks[r].totalCount - dcCount; + var mask = maskFunc(row, col - c); - maxDcCount = Math.max(maxDcCount, dcCount); - maxEcCount = Math.max(maxEcCount, ecCount); + if (mask) { + dark = !dark; + } - dcdata[r] = new Array(dcCount); + _modules[row][col - c] = dark; + bitIndex -= 1; - for (var i = 0; i < dcdata[r].length; i += 1) { - dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset]; + if (bitIndex == -1) { + byteIndex += 1; + bitIndex = 7; + } + } } - offset += dcCount; - var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount); - var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1); + row += inc; - var modPoly = rawPoly.mod(rsPoly); - ecdata[r] = new Array(rsPoly.getLength() - 1); - for (var i = 0; i < ecdata[r].length; i += 1) { - var modIndex = i + modPoly.getLength() - ecdata[r].length; - ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0; + if (row < 0 || _moduleCount <= row) { + row -= inc; + inc = -inc; + break; } } + } + }; - var totalCodeCount = 0; - for (var i = 0; i < rsBlocks.length; i += 1) { - totalCodeCount += rsBlocks[i].totalCount; - } - - var data = new Array(totalCodeCount); - var index = 0; + var createBytes = function(buffer, rsBlocks) { - for (var i = 0; i < maxDcCount; i += 1) { - for (var r = 0; r < rsBlocks.length; r += 1) { - if (i < dcdata[r].length) { - data[index] = dcdata[r][i]; - index += 1; - } - } - } + var offset = 0; - for (var i = 0; i < maxEcCount; i += 1) { - for (var r = 0; r < rsBlocks.length; r += 1) { - if (i < ecdata[r].length) { - data[index] = ecdata[r][i]; - index += 1; - } - } - } + var maxDcCount = 0; + var maxEcCount = 0; - return data; - }; + var dcdata = new Array(rsBlocks.length); + var ecdata = new Array(rsBlocks.length); - var createData = function(typeNumber, errorCorrectionLevel, dataList) { + for (var r = 0; r < rsBlocks.length; r += 1) { - var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel); + var dcCount = rsBlocks[r].dataCount; + var ecCount = rsBlocks[r].totalCount - dcCount; - var buffer = qrBitBuffer(); + maxDcCount = Math.max(maxDcCount, dcCount); + maxEcCount = Math.max(maxEcCount, ecCount); - for (var i = 0; i < dataList.length; i += 1) { - var data = dataList[i]; - buffer.put(data.getMode(), 4); - buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) ); - data.write(buffer); - } + dcdata[r] = new Array(dcCount); - // calc num max data. - var totalDataCount = 0; - for (var i = 0; i < rsBlocks.length; i += 1) { - totalDataCount += rsBlocks[i].dataCount; + for (var i = 0; i < dcdata[r].length; i += 1) { + dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset]; } + offset += dcCount; - if (buffer.getLengthInBits() > totalDataCount * 8) { - throw 'code length overflow. (' - + buffer.getLengthInBits() - + '>' - + totalDataCount * 8 - + ')'; - } + var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount); + var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1); - // end code - if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) { - buffer.put(0, 4); + var modPoly = rawPoly.mod(rsPoly); + ecdata[r] = new Array(rsPoly.getLength() - 1); + for (var i = 0; i < ecdata[r].length; i += 1) { + var modIndex = i + modPoly.getLength() - ecdata[r].length; + ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0; } + } - // padding - while (buffer.getLengthInBits() % 8 != 0) { - buffer.putBit(false); - } + var totalCodeCount = 0; + for (var i = 0; i < rsBlocks.length; i += 1) { + totalCodeCount += rsBlocks[i].totalCount; + } - // padding - while (true) { + var data = new Array(totalCodeCount); + var index = 0; - if (buffer.getLengthInBits() >= totalDataCount * 8) { - break; + for (var i = 0; i < maxDcCount; i += 1) { + for (var r = 0; r < rsBlocks.length; r += 1) { + if (i < dcdata[r].length) { + data[index] = dcdata[r][i]; + index += 1; } - buffer.put(PAD0, 8); + } + } - if (buffer.getLengthInBits() >= totalDataCount * 8) { - break; + for (var i = 0; i < maxEcCount; i += 1) { + for (var r = 0; r < rsBlocks.length; r += 1) { + if (i < ecdata[r].length) { + data[index] = ecdata[r][i]; + index += 1; } - buffer.put(PAD1, 8); } + } - return createBytes(buffer, rsBlocks); - }; + return data; + }; - _this.addData = function(data, mode) { + var createData = function(typeNumber, errorCorrectionLevel, dataList) { - mode = mode || 'Byte'; + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel); - var newData = null; + var buffer = qrBitBuffer(); - switch(mode) { - case 'Numeric' : - newData = qrNumber(data); - break; - case 'Alphanumeric' : - newData = qrAlphaNum(data); - break; - case 'Byte' : - newData = qr8BitByte(data); + for (var i = 0; i < dataList.length; i += 1) { + var data = dataList[i]; + buffer.put(data.getMode(), 4); + buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) ); + data.write(buffer); + } + + // calc num max data. + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i += 1) { + totalDataCount += rsBlocks[i].dataCount; + } + + if (buffer.getLengthInBits() > totalDataCount * 8) { + throw 'code length overflow. (' + + buffer.getLengthInBits() + + '>' + + totalDataCount * 8 + + ')'; + } + + // end code + if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) { + buffer.put(0, 4); + } + + // padding + while (buffer.getLengthInBits() % 8 != 0) { + buffer.putBit(false); + } + + // padding + while (true) { + + if (buffer.getLengthInBits() >= totalDataCount * 8) { break; - case 'Kanji' : - newData = qrKanji(data); + } + buffer.put(PAD0, 8); + + if (buffer.getLengthInBits() >= totalDataCount * 8) { break; - default : - throw 'mode:' + mode; } + buffer.put(PAD1, 8); + } - _dataList.push(newData); - _dataCache = null; - }; + return createBytes(buffer, rsBlocks); + }; - _this.isDark = function(row, col) { - if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) { - throw row + ',' + col; - } - return _modules[row][col]; - }; + _this.addData = function(data, mode) { + + mode = mode || 'Byte'; + + var newData = null; + + switch(mode) { + case 'Numeric' : + newData = qrNumber(data); + break; + case 'Alphanumeric' : + newData = qrAlphaNum(data); + break; + case 'Byte' : + newData = qr8BitByte(data); + break; + case 'Kanji' : + newData = qrKanji(data); + break; + default : + throw 'mode:' + mode; + } - _this.getModuleCount = function() { - return _moduleCount; - }; + _dataList.push(newData); + _dataCache = null; + }; - _this.make = function() { - if (_typeNumber < 1) { - var typeNumber = 1; + _this.isDark = function(row, col) { + if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) { + throw row + ',' + col; + } + return _modules[row][col]; + }; - for (; typeNumber < 40; typeNumber++) { - var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel); - var buffer = qrBitBuffer(); + _this.getModuleCount = function() { + return _moduleCount; + }; - for (var i = 0; i < _dataList.length; i++) { - var data = _dataList[i]; - buffer.put(data.getMode(), 4); - buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) ); - data.write(buffer); - } + _this.make = function() { + if (_typeNumber < 1) { + var typeNumber = 1; - var totalDataCount = 0; - for (var i = 0; i < rsBlocks.length; i++) { - totalDataCount += rsBlocks[i].dataCount; - } + for (; typeNumber < 40; typeNumber++) { + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel); + var buffer = qrBitBuffer(); - if (buffer.getLengthInBits() <= totalDataCount * 8) { - break; - } + for (var i = 0; i < _dataList.length; i++) { + var data = _dataList[i]; + buffer.put(data.getMode(), 4); + buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) ); + data.write(buffer); + } + + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalDataCount += rsBlocks[i].dataCount; } - _typeNumber = typeNumber; + if (buffer.getLengthInBits() <= totalDataCount * 8) { + break; + } } - makeImpl(false, getBestMaskPattern() ); - }; + _typeNumber = typeNumber; + } - _this.createTableTag = function(cellSize, margin) { + makeImpl(false, getBestMaskPattern() ); + }; - cellSize = cellSize || 2; - margin = (typeof margin == 'undefined')? cellSize * 4 : margin; + _this.createTableTag = function(cellSize, margin) { - var qrHtml = ''; + cellSize = cellSize || 2; + margin = (typeof margin == 'undefined')? cellSize * 4 : margin; - qrHtml += '<table style="'; - qrHtml += ' border-width: 0px; border-style: none;'; - qrHtml += ' border-collapse: collapse;'; - qrHtml += ' padding: 0px; margin: ' + margin + 'px;'; - qrHtml += '">'; - qrHtml += '<tbody>'; + var qrHtml = ''; - for (var r = 0; r < _this.getModuleCount(); r += 1) { + qrHtml += '<table style="'; + qrHtml += ' border-width: 0px; border-style: none;'; + qrHtml += ' border-collapse: collapse;'; + qrHtml += ' padding: 0px; margin: ' + margin + 'px;'; + qrHtml += '">'; + qrHtml += '<tbody>'; - qrHtml += '<tr>'; + for (var r = 0; r < _this.getModuleCount(); r += 1) { - for (var c = 0; c < _this.getModuleCount(); c += 1) { - qrHtml += '<td style="'; - qrHtml += ' border-width: 0px; border-style: none;'; - qrHtml += ' border-collapse: collapse;'; - qrHtml += ' padding: 0px; margin: 0px;'; - qrHtml += ' width: ' + cellSize + 'px;'; - qrHtml += ' height: ' + cellSize + 'px;'; - qrHtml += ' background-color: '; - qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff'; - qrHtml += ';'; - qrHtml += '"/>'; - } + qrHtml += '<tr>'; - qrHtml += '</tr>'; + for (var c = 0; c < _this.getModuleCount(); c += 1) { + qrHtml += '<td style="'; + qrHtml += ' border-width: 0px; border-style: none;'; + qrHtml += ' border-collapse: collapse;'; + qrHtml += ' padding: 0px; margin: 0px;'; + qrHtml += ' width: ' + cellSize + 'px;'; + qrHtml += ' height: ' + cellSize + 'px;'; + qrHtml += ' background-color: '; + qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff'; + qrHtml += ';'; + qrHtml += '"/>'; } - qrHtml += '</tbody>'; - qrHtml += '</table>'; + qrHtml += '</tr>'; + } - return qrHtml; - }; + qrHtml += '</tbody>'; + qrHtml += '</table>'; - _this.createSvgTag = function(cellSize, margin, alt, title) { - - var opts = {}; - if (typeof arguments[0] == 'object') { - // Called by options. - opts = arguments[0]; - // overwrite cellSize and margin. - cellSize = opts.cellSize; - margin = opts.margin; - alt = opts.alt; - title = opts.title; - } + return qrHtml; + }; - cellSize = cellSize || 2; - margin = (typeof margin == 'undefined')? cellSize * 4 : margin; - - // Compose alt property surrogate - alt = (typeof alt === 'string') ? {text: alt} : alt || {}; - alt.text = alt.text || null; - alt.id = (alt.text) ? alt.id || 'qrcode-description' : null; - - // Compose title property surrogate - title = (typeof title === 'string') ? {text: title} : title || {}; - title.text = title.text || null; - title.id = (title.text) ? title.id || 'qrcode-title' : null; - - var size = _this.getModuleCount() * cellSize + margin * 2; - var c, mc, r, mr, qrSvg='', rect; - - rect = 'l' + cellSize + ',0 0,' + cellSize + - ' -' + cellSize + ',0 0,-' + cellSize + 'z '; - - qrSvg += '<svg version="1.1" xmlns="http://www.w3.org/2000/svg"'; - qrSvg += !opts.scalable ? ' width="' + size + 'px" height="' + size + 'px"' : ''; - qrSvg += ' viewBox="0 0 ' + size + ' ' + size + '" '; - qrSvg += ' preserveAspectRatio="xMinYMin meet"'; - qrSvg += (title.text || alt.text) ? ' role="img" aria-labelledby="' + - escapeXml([title.id, alt.id].join(' ').trim() ) + '"' : ''; - qrSvg += '>'; - qrSvg += (title.text) ? '<title id="' + escapeXml(title.id) + '">' + - escapeXml(title.text) + '</title>' : ''; - qrSvg += (alt.text) ? '<description id="' + escapeXml(alt.id) + '">' + - escapeXml(alt.text) + '</description>' : ''; - qrSvg += '<rect width="100%" height="100%" fill="white" cx="0" cy="0"/>'; - qrSvg += '<path d="'; - - for (r = 0; r < _this.getModuleCount(); r += 1) { - mr = r * cellSize + margin; - for (c = 0; c < _this.getModuleCount(); c += 1) { - if (_this.isDark(r, c) ) { - mc = c*cellSize+margin; - qrSvg += 'M' + mc + ',' + mr + rect; - } + _this.createSvgTag = function(cellSize, margin, alt, title) { + + var opts = {}; + if (typeof arguments[0] == 'object') { + // Called by options. + opts = arguments[0]; + // overwrite cellSize and margin. + cellSize = opts.cellSize; + margin = opts.margin; + alt = opts.alt; + title = opts.title; + } + + cellSize = cellSize || 2; + margin = (typeof margin == 'undefined')? cellSize * 4 : margin; + + // Compose alt property surrogate + alt = (typeof alt === 'string') ? {text: alt} : alt || {}; + alt.text = alt.text || null; + alt.id = (alt.text) ? alt.id || 'qrcode-description' : null; + + // Compose title property surrogate + title = (typeof title === 'string') ? {text: title} : title || {}; + title.text = title.text || null; + title.id = (title.text) ? title.id || 'qrcode-title' : null; + + var size = _this.getModuleCount() * cellSize + margin * 2; + var c, mc, r, mr, qrSvg='', rect; + + rect = 'l' + cellSize + ',0 0,' + cellSize + + ' -' + cellSize + ',0 0,-' + cellSize + 'z '; + + qrSvg += '<svg version="1.1" xmlns="http://www.w3.org/2000/svg"'; + qrSvg += !opts.scalable ? ' width="' + size + 'px" height="' + size + 'px"' : ''; + qrSvg += ' viewBox="0 0 ' + size + ' ' + size + '" '; + qrSvg += ' preserveAspectRatio="xMinYMin meet"'; + qrSvg += (title.text || alt.text) ? ' role="img" aria-labelledby="' + + escapeXml([title.id, alt.id].join(' ').trim() ) + '"' : ''; + qrSvg += '>'; + qrSvg += (title.text) ? '<title id="' + escapeXml(title.id) + '">' + + escapeXml(title.text) + '</title>' : ''; + qrSvg += (alt.text) ? '<description id="' + escapeXml(alt.id) + '">' + + escapeXml(alt.text) + '</description>' : ''; + qrSvg += '<rect width="100%" height="100%" fill="white" cx="0" cy="0"/>'; + qrSvg += '<path d="'; + + for (r = 0; r < _this.getModuleCount(); r += 1) { + mr = r * cellSize + margin; + for (c = 0; c < _this.getModuleCount(); c += 1) { + if (_this.isDark(r, c) ) { + mc = c*cellSize+margin; + qrSvg += 'M' + mc + ',' + mr + rect; } } + } - qrSvg += '" stroke="transparent" fill="black"/>'; - qrSvg += '</svg>'; - - return qrSvg; - }; + qrSvg += '" stroke="transparent" fill="black"/>'; + qrSvg += '</svg>'; - _this.createDataURL = function(cellSize, margin) { + return qrSvg; + }; - cellSize = cellSize || 2; - margin = (typeof margin == 'undefined')? cellSize * 4 : margin; + _this.createDataURL = function(cellSize, margin) { - var size = _this.getModuleCount() * cellSize + margin * 2; - var min = margin; - var max = size - margin; + cellSize = cellSize || 2; + margin = (typeof margin == 'undefined')? cellSize * 4 : margin; - return createDataURL(size, size, function(x, y) { - if (min <= x && x < max && min <= y && y < max) { - var c = Math.floor( (x - min) / cellSize); - var r = Math.floor( (y - min) / cellSize); - return _this.isDark(r, c)? 0 : 1; - } else { - return 1; - } - } ); - }; + var size = _this.getModuleCount() * cellSize + margin * 2; + var min = margin; + var max = size - margin; - _this.createImgTag = function(cellSize, margin, alt) { + return createDataURL(size, size, function(x, y) { + if (min <= x && x < max && min <= y && y < max) { + var c = Math.floor( (x - min) / cellSize); + var r = Math.floor( (y - min) / cellSize); + return _this.isDark(r, c)? 0 : 1; + } else { + return 1; + } + } ); + }; - cellSize = cellSize || 2; - margin = (typeof margin == 'undefined')? cellSize * 4 : margin; + _this.createImgTag = function(cellSize, margin, alt) { + + cellSize = cellSize || 2; + margin = (typeof margin == 'undefined')? cellSize * 4 : margin; + + var size = _this.getModuleCount() * cellSize + margin * 2; + + var img = ''; + img += '<img'; + img += '\u0020src="'; + img += _this.createDataURL(cellSize, margin); + img += '"'; + img += '\u0020width="'; + img += size; + img += '"'; + img += '\u0020height="'; + img += size; + img += '"'; + if (alt) { + img += '\u0020alt="'; + img += escapeXml(alt); + img += '"'; + } + img += '/>'; - var size = _this.getModuleCount() * cellSize + margin * 2; + return img; + }; - var img = ''; - img += '<img'; - img += '\u0020src="'; - img += _this.createDataURL(cellSize, margin); - img += '"'; - img += '\u0020width="'; - img += size; - img += '"'; - img += '\u0020height="'; - img += size; - img += '"'; - if (alt) { - img += '\u0020alt="'; - img += escapeXml(alt); - img += '"'; + var escapeXml = function(s) { + var escaped = ''; + for (var i = 0; i < s.length; i += 1) { + var c = s.charAt(i); + switch(c) { + case '<': escaped += '<'; break; + case '>': escaped += '>'; break; + case '&': escaped += '&'; break; + case '"': escaped += '"'; break; + default : escaped += c; break; } - img += '/>'; + } + return escaped; + }; + + var _createHalfASCII = function(margin) { + var cellSize = 1; + margin = (typeof margin == 'undefined')? cellSize * 2 : margin; + + var size = _this.getModuleCount() * cellSize + margin * 2; + var min = margin; + var max = size - margin; + + var y, x, r1, r2, p; - return img; + var blocks = { + '██': '█', + '█ ': '▀', + ' █': '▄', + ' ': ' ' }; - var escapeXml = function(s) { - var escaped = ''; - for (var i = 0; i < s.length; i += 1) { - var c = s.charAt(i); - switch(c) { - case '<': escaped += '<'; break; - case '>': escaped += '>'; break; - case '&': escaped += '&'; break; - case '"': escaped += '"'; break; - default : escaped += c; break; - } - } - return escaped; + var blocksLastLineNoMargin = { + '██': '▀', + '█ ': '▀', + ' █': ' ', + ' ': ' ' }; - var _createHalfASCII = function(margin) { - var cellSize = 1; - margin = (typeof margin == 'undefined')? cellSize * 2 : margin; - - var size = _this.getModuleCount() * cellSize + margin * 2; - var min = margin; - var max = size - margin; - - var y, x, r1, r2, p; - - var blocks = { - '██': '█', - '█ ': '▀', - ' █': '▄', - ' ': ' ' - }; - - var blocksLastLineNoMargin = { - '██': '▀', - '█ ': '▀', - ' █': ' ', - ' ': ' ' - }; - - var ascii = ''; - for (y = 0; y < size; y += 2) { - r1 = Math.floor((y - min) / cellSize); - r2 = Math.floor((y + 1 - min) / cellSize); - for (x = 0; x < size; x += 1) { - p = '█'; - - if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) { - p = ' '; - } + var ascii = ''; + for (y = 0; y < size; y += 2) { + r1 = Math.floor((y - min) / cellSize); + r2 = Math.floor((y + 1 - min) / cellSize); + for (x = 0; x < size; x += 1) { + p = '█'; - if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) { - p += ' '; - } - else { - p += '█'; - } + if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) { + p = ' '; + } - // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square. - ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p]; + if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) { + p += ' '; + } + else { + p += '█'; } - ascii += '\n'; + // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square. + ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p]; } - if (size % 2 && margin > 0) { - return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('▀'); - } + ascii += '\n'; + } - return ascii.substring(0, ascii.length-1); - }; + if (size % 2 && margin > 0) { + return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('▀'); + } - _this.createASCII = function(cellSize, margin) { - cellSize = cellSize || 1; + return ascii.substring(0, ascii.length-1); + }; - if (cellSize < 2) { - return _createHalfASCII(margin); - } + _this.createASCII = function(cellSize, margin) { + cellSize = cellSize || 1; - cellSize -= 1; - margin = (typeof margin == 'undefined')? cellSize * 2 : margin; + if (cellSize < 2) { + return _createHalfASCII(margin); + } - var size = _this.getModuleCount() * cellSize + margin * 2; - var min = margin; - var max = size - margin; + cellSize -= 1; + margin = (typeof margin == 'undefined')? cellSize * 2 : margin; - var y, x, r, p; + var size = _this.getModuleCount() * cellSize + margin * 2; + var min = margin; + var max = size - margin; - var white = Array(cellSize+1).join('██'); - var black = Array(cellSize+1).join(' '); + var y, x, r, p; - var ascii = ''; - var line = ''; - for (y = 0; y < size; y += 1) { - r = Math.floor( (y - min) / cellSize); - line = ''; - for (x = 0; x < size; x += 1) { - p = 1; + var white = Array(cellSize+1).join('██'); + var black = Array(cellSize+1).join(' '); - if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) { - p = 0; - } + var ascii = ''; + var line = ''; + for (y = 0; y < size; y += 1) { + r = Math.floor( (y - min) / cellSize); + line = ''; + for (x = 0; x < size; x += 1) { + p = 1; - // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square. - line += p ? white : black; + if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) { + p = 0; } - for (r = 0; r < cellSize; r += 1) { - ascii += line + '\n'; - } + // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square. + line += p ? white : black; } - return ascii.substring(0, ascii.length-1); - }; - - _this.renderTo2dContext = function(context, cellSize) { - cellSize = cellSize || 2; - var length = _this.getModuleCount(); - for (var row = 0; row < length; row++) { - for (var col = 0; col < length; col++) { - context.fillStyle = _this.isDark(row, col) ? 'black' : 'white'; - context.fillRect(row * cellSize, col * cellSize, cellSize, cellSize); - } + for (r = 0; r < cellSize; r += 1) { + ascii += line + '\n'; } - }; + } - return _this; + return ascii.substring(0, ascii.length-1); }; - //--------------------------------------------------------------------- - // qrcode.stringToBytes - //--------------------------------------------------------------------- - - qrcode.stringToBytesFuncs = { - 'default' : function(s) { - var bytes = []; - for (var i = 0; i < s.length; i += 1) { - var c = s.charCodeAt(i); - bytes.push(c & 0xff); + _this.renderTo2dContext = function(context, cellSize) { + cellSize = cellSize || 2; + var length = _this.getModuleCount(); + for (var row = 0; row < length; row++) { + for (var col = 0; col < length; col++) { + context.fillStyle = _this.isDark(row, col) ? 'black' : 'white'; + context.fillRect(row * cellSize, col * cellSize, cellSize, cellSize); } - return bytes; } }; - qrcode.stringToBytes = qrcode.stringToBytesFuncs['default']; - - //--------------------------------------------------------------------- - // qrcode.createStringToBytes - //--------------------------------------------------------------------- + return _this; + }; - /** - * @param unicodeData base64 string of byte array. - * [16bit Unicode],[16bit Bytes], ... - * @param numChars - */ - qrcode.createStringToBytes = function(unicodeData, numChars) { + //--------------------------------------------------------------------- + // qrcode.stringToBytes + //--------------------------------------------------------------------- - // create conversion map. + qrcode.stringToBytesFuncs = { + 'default' : function(s) { + var bytes = []; + for (var i = 0; i < s.length; i += 1) { + var c = s.charCodeAt(i); + bytes.push(c & 0xff); + } + return bytes; + } + }; - var unicodeMap = function() { + qrcode.stringToBytes = qrcode.stringToBytesFuncs['default']; - var bin = base64DecodeInputStream(unicodeData); - var read = function() { - var b = bin.read(); - if (b == -1) throw 'eof'; - return b; - }; + //--------------------------------------------------------------------- + // qrcode.createStringToBytes + //--------------------------------------------------------------------- - var count = 0; - var unicodeMap = {}; - while (true) { - var b0 = bin.read(); - if (b0 == -1) break; - var b1 = read(); - var b2 = read(); - var b3 = read(); - var k = String.fromCharCode( (b0 << 8) | b1); - var v = (b2 << 8) | b3; - unicodeMap[k] = v; - count += 1; - } - if (count != numChars) { - throw count + ' != ' + numChars; - } + /** + * @param unicodeData base64 string of byte array. + * [16bit Unicode],[16bit Bytes], ... + * @param numChars + */ + qrcode.createStringToBytes = function(unicodeData, numChars) { + + // create conversion map. + + var unicodeMap = function() { + + var bin = base64DecodeInputStream(unicodeData); + var read = function() { + var b = bin.read(); + if (b == -1) throw 'eof'; + return b; + }; + + var count = 0; + var unicodeMap = {}; + while (true) { + var b0 = bin.read(); + if (b0 == -1) break; + var b1 = read(); + var b2 = read(); + var b3 = read(); + var k = String.fromCharCode( (b0 << 8) | b1); + var v = (b2 << 8) | b3; + unicodeMap[k] = v; + count += 1; + } + if (count != numChars) { + throw count + ' != ' + numChars; + } - return unicodeMap; - }(); + return unicodeMap; + }(); - var unknownChar = '?'.charCodeAt(0); + var unknownChar = '?'.charCodeAt(0); - return function(s) { - var bytes = []; - for (var i = 0; i < s.length; i += 1) { - var c = s.charCodeAt(i); - if (c < 128) { - bytes.push(c); - } else { - var b = unicodeMap[s.charAt(i)]; - if (typeof b == 'number') { - if ( (b & 0xff) == b) { - // 1byte - bytes.push(b); - } else { - // 2bytes - bytes.push(b >>> 8); - bytes.push(b & 0xff); - } + return function(s) { + var bytes = []; + for (var i = 0; i < s.length; i += 1) { + var c = s.charCodeAt(i); + if (c < 128) { + bytes.push(c); + } else { + var b = unicodeMap[s.charAt(i)]; + if (typeof b == 'number') { + if ( (b & 0xff) == b) { + // 1byte + bytes.push(b); } else { - bytes.push(unknownChar); + // 2bytes + bytes.push(b >>> 8); + bytes.push(b & 0xff); } + } else { + bytes.push(unknownChar); } } - return bytes; - }; + } + return bytes; }; + }; - //--------------------------------------------------------------------- - // QRMode - //--------------------------------------------------------------------- - - var QRMode = { - MODE_NUMBER : 1 << 0, - MODE_ALPHA_NUM : 1 << 1, - MODE_8BIT_BYTE : 1 << 2, - MODE_KANJI : 1 << 3 - }; - - //--------------------------------------------------------------------- - // QRErrorCorrectionLevel - //--------------------------------------------------------------------- - - var QRErrorCorrectionLevel = { - L : 1, - M : 0, - Q : 3, - H : 2 - }; - - //--------------------------------------------------------------------- - // QRMaskPattern - //--------------------------------------------------------------------- - - var QRMaskPattern = { - PATTERN000 : 0, - PATTERN001 : 1, - PATTERN010 : 2, - PATTERN011 : 3, - PATTERN100 : 4, - PATTERN101 : 5, - PATTERN110 : 6, - PATTERN111 : 7 - }; - - //--------------------------------------------------------------------- - // QRUtil - //--------------------------------------------------------------------- - - var QRUtil = function() { - - var 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, 78, 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] - ]; - var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0); - var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0); - var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1); + //--------------------------------------------------------------------- + // QRMode + //--------------------------------------------------------------------- - var _this = {}; + var QRMode = { + MODE_NUMBER : 1 << 0, + MODE_ALPHA_NUM : 1 << 1, + MODE_8BIT_BYTE : 1 << 2, + MODE_KANJI : 1 << 3 + }; - var getBCHDigit = function(data) { - var digit = 0; - while (data != 0) { - digit += 1; - data >>>= 1; - } - return digit; - }; + //--------------------------------------------------------------------- + // QRErrorCorrectionLevel + //--------------------------------------------------------------------- - _this.getBCHTypeInfo = function(data) { - var d = data << 10; - while (getBCHDigit(d) - getBCHDigit(G15) >= 0) { - d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) ); - } - return ( (data << 10) | d) ^ G15_MASK; - }; + var QRErrorCorrectionLevel = { + L : 1, + M : 0, + Q : 3, + H : 2 + }; - _this.getBCHTypeNumber = function(data) { - var d = data << 12; - while (getBCHDigit(d) - getBCHDigit(G18) >= 0) { - d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) ); - } - return (data << 12) | d; - }; + //--------------------------------------------------------------------- + // QRMaskPattern + //--------------------------------------------------------------------- - _this.getPatternPosition = function(typeNumber) { - return PATTERN_POSITION_TABLE[typeNumber - 1]; - }; + var QRMaskPattern = { + PATTERN000 : 0, + PATTERN001 : 1, + PATTERN010 : 2, + PATTERN011 : 3, + PATTERN100 : 4, + PATTERN101 : 5, + PATTERN110 : 6, + PATTERN111 : 7 + }; - _this.getMaskFunction = function(maskPattern) { - - switch (maskPattern) { - - case QRMaskPattern.PATTERN000 : - return function(i, j) { return (i + j) % 2 == 0; }; - case QRMaskPattern.PATTERN001 : - return function(i, j) { return i % 2 == 0; }; - case QRMaskPattern.PATTERN010 : - return function(i, j) { return j % 3 == 0; }; - case QRMaskPattern.PATTERN011 : - return function(i, j) { return (i + j) % 3 == 0; }; - case QRMaskPattern.PATTERN100 : - return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; }; - case QRMaskPattern.PATTERN101 : - return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; }; - case QRMaskPattern.PATTERN110 : - return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; }; - case QRMaskPattern.PATTERN111 : - return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; }; + //--------------------------------------------------------------------- + // QRUtil + //--------------------------------------------------------------------- - default : - throw 'bad maskPattern:' + maskPattern; - } - }; + var QRUtil = function() { + + var 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, 78, 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] + ]; + var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0); + var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0); + var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1); + + var _this = {}; + + var getBCHDigit = function(data) { + var digit = 0; + while (data != 0) { + digit += 1; + data >>>= 1; + } + return digit; + }; - _this.getErrorCorrectPolynomial = function(errorCorrectLength) { - var a = qrPolynomial([1], 0); - for (var i = 0; i < errorCorrectLength; i += 1) { - a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) ); - } - return a; - }; + _this.getBCHTypeInfo = function(data) { + var d = data << 10; + while (getBCHDigit(d) - getBCHDigit(G15) >= 0) { + d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) ); + } + return ( (data << 10) | d) ^ G15_MASK; + }; - _this.getLengthInBits = function(mode, type) { + _this.getBCHTypeNumber = function(data) { + var d = data << 12; + while (getBCHDigit(d) - getBCHDigit(G18) >= 0) { + d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) ); + } + return (data << 12) | d; + }; - if (1 <= type && type < 10) { + _this.getPatternPosition = function(typeNumber) { + return PATTERN_POSITION_TABLE[typeNumber - 1]; + }; - // 1 - 9 + _this.getMaskFunction = function(maskPattern) { + + switch (maskPattern) { + + case QRMaskPattern.PATTERN000 : + return function(i, j) { return (i + j) % 2 == 0; }; + case QRMaskPattern.PATTERN001 : + return function(i, j) { return i % 2 == 0; }; + case QRMaskPattern.PATTERN010 : + return function(i, j) { return j % 3 == 0; }; + case QRMaskPattern.PATTERN011 : + return function(i, j) { return (i + j) % 3 == 0; }; + case QRMaskPattern.PATTERN100 : + return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; }; + case QRMaskPattern.PATTERN101 : + return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; }; + case QRMaskPattern.PATTERN110 : + return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; }; + case QRMaskPattern.PATTERN111 : + return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; }; + + default : + throw 'bad maskPattern:' + maskPattern; + } + }; - switch(mode) { - case QRMode.MODE_NUMBER : return 10; - case QRMode.MODE_ALPHA_NUM : return 9; - case QRMode.MODE_8BIT_BYTE : return 8; - case QRMode.MODE_KANJI : return 8; - default : - throw 'mode:' + mode; - } + _this.getErrorCorrectPolynomial = function(errorCorrectLength) { + var a = qrPolynomial([1], 0); + for (var i = 0; i < errorCorrectLength; i += 1) { + a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) ); + } + return a; + }; - } else if (type < 27) { + _this.getLengthInBits = function(mode, type) { - // 10 - 26 + if (1 <= type && type < 10) { - switch(mode) { - case QRMode.MODE_NUMBER : return 12; - case QRMode.MODE_ALPHA_NUM : return 11; - case QRMode.MODE_8BIT_BYTE : return 16; - case QRMode.MODE_KANJI : return 10; - default : - throw 'mode:' + mode; - } + // 1 - 9 - } else if (type < 41) { + switch(mode) { + case QRMode.MODE_NUMBER : return 10; + case QRMode.MODE_ALPHA_NUM : return 9; + case QRMode.MODE_8BIT_BYTE : return 8; + case QRMode.MODE_KANJI : return 8; + default : + throw 'mode:' + mode; + } - // 27 - 40 + } else if (type < 27) { - switch(mode) { - case QRMode.MODE_NUMBER : return 14; - case QRMode.MODE_ALPHA_NUM : return 13; - case QRMode.MODE_8BIT_BYTE : return 16; - case QRMode.MODE_KANJI : return 12; - default : - throw 'mode:' + mode; - } + // 10 - 26 - } else { - throw 'type:' + type; + switch(mode) { + case QRMode.MODE_NUMBER : return 12; + case QRMode.MODE_ALPHA_NUM : return 11; + case QRMode.MODE_8BIT_BYTE : return 16; + case QRMode.MODE_KANJI : return 10; + default : + throw 'mode:' + mode; + } + + } else if (type < 41) { + + // 27 - 40 + + switch(mode) { + case QRMode.MODE_NUMBER : return 14; + case QRMode.MODE_ALPHA_NUM : return 13; + case QRMode.MODE_8BIT_BYTE : return 16; + case QRMode.MODE_KANJI : return 12; + default : + throw 'mode:' + mode; } - }; - _this.getLostPoint = function(qrcode) { + } else { + throw 'type:' + type; + } + }; - var moduleCount = qrcode.getModuleCount(); + _this.getLostPoint = function(qrcode) { - var lostPoint = 0; + var moduleCount = qrcode.getModuleCount(); - // LEVEL1 + var lostPoint = 0; - for (var row = 0; row < moduleCount; row += 1) { - for (var col = 0; col < moduleCount; col += 1) { + // LEVEL1 - var sameCount = 0; - var dark = qrcode.isDark(row, col); + for (var row = 0; row < moduleCount; row += 1) { + for (var col = 0; col < moduleCount; col += 1) { - for (var r = -1; r <= 1; r += 1) { + var sameCount = 0; + var dark = qrcode.isDark(row, col); - if (row + r < 0 || moduleCount <= row + r) { - continue; - } + for (var r = -1; r <= 1; r += 1) { - for (var c = -1; c <= 1; c += 1) { + if (row + r < 0 || moduleCount <= row + r) { + continue; + } - if (col + c < 0 || moduleCount <= col + c) { - continue; - } + for (var c = -1; c <= 1; c += 1) { - if (r == 0 && c == 0) { - continue; - } + if (col + c < 0 || moduleCount <= col + c) { + continue; + } - if (dark == qrcode.isDark(row + r, col + c) ) { - sameCount += 1; - } + if (r == 0 && c == 0) { + continue; } - } - if (sameCount > 5) { - lostPoint += (3 + sameCount - 5); + if (dark == qrcode.isDark(row + r, col + c) ) { + sameCount += 1; + } } } + + if (sameCount > 5) { + lostPoint += (3 + sameCount - 5); + } } - // LEVEL2 - - for (var row = 0; row < moduleCount - 1; row += 1) { - for (var col = 0; col < moduleCount - 1; col += 1) { - var count = 0; - if (qrcode.isDark(row, col) ) count += 1; - if (qrcode.isDark(row + 1, col) ) count += 1; - if (qrcode.isDark(row, col + 1) ) count += 1; - if (qrcode.isDark(row + 1, col + 1) ) count += 1; - if (count == 0 || count == 4) { - lostPoint += 3; - } + } + // LEVEL2 + + for (var row = 0; row < moduleCount - 1; row += 1) { + for (var col = 0; col < moduleCount - 1; col += 1) { + var count = 0; + if (qrcode.isDark(row, col) ) count += 1; + if (qrcode.isDark(row + 1, col) ) count += 1; + if (qrcode.isDark(row, col + 1) ) count += 1; + if (qrcode.isDark(row + 1, col + 1) ) count += 1; + if (count == 0 || count == 4) { + lostPoint += 3; } } + } - // LEVEL3 - - for (var row = 0; row < moduleCount; row += 1) { - for (var col = 0; col < moduleCount - 6; col += 1) { - if (qrcode.isDark(row, col) - && !qrcode.isDark(row, col + 1) - && qrcode.isDark(row, col + 2) - && qrcode.isDark(row, col + 3) - && qrcode.isDark(row, col + 4) - && !qrcode.isDark(row, col + 5) - && qrcode.isDark(row, col + 6) ) { - lostPoint += 40; - } + // LEVEL3 + + for (var row = 0; row < moduleCount; row += 1) { + for (var col = 0; col < moduleCount - 6; col += 1) { + if (qrcode.isDark(row, col) + && !qrcode.isDark(row, col + 1) + && qrcode.isDark(row, col + 2) + && qrcode.isDark(row, col + 3) + && qrcode.isDark(row, col + 4) + && !qrcode.isDark(row, col + 5) + && qrcode.isDark(row, col + 6) ) { + lostPoint += 40; } } + } - for (var col = 0; col < moduleCount; col += 1) { - for (var row = 0; row < moduleCount - 6; row += 1) { - if (qrcode.isDark(row, col) - && !qrcode.isDark(row + 1, col) - && qrcode.isDark(row + 2, col) - && qrcode.isDark(row + 3, col) - && qrcode.isDark(row + 4, col) - && !qrcode.isDark(row + 5, col) - && qrcode.isDark(row + 6, col) ) { - lostPoint += 40; - } + for (var col = 0; col < moduleCount; col += 1) { + for (var row = 0; row < moduleCount - 6; row += 1) { + if (qrcode.isDark(row, col) + && !qrcode.isDark(row + 1, col) + && qrcode.isDark(row + 2, col) + && qrcode.isDark(row + 3, col) + && qrcode.isDark(row + 4, col) + && !qrcode.isDark(row + 5, col) + && qrcode.isDark(row + 6, col) ) { + lostPoint += 40; } } + } - // LEVEL4 + // LEVEL4 - var darkCount = 0; + var darkCount = 0; - for (var col = 0; col < moduleCount; col += 1) { - for (var row = 0; row < moduleCount; row += 1) { - if (qrcode.isDark(row, col) ) { - darkCount += 1; - } + for (var col = 0; col < moduleCount; col += 1) { + for (var row = 0; row < moduleCount; row += 1) { + if (qrcode.isDark(row, col) ) { + darkCount += 1; } } + } - var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5; - lostPoint += ratio * 10; + var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5; + lostPoint += ratio * 10; - return lostPoint; - }; + return lostPoint; + }; - return _this; - }(); + return _this; + }(); - //--------------------------------------------------------------------- - // QRMath - //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + // QRMath + //--------------------------------------------------------------------- - var QRMath = function() { + var QRMath = function() { - var EXP_TABLE = new Array(256); - var LOG_TABLE = new Array(256); + var EXP_TABLE = new Array(256); + var LOG_TABLE = new Array(256); - // initialize tables - for (var i = 0; i < 8; i += 1) { - EXP_TABLE[i] = 1 << i; - } - for (var i = 8; i < 256; i += 1) { - EXP_TABLE[i] = EXP_TABLE[i - 4] - ^ EXP_TABLE[i - 5] - ^ EXP_TABLE[i - 6] - ^ EXP_TABLE[i - 8]; - } - for (var i = 0; i < 255; i += 1) { - LOG_TABLE[EXP_TABLE[i] ] = i; - } + // initialize tables + for (var i = 0; i < 8; i += 1) { + EXP_TABLE[i] = 1 << i; + } + for (var i = 8; i < 256; i += 1) { + EXP_TABLE[i] = EXP_TABLE[i - 4] + ^ EXP_TABLE[i - 5] + ^ EXP_TABLE[i - 6] + ^ EXP_TABLE[i - 8]; + } + for (var i = 0; i < 255; i += 1) { + LOG_TABLE[EXP_TABLE[i] ] = i; + } - var _this = {}; + var _this = {}; - _this.glog = function(n) { + _this.glog = function(n) { - if (n < 1) { - throw 'glog(' + n + ')'; - } + if (n < 1) { + throw 'glog(' + n + ')'; + } - return LOG_TABLE[n]; - }; + return LOG_TABLE[n]; + }; - _this.gexp = function(n) { + _this.gexp = function(n) { - while (n < 0) { - n += 255; - } + while (n < 0) { + n += 255; + } - while (n >= 256) { - n -= 255; - } + while (n >= 256) { + n -= 255; + } - return EXP_TABLE[n]; - }; + return EXP_TABLE[n]; + }; - return _this; - }(); + return _this; + }(); + + //--------------------------------------------------------------------- + // qrPolynomial + //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - // qrPolynomial - //--------------------------------------------------------------------- + function qrPolynomial(num, shift) { - function qrPolynomial(num, shift) { + if (typeof num.length == 'undefined') { + throw num.length + '/' + shift; + } - if (typeof num.length == 'undefined') { - throw num.length + '/' + shift; + var _num = function() { + var offset = 0; + while (offset < num.length && num[offset] == 0) { + offset += 1; + } + var _num = new Array(num.length - offset + shift); + for (var i = 0; i < num.length - offset; i += 1) { + _num[i] = num[i + offset]; } + return _num; + }(); - var _num = function() { - var offset = 0; - while (offset < num.length && num[offset] == 0) { - offset += 1; - } - var _num = new Array(num.length - offset + shift); - for (var i = 0; i < num.length - offset; i += 1) { - _num[i] = num[i + offset]; - } - return _num; - }(); + var _this = {}; - var _this = {}; - - _this.getAt = function(index) { - return _num[index]; - }; + _this.getAt = function(index) { + return _num[index]; + }; - _this.getLength = function() { - return _num.length; - }; + _this.getLength = function() { + return _num.length; + }; - _this.multiply = function(e) { + _this.multiply = function(e) { - var num = new Array(_this.getLength() + e.getLength() - 1); + var num = new Array(_this.getLength() + e.getLength() - 1); - for (var i = 0; i < _this.getLength(); i += 1) { - for (var j = 0; j < e.getLength(); j += 1) { - num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) ); - } + for (var i = 0; i < _this.getLength(); i += 1) { + for (var j = 0; j < e.getLength(); j += 1) { + num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) ); } + } - return qrPolynomial(num, 0); - }; + return qrPolynomial(num, 0); + }; - _this.mod = function(e) { + _this.mod = function(e) { - if (_this.getLength() - e.getLength() < 0) { - return _this; - } + if (_this.getLength() - e.getLength() < 0) { + return _this; + } - var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) ); + var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) ); - var num = new Array(_this.getLength() ); - for (var i = 0; i < _this.getLength(); i += 1) { - num[i] = _this.getAt(i); - } + var num = new Array(_this.getLength() ); + for (var i = 0; i < _this.getLength(); i += 1) { + num[i] = _this.getAt(i); + } - for (var i = 0; i < e.getLength(); i += 1) { - num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio); - } + for (var i = 0; i < e.getLength(); i += 1) { + num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio); + } - // recursive call - return qrPolynomial(num, 0).mod(e); - }; + // recursive call + return qrPolynomial(num, 0).mod(e); + }; - return _this; - } - //--------------------------------------------------------------------- - // QRRSBlock - //--------------------------------------------------------------------- - - var QRRSBlock = function() { - - var RS_BLOCK_TABLE = [ - - // L - // M - // Q - // H - - // 1 - [1, 26, 19], - [1, 26, 16], - [1, 26, 13], - [1, 26, 9], - - // 2 - [1, 44, 34], - [1, 44, 28], - [1, 44, 22], - [1, 44, 16], - - // 3 - [1, 70, 55], - [1, 70, 44], - [2, 35, 17], - [2, 35, 13], - - // 4 - [1, 100, 80], - [2, 50, 32], - [2, 50, 24], - [4, 25, 9], - - // 5 - [1, 134, 108], - [2, 67, 43], - [2, 33, 15, 2, 34, 16], - [2, 33, 11, 2, 34, 12], - - // 6 - [2, 86, 68], - [4, 43, 27], - [4, 43, 19], - [4, 43, 15], - - // 7 - [2, 98, 78], - [4, 49, 31], - [2, 32, 14, 4, 33, 15], - [4, 39, 13, 1, 40, 14], - - // 8 - [2, 121, 97], - [2, 60, 38, 2, 61, 39], - [4, 40, 18, 2, 41, 19], - [4, 40, 14, 2, 41, 15], - - // 9 - [2, 146, 116], - [3, 58, 36, 2, 59, 37], - [4, 36, 16, 4, 37, 17], - [4, 36, 12, 4, 37, 13], - - // 10 - [2, 86, 68, 2, 87, 69], - [4, 69, 43, 1, 70, 44], - [6, 43, 19, 2, 44, 20], - [6, 43, 15, 2, 44, 16], - - // 11 - [4, 101, 81], - [1, 80, 50, 4, 81, 51], - [4, 50, 22, 4, 51, 23], - [3, 36, 12, 8, 37, 13], - - // 12 - [2, 116, 92, 2, 117, 93], - [6, 58, 36, 2, 59, 37], - [4, 46, 20, 6, 47, 21], - [7, 42, 14, 4, 43, 15], - - // 13 - [4, 133, 107], - [8, 59, 37, 1, 60, 38], - [8, 44, 20, 4, 45, 21], - [12, 33, 11, 4, 34, 12], - - // 14 - [3, 145, 115, 1, 146, 116], - [4, 64, 40, 5, 65, 41], - [11, 36, 16, 5, 37, 17], - [11, 36, 12, 5, 37, 13], - - // 15 - [5, 109, 87, 1, 110, 88], - [5, 65, 41, 5, 66, 42], - [5, 54, 24, 7, 55, 25], - [11, 36, 12, 7, 37, 13], - - // 16 - [5, 122, 98, 1, 123, 99], - [7, 73, 45, 3, 74, 46], - [15, 43, 19, 2, 44, 20], - [3, 45, 15, 13, 46, 16], - - // 17 - [1, 135, 107, 5, 136, 108], - [10, 74, 46, 1, 75, 47], - [1, 50, 22, 15, 51, 23], - [2, 42, 14, 17, 43, 15], - - // 18 - [5, 150, 120, 1, 151, 121], - [9, 69, 43, 4, 70, 44], - [17, 50, 22, 1, 51, 23], - [2, 42, 14, 19, 43, 15], - - // 19 - [3, 141, 113, 4, 142, 114], - [3, 70, 44, 11, 71, 45], - [17, 47, 21, 4, 48, 22], - [9, 39, 13, 16, 40, 14], - - // 20 - [3, 135, 107, 5, 136, 108], - [3, 67, 41, 13, 68, 42], - [15, 54, 24, 5, 55, 25], - [15, 43, 15, 10, 44, 16], - - // 21 - [4, 144, 116, 4, 145, 117], - [17, 68, 42], - [17, 50, 22, 6, 51, 23], - [19, 46, 16, 6, 47, 17], - - // 22 - [2, 139, 111, 7, 140, 112], - [17, 74, 46], - [7, 54, 24, 16, 55, 25], - [34, 37, 13], - - // 23 - [4, 151, 121, 5, 152, 122], - [4, 75, 47, 14, 76, 48], - [11, 54, 24, 14, 55, 25], - [16, 45, 15, 14, 46, 16], - - // 24 - [6, 147, 117, 4, 148, 118], - [6, 73, 45, 14, 74, 46], - [11, 54, 24, 16, 55, 25], - [30, 46, 16, 2, 47, 17], - - // 25 - [8, 132, 106, 4, 133, 107], - [8, 75, 47, 13, 76, 48], - [7, 54, 24, 22, 55, 25], - [22, 45, 15, 13, 46, 16], - - // 26 - [10, 142, 114, 2, 143, 115], - [19, 74, 46, 4, 75, 47], - [28, 50, 22, 6, 51, 23], - [33, 46, 16, 4, 47, 17], - - // 27 - [8, 152, 122, 4, 153, 123], - [22, 73, 45, 3, 74, 46], - [8, 53, 23, 26, 54, 24], - [12, 45, 15, 28, 46, 16], - - // 28 - [3, 147, 117, 10, 148, 118], - [3, 73, 45, 23, 74, 46], - [4, 54, 24, 31, 55, 25], - [11, 45, 15, 31, 46, 16], - - // 29 - [7, 146, 116, 7, 147, 117], - [21, 73, 45, 7, 74, 46], - [1, 53, 23, 37, 54, 24], - [19, 45, 15, 26, 46, 16], - - // 30 - [5, 145, 115, 10, 146, 116], - [19, 75, 47, 10, 76, 48], - [15, 54, 24, 25, 55, 25], - [23, 45, 15, 25, 46, 16], - - // 31 - [13, 145, 115, 3, 146, 116], - [2, 74, 46, 29, 75, 47], - [42, 54, 24, 1, 55, 25], - [23, 45, 15, 28, 46, 16], - - // 32 - [17, 145, 115], - [10, 74, 46, 23, 75, 47], - [10, 54, 24, 35, 55, 25], - [19, 45, 15, 35, 46, 16], - - // 33 - [17, 145, 115, 1, 146, 116], - [14, 74, 46, 21, 75, 47], - [29, 54, 24, 19, 55, 25], - [11, 45, 15, 46, 46, 16], - - // 34 - [13, 145, 115, 6, 146, 116], - [14, 74, 46, 23, 75, 47], - [44, 54, 24, 7, 55, 25], - [59, 46, 16, 1, 47, 17], - - // 35 - [12, 151, 121, 7, 152, 122], - [12, 75, 47, 26, 76, 48], - [39, 54, 24, 14, 55, 25], - [22, 45, 15, 41, 46, 16], - - // 36 - [6, 151, 121, 14, 152, 122], - [6, 75, 47, 34, 76, 48], - [46, 54, 24, 10, 55, 25], - [2, 45, 15, 64, 46, 16], - - // 37 - [17, 152, 122, 4, 153, 123], - [29, 74, 46, 14, 75, 47], - [49, 54, 24, 10, 55, 25], - [24, 45, 15, 46, 46, 16], - - // 38 - [4, 152, 122, 18, 153, 123], - [13, 74, 46, 32, 75, 47], - [48, 54, 24, 14, 55, 25], - [42, 45, 15, 32, 46, 16], - - // 39 - [20, 147, 117, 4, 148, 118], - [40, 75, 47, 7, 76, 48], - [43, 54, 24, 22, 55, 25], - [10, 45, 15, 67, 46, 16], - - // 40 - [19, 148, 118, 6, 149, 119], - [18, 75, 47, 31, 76, 48], - [34, 54, 24, 34, 55, 25], - [20, 45, 15, 61, 46, 16] - ]; - - var qrRSBlock = function(totalCount, dataCount) { - var _this = {}; - _this.totalCount = totalCount; - _this.dataCount = dataCount; - return _this; - }; + return _this; + } + //--------------------------------------------------------------------- + // QRRSBlock + //--------------------------------------------------------------------- + var QRRSBlock = function() { + + var RS_BLOCK_TABLE = [ + + // L + // M + // Q + // H + + // 1 + [1, 26, 19], + [1, 26, 16], + [1, 26, 13], + [1, 26, 9], + + // 2 + [1, 44, 34], + [1, 44, 28], + [1, 44, 22], + [1, 44, 16], + + // 3 + [1, 70, 55], + [1, 70, 44], + [2, 35, 17], + [2, 35, 13], + + // 4 + [1, 100, 80], + [2, 50, 32], + [2, 50, 24], + [4, 25, 9], + + // 5 + [1, 134, 108], + [2, 67, 43], + [2, 33, 15, 2, 34, 16], + [2, 33, 11, 2, 34, 12], + + // 6 + [2, 86, 68], + [4, 43, 27], + [4, 43, 19], + [4, 43, 15], + + // 7 + [2, 98, 78], + [4, 49, 31], + [2, 32, 14, 4, 33, 15], + [4, 39, 13, 1, 40, 14], + + // 8 + [2, 121, 97], + [2, 60, 38, 2, 61, 39], + [4, 40, 18, 2, 41, 19], + [4, 40, 14, 2, 41, 15], + + // 9 + [2, 146, 116], + [3, 58, 36, 2, 59, 37], + [4, 36, 16, 4, 37, 17], + [4, 36, 12, 4, 37, 13], + + // 10 + [2, 86, 68, 2, 87, 69], + [4, 69, 43, 1, 70, 44], + [6, 43, 19, 2, 44, 20], + [6, 43, 15, 2, 44, 16], + + // 11 + [4, 101, 81], + [1, 80, 50, 4, 81, 51], + [4, 50, 22, 4, 51, 23], + [3, 36, 12, 8, 37, 13], + + // 12 + [2, 116, 92, 2, 117, 93], + [6, 58, 36, 2, 59, 37], + [4, 46, 20, 6, 47, 21], + [7, 42, 14, 4, 43, 15], + + // 13 + [4, 133, 107], + [8, 59, 37, 1, 60, 38], + [8, 44, 20, 4, 45, 21], + [12, 33, 11, 4, 34, 12], + + // 14 + [3, 145, 115, 1, 146, 116], + [4, 64, 40, 5, 65, 41], + [11, 36, 16, 5, 37, 17], + [11, 36, 12, 5, 37, 13], + + // 15 + [5, 109, 87, 1, 110, 88], + [5, 65, 41, 5, 66, 42], + [5, 54, 24, 7, 55, 25], + [11, 36, 12, 7, 37, 13], + + // 16 + [5, 122, 98, 1, 123, 99], + [7, 73, 45, 3, 74, 46], + [15, 43, 19, 2, 44, 20], + [3, 45, 15, 13, 46, 16], + + // 17 + [1, 135, 107, 5, 136, 108], + [10, 74, 46, 1, 75, 47], + [1, 50, 22, 15, 51, 23], + [2, 42, 14, 17, 43, 15], + + // 18 + [5, 150, 120, 1, 151, 121], + [9, 69, 43, 4, 70, 44], + [17, 50, 22, 1, 51, 23], + [2, 42, 14, 19, 43, 15], + + // 19 + [3, 141, 113, 4, 142, 114], + [3, 70, 44, 11, 71, 45], + [17, 47, 21, 4, 48, 22], + [9, 39, 13, 16, 40, 14], + + // 20 + [3, 135, 107, 5, 136, 108], + [3, 67, 41, 13, 68, 42], + [15, 54, 24, 5, 55, 25], + [15, 43, 15, 10, 44, 16], + + // 21 + [4, 144, 116, 4, 145, 117], + [17, 68, 42], + [17, 50, 22, 6, 51, 23], + [19, 46, 16, 6, 47, 17], + + // 22 + [2, 139, 111, 7, 140, 112], + [17, 74, 46], + [7, 54, 24, 16, 55, 25], + [34, 37, 13], + + // 23 + [4, 151, 121, 5, 152, 122], + [4, 75, 47, 14, 76, 48], + [11, 54, 24, 14, 55, 25], + [16, 45, 15, 14, 46, 16], + + // 24 + [6, 147, 117, 4, 148, 118], + [6, 73, 45, 14, 74, 46], + [11, 54, 24, 16, 55, 25], + [30, 46, 16, 2, 47, 17], + + // 25 + [8, 132, 106, 4, 133, 107], + [8, 75, 47, 13, 76, 48], + [7, 54, 24, 22, 55, 25], + [22, 45, 15, 13, 46, 16], + + // 26 + [10, 142, 114, 2, 143, 115], + [19, 74, 46, 4, 75, 47], + [28, 50, 22, 6, 51, 23], + [33, 46, 16, 4, 47, 17], + + // 27 + [8, 152, 122, 4, 153, 123], + [22, 73, 45, 3, 74, 46], + [8, 53, 23, 26, 54, 24], + [12, 45, 15, 28, 46, 16], + + // 28 + [3, 147, 117, 10, 148, 118], + [3, 73, 45, 23, 74, 46], + [4, 54, 24, 31, 55, 25], + [11, 45, 15, 31, 46, 16], + + // 29 + [7, 146, 116, 7, 147, 117], + [21, 73, 45, 7, 74, 46], + [1, 53, 23, 37, 54, 24], + [19, 45, 15, 26, 46, 16], + + // 30 + [5, 145, 115, 10, 146, 116], + [19, 75, 47, 10, 76, 48], + [15, 54, 24, 25, 55, 25], + [23, 45, 15, 25, 46, 16], + + // 31 + [13, 145, 115, 3, 146, 116], + [2, 74, 46, 29, 75, 47], + [42, 54, 24, 1, 55, 25], + [23, 45, 15, 28, 46, 16], + + // 32 + [17, 145, 115], + [10, 74, 46, 23, 75, 47], + [10, 54, 24, 35, 55, 25], + [19, 45, 15, 35, 46, 16], + + // 33 + [17, 145, 115, 1, 146, 116], + [14, 74, 46, 21, 75, 47], + [29, 54, 24, 19, 55, 25], + [11, 45, 15, 46, 46, 16], + + // 34 + [13, 145, 115, 6, 146, 116], + [14, 74, 46, 23, 75, 47], + [44, 54, 24, 7, 55, 25], + [59, 46, 16, 1, 47, 17], + + // 35 + [12, 151, 121, 7, 152, 122], + [12, 75, 47, 26, 76, 48], + [39, 54, 24, 14, 55, 25], + [22, 45, 15, 41, 46, 16], + + // 36 + [6, 151, 121, 14, 152, 122], + [6, 75, 47, 34, 76, 48], + [46, 54, 24, 10, 55, 25], + [2, 45, 15, 64, 46, 16], + + // 37 + [17, 152, 122, 4, 153, 123], + [29, 74, 46, 14, 75, 47], + [49, 54, 24, 10, 55, 25], + [24, 45, 15, 46, 46, 16], + + // 38 + [4, 152, 122, 18, 153, 123], + [13, 74, 46, 32, 75, 47], + [48, 54, 24, 14, 55, 25], + [42, 45, 15, 32, 46, 16], + + // 39 + [20, 147, 117, 4, 148, 118], + [40, 75, 47, 7, 76, 48], + [43, 54, 24, 22, 55, 25], + [10, 45, 15, 67, 46, 16], + + // 40 + [19, 148, 118, 6, 149, 119], + [18, 75, 47, 31, 76, 48], + [34, 54, 24, 34, 55, 25], + [20, 45, 15, 61, 46, 16] + ]; + + var qrRSBlock = function(totalCount, dataCount) { var _this = {}; + _this.totalCount = totalCount; + _this.dataCount = dataCount; + return _this; + }; - var getRsBlockTable = function(typeNumber, errorCorrectionLevel) { - - switch(errorCorrectionLevel) { - case QRErrorCorrectionLevel.L : - return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]; - case QRErrorCorrectionLevel.M : - return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]; - case QRErrorCorrectionLevel.Q : - return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]; - case QRErrorCorrectionLevel.H : - return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]; - default : - return undefined; - } - }; + var _this = {}; + + var getRsBlockTable = function(typeNumber, errorCorrectionLevel) { + + switch(errorCorrectionLevel) { + case QRErrorCorrectionLevel.L : + return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]; + case QRErrorCorrectionLevel.M : + return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]; + case QRErrorCorrectionLevel.Q : + return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]; + case QRErrorCorrectionLevel.H : + return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]; + default : + return undefined; + } + }; - _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) { + _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) { - var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel); + var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel); - if (typeof rsBlock == 'undefined') { - throw 'bad rs block @ typeNumber:' + typeNumber + - '/errorCorrectionLevel:' + errorCorrectionLevel; - } + if (typeof rsBlock == 'undefined') { + throw 'bad rs block @ typeNumber:' + typeNumber + + '/errorCorrectionLevel:' + errorCorrectionLevel; + } - var length = rsBlock.length / 3; + var length = rsBlock.length / 3; - var list = []; + var list = []; - for (var i = 0; i < length; i += 1) { + for (var i = 0; i < length; i += 1) { - var count = rsBlock[i * 3 + 0]; - var totalCount = rsBlock[i * 3 + 1]; - var dataCount = rsBlock[i * 3 + 2]; + var count = rsBlock[i * 3 + 0]; + var totalCount = rsBlock[i * 3 + 1]; + var dataCount = rsBlock[i * 3 + 2]; - for (var j = 0; j < count; j += 1) { - list.push(qrRSBlock(totalCount, dataCount) ); - } + for (var j = 0; j < count; j += 1) { + list.push(qrRSBlock(totalCount, dataCount) ); } + } - return list; - }; - - return _this; - }(); + return list; + }; - //--------------------------------------------------------------------- - // qrBitBuffer - //--------------------------------------------------------------------- + return _this; + }(); - var qrBitBuffer = function() { + //--------------------------------------------------------------------- + // qrBitBuffer + //--------------------------------------------------------------------- - var _buffer = []; - var _length = 0; + var qrBitBuffer = function() { - var _this = {}; + var _buffer = []; + var _length = 0; - _this.getBuffer = function() { - return _buffer; - }; + var _this = {}; - _this.getAt = function(index) { - var bufIndex = Math.floor(index / 8); - return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1; - }; + _this.getBuffer = function() { + return _buffer; + }; - _this.put = function(num, length) { - for (var i = 0; i < length; i += 1) { - _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1); - } - }; + _this.getAt = function(index) { + var bufIndex = Math.floor(index / 8); + return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1; + }; - _this.getLengthInBits = function() { - return _length; - }; + _this.put = function(num, length) { + for (var i = 0; i < length; i += 1) { + _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1); + } + }; - _this.putBit = function(bit) { + _this.getLengthInBits = function() { + return _length; + }; - var bufIndex = Math.floor(_length / 8); - if (_buffer.length <= bufIndex) { - _buffer.push(0); - } + _this.putBit = function(bit) { - if (bit) { - _buffer[bufIndex] |= (0x80 >>> (_length % 8) ); - } + var bufIndex = Math.floor(_length / 8); + if (_buffer.length <= bufIndex) { + _buffer.push(0); + } - _length += 1; - }; + if (bit) { + _buffer[bufIndex] |= (0x80 >>> (_length % 8) ); + } - return _this; + _length += 1; }; - //--------------------------------------------------------------------- - // qrNumber - //--------------------------------------------------------------------- + return _this; + }; - var qrNumber = function(data) { + //--------------------------------------------------------------------- + // qrNumber + //--------------------------------------------------------------------- - var _mode = QRMode.MODE_NUMBER; - var _data = data; + var qrNumber = function(data) { - var _this = {}; + var _mode = QRMode.MODE_NUMBER; + var _data = data; - _this.getMode = function() { - return _mode; - }; + var _this = {}; - _this.getLength = function(buffer) { - return _data.length; - }; + _this.getMode = function() { + return _mode; + }; - _this.write = function(buffer) { + _this.getLength = function(buffer) { + return _data.length; + }; - var data = _data; + _this.write = function(buffer) { - var i = 0; + var data = _data; - while (i + 2 < data.length) { - buffer.put(strToNum(data.substring(i, i + 3) ), 10); - i += 3; - } + var i = 0; - if (i < data.length) { - if (data.length - i == 1) { - buffer.put(strToNum(data.substring(i, i + 1) ), 4); - } else if (data.length - i == 2) { - buffer.put(strToNum(data.substring(i, i + 2) ), 7); - } - } - }; + while (i + 2 < data.length) { + buffer.put(strToNum(data.substring(i, i + 3) ), 10); + i += 3; + } - var strToNum = function(s) { - var num = 0; - for (var i = 0; i < s.length; i += 1) { - num = num * 10 + chatToNum(s.charAt(i) ); + if (i < data.length) { + if (data.length - i == 1) { + buffer.put(strToNum(data.substring(i, i + 1) ), 4); + } else if (data.length - i == 2) { + buffer.put(strToNum(data.substring(i, i + 2) ), 7); } - return num; - }; + } + }; - var chatToNum = function(c) { - if ('0' <= c && c <= '9') { - return c.charCodeAt(0) - '0'.charCodeAt(0); - } - throw 'illegal char :' + c; - }; + var strToNum = function(s) { + var num = 0; + for (var i = 0; i < s.length; i += 1) { + num = num * 10 + chatToNum(s.charAt(i) ); + } + return num; + }; - return _this; + var chatToNum = function(c) { + if ('0' <= c && c <= '9') { + return c.charCodeAt(0) - '0'.charCodeAt(0); + } + throw 'illegal char :' + c; }; - //--------------------------------------------------------------------- - // qrAlphaNum - //--------------------------------------------------------------------- + return _this; + }; - var qrAlphaNum = function(data) { + //--------------------------------------------------------------------- + // qrAlphaNum + //--------------------------------------------------------------------- - var _mode = QRMode.MODE_ALPHA_NUM; - var _data = data; + var qrAlphaNum = function(data) { - var _this = {}; + var _mode = QRMode.MODE_ALPHA_NUM; + var _data = data; - _this.getMode = function() { - return _mode; - }; + var _this = {}; - _this.getLength = function(buffer) { - return _data.length; - }; + _this.getMode = function() { + return _mode; + }; - _this.write = function(buffer) { + _this.getLength = function(buffer) { + return _data.length; + }; - var s = _data; + _this.write = function(buffer) { - var i = 0; + var s = _data; - while (i + 1 < s.length) { - buffer.put( - getCode(s.charAt(i) ) * 45 + - getCode(s.charAt(i + 1) ), 11); - i += 2; - } + var i = 0; - if (i < s.length) { - buffer.put(getCode(s.charAt(i) ), 6); - } - }; + while (i + 1 < s.length) { + buffer.put( + getCode(s.charAt(i) ) * 45 + + getCode(s.charAt(i + 1) ), 11); + i += 2; + } - var getCode = function(c) { + if (i < s.length) { + buffer.put(getCode(s.charAt(i) ), 6); + } + }; - if ('0' <= c && c <= '9') { - return c.charCodeAt(0) - '0'.charCodeAt(0); - } else if ('A' <= c && c <= 'Z') { - return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10; - } else { - switch (c) { - case ' ' : return 36; - case '$' : return 37; - case '%' : return 38; - case '*' : return 39; - case '+' : return 40; - case '-' : return 41; - case '.' : return 42; - case '/' : return 43; - case ':' : return 44; - default : - throw 'illegal char :' + c; - } + var getCode = function(c) { + + if ('0' <= c && c <= '9') { + return c.charCodeAt(0) - '0'.charCodeAt(0); + } else if ('A' <= c && c <= 'Z') { + return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10; + } else { + switch (c) { + case ' ' : return 36; + case '$' : return 37; + case '%' : return 38; + case '*' : return 39; + case '+' : return 40; + case '-' : return 41; + case '.' : return 42; + case '/' : return 43; + case ':' : return 44; + default : + throw 'illegal char :' + c; } - }; - - return _this; + } }; - //--------------------------------------------------------------------- - // qr8BitByte - //--------------------------------------------------------------------- + return _this; + }; - var qr8BitByte = function(data) { + //--------------------------------------------------------------------- + // qr8BitByte + //--------------------------------------------------------------------- - var _mode = QRMode.MODE_8BIT_BYTE; - var _bytes = qrcode.stringToBytes(data); + var qr8BitByte = function(data) { - var _this = {}; + var _mode = QRMode.MODE_8BIT_BYTE; + var _bytes = qrcode.stringToBytes(data); - _this.getMode = function() { - return _mode; - }; + var _this = {}; - _this.getLength = function(buffer) { - return _bytes.length; - }; + _this.getMode = function() { + return _mode; + }; - _this.write = function(buffer) { - for (var i = 0; i < _bytes.length; i += 1) { - buffer.put(_bytes[i], 8); - } - }; + _this.getLength = function(buffer) { + return _bytes.length; + }; - return _this; + _this.write = function(buffer) { + for (var i = 0; i < _bytes.length; i += 1) { + buffer.put(_bytes[i], 8); + } }; - //--------------------------------------------------------------------- - // qrKanji - //--------------------------------------------------------------------- + return _this; + }; + + //--------------------------------------------------------------------- + // qrKanji + //--------------------------------------------------------------------- - var qrKanji = function(data) { + var qrKanji = function(data) { - var _mode = QRMode.MODE_KANJI; + var _mode = QRMode.MODE_KANJI; - var stringToBytes = qrcode.stringToBytesFuncs['SJIS']; - if (!stringToBytes) { + var stringToBytes = qrcode.stringToBytesFuncs['SJIS']; + if (!stringToBytes) { + throw 'sjis not supported.'; + } + !function(c, code) { + // self test for sjis support. + var test = stringToBytes(c); + if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) { throw 'sjis not supported.'; } - !function(c, code) { - // self test for sjis support. - var test = stringToBytes(c); - if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) { - throw 'sjis not supported.'; - } - }('\u53cb', 0x9746); - - var _bytes = stringToBytes(data); + }('\u53cb', 0x9746); - var _this = {}; + var _bytes = stringToBytes(data); - _this.getMode = function() { - return _mode; - }; + var _this = {}; - _this.getLength = function(buffer) { - return ~~(_bytes.length / 2); - }; + _this.getMode = function() { + return _mode; + }; - _this.write = function(buffer) { + _this.getLength = function(buffer) { + return ~~(_bytes.length / 2); + }; - var data = _bytes; + _this.write = function(buffer) { - var i = 0; + var data = _bytes; - while (i + 1 < data.length) { + var i = 0; - var c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]); + while (i + 1 < data.length) { - if (0x8140 <= c && c <= 0x9FFC) { - c -= 0x8140; - } else if (0xE040 <= c && c <= 0xEBBF) { - c -= 0xC140; - } else { - throw 'illegal char at ' + (i + 1) + '/' + c; - } + var c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]); - c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff); + if (0x8140 <= c && c <= 0x9FFC) { + c -= 0x8140; + } else if (0xE040 <= c && c <= 0xEBBF) { + c -= 0xC140; + } else { + throw 'illegal char at ' + (i + 1) + '/' + c; + } - buffer.put(c, 13); + c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff); - i += 2; - } + buffer.put(c, 13); - if (i < data.length) { - throw 'illegal char at ' + (i + 1); - } - }; + i += 2; + } - return _this; + if (i < data.length) { + throw 'illegal char at ' + (i + 1); + } }; - //===================================================================== - // GIF Support etc. - // - - //--------------------------------------------------------------------- - // byteArrayOutputStream - //--------------------------------------------------------------------- + return _this; + }; - var byteArrayOutputStream = function() { + //===================================================================== + // GIF Support etc. + // - var _bytes = []; + //--------------------------------------------------------------------- + // byteArrayOutputStream + //--------------------------------------------------------------------- - var _this = {}; + var byteArrayOutputStream = function() { - _this.writeByte = function(b) { - _bytes.push(b & 0xff); - }; + var _bytes = []; - _this.writeShort = function(i) { - _this.writeByte(i); - _this.writeByte(i >>> 8); - }; + var _this = {}; - _this.writeBytes = function(b, off, len) { - off = off || 0; - len = len || b.length; - for (var i = 0; i < len; i += 1) { - _this.writeByte(b[i + off]); - } - }; + _this.writeByte = function(b) { + _bytes.push(b & 0xff); + }; - _this.writeString = function(s) { - for (var i = 0; i < s.length; i += 1) { - _this.writeByte(s.charCodeAt(i) ); - } - }; + _this.writeShort = function(i) { + _this.writeByte(i); + _this.writeByte(i >>> 8); + }; - _this.toByteArray = function() { - return _bytes; - }; + _this.writeBytes = function(b, off, len) { + off = off || 0; + len = len || b.length; + for (var i = 0; i < len; i += 1) { + _this.writeByte(b[i + off]); + } + }; - _this.toString = function() { - var s = ''; - s += '['; - for (var i = 0; i < _bytes.length; i += 1) { - if (i > 0) { - s += ','; - } - s += _bytes[i]; - } - s += ']'; - return s; - }; + _this.writeString = function(s) { + for (var i = 0; i < s.length; i += 1) { + _this.writeByte(s.charCodeAt(i) ); + } + }; - return _this; + _this.toByteArray = function() { + return _bytes; }; - //--------------------------------------------------------------------- - // base64EncodeOutputStream - //--------------------------------------------------------------------- + _this.toString = function() { + var s = ''; + s += '['; + for (var i = 0; i < _bytes.length; i += 1) { + if (i > 0) { + s += ','; + } + s += _bytes[i]; + } + s += ']'; + return s; + }; - var base64EncodeOutputStream = function() { + return _this; + }; - var _buffer = 0; - var _buflen = 0; - var _length = 0; - var _base64 = ''; + //--------------------------------------------------------------------- + // base64EncodeOutputStream + //--------------------------------------------------------------------- - var _this = {}; + var base64EncodeOutputStream = function() { - var writeEncoded = function(b) { - _base64 += String.fromCharCode(encode(b & 0x3f) ); - }; + var _buffer = 0; + var _buflen = 0; + var _length = 0; + var _base64 = ''; - var encode = function(n) { - if (n < 0) ; else if (n < 26) { - return 0x41 + n; - } else if (n < 52) { - return 0x61 + (n - 26); - } else if (n < 62) { - return 0x30 + (n - 52); - } else if (n == 62) { - return 0x2b; - } else if (n == 63) { - return 0x2f; - } - throw 'n:' + n; - }; + var _this = {}; - _this.writeByte = function(n) { + var writeEncoded = function(b) { + _base64 += String.fromCharCode(encode(b & 0x3f) ); + }; - _buffer = (_buffer << 8) | (n & 0xff); - _buflen += 8; - _length += 1; + var encode = function(n) { + if (n < 0) ; else if (n < 26) { + return 0x41 + n; + } else if (n < 52) { + return 0x61 + (n - 26); + } else if (n < 62) { + return 0x30 + (n - 52); + } else if (n == 62) { + return 0x2b; + } else if (n == 63) { + return 0x2f; + } + throw 'n:' + n; + }; - while (_buflen >= 6) { - writeEncoded(_buffer >>> (_buflen - 6) ); - _buflen -= 6; - } - }; + _this.writeByte = function(n) { - _this.flush = function() { + _buffer = (_buffer << 8) | (n & 0xff); + _buflen += 8; + _length += 1; - if (_buflen > 0) { - writeEncoded(_buffer << (6 - _buflen) ); - _buffer = 0; - _buflen = 0; - } + while (_buflen >= 6) { + writeEncoded(_buffer >>> (_buflen - 6) ); + _buflen -= 6; + } + }; - if (_length % 3 != 0) { - // padding - var padlen = 3 - _length % 3; - for (var i = 0; i < padlen; i += 1) { - _base64 += '='; - } - } - }; + _this.flush = function() { - _this.toString = function() { - return _base64; - }; + if (_buflen > 0) { + writeEncoded(_buffer << (6 - _buflen) ); + _buffer = 0; + _buflen = 0; + } - return _this; + if (_length % 3 != 0) { + // padding + var padlen = 3 - _length % 3; + for (var i = 0; i < padlen; i += 1) { + _base64 += '='; + } + } }; - //--------------------------------------------------------------------- - // base64DecodeInputStream - //--------------------------------------------------------------------- + _this.toString = function() { + return _base64; + }; - var base64DecodeInputStream = function(str) { + return _this; + }; - var _str = str; - var _pos = 0; - var _buffer = 0; - var _buflen = 0; + //--------------------------------------------------------------------- + // base64DecodeInputStream + //--------------------------------------------------------------------- - var _this = {}; + var base64DecodeInputStream = function(str) { - _this.read = function() { + var _str = str; + var _pos = 0; + var _buffer = 0; + var _buflen = 0; - while (_buflen < 8) { + var _this = {}; - if (_pos >= _str.length) { - if (_buflen == 0) { - return -1; - } - throw 'unexpected end of file./' + _buflen; - } + _this.read = function() { - var c = _str.charAt(_pos); - _pos += 1; + while (_buflen < 8) { - if (c == '=') { - _buflen = 0; + if (_pos >= _str.length) { + if (_buflen == 0) { return -1; - } else if (c.match(/^\s$/) ) { - // ignore if whitespace. - continue; } - - _buffer = (_buffer << 6) | decode(c.charCodeAt(0) ); - _buflen += 6; + throw 'unexpected end of file./' + _buflen; } - var n = (_buffer >>> (_buflen - 8) ) & 0xff; - _buflen -= 8; - return n; - }; + var c = _str.charAt(_pos); + _pos += 1; - var decode = function(c) { - if (0x41 <= c && c <= 0x5a) { - return c - 0x41; - } else if (0x61 <= c && c <= 0x7a) { - return c - 0x61 + 26; - } else if (0x30 <= c && c <= 0x39) { - return c - 0x30 + 52; - } else if (c == 0x2b) { - return 62; - } else if (c == 0x2f) { - return 63; - } else { - throw 'c:' + c; + if (c == '=') { + _buflen = 0; + return -1; + } else if (c.match(/^\s$/) ) { + // ignore if whitespace. + continue; } - }; - return _this; + _buffer = (_buffer << 6) | decode(c.charCodeAt(0) ); + _buflen += 6; + } + + var n = (_buffer >>> (_buflen - 8) ) & 0xff; + _buflen -= 8; + return n; }; - //--------------------------------------------------------------------- - // gifImage (B/W) - //--------------------------------------------------------------------- + var decode = function(c) { + if (0x41 <= c && c <= 0x5a) { + return c - 0x41; + } else if (0x61 <= c && c <= 0x7a) { + return c - 0x61 + 26; + } else if (0x30 <= c && c <= 0x39) { + return c - 0x30 + 52; + } else if (c == 0x2b) { + return 62; + } else if (c == 0x2f) { + return 63; + } else { + throw 'c:' + c; + } + }; - var gifImage = function(width, height) { + return _this; + }; - var _width = width; - var _height = height; - var _data = new Array(width * height); + //--------------------------------------------------------------------- + // gifImage (B/W) + //--------------------------------------------------------------------- - var _this = {}; + var gifImage = function(width, height) { - _this.setPixel = function(x, y, pixel) { - _data[y * _width + x] = pixel; - }; + var _width = width; + var _height = height; + var _data = new Array(width * height); - _this.write = function(out) { + var _this = {}; - //--------------------------------- - // GIF Signature + _this.setPixel = function(x, y, pixel) { + _data[y * _width + x] = pixel; + }; - out.writeString('GIF87a'); + _this.write = function(out) { - //--------------------------------- - // Screen Descriptor + //--------------------------------- + // GIF Signature - out.writeShort(_width); - out.writeShort(_height); + out.writeString('GIF87a'); - out.writeByte(0x80); // 2bit - out.writeByte(0); - out.writeByte(0); + //--------------------------------- + // Screen Descriptor - //--------------------------------- - // Global Color Map + out.writeShort(_width); + out.writeShort(_height); - // black - out.writeByte(0x00); - out.writeByte(0x00); - out.writeByte(0x00); + out.writeByte(0x80); // 2bit + out.writeByte(0); + out.writeByte(0); - // white - out.writeByte(0xff); - out.writeByte(0xff); - out.writeByte(0xff); + //--------------------------------- + // Global Color Map - //--------------------------------- - // Image Descriptor + // black + out.writeByte(0x00); + out.writeByte(0x00); + out.writeByte(0x00); - out.writeString(','); - out.writeShort(0); - out.writeShort(0); - out.writeShort(_width); - out.writeShort(_height); - out.writeByte(0); + // white + out.writeByte(0xff); + out.writeByte(0xff); + out.writeByte(0xff); - //--------------------------------- - // Local Color Map + //--------------------------------- + // Image Descriptor - //--------------------------------- - // Raster Data + out.writeString(','); + out.writeShort(0); + out.writeShort(0); + out.writeShort(_width); + out.writeShort(_height); + out.writeByte(0); - var lzwMinCodeSize = 2; - var raster = getLZWRaster(lzwMinCodeSize); + //--------------------------------- + // Local Color Map - out.writeByte(lzwMinCodeSize); + //--------------------------------- + // Raster Data - var offset = 0; + var lzwMinCodeSize = 2; + var raster = getLZWRaster(lzwMinCodeSize); - while (raster.length - offset > 255) { - out.writeByte(255); - out.writeBytes(raster, offset, 255); - offset += 255; - } + out.writeByte(lzwMinCodeSize); - out.writeByte(raster.length - offset); - out.writeBytes(raster, offset, raster.length - offset); - out.writeByte(0x00); + var offset = 0; - //--------------------------------- - // GIF Terminator - out.writeString(';'); - }; + while (raster.length - offset > 255) { + out.writeByte(255); + out.writeBytes(raster, offset, 255); + offset += 255; + } - var bitOutputStream = function(out) { + out.writeByte(raster.length - offset); + out.writeBytes(raster, offset, raster.length - offset); + out.writeByte(0x00); - var _out = out; - var _bitLength = 0; - var _bitBuffer = 0; + //--------------------------------- + // GIF Terminator + out.writeString(';'); + }; - var _this = {}; + var bitOutputStream = function(out) { - _this.write = function(data, length) { + var _out = out; + var _bitLength = 0; + var _bitBuffer = 0; - if ( (data >>> length) != 0) { - throw 'length over'; - } + var _this = {}; - while (_bitLength + length >= 8) { - _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) ); - length -= (8 - _bitLength); - data >>>= (8 - _bitLength); - _bitBuffer = 0; - _bitLength = 0; - } + _this.write = function(data, length) { - _bitBuffer = (data << _bitLength) | _bitBuffer; - _bitLength = _bitLength + length; - }; + if ( (data >>> length) != 0) { + throw 'length over'; + } - _this.flush = function() { - if (_bitLength > 0) { - _out.writeByte(_bitBuffer); - } - }; + while (_bitLength + length >= 8) { + _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) ); + length -= (8 - _bitLength); + data >>>= (8 - _bitLength); + _bitBuffer = 0; + _bitLength = 0; + } - return _this; + _bitBuffer = (data << _bitLength) | _bitBuffer; + _bitLength = _bitLength + length; }; - var getLZWRaster = function(lzwMinCodeSize) { + _this.flush = function() { + if (_bitLength > 0) { + _out.writeByte(_bitBuffer); + } + }; - var clearCode = 1 << lzwMinCodeSize; - var endCode = (1 << lzwMinCodeSize) + 1; - var bitLength = lzwMinCodeSize + 1; + return _this; + }; - // Setup LZWTable - var table = lzwTable(); + var getLZWRaster = function(lzwMinCodeSize) { - for (var i = 0; i < clearCode; i += 1) { - table.add(String.fromCharCode(i) ); - } - table.add(String.fromCharCode(clearCode) ); - table.add(String.fromCharCode(endCode) ); + var clearCode = 1 << lzwMinCodeSize; + var endCode = (1 << lzwMinCodeSize) + 1; + var bitLength = lzwMinCodeSize + 1; - var byteOut = byteArrayOutputStream(); - var bitOut = bitOutputStream(byteOut); + // Setup LZWTable + var table = lzwTable(); - // clear code - bitOut.write(clearCode, bitLength); + for (var i = 0; i < clearCode; i += 1) { + table.add(String.fromCharCode(i) ); + } + table.add(String.fromCharCode(clearCode) ); + table.add(String.fromCharCode(endCode) ); - var dataIndex = 0; + var byteOut = byteArrayOutputStream(); + var bitOut = bitOutputStream(byteOut); - var s = String.fromCharCode(_data[dataIndex]); - dataIndex += 1; + // clear code + bitOut.write(clearCode, bitLength); - while (dataIndex < _data.length) { + var dataIndex = 0; - var c = String.fromCharCode(_data[dataIndex]); - dataIndex += 1; + var s = String.fromCharCode(_data[dataIndex]); + dataIndex += 1; - if (table.contains(s + c) ) { + while (dataIndex < _data.length) { - s = s + c; + var c = String.fromCharCode(_data[dataIndex]); + dataIndex += 1; - } else { + if (table.contains(s + c) ) { - bitOut.write(table.indexOf(s), bitLength); + s = s + c; - if (table.size() < 0xfff) { + } else { - if (table.size() == (1 << bitLength) ) { - bitLength += 1; - } + bitOut.write(table.indexOf(s), bitLength); + + if (table.size() < 0xfff) { - table.add(s + c); + if (table.size() == (1 << bitLength) ) { + bitLength += 1; } - s = c; + table.add(s + c); } - } - bitOut.write(table.indexOf(s), bitLength); + s = c; + } + } - // end code - bitOut.write(endCode, bitLength); + bitOut.write(table.indexOf(s), bitLength); - bitOut.flush(); + // end code + bitOut.write(endCode, bitLength); - return byteOut.toByteArray(); - }; + bitOut.flush(); - var lzwTable = function() { + return byteOut.toByteArray(); + }; - var _map = {}; - var _size = 0; + var lzwTable = function() { - var _this = {}; + var _map = {}; + var _size = 0; - _this.add = function(key) { - if (_this.contains(key) ) { - throw 'dup key:' + key; - } - _map[key] = _size; - _size += 1; - }; + var _this = {}; - _this.size = function() { - return _size; - }; + _this.add = function(key) { + if (_this.contains(key) ) { + throw 'dup key:' + key; + } + _map[key] = _size; + _size += 1; + }; - _this.indexOf = function(key) { - return _map[key]; - }; + _this.size = function() { + return _size; + }; - _this.contains = function(key) { - return typeof _map[key] != 'undefined'; - }; + _this.indexOf = function(key) { + return _map[key]; + }; - return _this; + _this.contains = function(key) { + return typeof _map[key] != 'undefined'; }; return _this; }; - var createDataURL = function(width, height, getPixel) { - var gif = gifImage(width, height); - for (var y = 0; y < height; y += 1) { - for (var x = 0; x < width; x += 1) { - gif.setPixel(x, y, getPixel(x, y) ); - } - } - - var b = byteArrayOutputStream(); - gif.write(b); + return _this; + }; - var base64 = base64EncodeOutputStream(); - var bytes = b.toByteArray(); - for (var i = 0; i < bytes.length; i += 1) { - base64.writeByte(bytes[i]); + var createDataURL = function(width, height, getPixel) { + var gif = gifImage(width, height); + for (var y = 0; y < height; y += 1) { + for (var x = 0; x < width; x += 1) { + gif.setPixel(x, y, getPixel(x, y) ); } - base64.flush(); + } - return 'data:image/gif;base64,' + base64; - }; + var b = byteArrayOutputStream(); + gif.write(b); - //--------------------------------------------------------------------- - // returns qrcode function. + var base64 = base64EncodeOutputStream(); + var bytes = b.toByteArray(); + for (var i = 0; i < bytes.length; i += 1) { + base64.writeByte(bytes[i]); + } + base64.flush(); - return qrcode; - }(); + return 'data:image/gif;base64,' + base64; + }; - // multibyte support - !function() { - - qrcode.stringToBytesFuncs['UTF-8'] = function(s) { - // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array - function toUTF8Array(str) { - var utf8 = []; - for (var i=0; i < str.length; i++) { - var charcode = str.charCodeAt(i); - if (charcode < 0x80) utf8.push(charcode); - else if (charcode < 0x800) { - utf8.push(0xc0 | (charcode >> 6), - 0x80 | (charcode & 0x3f)); - } - else if (charcode < 0xd800 || charcode >= 0xe000) { - utf8.push(0xe0 | (charcode >> 12), - 0x80 | ((charcode>>6) & 0x3f), - 0x80 | (charcode & 0x3f)); - } - // surrogate pair - else { - i++; - // UTF-16 encodes 0x10000-0x10FFFF by - // subtracting 0x10000 and splitting the - // 20 bits of 0x0-0xFFFFF into two halves - charcode = 0x10000 + (((charcode & 0x3ff)<<10) - | (str.charCodeAt(i) & 0x3ff)); - utf8.push(0xf0 | (charcode >>18), - 0x80 | ((charcode>>12) & 0x3f), - 0x80 | ((charcode>>6) & 0x3f), - 0x80 | (charcode & 0x3f)); - } + //--------------------------------------------------------------------- + // returns qrcode function. + + return qrcode; + }(); + + // multibyte support + !function() { + + qrcode.stringToBytesFuncs['UTF-8'] = function(s) { + // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array + function toUTF8Array(str) { + var utf8 = []; + for (var i=0; i < str.length; i++) { + var charcode = str.charCodeAt(i); + if (charcode < 0x80) utf8.push(charcode); + else if (charcode < 0x800) { + utf8.push(0xc0 | (charcode >> 6), + 0x80 | (charcode & 0x3f)); + } + else if (charcode < 0xd800 || charcode >= 0xe000) { + utf8.push(0xe0 | (charcode >> 12), + 0x80 | ((charcode>>6) & 0x3f), + 0x80 | (charcode & 0x3f)); + } + // surrogate pair + else { + i++; + // UTF-16 encodes 0x10000-0x10FFFF by + // subtracting 0x10000 and splitting the + // 20 bits of 0x0-0xFFFFF into two halves + charcode = 0x10000 + (((charcode & 0x3ff)<<10) + | (str.charCodeAt(i) & 0x3ff)); + utf8.push(0xf0 | (charcode >>18), + 0x80 | ((charcode>>12) & 0x3f), + 0x80 | ((charcode>>6) & 0x3f), + 0x80 | (charcode & 0x3f)); } - return utf8; } - return toUTF8Array(s); - }; - - }(); - - (function (factory) { - { - module.exports = factory(); + return utf8; } - }(function () { - return qrcode; - })); - }(qrcode$1)); - - var qrcode = qrcode$1.exports; - - /* - This file is part of GNU Taler - (C) 2021 Taler Systems S.A. + return toUTF8Array(s); + }; - GNU Taler is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. + }(); - GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> - */ - function QR({ text }) { - const divRef = s(null); - y(() => { - const qr = qrcode(0, 'L'); - qr.addData(text); - qr.make(); - divRef.current.innerHTML = qr.createSvgTag({ - scalable: true, - }); - }); - return a$2("div", { style: { width: '100%', display: 'flex', flexDirection: 'column', alignItems: 'center' } }, - a$2("div", { style: { width: '50%', minWidth: 200, maxWidth: 300 }, ref: divRef })); + (function (factory) { + { + module.exports = factory(); } + }(function () { + return qrcode; + })); + }(qrcode$1)); + + var qrcode = qrcode$1.exports; + + /* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + function createSVG(text) { + const qr = qrcode(0, 'L'); + qr.addData(text); + qr.make(); + return qr.createSvgTag({ + scalable: true, + margin: 0 + }); + } + function QR({ text }) { + const divRef = s(null); + y(() => { + divRef.current.innerHTML = createSVG(text); + }); + return a$2("div", { style: { width: '100%', display: 'flex', flexDirection: 'column', alignItems: 'center' } }, + a$2("div", { style: { width: '50%', minWidth: 200, maxWidth: 300 }, ref: divRef })); + } - /* - This file is part of GNU Taler - (C) 2021 Taler Systems S.A. - - GNU Taler is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> - */ - function Head({ order_summary }) { - return a$2(y$1, null, - a$2("meta", { charSet: "UTF-8" }), - a$2("meta", { name: "viewport", content: "width=device-width, initial-scale=1.0" }), - a$2("noscript", null, - a$2("meta", { "http-equiv": "refresh", content: "1" })), - a$2("title", null, - "Payment requested for ", - order_summary ? order_summary : `{{ order_summary }}`)); - } - function RequestPayment({ payURI, qr_code, order_status_url }) { - y(() => { - const longpollDelayMs = 60 * 1000; - let checkUrl; - try { - checkUrl = new URL(order_status_url ? order_status_url : "{{& order_status_url }}"); - } - catch (e) { - return; - } - checkUrl.searchParams.set("timeout_ms", longpollDelayMs.toString()); - function check() { - let retried = false; - function retryOnce() { - if (!retried) { - retried = true; - check(); - } - } - const req = new XMLHttpRequest(); - req.onreadystatechange = function () { - if (req.readyState === XMLHttpRequest.DONE) { - if (req.status === 200) { - try { - const resp = JSON.parse(req.responseText); - if (resp.fulfillment_url) { - window.location.replace(resp.fulfillment_url); - } - } - catch (e) { - console.error("could not parse response:", e); - } - } - if (req.status === 202) { - try { - const resp = JSON.parse(req.responseText); - if (resp.fulfillment_url) { - window.location.replace(resp.fulfillment_url); - } - } - catch (e) { - console.error("could not parse response:", e); - } - } - if (req.status === 402) { - try { - const resp = JSON.parse(req.responseText); - if (resp.already_paid_order_id && resp.fulfillment_url) { - window.location.replace(resp.fulfillment_url); - } - } - catch (e) { - console.error("could not parse response:", e); - } - } - setTimeout(retryOnce, 500); - } - }; - req.onerror = function () { - setTimeout(retryOnce, 500); - }; - req.ontimeout = function () { - setTimeout(retryOnce, 500); - }; - req.timeout = longpollDelayMs; - req.open("GET", checkUrl.href); - req.send(); - } - setTimeout(check, 500); - }); - return a$2(y$1, null, - a$2("section", { id: "main", class: "content" }, - a$2("h1", { style: { textAlign: 'center' } }, "Pay with Taler"), - a$2("div", { style: { textAlign: 'center' }, class: "taler-installed-hide" }, - a$2("p", null, "Scan this QR code with your mobile wallet:"), - a$2("div", { class: "qr", dangerouslySetInnerHTML: { __html: qr_code ? qr_code : `{{{ taler_pay_qrcode_svg }}}` } }), - a$2("p", null, - a$2("a", { class: "pure-button pure-button-active success", href: payURI ? payURI : `{{ taler_pay_uri }}` }, "Or open your Taller wallet")), - a$2("p", null, - a$2("a", { href: "https://wallet.taler.net/" }, "Don't have a Taler wallet yet? Install it!"))), - a$2("hr", null)), - a$2(Footer, null)); - } - function mount() { - try { - const fromLocation = new URL(window.location.href).searchParams; - const os = fromLocation.get('order_summary') || undefined; - if (os) { - N(a$2(Head, { order_summary: os }), document.head); - } - const uri = fromLocation.get('pay_uri') || undefined; - const osu = fromLocation.get('order_status_url') || undefined; - const qr_code = uri ? m$1(a$2(QR, { text: uri })) : undefined; - N(a$2(RequestPayment, { payURI: uri, order_status_url: osu, qr_code: qr_code }), document.body); - } - catch (e) { - console.error("got error", e); - document.body.innerText = `Fatal error: "${e.message}". Please report this bug at https://bugs.gnunet.org/.`; - } - } - function buildTimeRendering() { - return { - head: m$1(a$2(Head, null)), - body: m$1(a$2(RequestPayment, null)) - }; - } + /* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + function Head({ order_summary }) { + return a$2(y$1, null, + a$2("meta", { charSet: "UTF-8" }), + a$2("meta", { name: "viewport", content: "width=device-width, initial-scale=1.0" }), + a$2("noscript", null, + a$2("meta", { "http-equiv": "refresh", content: "1" })), + a$2("title", null, + "Payment requested for ", + order_summary ? order_summary : `{{ order_summary }}`)); + } + function RequestPayment({ payURI, qr_code, order_status_url }) { + y(() => { + const longpollDelayMs = 60 * 1000; + let checkUrl; + try { + checkUrl = new URL(order_status_url ? order_status_url : "{{& order_status_url }}"); + } + catch (e) { + return; + } + checkUrl.searchParams.set("timeout_ms", longpollDelayMs.toString()); + function check() { + let retried = false; + function retryOnce() { + if (!retried) { + retried = true; + check(); + } + } + const req = new XMLHttpRequest(); + req.onreadystatechange = function () { + if (req.readyState === XMLHttpRequest.DONE) { + if (req.status === 200) { + try { + const resp = JSON.parse(req.responseText); + if (resp.fulfillment_url) { + window.location.replace(resp.fulfillment_url); + } + } + catch (e) { + console.error("could not parse response:", e); + } + } + if (req.status === 202) { + try { + const resp = JSON.parse(req.responseText); + if (resp.fulfillment_url) { + window.location.replace(resp.fulfillment_url); + } + } + catch (e) { + console.error("could not parse response:", e); + } + } + if (req.status === 402) { + try { + const resp = JSON.parse(req.responseText); + if (resp.already_paid_order_id && resp.fulfillment_url) { + window.location.replace(resp.fulfillment_url); + } + } + catch (e) { + console.error("could not parse response:", e); + } + } + setTimeout(retryOnce, 500); + } + }; + req.onerror = function () { + setTimeout(retryOnce, 500); + }; + req.ontimeout = function () { + setTimeout(retryOnce, 500); + }; + req.timeout = longpollDelayMs; + req.open("GET", checkUrl.href); + req.send(); + } + setTimeout(check, 500); + }); + return a$2(Page, null, + a$2("section", null, + a$2("h1", null, "Pay with Taler"), + a$2("p", null, "Scan this QR code with your mobile wallet:"), + a$2(QRPlaceholder, { dangerouslySetInnerHTML: { __html: qr_code ? qr_code : `{{{ taler_pay_qrcode_svg }}}` } }), + a$2("p", null, + a$2(WalletLink, { href: payURI ? payURI : `{{ taler_pay_uri }}` }, "Or open your Taller wallet")), + a$2("p", null, + a$2("a", { href: "https://wallet.taler.net/" }, "Don't have a Taler wallet yet? Install it!"))), + a$2(Footer, null)); + } + function mount() { + try { + const fromLocation = new URL(window.location.href).searchParams; + const os = fromLocation.get('order_summary') || undefined; + if (os) { + N(a$2(Head, { order_summary: os }), document.head); + } + const uri = fromLocation.get('pay_uri') || undefined; + const osu = fromLocation.get('order_status_url') || undefined; + const qr_code = uri ? m$1(a$2(QR, { text: uri })) : undefined; + N(a$2(RequestPayment, { payURI: uri, order_status_url: osu, qr_code: qr_code }), document.body); + } + catch (e) { + console.error("got error", e); + if (e instanceof Error) { + document.body.innerText = `Fatal error: "${e.message}". Please report this bug at https://bugs.gnunet.org/.`; + } + } + } + function buildTimeRendering() { + return { + head: m$1(a$2(Head, null)), + body: m$1(a$2(RequestPayment, null)) + }; + } - exports.RequestPayment = RequestPayment; - exports.buildTimeRendering = buildTimeRendering; - exports.mount = mount; + exports.RequestPayment = RequestPayment; + exports.buildTimeRendering = buildTimeRendering; + exports.mount = mount; - Object.defineProperty(exports, '__esModule', { value: true }); + Object.defineProperty(exports, '__esModule', { value: true }); - return exports; + return exports; }({})); </script> |