├── public ├── logo.png ├── favicon.ico ├── manifest.json ├── index.html └── meSpeak │ └── en-us.json ├── src ├── assets │ ├── logo.png │ ├── fsociety.png │ ├── elliot_on_god.gif │ └── elliot_on_god_small.gif ├── components │ ├── Console.js │ └── LoginScreen.js ├── index.js ├── styles │ ├── LoginScreen.scss │ └── index.scss ├── modules │ ├── Voice.js │ ├── Writer.js │ ├── Rant.js │ ├── Ascii.js │ ├── ConsoleOutput.js │ └── SuperGif.js ├── ElliotOnG0d.js └── registerServiceWorker.js ├── .gitignore ├── package.json ├── terminal.js └── README.md /public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reimertz/elliot_on_g0d/HEAD/public/logo.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reimertz/elliot_on_g0d/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reimertz/elliot_on_g0d/HEAD/src/assets/logo.png -------------------------------------------------------------------------------- /src/assets/fsociety.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reimertz/elliot_on_g0d/HEAD/src/assets/fsociety.png -------------------------------------------------------------------------------- /src/assets/elliot_on_god.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reimertz/elliot_on_g0d/HEAD/src/assets/elliot_on_god.gif -------------------------------------------------------------------------------- /src/assets/elliot_on_god_small.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reimertz/elliot_on_g0d/HEAD/src/assets/elliot_on_god_small.gif -------------------------------------------------------------------------------- /src/components/Console.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default props => { 4 | return ( 5 |
6 |
 7 |         {props.children}
 8 |       
9 |
10 | ) 11 | } 12 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom' 3 | import './styles/index.css' 4 | import ElliotOnG0d from './ElliotOnG0d' 5 | import registerServiceWorker from './registerServiceWorker' 6 | 7 | ReactDOM.render(, document.getElementById('root')) 8 | registerServiceWorker() 9 | 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | /node_modules 3 | 4 | # css 5 | src/**/*.css 6 | 7 | # testing 8 | /coverage 9 | 10 | # production 11 | /build 12 | 13 | # misc 14 | .DS_Store 15 | .env.local 16 | .env.development.local 17 | .env.test.local 18 | .env.production.local 19 | 20 | npm-debug.log* 21 | yarn-debug.log* 22 | yarn-error.log* 23 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "elliot_on_g0d", 3 | "name": "elliot_on_g0d", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | } 10 | ], 11 | "start_url": "./index.html", 12 | "display": "standalone", 13 | "theme_color": "#FFFFFF", 14 | "background_color": "#000000" 15 | } 16 | -------------------------------------------------------------------------------- /src/components/LoginScreen.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default props => { 4 | const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test( 5 | navigator.userAgent 6 | ) 7 | 8 | return ( 9 |
10 |
11 | E Corp Logo 12 |

13 | {isMobile ? 'Touch to Login' : 'Click to Login'} 14 |

15 |
sound enabled console
16 |
17 |
18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /src/styles/LoginScreen.scss: -------------------------------------------------------------------------------- 1 | .LoginScreen { 2 | display: flex; 3 | align-items: center; 4 | justify-content: center; 5 | width: 100vw; 6 | min-height: 100vh; 7 | position: fixed; 8 | top: 0; 9 | left: 0; 10 | cursor: pointer; 11 | h3 { 12 | cursor: pointer; 13 | } 14 | 15 | .Logo { 16 | animation-name: rotate; 17 | animation-duration: 5s; 18 | animation-timing-function: linear; 19 | animation-iteration-count: infinite; 20 | } 21 | } 22 | 23 | @keyframes rotate { 24 | 0% { 25 | transform: rotateY(0deg); 26 | } 27 | 100% { 28 | transform: rotateY(360deg); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/modules/Voice.js: -------------------------------------------------------------------------------- 1 | export default class Voice { 2 | constructor() { 3 | this.meSpeak = window.meSpeak 4 | } 5 | 6 | init() { 7 | this.meSpeak.loadConfig('meSpeak/mespeak_config.json') 8 | this.meSpeak.loadVoice('meSpeak/en-us.json') 9 | this.say(' ') // hack to make sure voice works in IOS 10 | } 11 | 12 | mute(toggle) { 13 | this.meSpeak.setVolume(toggle ? 0 : 1) 14 | } 15 | 16 | say(sentence, variant = 'm1', speed = 155) { 17 | if (this.meSpeak.isConfigLoaded()) { 18 | this.meSpeak.speak(sentence, { variant: variant, speed: speed }) 19 | } else { 20 | return new Error('Voice not initiated. :(') 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "elliot_on_g0d", 3 | "version": "0.0.1", 4 | "author": "pierre reimertz", 5 | "homepage": "https://reimertz.github.io/elliot_on_g0d", 6 | "license": "MIT", 7 | "dependencies": { 8 | "blessed": "^0.1.81", 9 | "node-sass-chokidar": "^0.0.3", 10 | "npm-run-all": "^4.0.2", 11 | "react": "^15.6.1", 12 | "react-dom": "^15.6.1", 13 | "react-scripts": "1.0.10", 14 | "say": "^0.11.0" 15 | }, 16 | "scripts": { 17 | "build-css": "node-sass-chokidar --include-path ./src --include-path ./node_modules src/ -o src/", 18 | "watch-css": "npm run build-css && node-sass-chokidar --include-path ./src --include-path ./node_modules src/ -o src/ --watch --recursive", 19 | "start-js": "react-scripts start", 20 | "build": "npm run build-css && react-scripts build", 21 | "deploy": "npm run build && gh-pages -d build", 22 | "web": "npm-run-all -p watch-css start-js", 23 | "terminal": "node terminal.js" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /terminal.js: -------------------------------------------------------------------------------- 1 | const blessed = require('blessed') 2 | const Rant = require('./src/modules/Rant') 3 | const say = require('say') 4 | const { exec } = require('child_process') 5 | 6 | const screen = blessed.screen({ 7 | smartCSR: true, 8 | align: 'center' 9 | }) 10 | 11 | screen.title = 'elliot_on_g0d' 12 | 13 | const gif = blessed.image({ 14 | parent: screen, 15 | ascii: ['@', '#', '$', '=', '*', '!', ';', ':', '~', '-', ',', '.', ' ', ' '], 16 | align: 'center', 17 | height: 30, 18 | width: 75, 19 | left: 3, 20 | top: 3, 21 | file: './src/assets/elliot_on_god_small.gif' 22 | }) 23 | 24 | const text = blessed.box({ 25 | parent: screen, 26 | top: 34, 27 | left: 3, 28 | align: 'left', 29 | content: '' 30 | }) 31 | 32 | screen.key(['escape', 'q', 'C-c'], function(ch, key) { 33 | return process.exit(0) 34 | }) 35 | 36 | screen.render() 37 | 38 | Rant.map(a => { 39 | setTimeout(() => { 40 | if (a[1] == 'm1') say.speak(a[0], 'Alex') 41 | else say.speak(a[0], 'Samantha') 42 | text.setContent(a[0]) 43 | }, a[2]) 44 | }) 45 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | elliot_on_g0d 26 | 27 | 28 | 29 | 32 |
33 | 34 | 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | elliot_on_g0d 2 | ============= 3 | 4 |

5 | 6 | elliot_on_g0d 7 | elliot_on_g0d 8 | elliot_on_g0d 9 | elliot_on_g0d 10 | 11 |

12 | 13 | 14 | ``` 15 | # clone repo 16 | git clone https://github.com/reimertz/elliot_on_g0d 17 | cd elliot_on_g0d 18 | 19 | #install dependencies 20 | npm install 21 | 22 | # run web rant 23 | npm run web 24 | 25 | # run terminal rant 26 | npm run terminal 27 | ``` 28 | 29 |

30 | 31 | elliot_on_g0d 32 | elliot_on_g0d 33 | elliot_on_g0d 34 | elliot_on_g0d 35 | 36 |

37 | 38 | --- 39 | > [reimertz.co](http://reimertz.co)  ·  40 | > GitHub [@reimertz](https://github.com/reimertz)  ·  41 | > Twitter [@reimertz](https://twitter.com/reimertz) 42 | -------------------------------------------------------------------------------- /src/modules/Writer.js: -------------------------------------------------------------------------------- 1 | //Creator Pierre Reimertz MIT ETC ETC 2 | 3 | const timeoutMap = new Map() 4 | 5 | timeoutMap.set('#', 50 / 2) //delete 6 | timeoutMap.set('@', 250 / 2) //pause 7 | timeoutMap.set(',', 350 / 2) 8 | timeoutMap.set('-', 350 / 2) 9 | timeoutMap.set('.', 500 / 2) 10 | timeoutMap.set('?', 750 / 2) 11 | 12 | export default class Writer { 13 | constructor({ input, onUpdate, onDone, instant }) { 14 | this.timeout = null 15 | this.output = '' 16 | this.input = input || '' 17 | this.immutableInput = input 18 | this.onUpdate = onUpdate || null 19 | this.isFinished = false 20 | this.onDone = onDone 21 | this.instant = instant || false 22 | } 23 | 24 | updateWriter = character => { 25 | if (character === '?') return this.output 26 | if (character === '!') return (this.output = '') 27 | if (character === '#') return (this.output = this.output.slice(0, -1)) 28 | if (character === '&') { 29 | let pasteIn = this.input.split('&')[0] 30 | this.output += pasteIn 31 | return (this.input = this.input.substring(pasteIn.length + 1, this.input.length)) 32 | } else return (this.output += character) 33 | } 34 | 35 | write = instant => { 36 | let text, msDelay 37 | if (this.input.length === 0) return this.isDone() 38 | 39 | text = this.input.substring(0, 1) 40 | this.input = this.input.substring(1, this.input.length) 41 | this.updateWriter(text) 42 | 43 | if (this.onUpdate) this.onUpdate(this.output) 44 | 45 | if (instant) return this.write(true) 46 | 47 | msDelay = timeoutMap.get(text) || Math.random() * 150 48 | 49 | this.timeout = setTimeout(() => { 50 | this.write() 51 | }, msDelay) 52 | } 53 | 54 | start = () => { 55 | this.write() 56 | } 57 | 58 | stop = () => { 59 | clearTimeout(this.timeout) 60 | this.isFinished = true 61 | } 62 | 63 | reset = () => { 64 | this.stop() 65 | this.input = this.immutableInput 66 | this.output = '' 67 | 68 | if (this.onUpdate) this.onUpdate(this.output) 69 | } 70 | 71 | isDone = () => { 72 | this.isFinished = true 73 | if (this.onDone) this.onDone() 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/modules/Rant.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | [`elliot`, 'f1', 1110], 3 | [`would you like to share?`, 'f1', 2750], 4 | [`no man, my systems hung`, 'm1', 7200], 5 | [`god can help you`, 'f1', 12300], 6 | [`Is that what God does?`, 'm1', 18260], 7 | [`He helps?`, 'm1', 22100], 8 | [`Tell me`, 'm1', 26050], 9 | [`why didn't God help my innocent friend who died for no reason`, 'm1', 28200], 10 | [`while the guilty ran free?`, 'm1', 33190], 11 | 12 | [`Okay`, 'm1', 38220], 13 | [`Fine`, 'm1', 40040], 14 | [`Forget the one offs?`, 'm1', 42130], 15 | [`How about the countless wars`, 'm1', 44040], 16 | [`declared in His name?`, 'm1', 46250], 17 | [`Okay?!`, 'm1', 49100], 18 | [`Fine!`, 'm1', 50160], 19 | [`Lets skip the random meaningless murder for a second shall we? `, 'm1', 51190], 20 | [`Howbout the`, 'm1', 56010], 21 | [`racist`, 'm1', 57070], 22 | [`sexist`, 'm1', 58250], 23 | [`phobia soup weve all been drowning in`, 'm1', 60150], 24 | [`because of Him?`, 'm1', 63180], 25 | ["And I'm not just talking about Jesus.", 'm1', 69200], 26 | ["I'm talking about all organized religion.", 'm1', 72260], 27 | [`Exclusive groups created to manage control`, 'm1', 77090], 28 | [`A dealer getting people hooked on the drug of hope`, 'm1', 82230], 29 | [ 30 | 'His followers, nothing but addicts who want their hit of bullshit to keep their dopamine of ignorance.', 31 | 'm1', 32 | 87240 33 | ], 34 | [`Addicts. Afraid to believe the truth. That theres no order`, 'm1', 96080], 35 | [`Theres no power`, 'm1', 101030], 36 | [ 37 | `That all religions are just metastasizing mind worms, meant to divide us so its easier to rule us by the charlatans that want to run us`, 38 | 'm1', 39 | 103150 40 | ], 41 | [`All we are to them are paying fanboys of their poorly-written sci-fi franchise`, 'm1', 120040], 42 | [`ha`, 'm1', 128040], 43 | [ 44 | `If I don't listen to my imaginary friend, why the fuck should I listen to yours?`, 45 | 'm1', 46 | 130160 47 | ], 48 | [`People think their worships some key to happiness`, 'm1', 139250], 49 | [`That's just how He owns you`, 'm1', 147080], 50 | [`Even I'm not crazy enough to believe that distortion of reality`, 'm1', 152170], 51 | [`So fuck God`, 'm1', 165340], 52 | [`He's not a good enough scapegoat for me`, 'm1', 170140], 53 | [`elliot on god.`, 'm1', 180140] 54 | ] -------------------------------------------------------------------------------- /src/styles/index.scss: -------------------------------------------------------------------------------- 1 | @import 'LoginScreen.scss'; 2 | 3 | $base-font: monospace; 4 | $page-width: 80%; 5 | $base-size: 17; 6 | $max-width: 80rem; 7 | $leading: 27; 8 | 9 | @mixin large { 10 | @media only screen and (min-width: 1110px) { 11 | @content; 12 | } 13 | } 14 | 15 | @mixin medium { 16 | @media only screen and (min-width: 481px) { 17 | @content; 18 | } 19 | } 20 | 21 | @mixin small { 22 | @media only screen and (max-width: 480px) { 23 | @content; 24 | } 25 | } 26 | 27 | html { 28 | font: normal #{$base-size}px/#{$leading / $base-size} $base-font; 29 | color: white; 30 | text-align: center; 31 | width: 100vw; 32 | min-height: 100%; 33 | 34 | @include small { 35 | font-size: 0.5rem; 36 | } 37 | 38 | @include medium { 39 | font-size: 0.75rem; 40 | } 41 | 42 | @include large { 43 | font-size: 1rem; 44 | } 45 | } 46 | 47 | body { 48 | transition: 200ms; 49 | background: black; 50 | animation-name: flicker; 51 | animation-duration: 4s; 52 | animation-iteration-count: infinite; 53 | min-height: 100%; 54 | } 55 | 56 | @keyframes flicker { 57 | @for $i from 0 through 100 { 58 | $flicker: random(7); 59 | #{$i}% { 60 | background: rgb($flicker, $flicker+7, $flicker); 61 | } 62 | } 63 | } 64 | 65 | main { 66 | max-width: $max-width; 67 | width: $page-width; 68 | margin: 0 auto; 69 | } 70 | 71 | main { 72 | margin-bottom: 50px; 73 | } 74 | 75 | h1 { 76 | font-size: 7rem; 77 | } 78 | 79 | h2 { 80 | font-size: 5rem; 81 | } 82 | 83 | h3 { 84 | font-size: 3rem; 85 | } 86 | 87 | h4 { 88 | font-size: 2rem; 89 | } 90 | 91 | .Hidden-Gif, 92 | .jsgif { 93 | display: none; 94 | } 95 | 96 | .Ascii { 97 | text-align: left; 98 | display: block; 99 | font-size: 0.25vw; 100 | letter-spacing: 0.25vw; 101 | 102 | @include small { 103 | font-size: 0.5vw; 104 | letter-spacing: 0.5vw; 105 | } 106 | } 107 | 108 | .Code { 109 | margin-top: 20px; 110 | text-align: left; 111 | font-size: 12px; 112 | font-family: monospace; 113 | white-space: pre-wrap; 114 | 115 | &:after { 116 | position: relative; 117 | content: '|'; 118 | color: limegreen; 119 | position: inline; 120 | animation-name: flicker; 121 | animation-duration: 2s; 122 | animation-iteration-count: infinite; 123 | } 124 | } 125 | 126 | .Reimertz { 127 | display: block; 128 | position: fixed; 129 | bottom: 30px; 130 | right: 30px; 131 | text-align: left; 132 | text-decoration: none; 133 | color: #888; 134 | z-index: 1337; 135 | 136 | a, 137 | a:visited { 138 | color: inherit; 139 | } 140 | 141 | @include small { 142 | font-size: 2rem; 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /src/ElliotOnG0d.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | 3 | import Voice from './modules/Voice' 4 | 5 | import Writer from './modules/Writer' 6 | import ConsoleOutput from './modules/ConsoleOutput' 7 | import Rant from './modules/Rant' 8 | import Ascii from './modules/Ascii' 9 | 10 | import LoginScreen from './components/LoginScreen' 11 | import Console from './components/Console' 12 | 13 | export default class ElliotOnG0d extends Component { 14 | state = { 15 | loggedIn: false, 16 | hackDone: false, 17 | rantDone: false, 18 | consoleOutput: '' 19 | } 20 | 21 | constructor() { 22 | super() 23 | this.voice = new Voice() 24 | this.voice.init() 25 | } 26 | 27 | initModules = () => { 28 | this.writer = new Writer({ 29 | input: ConsoleOutput, 30 | onDone: () => { 31 | this.hackIsDone() 32 | }, 33 | onUpdate: output => { 34 | return this.setState(state => { 35 | return { consoleOutput: output } 36 | }) 37 | } 38 | }) 39 | 40 | this.ascii = new Ascii({ 41 | source: '.Hidden-Gif', 42 | destination: '.Ascii', 43 | width: 150, 44 | fps: 10, 45 | invert: true 46 | }) 47 | } 48 | 49 | hackIsDone = () => { 50 | this.setState(state => { 51 | return { 52 | hackDone: true 53 | } 54 | }) 55 | 56 | Rant.map(a => { 57 | return setTimeout(() => { 58 | this.voice.say(a[0], a[1]) 59 | this.setState(state => { 60 | return { consoleOutput: a[0] } 61 | }) 62 | }, a[2]) 63 | }) 64 | 65 | setTimeout(() => { 66 | this.rantDone() 67 | }, Rant[Rant.length - 2][2]) 68 | 69 | this.ascii.superGif.move_to(0) 70 | this.ascii.play() 71 | } 72 | 73 | rantDone = () => { 74 | this.setState(state => { 75 | return { 76 | rantDone: true 77 | } 78 | }) 79 | } 80 | 81 | onLogin = () => { 82 | this.setState(state => { 83 | return { 84 | loggedIn: true 85 | } 86 | }) 87 | 88 | this.writer.start() 89 | } 90 | 91 | onKey = event => { 92 | if (event.ctrlKey && event.keyCode === 67) window.location.reload() 93 | } 94 | 95 | componentDidMount() { 96 | this.initModules() 97 | window.addEventListener('keydown', this.onKey) 98 | } 99 | 100 | componentWillUnmount() { 101 | window.removeEventListener('keydown', this.onKey) 102 | } 103 | 104 | render() { 105 | const { consoleOutput, loggedIn, rantDone } = this.state 106 | 107 | window.scrollTo(0, document.body.scrollHeight) 108 | 109 | return ( 110 |
111 |
112 |         {!loggedIn
113 |           ? 
114 |           : rantDone
115 |             ? false
116 |             : 
117 |                 {consoleOutput}
118 |               }
119 |         Hidden-Gif
120 |         

121 | @reimertz 122 | | 123 | source 124 |

125 |
126 | ) 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /src/registerServiceWorker.js: -------------------------------------------------------------------------------- 1 | // In production, we register a service worker to serve assets from local cache. 2 | 3 | // This lets the app load faster on subsequent visits in production, and gives 4 | // it offline capabilities. However, it also means that developers (and users) 5 | // will only see deployed updates on the "N+1" visit to a page, since previously 6 | // cached resources are updated in the background. 7 | 8 | // To learn more about the benefits of this model, read https://goo.gl/KwvDNy. 9 | // This link also includes instructions on opting out of this behavior. 10 | 11 | const isLocalhost = Boolean( 12 | window.location.hostname === 'localhost' || 13 | // [::1] is the IPv6 localhost address. 14 | window.location.hostname === '[::1]' || 15 | // 127.0.0.1/8 is considered localhost for IPv4. 16 | window.location.hostname.match( 17 | /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ 18 | ) 19 | ); 20 | 21 | export default function register() { 22 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { 23 | // The URL constructor is available in all browsers that support SW. 24 | const publicUrl = new URL(process.env.PUBLIC_URL, window.location); 25 | if (publicUrl.origin !== window.location.origin) { 26 | // Our service worker won't work if PUBLIC_URL is on a different origin 27 | // from what our page is served on. This might happen if a CDN is used to 28 | // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374 29 | return; 30 | } 31 | 32 | window.addEventListener('load', () => { 33 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; 34 | 35 | if (!isLocalhost) { 36 | // Is not local host. Just register service worker 37 | registerValidSW(swUrl); 38 | } else { 39 | // This is running on localhost. Lets check if a service worker still exists or not. 40 | checkValidServiceWorker(swUrl); 41 | } 42 | }); 43 | } 44 | } 45 | 46 | function registerValidSW(swUrl) { 47 | navigator.serviceWorker 48 | .register(swUrl) 49 | .then(registration => { 50 | registration.onupdatefound = () => { 51 | const installingWorker = registration.installing; 52 | installingWorker.onstatechange = () => { 53 | if (installingWorker.state === 'installed') { 54 | if (navigator.serviceWorker.controller) { 55 | // At this point, the old content will have been purged and 56 | // the fresh content will have been added to the cache. 57 | // It's the perfect time to display a "New content is 58 | // available; please refresh." message in your web app. 59 | console.log('New content is available; please refresh.'); 60 | } else { 61 | // At this point, everything has been precached. 62 | // It's the perfect time to display a 63 | // "Content is cached for offline use." message. 64 | console.log('Content is cached for offline use.'); 65 | } 66 | } 67 | }; 68 | }; 69 | }) 70 | .catch(error => { 71 | console.error('Error during service worker registration:', error); 72 | }); 73 | } 74 | 75 | function checkValidServiceWorker(swUrl) { 76 | // Check if the service worker can be found. If it can't reload the page. 77 | fetch(swUrl) 78 | .then(response => { 79 | // Ensure service worker exists, and that we really are getting a JS file. 80 | if ( 81 | response.status === 404 || 82 | response.headers.get('content-type').indexOf('javascript') === -1 83 | ) { 84 | // No service worker found. Probably a different app. Reload the page. 85 | navigator.serviceWorker.ready.then(registration => { 86 | registration.unregister().then(() => { 87 | window.location.reload(); 88 | }); 89 | }); 90 | } else { 91 | // Service worker found. Proceed as normal. 92 | registerValidSW(swUrl); 93 | } 94 | }) 95 | .catch(() => { 96 | console.log( 97 | 'No internet connection found. App is running in offline mode.' 98 | ); 99 | }); 100 | } 101 | 102 | export function unregister() { 103 | if ('serviceWorker' in navigator) { 104 | navigator.serviceWorker.ready.then(registration => { 105 | registration.unregister(); 106 | }); 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /src/modules/Ascii.js: -------------------------------------------------------------------------------- 1 | //Creator Pierre Reimertz MIT ETC ETC 2 | 3 | import SuperGif from './SuperGif' 4 | 5 | export default class Ascii { 6 | constructor({ 7 | chars = ['@', '#', '$', '=', '*', '!', ';', ':', '~', '-', ',', '.', ' ', ' '], 8 | source = '[data-ascii-source]', 9 | destination = '[data-ascii-destination]', 10 | width = 200, 11 | fps = 24, 12 | autoPlay = false, 13 | invert = false, 14 | onLoad = false 15 | }) { 16 | this.chars = invert ? chars.reverse() : chars 17 | this.chars = Array.from(Array(256).keys()).map(i => { 18 | return this.chars[parseInt(i / 255 * (this.chars.length - 1), 10)] 19 | }) 20 | 21 | this.source = document.querySelector(source) 22 | this.destination = document.querySelector(destination) 23 | this.canvas = document.createElement('canvas') 24 | this.ctx = this.canvas.getContext('2d') 25 | 26 | this.width = width 27 | this.height = this.width 28 | this.fps = fps 29 | this.autoPlay = autoPlay 30 | 31 | this.onLoad = onLoad 32 | 33 | this.isPlaying = false 34 | this.ratio = 1 35 | this.timeout = false 36 | this.imageData = false 37 | this.superGif = false 38 | 39 | this.__bindFunctions.call(this) 40 | this.__setType.call(this) 41 | this.__addEventListeners.call(this) 42 | } 43 | 44 | __throwError(errorString) { 45 | throw new Error(`Ascii Error: ${errorString}`) 46 | } 47 | 48 | __bindFunctions() { 49 | this._fastMod = this._fastMod.bind(this) 50 | this._getAsciiFromLatestFrame = this._getAsciiFromLatestFrame.bind(this) 51 | this._initialRender = this._initialRender.bind(this) 52 | this._renderFrame = this._renderFrame.bind(this) 53 | 54 | this.play = this.play.bind(this) 55 | this.pause = this.pause.bind(this) 56 | } 57 | 58 | __setType() { 59 | if (this.source.nodeName === 'VIDEO') { 60 | this.type = 0 61 | } else if (this.source.nodeName === 'IMG') { 62 | if (~this.source.src.toLowerCase().indexOf('.gif')) { 63 | this.type = 1 64 | this.superGif = new SuperGif({ 65 | gif: this.source, 66 | max_width: this.width 67 | }) 68 | } else this.type = 2 69 | } 70 | } 71 | 72 | __addEventListeners() { 73 | const func = this.type === 0 ? 'loadeddata' : 'load' 74 | 75 | if (this.type === 1) { 76 | this.superGif.load(() => { 77 | this.canvas = this.superGif.get_canvas() 78 | this.ctx = this.canvas.getContext('2d') 79 | 80 | if (this.onLoad) this.onLoad() 81 | 82 | if (this.autoPlay) { 83 | this.superGif.move_to(0) 84 | this._initialRender() 85 | } 86 | }) 87 | } 88 | 89 | this.source.addEventListener(func, () => { 90 | if (this.onLoad) this.onLoad() 91 | if (this.autoPlay) this._initialRender() 92 | }) 93 | } 94 | 95 | _fastMod(dividend, divisor) { 96 | if (dividend === 0) return false 97 | 98 | while (dividend >= divisor) { 99 | dividend -= divisor 100 | } 101 | 102 | return dividend === 0 103 | } 104 | 105 | _initialRender() { 106 | const { type, source } = this 107 | 108 | this.ratio = type === 0 ? source.videoHeight / source.videoWidth : source.height / source.width 109 | 110 | if (Number.isNaN(this.ratio)) return setTimeout(this._initialRender, 200) 111 | 112 | this.height = parseInt(this.width * this.ratio, 10) 113 | 114 | if (type === 1 || type === 0) { 115 | this.setTimeout = setTimeout(this._renderFrame.bind(this, 0), 1000 / this.fps) 116 | } 117 | } 118 | 119 | _getAsciiFromLatestFrame() { 120 | const { imageData, width, _fastMod } = this 121 | let buf32 = new Uint32Array(imageData.data.buffer) 122 | 123 | return buf32.reduce((prev, pixel, i) => { 124 | let maxBrightness = [pixel >> 16, pixel >> 8, pixel].reduce((prev, mask) => { 125 | return Math.max(prev, mask & 0xff) 126 | }, 0) 127 | 128 | if (_fastMod(i, width)) { 129 | return prev + this.chars[maxBrightness] + '\n' 130 | } else { 131 | return prev + this.chars[maxBrightness] 132 | } 133 | }, '') 134 | } 135 | 136 | _renderFrame(frameOffset) { 137 | const { ctx, destination, width, height, _getAsciiFromLatestFrame } = this 138 | 139 | this.superGif.move_to(frameOffset++) 140 | 141 | if (this.type !== 1) { 142 | ctx.drawImage(this.source, 0, 0, width, height) 143 | } 144 | 145 | this.imageData = ctx.getImageData(0, 0, width, height) 146 | destination.innerHTML = _getAsciiFromLatestFrame() 147 | 148 | if (this.type === 0 || this.type === 1) { 149 | this.setTimeout = setTimeout(this._renderFrame.bind(this, frameOffset), 1000 / this.fps) 150 | } 151 | } 152 | 153 | // API 154 | play() { 155 | if (!this.isPlaying) this._initialRender() 156 | } 157 | 158 | pause() { 159 | if (this.isPlaying) clearInterval(this.setTimeout) 160 | } 161 | } 162 | -------------------------------------------------------------------------------- /src/modules/ConsoleOutput.js: -------------------------------------------------------------------------------- 1 | export default ` 2 | &fsociety_12 @ E_Corp_Data-217 in ~/& 3 | &$ &???ssh 213.29.03.173 4 | &username: &?wellick?? 5 | &password: &??*******************? 6 | &&.?..???....?.?.. 7 | &done&! 8 | &wellick at 213.29.03.173 in /& 9 | &$ &mkdir fsociety; cd fsociety 10 | &wellick at 213.29.03.173 in /fsociety:& 11 | &$ &git clone https://github.com/reimertz/elliot_on_g0d 12 | &Cloning into elliot_on_g0d&.?..?.?&done!& 13 | &$ &cd elliot_on_g0d; npm install??? 14 | & 15 | > fsevents@1.0.14 install /Users/reimertz/git/elliot_on_g0d/node_modules/fsevents 16 | > node-pre-gyp install --fallback-to-build 17 | 18 | [fsevents] Success: "/Users/reimertz/git/elliot_on_g0d/node_modules/fsevents/lib/binding/Release/node-v48-darwin-x64/fse.node" is installed via remote 19 | elliot_on_g0d@1.33.7 /Users/reimertz/git/elliot_on_g0d 20 | ├─┬ autoprefixer@6.4.0 21 | │ ├── browserslist@1.3.5 22 | │ ├── caniuse-db@1.0.30000517 23 | │ ├── normalize-range@0.1.2 24 | │ ├── num2fraction@1.2.2 25 | │ ├─┬ postcss@5.1.1 26 | │ │ └── js-base64@2.1.9 27 | │ └── postcss-value-parser@3.3.0 28 | ├─┬ babel-core@6.13.2 29 | │ ├─┬ babel-code-frame@6.11.0 30 | │ │ ├─┬ chalk@1.1.3 31 | │ │ │ ├── ansi-styles@2.2.1 32 | │ │ │ ├── escape-string-regexp@1.0.5 33 | │ │ │ ├── has-ansi@2.0.0 34 | │ │ │ └── supports-color@2.0.0 35 | │ │ ├── esutils@2.0.2 36 | │ │ └── js-tokens@2.0.0 37 | │ ├─┬ babel-generator@6.11.4 38 | │ │ └─┬ detect-indent@3.0.1 39 | │ │ ├── get-stdin@4.0.1 40 | │ │ ├── minimist@1.2.0 41 | │ │ └─┬ repeating@1.1.3 42 | │ │ └─┬ is-finite@1.0.1 43 | │ │ └── number-is-nan@1.0.0 44 | │ ├── babel-helpers@6.8.0 45 | │ ├── babel-messages@6.8.0 46 | │ ├─┬ babel-register@6.11.6 47 | │ │ ├── core-js@2.4.1 48 | │ │ ├─┬ home-or-tmp@1.0.0 49 | │ │ │ ├── os-tmpdir@1.0.1 50 | │ │ │ └── user-home@1.1.1 51 | │ │ └─┬ source-map-support@0.2.10 52 | │ │ └── source-map@0.1.32 53 | │ ├─┬ babel-runtime@6.11.6 54 | │ │ └── regenerator-runtime@0.9.5 55 | │ ├── babel-template@6.9.0 56 | │ ├─┬ babel-traverse@6.13.0 57 | │ │ ├── globals@8.18.0 58 | │ │ └─┬ invariant@2.2.1 59 | │ │ └─┬ loose-envify@1.2.0 60 | │ │ └── js-tokens@1.0.3 61 | │ ├─┬ babel-types@6.13.0 62 | │ │ └── to-fast-properties@1.0.2 63 | │ ├── babylon@6.8.4 64 | │ ├── convert-source-map@1.3.0 65 | │ ├─┬ debug@2.2.0 66 | │ │ └── ms@0.7.1 67 | │ ├── json5@0.4.0 68 | │ ├── lodash@4.14.1 69 | │ ├─┬ minimatch@3.0.2 70 | │ │ └─┬ brace-expansion@1.1.6 71 | │ │ ├── balanced-match@0.4.2 72 | │ │ └── concat-map@0.0.1 73 | │ ├── path-exists@1.0.0 74 | │ ├── path-is-absolute@1.0.0 75 | │ ├── private@0.1.6 76 | │ ├── shebang-regex@1.0.0 77 | │ ├── slash@1.0.0 78 | │ └── source-map@0.5.6 79 | ├─┬ babel-loader@6.2.4 80 | │ ├─┬ loader-utils@0.2.15 81 | │ │ ├── big.js@3.1.3 82 | │ │ ├── emojis-list@2.0.1 83 | │ │ └── json5@0.5.0 84 | │ ├─┬ mkdirp@0.5.1 85 | │ │ └── minimist@0.0.8 86 | │ └── object-assign@4.1.0 87 | ├─┬ babel-preset-es2015@6.13.2 88 | │ ├── babel-plugin-check-es2015-constants@6.8.0 89 | │ ├── babel-plugin-transform-es2015-arrow-functions@6.8.0 90 | │ ├── babel-plugin-transform-es2015-block-scoped-functions@6.8.0 91 | │ ├── babel-plugin-transform-es2015-block-scoping@6.10.1 92 | │ ├─┬ babel-plugin-transform-es2015-classes@6.9.0 93 | │ │ ├── babel-helper-define-map@6.9.0 94 | │ │ ├── babel-helper-function-name@6.8.0 95 | │ │ ├── babel-helper-optimise-call-expression@6.8.0 96 | │ │ └── babel-helper-replace-supers@6.8.0 97 | │ ├── babel-plugin-transform-es2015-computed-properties@6.8.0 98 | │ ├── babel-plugin-transform-es2015-destructuring@6.9.0 99 | │ ├── babel-plugin-transform-es2015-duplicate-keys@6.8.0 100 | │ ├── babel-plugin-transform-es2015-for-of@6.8.0 101 | │ ├── babel-plugin-transform-es2015-function-name@6.9.0 102 | │ ├── babel-plugin-transform-es2015-literals@6.8.0 103 | │ ├── babel-plugin-transform-es2015-modules-amd@6.8.0 104 | │ ├─┬ babel-plugin-transform-es2015-modules-commonjs@6.11.5 105 | │ │ └── babel-plugin-transform-strict-mode@6.11.3 106 | │ ├─┬ babel-plugin-transform-es2015-modules-systemjs@6.12.0 107 | │ │ └── babel-helper-hoist-variables@6.8.0 108 | │ ├── babel-plugin-transform-es2015-modules-umd@6.12.0 109 | │ ├── babel-plugin-transform-es2015-object-super@6.8.0 110 | │ ├─┬ babel-plugin-transform-es2015-parameters@6.11.4 111 | │ │ ├── babel-helper-call-delegate@6.8.0 112 | │ │ └── babel-helper-get-function-arity@6.8.0 113 | │ ├── babel-plugin-transform-es2015-shorthand-properties@6.8.0 114 | │ ├── babel-plugin-transform-es2015-spread@6.8.0 115 | │ ├─┬ babel-plugin-transform-es2015-sticky-regex@6.8.0 116 | │ │ └── babel-helper-regex@6.9.0 117 | │ ├── babel-plugin-transform-es2015-template-literals@6.8.0 118 | │ ├── babel-plugin-transform-es2015-typeof-symbol@6.8.0 119 | │ ├─┬ babel-plugin-transform-es2015-unicode-regex@6.11.0 120 | │ │ └─┬ regexpu-core@2.0.0 121 | │ │ ├── regenerate@1.3.1 122 | │ │ ├── regjsgen@0.2.0 123 | │ │ └─┬ regjsparser@0.1.5 124 | │ │ └── jsesc@0.5.0 125 | │ └─┬ babel-plugin-transform-regenerator@6.11.4 126 | │ └── babel-plugin-syntax-async-functions@6.13.0 127 | ├─┬ css-loader@0.23.1 128 | │ ├─┬ css-selector-tokenizer@0.5.4 129 | │ │ ├── cssesc@0.1.0 130 | │ │ └── fastparse@1.1.1 131 | │ ├─┬ cssnano@3.7.3 132 | │ │ ├── decamelize@1.2.0 133 | │ │ ├── defined@1.0.0 134 | │ │ ├── indexes-of@1.0.1 135 | │ │ ├─┬ postcss-calc@5.3.0 136 | │ │ │ ├── postcss-message-helpers@2.0.0 137 | │ │ │ └─┬ reduce-css-calc@1.2.4 138 | │ │ │ ├── balanced-match@0.1.0 139 | │ │ │ └─┬ reduce-function-call@1.0.1 140 | │ │ │ └── balanced-match@0.1.0 141 | │ │ ├─┬ postcss-colormin@2.2.0 142 | │ │ │ └─┬ colormin@1.1.1 143 | │ │ │ ├─┬ color@0.11.3 144 | │ │ │ │ ├── color-convert@1.3.1 145 | │ │ │ │ └─┬ color-string@0.3.0 146 | │ │ │ │ └── color-name@1.1.1 147 | │ │ │ └── css-color-names@0.0.4 148 | │ │ ├── postcss-convert-values@2.4.0 149 | │ │ ├── postcss-discard-comments@2.0.4 150 | │ │ ├── postcss-discard-duplicates@2.0.1 151 | │ │ ├── postcss-discard-empty@2.1.0 152 | │ │ ├── postcss-discard-overridden@0.1.1 153 | │ │ ├─┬ postcss-discard-unused@2.2.1 154 | │ │ │ ├── flatten@1.0.2 155 | │ │ │ └── uniqs@2.0.0 156 | │ │ ├─┬ postcss-filter-plugins@2.0.1 157 | │ │ │ └─┬ uniqid@3.1.0 158 | │ │ │ └── macaddress@0.2.8 159 | │ │ ├─┬ postcss-merge-idents@2.1.6 160 | │ │ │ └── has-own@1.0.0 161 | │ │ ├── postcss-merge-longhand@2.0.1 162 | │ │ ├─┬ postcss-merge-rules@2.0.10 163 | │ │ │ └── vendors@1.0.0 164 | │ │ ├── postcss-minify-font-values@1.0.5 165 | │ │ ├── postcss-minify-gradients@1.0.3 166 | │ │ ├─┬ postcss-minify-params@1.0.4 167 | │ │ │ └── alphanum-sort@1.0.2 168 | │ │ ├─┬ postcss-minify-selectors@2.0.5 169 | │ │ │ └─┬ postcss-selector-parser@2.1.1 170 | │ │ │ └── uniq@1.0.1 171 | │ │ ├── postcss-normalize-charset@1.1.0 172 | │ │ ├─┬ postcss-normalize-url@3.0.7 173 | │ │ │ ├── is-absolute-url@2.0.0 174 | │ │ │ └─┬ normalize-url@1.6.0 175 | │ │ │ ├── prepend-http@1.0.4 176 | │ │ │ ├─┬ query-string@4.2.2 177 | │ │ │ │ └── strict-uri-encode@1.1.0 178 | │ │ │ └─┬ sort-keys@1.1.2 179 | │ │ │ └── is-plain-obj@1.1.0 180 | │ │ ├── postcss-ordered-values@2.2.1 181 | │ │ ├── postcss-reduce-idents@2.3.0 182 | │ │ ├── postcss-reduce-initial@1.0.0 183 | │ │ ├── postcss-reduce-transforms@1.0.3 184 | │ │ ├─┬ postcss-svgo@2.1.4 185 | │ │ │ ├─┬ is-svg@2.0.1 186 | │ │ │ │ └── html-comment-regex@1.1.1 187 | │ │ │ └─┬ svgo@0.6.6 188 | │ │ │ ├─┬ coa@1.0.1 189 | │ │ │ │ └── q@1.4.1 190 | │ │ │ ├── colors@1.1.2 191 | │ │ │ ├─┬ csso@2.0.0 192 | │ │ │ │ └── clap@1.1.1 193 | │ │ │ ├─┬ js-yaml@3.6.1 194 | │ │ │ │ ├─┬ argparse@1.0.7 195 | │ │ │ │ │ └── sprintf-js@1.0.3 196 | │ │ │ │ └── esprima@2.7.2 197 | │ │ │ ├── sax@1.2.1 198 | │ │ │ └── whet.extend@0.9.9 199 | │ │ ├── postcss-unique-selectors@2.0.2 200 | │ │ └── postcss-zindex@2.1.1 201 | │ ├─┬ lodash.camelcase@3.0.1 202 | │ │ └─┬ lodash._createcompounder@3.0.0 203 | │ │ ├─┬ lodash.deburr@3.2.0 204 | │ │ │ └── lodash._root@3.0.1 205 | │ │ └── lodash.words@3.2.0 206 | │ ├── postcss-modules-extract-imports@1.0.1 207 | │ ├─┬ postcss-modules-local-by-default@1.1.1 208 | │ │ └─┬ css-selector-tokenizer@0.6.0 209 | │ │ └── regexpu-core@1.0.0 210 | │ ├─┬ postcss-modules-scope@1.0.2 211 | │ │ └─┬ css-selector-tokenizer@0.6.0 212 | │ │ └── regexpu-core@1.0.0 213 | │ ├─┬ postcss-modules-values@1.1.3 214 | │ │ └── icss-replace-symbols@1.0.2 215 | │ └── source-list-map@0.1.6 216 | ├─┬ extract-text-webpack-plugin@1.0.1 217 | │ ├── async@1.5.2 218 | │ └── webpack-sources@0.1.2 219 | ├─┬ html-webpack-plugin@2.22.0 220 | │ ├── bluebird@3.4.1 221 | │ ├─┬ html-minifier@2.1.7 222 | │ │ ├─┬ change-case@3.0.0 223 | │ │ │ ├── camel-case@3.0.0 224 | │ │ │ ├── constant-case@2.0.0 225 | │ │ │ ├── dot-case@2.1.0 226 | │ │ │ ├── header-case@1.0.0 227 | │ │ │ ├── is-lower-case@1.1.3 228 | │ │ │ ├── is-upper-case@1.1.2 229 | │ │ │ ├── lower-case@1.1.3 230 | │ │ │ ├── lower-case-first@1.0.2 231 | │ │ │ ├── no-case@2.3.0 232 | │ │ │ ├── param-case@2.1.0 233 | │ │ │ ├── pascal-case@2.0.0 234 | │ │ │ ├── path-case@2.1.0 235 | │ │ │ ├── sentence-case@2.1.0 236 | │ │ │ ├── snake-case@2.1.0 237 | │ │ │ ├── swap-case@1.1.2 238 | │ │ │ ├── title-case@2.1.0 239 | │ │ │ ├── upper-case@1.1.3 240 | │ │ │ └── upper-case-first@1.1.2 241 | │ │ ├─┬ clean-css@3.4.19 242 | │ │ │ ├── commander@2.8.1 243 | │ │ │ └── source-map@0.4.4 244 | │ │ ├─┬ commander@2.9.0 245 | │ │ │ └── graceful-readlink@1.0.1 246 | │ │ ├── he@1.1.0 247 | │ │ ├─┬ ncname@1.0.0 248 | │ │ │ └── xml-char-classes@1.0.0 249 | │ │ └── relateurl@0.2.7 250 | │ ├─┬ pretty-error@2.0.0 251 | │ │ ├─┬ renderkid@2.0.0 252 | │ │ │ ├─┬ css-select@1.2.0 253 | │ │ │ │ ├── boolbase@1.0.0 254 | │ │ │ │ ├── css-what@2.1.0 255 | │ │ │ │ ├─┬ domutils@1.5.1 256 | │ │ │ │ │ └─┬ dom-serializer@0.1.0 257 | │ │ │ │ │ ├── domelementtype@1.1.3 258 | │ │ │ │ │ └── entities@1.1.1 259 | │ │ │ │ └── nth-check@1.0.1 260 | │ │ │ ├─┬ dom-converter@0.1.4 261 | │ │ │ │ └── utila@0.3.3 262 | │ │ │ ├─┬ htmlparser2@3.3.0 263 | │ │ │ │ ├── domelementtype@1.3.0 264 | │ │ │ │ ├── domhandler@2.1.0 265 | │ │ │ │ └── domutils@1.1.6 266 | │ │ │ └── utila@0.3.3 267 | │ │ └── utila@0.4.0 268 | │ └── toposort@1.0.0 269 | ├── UNMET PEER DEPENDENCY node-sass@^3.4.2 270 | ├── postcss-loader@0.9.1 271 | ├── raw-loader@0.5.1 272 | ├── sass-loader@4.0.0 273 | ├─┬ webpack@1.13.1 274 | │ ├── acorn@3.3.0 275 | │ ├── clone@1.0.2 276 | │ ├─┬ enhanced-resolve@0.9.1 277 | │ │ ├── graceful-fs@4.1.5 278 | │ │ └── memory-fs@0.2.0 279 | │ ├── interpret@0.6.6 280 | │ ├─┬ memory-fs@0.3.0 281 | │ │ ├─┬ errno@0.1.4 282 | │ │ │ └── prr@0.0.0 283 | │ │ └─┬ readable-stream@2.1.4 284 | │ │ ├── buffer-shims@1.0.0 285 | │ │ ├── core-util-is@1.0.2 286 | │ │ ├── isarray@1.0.0 287 | │ │ ├── process-nextick-args@1.0.7 288 | │ │ └── util-deprecate@1.0.2 289 | │ ├─┬ node-libs-browser@0.5.3 290 | │ │ ├── assert@1.4.1 291 | │ │ ├─┬ browserify-zlib@0.1.4 292 | │ │ │ └── pako@0.2.9 293 | │ │ ├─┬ buffer@3.6.0 294 | │ │ │ ├── base64-js@0.0.8 295 | │ │ │ ├── ieee754@1.1.6 296 | │ │ │ └── isarray@1.0.0 297 | │ │ ├─┬ console-browserify@1.1.0 298 | │ │ │ └── date-now@0.1.4 299 | │ │ ├── constants-browserify@0.0.1 300 | │ │ ├─┬ crypto-browserify@3.2.8 301 | │ │ │ ├── pbkdf2-compat@2.0.1 302 | │ │ │ ├── ripemd160@0.2.0 303 | │ │ │ └── sha.js@2.2.6 304 | │ │ ├── domain-browser@1.1.7 305 | │ │ ├── events@1.1.1 306 | │ │ ├─┬ http-browserify@1.7.0 307 | │ │ │ └── Base64@0.2.1 308 | │ │ ├── https-browserify@0.0.0 309 | │ │ ├── os-browserify@0.1.2 310 | │ │ ├── path-browserify@0.0.0 311 | │ │ ├── process@0.11.7 312 | │ │ ├── punycode@1.4.1 313 | │ │ ├── querystring-es3@0.2.1 314 | │ │ ├─┬ readable-stream@1.1.14 315 | │ │ │ └── isarray@0.0.1 316 | │ │ ├─┬ stream-browserify@1.0.0 317 | │ │ │ └── readable-stream@1.0.34 318 | │ │ ├── string_decoder@0.10.31 319 | │ │ ├── timers-browserify@1.4.2 320 | │ │ ├── tty-browserify@0.0.0 321 | │ │ ├─┬ url@0.10.3 322 | │ │ │ ├── punycode@1.3.2 323 | │ │ │ └── querystring@0.2.0 324 | │ │ ├── util@0.10.3 325 | │ │ └─┬ vm-browserify@0.0.4 326 | │ │ └── indexof@0.0.1 327 | │ ├─┬ optimist@0.6.1 328 | │ │ ├── minimist@0.0.10 329 | │ │ └── wordwrap@0.0.2 330 | │ ├─┬ supports-color@3.1.2 331 | │ │ └── has-flag@1.0.0 332 | │ ├── tapable@0.1.10 333 | │ ├─┬ uglify-js@2.6.4 334 | │ │ ├── async@0.2.10 335 | │ │ ├── uglify-to-browserify@1.0.2 336 | │ │ └─┬ yargs@3.10.0 337 | │ │ ├── camelcase@1.2.1 338 | │ │ ├─┬ cliui@2.1.0 339 | │ │ │ ├─┬ center-align@0.1.3 340 | │ │ │ │ ├─┬ align-text@0.1.4 341 | │ │ │ │ │ ├── longest@1.0.1 342 | │ │ │ │ │ └── repeat-string@1.5.4 343 | │ │ │ │ └── lazy-cache@1.0.4 344 | │ │ │ └── right-align@0.1.3 345 | │ │ └── window-size@0.1.0 346 | │ ├─┬ watchpack@0.2.9 347 | │ │ ├── async@0.9.2 348 | │ │ └─┬ chokidar@1.6.0 349 | │ │ ├─┬ anymatch@1.3.0 350 | │ │ │ ├── arrify@1.0.1 351 | │ │ │ └─┬ micromatch@2.3.11 352 | │ │ │ ├─┬ arr-diff@2.0.0 353 | │ │ │ │ └── arr-flatten@1.0.1 354 | │ │ │ ├── array-unique@0.2.1 355 | │ │ │ ├─┬ braces@1.8.5 356 | │ │ │ │ ├─┬ expand-range@1.8.2 357 | │ │ │ │ │ └─┬ fill-range@2.2.3 358 | │ │ │ │ │ ├── is-number@2.1.0 359 | │ │ │ │ │ ├─┬ isobject@2.1.0 360 | │ │ │ │ │ │ └── isarray@1.0.0 361 | │ │ │ │ │ └── randomatic@1.1.5 362 | │ │ │ │ ├── preserve@0.2.0 363 | │ │ │ │ └── repeat-element@1.1.2 364 | │ │ │ ├─┬ expand-brackets@0.1.5 365 | │ │ │ │ └── is-posix-bracket@0.1.1 366 | │ │ │ ├── extglob@0.3.2 367 | │ │ │ ├── filename-regex@2.0.0 368 | │ │ │ ├─┬ kind-of@3.0.4 369 | │ │ │ │ └── is-buffer@1.1.4 370 | │ │ │ ├── normalize-path@2.0.1 371 | │ │ │ ├─┬ object.omit@2.0.0 372 | │ │ │ │ ├─┬ for-own@0.1.4 373 | │ │ │ │ │ └── for-in@0.1.5 374 | │ │ │ │ └── is-extendable@0.1.1 375 | │ │ │ ├─┬ parse-glob@3.0.4 376 | │ │ │ │ ├── glob-base@0.3.0 377 | │ │ │ │ └── is-dotfile@1.0.2 378 | │ │ │ └─┬ regex-cache@0.4.3 379 | │ │ │ ├── is-equal-shallow@0.1.3 380 | │ │ │ └── is-primitive@2.0.0 381 | │ │ ├── async-each@1.0.0 382 | │ │ ├─┬ fsevents@1.0.14 383 | │ │ │ ├── nan@2.4.0 384 | │ │ │ └─┬ node-pre-gyp@0.6.29 385 | │ │ │ ├─┬ mkdirp@0.5.1 386 | │ │ │ │ └── minimist@0.0.8 387 | │ │ │ ├─┬ nopt@3.0.6 388 | │ │ │ │ └── abbrev@1.0.9 389 | │ │ │ ├─┬ npmlog@3.1.2 390 | │ │ │ │ ├─┬ are-we-there-yet@1.1.2 391 | │ │ │ │ │ └── delegates@1.0.0 392 | │ │ │ │ ├── console-control-strings@1.1.0 393 | │ │ │ │ ├─┬ gauge@2.6.0 394 | │ │ │ │ │ ├── aproba@1.0.4 395 | │ │ │ │ │ ├── has-color@0.1.7 396 | │ │ │ │ │ ├── has-unicode@2.0.1 397 | │ │ │ │ │ ├── object-assign@4.1.0 398 | │ │ │ │ │ ├── signal-exit@3.0.0 399 | │ │ │ │ │ ├─┬ string-width@1.0.1 400 | │ │ │ │ │ │ ├─┬ code-point-at@1.0.0 401 | │ │ │ │ │ │ │ └── number-is-nan@1.0.0 402 | │ │ │ │ │ │ └── is-fullwidth-code-point@1.0.0 403 | │ │ │ │ │ ├─┬ strip-ansi@3.0.1 404 | │ │ │ │ │ │ └── ansi-regex@2.0.0 405 | │ │ │ │ │ └── wide-align@1.1.0 406 | │ │ │ │ └── set-blocking@2.0.0 407 | │ │ │ ├─┬ rc@1.1.6 408 | │ │ │ │ ├── deep-extend@0.4.1 409 | │ │ │ │ ├── ini@1.3.4 410 | │ │ │ │ ├── minimist@1.2.0 411 | │ │ │ │ └── strip-json-comments@1.0.4 412 | │ │ │ ├─┬ request@2.73.0 413 | │ │ │ │ ├── aws-sign2@0.6.0 414 | │ │ │ │ ├── aws4@1.4.1 415 | │ │ │ │ ├─┬ bl@1.1.2 416 | │ │ │ │ │ └── readable-stream@2.0.6 417 | │ │ │ │ ├── caseless@0.11.0 418 | │ │ │ │ ├─┬ combined-stream@1.0.5 419 | │ │ │ │ │ └── delayed-stream@1.0.0 420 | │ │ │ │ ├── extend@3.0.0 421 | │ │ │ │ ├── forever-agent@0.6.1 422 | │ │ │ │ ├─┬ form-data@1.0.0-rc4 423 | │ │ │ │ │ └── async@1.5.2 424 | │ │ │ │ ├─┬ har-validator@2.0.6 425 | │ │ │ │ │ ├─┬ chalk@1.1.3 426 | │ │ │ │ │ │ ├── ansi-styles@2.2.1 427 | │ │ │ │ │ │ ├── escape-string-regexp@1.0.5 428 | │ │ │ │ │ │ ├── has-ansi@2.0.0 429 | │ │ │ │ │ │ └── supports-color@2.0.0 430 | │ │ │ │ │ ├─┬ commander@2.9.0 431 | │ │ │ │ │ │ └── graceful-readlink@1.0.1 432 | │ │ │ │ │ ├─┬ is-my-json-valid@2.13.1 433 | │ │ │ │ │ │ ├── generate-function@2.0.0 434 | │ │ │ │ │ │ ├─┬ generate-object-property@1.2.0 435 | │ │ │ │ │ │ │ └── is-property@1.0.2 436 | │ │ │ │ │ │ ├── jsonpointer@2.0.0 437 | │ │ │ │ │ │ └── xtend@4.0.1 438 | │ │ │ │ │ └─┬ pinkie-promise@2.0.1 439 | │ │ │ │ │ └── pinkie@2.0.4 440 | │ │ │ │ ├─┬ hawk@3.1.3 441 | │ │ │ │ │ ├── boom@2.10.1 442 | │ │ │ │ │ ├── cryptiles@2.0.5 443 | │ │ │ │ │ ├── hoek@2.16.3 444 | │ │ │ │ │ └── sntp@1.0.9 445 | │ │ │ │ ├─┬ http-signature@1.1.1 446 | │ │ │ │ │ ├── assert-plus@0.2.0 447 | │ │ │ │ │ ├─┬ jsprim@1.3.0 448 | │ │ │ │ │ │ ├── extsprintf@1.0.2 449 | │ │ │ │ │ │ ├── json-schema@0.2.2 450 | │ │ │ │ │ │ └── verror@1.3.6 451 | │ │ │ │ │ └─┬ sshpk@1.8.3 452 | │ │ │ │ │ ├── asn1@0.2.3 453 | │ │ │ │ │ ├── assert-plus@1.0.0 454 | │ │ │ │ │ ├─┬ dashdash@1.14.0 455 | │ │ │ │ │ │ └── assert-plus@1.0.0 456 | │ │ │ │ │ ├── ecc-jsbn@0.1.1 457 | │ │ │ │ │ ├─┬ getpass@0.1.6 458 | │ │ │ │ │ │ └── assert-plus@1.0.0 459 | │ │ │ │ │ ├── jodid25519@1.0.2 460 | │ │ │ │ │ ├── jsbn@0.1.0 461 | │ │ │ │ │ └── tweetnacl@0.13.3 462 | │ │ │ │ ├── is-typedarray@1.0.0 463 | │ │ │ │ ├── isstream@0.1.2 464 | │ │ │ │ ├── json-stringify-safe@5.0.1 465 | │ │ │ │ ├─┬ mime-types@2.1.11 466 | │ │ │ │ │ └── mime-db@1.23.0 467 | │ │ │ │ ├── node-uuid@1.4.7 468 | │ │ │ │ ├── oauth-sign@0.8.2 469 | │ │ │ │ ├── qs@6.2.0 470 | │ │ │ │ ├── stringstream@0.0.5 471 | │ │ │ │ ├── tough-cookie@2.2.2 472 | │ │ │ │ └── tunnel-agent@0.4.3 473 | │ │ │ ├─┬ rimraf@2.5.3 474 | │ │ │ │ └─┬ glob@7.0.5 475 | │ │ │ │ ├── fs.realpath@1.0.0 476 | │ │ │ │ ├── inflight@1.0.5 477 | │ │ │ │ ├─┬ minimatch@3.0.2 478 | │ │ │ │ │ └─┬ brace-expansion@1.1.5 479 | │ │ │ │ │ ├── balanced-match@0.4.2 480 | │ │ │ │ │ └── concat-map@0.0.1 481 | │ │ │ │ └── path-is-absolute@1.0.0 482 | │ │ │ ├── semver@5.2.0 483 | │ │ │ ├─┬ tar@2.2.1 484 | │ │ │ │ ├── block-stream@0.0.9 485 | │ │ │ │ ├─┬ fstream@1.0.10 486 | │ │ │ │ │ └── graceful-fs@4.1.4 487 | │ │ │ │ └── inherits@2.0.1 488 | │ │ │ └─┬ tar-pack@3.1.4 489 | │ │ │ ├─┬ debug@2.2.0 490 | │ │ │ │ └── ms@0.7.1 491 | │ │ │ ├── fstream-ignore@1.0.5 492 | │ │ │ ├─┬ once@1.3.3 493 | │ │ │ │ └── wrappy@1.0.2 494 | │ │ │ ├─┬ readable-stream@2.1.4 495 | │ │ │ │ ├── buffer-shims@1.0.0 496 | │ │ │ │ ├── core-util-is@1.0.2 497 | │ │ │ │ ├── isarray@1.0.0 498 | │ │ │ │ ├── process-nextick-args@1.0.7 499 | │ │ │ │ ├── string_decoder@0.10.31 500 | │ │ │ │ └── util-deprecate@1.0.2 501 | │ │ │ └── uid-number@0.0.6 502 | │ │ ├── glob-parent@2.0.0 503 | │ │ ├─┬ is-binary-path@1.0.1 504 | │ │ │ └── binary-extensions@1.5.0 505 | │ │ ├─┬ is-glob@2.0.1 506 | │ │ │ └── is-extglob@1.0.0 507 | │ │ └─┬ readdirp@2.1.0 508 | │ │ ├─┬ readable-stream@2.1.4 509 | │ │ │ └── isarray@1.0.0 510 | │ │ └── set-immediate-shim@1.0.1 511 | │ └─┬ webpack-core@0.6.8 512 | │ └─┬ source-map@0.4.4 513 | │ └── amdefine@1.0.0 514 | └─┬ webpack-dev-server@1.14.1 515 | ├─┬ compression@1.6.2 516 | │ ├─┬ accepts@1.3.3 517 | │ │ └── negotiator@0.6.1 518 | │ ├── bytes@2.3.0 519 | │ ├─┬ compressible@2.0.8 520 | │ │ └── mime-db@1.23.0 521 | │ ├── on-headers@1.0.1 522 | │ └── vary@1.1.0 523 | ├── connect-history-api-fallback@1.1.0 524 | ├─┬ express@4.14.0 525 | │ ├── array-flatten@1.1.1 526 | │ ├── content-disposition@0.5.1 527 | │ ├── content-type@1.0.2 528 | │ ├── cookie@0.3.1 529 | │ ├── cookie-signature@1.0.6 530 | │ ├── depd@1.1.0 531 | │ ├── encodeurl@1.0.1 532 | │ ├── escape-html@1.0.3 533 | │ ├── etag@1.7.0 534 | │ ├─┬ finalhandler@0.5.0 535 | │ │ ├── statuses@1.3.0 536 | │ │ └── unpipe@1.0.0 537 | │ ├── fresh@0.3.0 538 | │ ├── merge-descriptors@1.0.1 539 | │ ├── methods@1.1.2 540 | │ ├─┬ on-finished@2.3.0 541 | │ │ └── ee-first@1.1.1 542 | │ ├── parseurl@1.3.1 543 | │ ├── path-to-regexp@0.1.7 544 | │ ├─┬ proxy-addr@1.1.2 545 | │ │ ├── forwarded@0.1.0 546 | │ │ └── ipaddr.js@1.1.1 547 | │ ├── qs@6.2.0 548 | │ ├── range-parser@1.2.0 549 | │ ├─┬ send@0.14.1 550 | │ │ └── destroy@1.0.4 551 | │ ├── serve-static@1.11.1 552 | │ ├─┬ type-is@1.6.13 553 | │ │ └── media-typer@0.3.0 554 | │ └── utils-merge@1.0.0 555 | ├─┬ http-proxy@1.14.0 556 | │ ├── eventemitter3@1.2.0 557 | │ └── requires-port@1.0.0 558 | ├─┬ serve-index@1.8.0 559 | │ ├── batch@0.5.3 560 | │ ├─┬ http-errors@1.5.0 561 | │ │ └── setprototypeof@1.0.1 562 | │ └── mime-types@2.1.11 563 | ├─┬ sockjs@0.3.17 564 | │ ├─┬ faye-websocket@0.10.0 565 | │ │ └─┬ websocket-driver@0.6.5 566 | │ │ └── websocket-extensions@0.1.1 567 | │ └── uuid@2.0.2 568 | ├─┬ sockjs-client@1.1.1 569 | │ ├─┬ eventsource@0.1.6 570 | │ │ └─┬ original@1.0.0 571 | │ │ └── url-parse@1.0.5 572 | │ ├── faye-websocket@0.11.0 573 | │ ├── inherits@2.0.1 574 | │ ├── json3@3.3.2 575 | │ └─┬ url-parse@1.1.1 576 | │ └── querystringify@0.0.3 577 | ├── stream-cache@0.0.2 578 | ├─┬ strip-ansi@3.0.1 579 | │ └── ansi-regex@2.0.0 580 | └─┬ webpack-dev-middleware@1.6.1 581 | └── mime@1.3.4 582 | 583 | npm WARN sass-loader@4.0.0 requires a peer of node-sass@^3.4.2 but none was installed. 584 | npm WARN elliot_on_g0d@1.33.7 No repository field. 585 | & 586 | ????? 587 | &$ &npm run terminal 588 | &loading&.......! 589 | ` 590 | -------------------------------------------------------------------------------- /src/modules/SuperGif.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | /* 4 | SuperGif 5 | 6 | Example usage: 7 | 8 | 9 | 10 | 18 | 19 | Image tag attributes: 20 | 21 | rel:animated_src - If this url is specified, it's loaded into the player instead of src. 22 | This allows a preview frame to be shown until animated gif data is streamed into the canvas 23 | 24 | rel:auto_play - Defaults to 1 if not specified. If set to zero, a call to the play() method is needed 25 | 26 | Constructor options args 27 | 28 | gif Required. The DOM element of an img tag. 29 | loop_mode Optional. Setting this to false will force disable looping of the gif. 30 | auto_play Optional. Same as the rel:auto_play attribute above, this arg overrides the img tag info. 31 | max_width Optional. Scale images over max_width down to max_width. Helpful with mobile. 32 | on_end Optional. Add a callback for when the gif reaches the end of a single loop (one iteration). The first argument passed will be the gif HTMLElement. 33 | loop_delay Optional. The amount of time to pause (in ms) after each single loop (iteration). 34 | draw_while_loading Optional. Determines whether the gif will be drawn to the canvas whilst it is loaded. 35 | show_progress_bar Optional. Only applies when draw_while_loading is set to true. 36 | 37 | Instance methods 38 | 39 | // loading 40 | load( callback ) Loads the gif specified by the src or rel:animated_src sttributie of the img tag into a canvas element and then calls callback if one is passed 41 | load_url( src, callback ) Loads the gif file specified in the src argument into a canvas element and then calls callback if one is passed 42 | 43 | // play controls 44 | play - Start playing the gif 45 | pause - Stop playing the gif 46 | move_to(i) - Move to frame i of the gif 47 | move_relative(i) - Move i frames ahead (or behind if i < 0) 48 | 49 | // getters 50 | get_canvas The canvas element that the gif is playing in. Handy for assigning event handlers to. 51 | get_playing Whether or not the gif is currently playing 52 | get_loading Whether or not the gif has finished loading/parsing 53 | get_auto_play Whether or not the gif is set to play automatically 54 | get_length The number of frames in the gif 55 | get_current_frame The index of the currently displayed frame of the gif 56 | 57 | For additional customization (viewport inside iframe) these params may be passed: 58 | c_w, c_h - width and height of canvas 59 | vp_t, vp_l, vp_ w, vp_h - top, left, width and height of the viewport 60 | 61 | A bonus: few articles to understand what is going on 62 | http://enthusiasms.org/post/16976438906 63 | http://www.matthewflickinger.com/lab/whatsinagif/bits_and_bytes.asp 64 | http://humpy77.deviantart.com/journal/Frame-Delay-Times-for-Animated-GIFs-214150546 65 | 66 | */ 67 | ;(function(root, factory) { 68 | if (typeof define === 'function' && define.amd) { 69 | define([], factory) 70 | } else if (typeof exports === 'object') { 71 | module.exports = factory() 72 | } else { 73 | root.SuperGif = factory() 74 | } 75 | })(this, function() { 76 | // Generic functions 77 | var bitsToNum = function(ba) { 78 | return ba.reduce(function(s, n) { 79 | return s * 2 + n 80 | }, 0) 81 | } 82 | 83 | var byteToBitArr = function(bite) { 84 | var a = [] 85 | for (var i = 7; i >= 0; i--) { 86 | a.push(!!(bite & (1 << i))) 87 | } 88 | return a 89 | } 90 | 91 | // Stream 92 | /** 93 | * @constructor 94 | */ 95 | // Make compiler happy. 96 | var Stream = function(data) { 97 | this.data = data 98 | this.len = this.data.length 99 | this.pos = 0 100 | 101 | this.readByte = function() { 102 | if (this.pos >= this.data.length) { 103 | throw new Error('Attempted to read past end of stream.') 104 | } 105 | if (data instanceof Uint8Array) return data[this.pos++] 106 | else return data.charCodeAt(this.pos++) & 0xff 107 | } 108 | 109 | this.readBytes = function(n) { 110 | var bytes = [] 111 | for (var i = 0; i < n; i++) { 112 | bytes.push(this.readByte()) 113 | } 114 | return bytes 115 | } 116 | 117 | this.read = function(n) { 118 | var s = '' 119 | for (var i = 0; i < n; i++) { 120 | s += String.fromCharCode(this.readByte()) 121 | } 122 | return s 123 | } 124 | 125 | this.readUnsigned = function() { 126 | // Little-endian. 127 | var a = this.readBytes(2) 128 | return (a[1] << 8) + a[0] 129 | } 130 | } 131 | 132 | var lzwDecode = function(minCodeSize, data) { 133 | var pos = 0 // Maybe this streaming thing should be merged with the Stream? 134 | var readCode = function(size) { 135 | var code = 0 136 | for (var i = 0; i < size; i++) { 137 | if (data[pos >> 3] & (1 << (pos & 7))) { 138 | code |= 1 << i 139 | } 140 | pos++ 141 | } 142 | return code 143 | } 144 | 145 | var clearCode = 1 << minCodeSize 146 | var eoiCode = clearCode + 1 147 | 148 | var codeSize = minCodeSize + 1 149 | 150 | var outputBlockSize = 4096, 151 | bufferBlockSize = 4096 152 | 153 | var output = new Uint8Array(outputBlockSize), 154 | buffer = new Uint8Array(bufferBlockSize), 155 | dict = [] 156 | 157 | var bufferOffset = 0, 158 | outputOffset = 0 159 | 160 | var fill = function() { 161 | for (var i = 0; i < clearCode; i++) { 162 | dict[i] = new Uint8Array(1) 163 | dict[i][0] = i 164 | } 165 | dict[clearCode] = new Uint8Array(0) 166 | dict[eoiCode] = null 167 | } 168 | var clear = function() { 169 | var keep = clearCode + 2 170 | dict.splice(keep, dict.length - keep) 171 | codeSize = minCodeSize + 1 172 | bufferOffset = 0 173 | } 174 | 175 | // Block allocators, double block size each time 176 | var enlargeOutput = function() { 177 | var outputSize = output.length + outputBlockSize 178 | var newoutput = new Uint8Array(outputSize) 179 | newoutput.set(output) 180 | output = newoutput 181 | outputBlockSize = outputBlockSize << 1 182 | } 183 | var enlargeBuffer = function() { 184 | var bufferSize = buffer.length + bufferBlockSize 185 | var newbuffer = new Uint8Array(bufferSize) 186 | newbuffer.set(buffer) 187 | buffer = newbuffer 188 | bufferBlockSize = bufferBlockSize << 1 189 | } 190 | 191 | var pushCode = function(code, last) { 192 | var newlength = dict[last].byteLength + 1 193 | while (bufferOffset + newlength > buffer.length) enlargeBuffer() 194 | var newdict = buffer.subarray(bufferOffset, bufferOffset + newlength) 195 | newdict.set(dict[last]) 196 | newdict[newlength - 1] = dict[code][0] 197 | bufferOffset += newlength 198 | dict.push(newdict) 199 | } 200 | 201 | var code 202 | var last 203 | 204 | fill() 205 | 206 | while (true) { 207 | last = code 208 | code = readCode(codeSize) 209 | 210 | if (code === clearCode) { 211 | clear() 212 | continue 213 | } 214 | if (code === eoiCode) break 215 | 216 | if (code < dict.length) { 217 | if (last !== clearCode) { 218 | pushCode(code, last) 219 | } 220 | } else { 221 | if (code !== dict.length) throw new Error('Invalid LZW code.') 222 | pushCode(last, last) 223 | } 224 | 225 | var newsize = dict[code].length 226 | while (outputOffset + newsize > output.length) enlargeOutput() 227 | output.set(dict[code], outputOffset) 228 | outputOffset += newsize 229 | 230 | if (dict.length === 1 << codeSize && codeSize < 12) { 231 | // If we're at the last code and codeSize is 12, the next code will be a clearCode, and it'll be 12 bits long. 232 | codeSize++ 233 | } 234 | } 235 | 236 | // I don't know if this is technically an error, but some GIFs do it. 237 | //if (Math.ceil(pos / 8) !== data.length) throw new Error('Extraneous LZW bytes.'); 238 | return output.subarray(0, outputOffset) 239 | } 240 | 241 | // The actual parsing; returns an object with properties. 242 | var parseGIF = function(st, handler) { 243 | handler || (handler = {}) 244 | 245 | // LZW (GIF-specific) 246 | var parseCT = function(entries) { 247 | // Each entry is 3 bytes, for RGB. 248 | var ct = [] 249 | for (var i = 0; i < entries; i++) { 250 | ct.push(st.readBytes(3)) 251 | } 252 | return ct 253 | } 254 | 255 | var readSubBlocks = function() { 256 | var size, 257 | data, 258 | offset = 0 259 | var bufsize = 8192 260 | data = new Uint8Array(bufsize) 261 | 262 | var resizeBuffer = function() { 263 | var newdata = new Uint8Array(data.length + bufsize) 264 | newdata.set(data) 265 | data = newdata 266 | } 267 | 268 | do { 269 | size = st.readByte() 270 | 271 | // Increase buffer size if this would exceed our current size 272 | while (offset + size > data.length) resizeBuffer() 273 | data.set(st.readBytes(size), offset) 274 | offset += size 275 | } while (size !== 0) 276 | return data.subarray(0, offset) // truncate any excess buffer space 277 | } 278 | 279 | var parseHeader = function() { 280 | var hdr = {} 281 | hdr.sig = st.read(3) 282 | hdr.ver = st.read(3) 283 | if (hdr.sig !== 'GIF') throw new Error('Not a GIF file.') // XXX: This should probably be handled more nicely. 284 | hdr.width = st.readUnsigned() 285 | hdr.height = st.readUnsigned() 286 | 287 | var bits = byteToBitArr(st.readByte()) 288 | hdr.gctFlag = bits.shift() 289 | hdr.colorRes = bitsToNum(bits.splice(0, 3)) 290 | hdr.sorted = bits.shift() 291 | hdr.gctSize = bitsToNum(bits.splice(0, 3)) 292 | 293 | hdr.bgColor = st.readByte() 294 | hdr.pixelAspectRatio = st.readByte() // if not 0, aspectRatio = (pixelAspectRatio + 15) / 64 295 | if (hdr.gctFlag) { 296 | hdr.gct = parseCT(1 << (hdr.gctSize + 1)) 297 | } 298 | handler.hdr && handler.hdr(hdr) 299 | } 300 | 301 | var parseExt = function(block) { 302 | var parseGCExt = function(block) { 303 | var blockSize = st.readByte() // Always 4 304 | var bits = byteToBitArr(st.readByte()) 305 | block.reserved = bits.splice(0, 3) // Reserved; should be 000. 306 | block.disposalMethod = bitsToNum(bits.splice(0, 3)) 307 | block.userInput = bits.shift() 308 | block.transparencyGiven = bits.shift() 309 | 310 | block.delayTime = st.readUnsigned() 311 | 312 | block.transparencyIndex = st.readByte() 313 | 314 | block.terminator = st.readByte() 315 | 316 | handler.gce && handler.gce(block) 317 | } 318 | 319 | var parseComExt = function(block) { 320 | block.comment = readSubBlocks() 321 | handler.com && handler.com(block) 322 | } 323 | 324 | var parsePTExt = function(block) { 325 | // No one *ever* uses this. If you use it, deal with parsing it yourself. 326 | var blockSize = st.readByte() // Always 12 327 | block.ptHeader = st.readBytes(12) 328 | block.ptData = readSubBlocks() 329 | handler.pte && handler.pte(block) 330 | } 331 | 332 | var parseAppExt = function(block) { 333 | var parseNetscapeExt = function(block) { 334 | var blockSize = st.readByte() // Always 3 335 | block.unknown = st.readByte() // ??? Always 1? What is this? 336 | block.iterations = st.readUnsigned() 337 | block.terminator = st.readByte() 338 | handler.app && handler.app.NETSCAPE && handler.app.NETSCAPE(block) 339 | } 340 | 341 | var parseUnknownAppExt = function(block) { 342 | block.appData = readSubBlocks() 343 | // FIXME: This won't work if a handler wants to match on any identifier. 344 | handler.app && handler.app[block.identifier] && handler.app[block.identifier](block) 345 | } 346 | 347 | var blockSize = st.readByte() // Always 11 348 | block.identifier = st.read(8) 349 | block.authCode = st.read(3) 350 | switch (block.identifier) { 351 | case 'NETSCAPE': 352 | parseNetscapeExt(block) 353 | break 354 | default: 355 | parseUnknownAppExt(block) 356 | break 357 | } 358 | } 359 | 360 | var parseUnknownExt = function(block) { 361 | block.data = readSubBlocks() 362 | handler.unknown && handler.unknown(block) 363 | } 364 | 365 | block.label = st.readByte() 366 | switch (block.label) { 367 | case 0xf9: 368 | block.extType = 'gce' 369 | parseGCExt(block) 370 | break 371 | case 0xfe: 372 | block.extType = 'com' 373 | parseComExt(block) 374 | break 375 | case 0x01: 376 | block.extType = 'pte' 377 | parsePTExt(block) 378 | break 379 | case 0xff: 380 | block.extType = 'app' 381 | parseAppExt(block) 382 | break 383 | default: 384 | block.extType = 'unknown' 385 | parseUnknownExt(block) 386 | break 387 | } 388 | } 389 | 390 | var parseImg = function(img) { 391 | var deinterlace = function(pixels, width) { 392 | // Of course this defeats the purpose of interlacing. And it's *probably* 393 | // the least efficient way it's ever been implemented. But nevertheless... 394 | var newPixels = new Array(pixels.length) 395 | var rows = pixels.length / width 396 | var cpRow = function(toRow, fromRow) { 397 | var fromPixels = pixels.slice(fromRow * width, (fromRow + 1) * width) 398 | newPixels.splice.apply(newPixels, [toRow * width, width].concat(fromPixels)) 399 | } 400 | 401 | // See appendix E. 402 | var offsets = [0, 4, 2, 1] 403 | var steps = [8, 8, 4, 2] 404 | 405 | var fromRow = 0 406 | for (var pass = 0; pass < 4; pass++) { 407 | for (var toRow = offsets[pass]; toRow < rows; toRow += steps[pass]) { 408 | cpRow(toRow, fromRow) 409 | fromRow++ 410 | } 411 | } 412 | 413 | return newPixels 414 | } 415 | 416 | img.leftPos = st.readUnsigned() 417 | img.topPos = st.readUnsigned() 418 | img.width = st.readUnsigned() 419 | img.height = st.readUnsigned() 420 | 421 | var bits = byteToBitArr(st.readByte()) 422 | img.lctFlag = bits.shift() 423 | img.interlaced = bits.shift() 424 | img.sorted = bits.shift() 425 | img.reserved = bits.splice(0, 2) 426 | img.lctSize = bitsToNum(bits.splice(0, 3)) 427 | 428 | if (img.lctFlag) { 429 | img.lct = parseCT(1 << (img.lctSize + 1)) 430 | } 431 | 432 | img.lzwMinCodeSize = st.readByte() 433 | 434 | var lzwData = readSubBlocks() 435 | 436 | img.pixels = lzwDecode(img.lzwMinCodeSize, lzwData) 437 | 438 | if (img.interlaced) { 439 | // Move 440 | img.pixels = deinterlace(img.pixels, img.width) 441 | } 442 | 443 | handler.img && handler.img(img) 444 | } 445 | 446 | var parseBlock = function() { 447 | var block = {} 448 | block.sentinel = st.readByte() 449 | 450 | switch (String.fromCharCode(block.sentinel)) { // For ease of matching 451 | case '!': 452 | block.type = 'ext' 453 | parseExt(block) 454 | break 455 | case ',': 456 | block.type = 'img' 457 | parseImg(block) 458 | break 459 | case ';': 460 | block.type = 'eof' 461 | handler.eof && handler.eof(block) 462 | break 463 | default: 464 | throw new Error('Unknown block: 0x' + block.sentinel.toString(16)) // TODO: Pad this with a 0. 465 | } 466 | 467 | if (block.type !== 'eof') setTimeout(parseBlock, 0) 468 | } 469 | 470 | var parse = function() { 471 | parseHeader() 472 | setTimeout(parseBlock, 0) 473 | } 474 | 475 | parse() 476 | } 477 | 478 | var SuperGif = function(opts) { 479 | var options = { 480 | //viewport position 481 | vp_l: 0, 482 | vp_t: 0, 483 | vp_w: null, 484 | vp_h: null, 485 | //canvas sizes 486 | c_w: null, 487 | c_h: null 488 | } 489 | for (var i in opts) { 490 | options[i] = opts[i] 491 | } 492 | if (options.vp_w && options.vp_h) options.is_vp = true 493 | 494 | var stream 495 | var hdr 496 | 497 | var loadError = null 498 | var loading = false 499 | 500 | var transparency = null 501 | var delay = null 502 | var disposalMethod = null 503 | var disposalRestoreFromIdx = null 504 | var lastDisposalMethod = null 505 | var frame = null 506 | var lastImg = null 507 | 508 | var playing = true 509 | var forward = true 510 | 511 | var ctx_scaled = false 512 | 513 | var frames = [] 514 | var frameOffsets = [] // elements have .x and .y properties 515 | 516 | var gif = options.gif 517 | if (typeof options.auto_play == 'undefined') 518 | options.auto_play = 519 | !gif.getAttribute('rel:auto_play') || gif.getAttribute('rel:auto_play') == '1' 520 | 521 | var onEndListener = options.hasOwnProperty('on_end') ? options.on_end : null 522 | var loopDelay = options.hasOwnProperty('loop_delay') ? options.loop_delay : 0 523 | var overrideLoopMode = options.hasOwnProperty('loop_mode') ? options.loop_mode : 'auto' 524 | var drawWhileLoading = options.hasOwnProperty('draw_while_loading') 525 | ? options.draw_while_loading 526 | : true 527 | var showProgressBar = drawWhileLoading 528 | ? options.hasOwnProperty('show_progress_bar') ? options.show_progress_bar : true 529 | : false 530 | var progressBarHeight = options.hasOwnProperty('progressbar_height') 531 | ? options.progressbar_height 532 | : 25 533 | var progressBarBackgroundColor = options.hasOwnProperty('progressbar_background_color') 534 | ? options.progressbar_background_color 535 | : 'rgba(255,255,255,0.4)' 536 | var progressBarForegroundColor = options.hasOwnProperty('progressbar_foreground_color') 537 | ? options.progressbar_foreground_color 538 | : 'rgba(255,0,22,.8)' 539 | 540 | var clear = function() { 541 | transparency = null 542 | delay = null 543 | lastDisposalMethod = disposalMethod 544 | disposalMethod = null 545 | frame = null 546 | } 547 | 548 | // XXX: There's probably a better way to handle catching exceptions when 549 | // callbacks are involved. 550 | var doParse = function() { 551 | try { 552 | parseGIF(stream, handler) 553 | } catch (err) { 554 | doLoadError('parse') 555 | } 556 | } 557 | 558 | var doText = function(text) { 559 | toolbar.innerHTML = text // innerText? Escaping? Whatever. 560 | toolbar.style.visibility = 'visible' 561 | } 562 | 563 | var setSizes = function(w, h) { 564 | canvas.width = w * get_canvas_scale() 565 | canvas.height = h * get_canvas_scale() 566 | toolbar.style.minWidth = w * get_canvas_scale() + 'px' 567 | 568 | tmpCanvas.width = w 569 | tmpCanvas.height = h 570 | tmpCanvas.style.width = w + 'px' 571 | tmpCanvas.style.height = h + 'px' 572 | tmpCanvas.getContext('2d').setTransform(1, 0, 0, 1, 0, 0) 573 | } 574 | 575 | var setFrameOffset = function(frame, offset) { 576 | if (!frameOffsets[frame]) { 577 | frameOffsets[frame] = offset 578 | return 579 | } 580 | if (typeof offset.x !== 'undefined') { 581 | frameOffsets[frame].x = offset.x 582 | } 583 | if (typeof offset.y !== 'undefined') { 584 | frameOffsets[frame].y = offset.y 585 | } 586 | } 587 | 588 | var doShowProgress = function(pos, length, draw) { 589 | if (draw && showProgressBar) { 590 | var height = progressBarHeight 591 | var left, mid, top, width 592 | if (options.is_vp) { 593 | if (!ctx_scaled) { 594 | top = options.vp_t + options.vp_h - height 595 | height = height 596 | left = options.vp_l 597 | mid = left + pos / length * options.vp_w 598 | width = canvas.width 599 | } else { 600 | top = (options.vp_t + options.vp_h - height) / get_canvas_scale() 601 | height = height / get_canvas_scale() 602 | left = options.vp_l / get_canvas_scale() 603 | mid = left + pos / length * (options.vp_w / get_canvas_scale()) 604 | width = canvas.width / get_canvas_scale() 605 | } 606 | //some debugging, draw rect around viewport 607 | if (false) { 608 | if (!ctx_scaled) { 609 | var l = options.vp_l, 610 | t = options.vp_t 611 | var w = options.vp_w, 612 | h = options.vp_h 613 | } else { 614 | var l = options.vp_l / get_canvas_scale(), 615 | t = options.vp_t / get_canvas_scale() 616 | var w = options.vp_w / get_canvas_scale(), 617 | h = options.vp_h / get_canvas_scale() 618 | } 619 | ctx.rect(l, t, w, h) 620 | ctx.stroke() 621 | } 622 | } else { 623 | top = (canvas.height - height) / (ctx_scaled ? get_canvas_scale() : 1) 624 | mid = pos / length * canvas.width / (ctx_scaled ? get_canvas_scale() : 1) 625 | width = canvas.width / (ctx_scaled ? get_canvas_scale() : 1) 626 | height /= ctx_scaled ? get_canvas_scale() : 1 627 | } 628 | 629 | ctx.fillStyle = progressBarBackgroundColor 630 | ctx.fillRect(mid, top, width - mid, height) 631 | 632 | ctx.fillStyle = progressBarForegroundColor 633 | ctx.fillRect(0, top, mid, height) 634 | } 635 | } 636 | 637 | var doLoadError = function(originOfError) { 638 | var drawError = function() { 639 | ctx.fillStyle = 'black' 640 | ctx.fillRect( 641 | 0, 642 | 0, 643 | options.c_w ? options.c_w : hdr.width, 644 | options.c_h ? options.c_h : hdr.height 645 | ) 646 | ctx.strokeStyle = 'red' 647 | ctx.lineWidth = 3 648 | ctx.moveTo(0, 0) 649 | ctx.lineTo(options.c_w ? options.c_w : hdr.width, options.c_h ? options.c_h : hdr.height) 650 | ctx.moveTo(0, options.c_h ? options.c_h : hdr.height) 651 | ctx.lineTo(options.c_w ? options.c_w : hdr.width, 0) 652 | ctx.stroke() 653 | } 654 | 655 | loadError = originOfError 656 | hdr = { 657 | width: gif.width, 658 | height: gif.height 659 | } // Fake header. 660 | frames = [] 661 | drawError() 662 | } 663 | 664 | var doHdr = function(_hdr) { 665 | hdr = _hdr 666 | setSizes(hdr.width, hdr.height) 667 | } 668 | 669 | var doGCE = function(gce) { 670 | pushFrame() 671 | clear() 672 | transparency = gce.transparencyGiven ? gce.transparencyIndex : null 673 | delay = gce.delayTime 674 | disposalMethod = gce.disposalMethod 675 | // We don't have much to do with the rest of GCE. 676 | } 677 | 678 | var pushFrame = function() { 679 | if (!frame) return 680 | frames.push({ 681 | data: frame.getImageData(0, 0, hdr.width, hdr.height), 682 | delay: delay 683 | }) 684 | frameOffsets.push({ x: 0, y: 0 }) 685 | } 686 | 687 | var doImg = function(img) { 688 | if (!frame) frame = tmpCanvas.getContext('2d') 689 | 690 | var currIdx = frames.length 691 | 692 | //ct = color table, gct = global color table 693 | var ct = img.lctFlag ? img.lct : hdr.gct // TODO: What if neither exists? 694 | 695 | /* 696 | Disposal method indicates the way in which the graphic is to 697 | be treated after being displayed. 698 | 699 | Values : 0 - No disposal specified. The decoder is 700 | not required to take any action. 701 | 1 - Do not dispose. The graphic is to be left 702 | in place. 703 | 2 - Restore to background color. The area used by the 704 | graphic must be restored to the background color. 705 | 3 - Restore to previous. The decoder is required to 706 | restore the area overwritten by the graphic with 707 | what was there prior to rendering the graphic. 708 | 709 | Importantly, "previous" means the frame state 710 | after the last disposal of method 0, 1, or 2. 711 | */ 712 | if (currIdx > 0) { 713 | if (lastDisposalMethod === 3) { 714 | // Restore to previous 715 | // If we disposed every frame including first frame up to this point, then we have 716 | // no composited frame to restore to. In this case, restore to background instead. 717 | if (disposalRestoreFromIdx !== null) { 718 | frame.putImageData(frames[disposalRestoreFromIdx].data, 0, 0) 719 | } else { 720 | frame.clearRect(lastImg.leftPos, lastImg.topPos, lastImg.width, lastImg.height) 721 | } 722 | } else { 723 | disposalRestoreFromIdx = currIdx - 1 724 | } 725 | 726 | if (lastDisposalMethod === 2) { 727 | // Restore to background color 728 | // Browser implementations historically restore to transparent; we do the same. 729 | // http://www.wizards-toolkit.org/discourse-server/viewtopic.php?f=1&t=21172#p86079 730 | frame.clearRect(lastImg.leftPos, lastImg.topPos, lastImg.width, lastImg.height) 731 | } 732 | } 733 | // else, Undefined/Do not dispose. 734 | // frame contains final pixel data from the last frame; do nothing 735 | 736 | //Get existing pixels for img region after applying disposal method 737 | var imgData = frame.getImageData(img.leftPos, img.topPos, img.width, img.height) 738 | 739 | //apply color table colors 740 | for (var i = 0; i < img.pixels.length; i++) { 741 | var pixel = img.pixels[i] 742 | // imgData.data === [R,G,B,A,R,G,B,A,...] 743 | if (pixel !== transparency) { 744 | var pix = ct[pixel] 745 | var idx = i * 4 746 | imgData.data[idx] = pix[0] 747 | imgData.data[idx + 1] = pix[1] 748 | imgData.data[idx + 2] = pix[2] 749 | imgData.data[idx + 3] = 255 // Opaque. 750 | } 751 | } 752 | 753 | frame.putImageData(imgData, img.leftPos, img.topPos) 754 | 755 | if (!ctx_scaled) { 756 | ctx.scale(get_canvas_scale(), get_canvas_scale()) 757 | ctx_scaled = true 758 | } 759 | 760 | // We could use the on-page canvas directly, except that we draw a progress 761 | // bar for each image chunk (not just the final image). 762 | if (drawWhileLoading) { 763 | ctx.drawImage(tmpCanvas, 0, 0) 764 | drawWhileLoading = options.auto_play 765 | } 766 | 767 | lastImg = img 768 | } 769 | 770 | var player = (function() { 771 | var i = -1 772 | var iterationCount = 0 773 | 774 | var showingInfo = false 775 | var pinned = false 776 | 777 | /** 778 | * Gets the index of the frame "up next". 779 | * @returns {number} 780 | */ 781 | var getNextFrameNo = function() { 782 | var delta = forward ? 1 : -1 783 | return (i + delta + frames.length) % frames.length 784 | } 785 | 786 | var stepFrame = function(amount) { 787 | // XXX: Name is confusing. 788 | i = i + amount 789 | 790 | putFrame() 791 | } 792 | 793 | var step = (function() { 794 | var stepping = false 795 | 796 | var completeLoop = function() { 797 | if (onEndListener !== null) onEndListener(gif) 798 | iterationCount++ 799 | 800 | if (overrideLoopMode !== false || iterationCount < 0) { 801 | doStep() 802 | } else { 803 | stepping = false 804 | playing = false 805 | } 806 | } 807 | 808 | var doStep = function() { 809 | stepping = playing 810 | if (!stepping) return 811 | 812 | stepFrame(1) 813 | var delay = frames[i].delay * 10 814 | if (!delay) delay = 100 // FIXME: Should this even default at all? What should it be? 815 | 816 | var nextFrameNo = getNextFrameNo() 817 | if (nextFrameNo === 0) { 818 | delay += loopDelay 819 | setTimeout(completeLoop, delay) 820 | } else { 821 | setTimeout(doStep, delay) 822 | } 823 | } 824 | 825 | return function() { 826 | if (!stepping) setTimeout(doStep, 0) 827 | } 828 | })() 829 | 830 | var putFrame = function() { 831 | var offset 832 | i = parseInt(i, 10) 833 | 834 | if (i > frames.length - 1) { 835 | i = 0 836 | } 837 | 838 | if (i < 0) { 839 | i = 0 840 | } 841 | 842 | offset = frameOffsets[i] 843 | 844 | tmpCanvas.getContext('2d').putImageData(frames[i].data, offset.x, offset.y) 845 | ctx.globalCompositeOperation = 'copy' 846 | ctx.drawImage(tmpCanvas, 0, 0) 847 | } 848 | 849 | var play = function() { 850 | playing = true 851 | step() 852 | } 853 | 854 | var pause = function() { 855 | playing = false 856 | } 857 | 858 | return { 859 | init: function() { 860 | if (loadError) return 861 | 862 | if (!(options.c_w && options.c_h)) { 863 | ctx.scale(get_canvas_scale(), get_canvas_scale()) 864 | } 865 | 866 | if (options.auto_play) { 867 | step() 868 | } else { 869 | i = 0 870 | putFrame() 871 | } 872 | }, 873 | step: step, 874 | play: play, 875 | pause: pause, 876 | playing: playing, 877 | move_relative: stepFrame, 878 | current_frame: function() { 879 | return i 880 | }, 881 | length: function() { 882 | return frames.length 883 | }, 884 | move_to: function(frame_idx) { 885 | i = frame_idx 886 | putFrame() 887 | } 888 | } 889 | })() 890 | 891 | var doDecodeProgress = function(draw) { 892 | doShowProgress(stream.pos, stream.data.length, draw) 893 | } 894 | 895 | var doNothing = function() {} 896 | /** 897 | * @param{boolean=} draw Whether to draw progress bar or not; this is not idempotent because of translucency. 898 | * Note that this means that the text will be unsynchronized with the progress bar on non-frames; 899 | * but those are typically so small (GCE etc.) that it doesn't really matter. TODO: Do this properly. 900 | */ 901 | var withProgress = function(fn, draw) { 902 | return function(block) { 903 | fn(block) 904 | doDecodeProgress(draw) 905 | } 906 | } 907 | 908 | var handler = { 909 | hdr: withProgress(doHdr), 910 | gce: withProgress(doGCE), 911 | com: withProgress(doNothing), 912 | // I guess that's all for now. 913 | app: { 914 | // TODO: Is there much point in actually supporting iterations? 915 | NETSCAPE: withProgress(doNothing) 916 | }, 917 | img: withProgress(doImg, true), 918 | eof: function(block) { 919 | //toolbar.style.display = ''; 920 | pushFrame() 921 | doDecodeProgress(false) 922 | if (!(options.c_w && options.c_h)) { 923 | canvas.width = hdr.width * get_canvas_scale() 924 | canvas.height = hdr.height * get_canvas_scale() 925 | } 926 | player.init() 927 | loading = false 928 | if (load_callback) { 929 | load_callback(gif) 930 | } 931 | } 932 | } 933 | 934 | var init = function() { 935 | var parent = gif.parentNode 936 | 937 | var div = document.createElement('div') 938 | canvas = document.createElement('canvas') 939 | ctx = canvas.getContext('2d') 940 | toolbar = document.createElement('div') 941 | 942 | tmpCanvas = document.createElement('canvas') 943 | 944 | div.width = canvas.width = gif.width 945 | div.height = canvas.height = gif.height 946 | toolbar.style.minWidth = gif.width + 'px' 947 | 948 | div.className = 'jsgif' 949 | toolbar.className = 'jsgif_toolbar' 950 | div.appendChild(canvas) 951 | div.appendChild(toolbar) 952 | 953 | if (parent) { 954 | parent.insertBefore(div, gif) 955 | parent.removeChild(gif) 956 | } 957 | 958 | if (options.c_w && options.c_h) setSizes(options.c_w, options.c_h) 959 | initialized = true 960 | } 961 | 962 | var get_canvas_scale = function() { 963 | var scale 964 | if (options.max_width && hdr && hdr.width > options.max_width) { 965 | scale = options.max_width / hdr.width 966 | } else { 967 | scale = 1 968 | } 969 | return scale 970 | } 971 | 972 | var canvas, ctx, toolbar, tmpCanvas 973 | var initialized = false 974 | var load_callback = false 975 | 976 | var load_setup = function(callback) { 977 | if (loading) return false 978 | if (callback) load_callback = callback 979 | else load_callback = false 980 | 981 | loading = true 982 | frames = [] 983 | clear() 984 | disposalRestoreFromIdx = null 985 | lastDisposalMethod = null 986 | frame = null 987 | lastImg = null 988 | 989 | return true 990 | } 991 | 992 | return { 993 | // play controls 994 | play: player.play, 995 | pause: player.pause, 996 | move_relative: player.move_relative, 997 | move_to: player.move_to, 998 | 999 | // getters for instance vars 1000 | get_playing: function() { 1001 | return playing 1002 | }, 1003 | get_canvas: function() { 1004 | return canvas 1005 | }, 1006 | get_canvas_scale: function() { 1007 | return get_canvas_scale() 1008 | }, 1009 | get_loading: function() { 1010 | return loading 1011 | }, 1012 | get_auto_play: function() { 1013 | return options.auto_play 1014 | }, 1015 | get_length: function() { 1016 | return player.length() 1017 | }, 1018 | get_current_frame: function() { 1019 | return player.current_frame() 1020 | }, 1021 | get_frame: function(i) { 1022 | return frames[i] 1023 | }, 1024 | load_url: function(src, callback) { 1025 | if (!load_setup(callback)) return 1026 | 1027 | var h = new XMLHttpRequest() 1028 | // new browsers (XMLHttpRequest2-compliant) 1029 | h.open('GET', src, true) 1030 | 1031 | if ('overrideMimeType' in h) { 1032 | h.overrideMimeType('text/plain; charset=x-user-defined') 1033 | } else if ('responseType' in h) { 1034 | // old browsers (XMLHttpRequest-compliant) 1035 | h.responseType = 'arraybuffer' 1036 | } else { 1037 | // IE9 (Microsoft.XMLHTTP-compliant) 1038 | h.setRequestHeader('Accept-Charset', 'x-user-defined') 1039 | } 1040 | 1041 | h.onloadstart = function() { 1042 | // Wait until connection is opened to replace the gif element with a canvas to avoid a blank img 1043 | if (!initialized) init() 1044 | } 1045 | h.onload = function(e) { 1046 | if (this.status != 200) { 1047 | doLoadError('xhr - response') 1048 | } 1049 | // emulating response field for IE9 1050 | if (!('response' in this)) { 1051 | this.response = new VBArray(this.responseText) 1052 | .toArray() 1053 | .map(String.fromCharCode) 1054 | .join('') 1055 | } 1056 | var data = this.response 1057 | if (data instanceof ArrayBuffer) { 1058 | data = new Uint8Array(data) 1059 | } 1060 | 1061 | stream = new Stream(data) 1062 | setTimeout(doParse, 0) 1063 | } 1064 | h.onprogress = function(e) { 1065 | if (e.lengthComputable) doShowProgress(e.loaded, e.total, true) 1066 | } 1067 | h.onerror = function() { 1068 | doLoadError('xhr') 1069 | } 1070 | h.send() 1071 | }, 1072 | load: function(callback) { 1073 | this.load_url(gif.getAttribute('rel:animated_src') || gif.src, callback) 1074 | }, 1075 | load_raw: function(arr, callback) { 1076 | if (!load_setup(callback)) return 1077 | if (!initialized) init() 1078 | stream = new Stream(arr) 1079 | setTimeout(doParse, 0) 1080 | }, 1081 | set_frame_offset: setFrameOffset 1082 | } 1083 | } 1084 | 1085 | return SuperGif 1086 | }) 1087 | -------------------------------------------------------------------------------- /public/meSpeak/en-us.json: -------------------------------------------------------------------------------- 1 | { 2 | "voice_id":"en/en-us", 3 | "dict_id":"en_dict", 4 | "dict":"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DQBuZQMjMTJ2AGN1AnJhAyMxOXEAbWUDIzE/dgB0dQIRQQMjMUqBAAQCZXJiAyNXAAJpZCAABGUIAnQDI1d2AGUIbQJkAGhpbmEBbQJ0AyNZbTKFAAQBbHACYXQDczEACAIVAGMIAhUAYQJkZW15A3MxIwBjdXMCEUEDczE5gVYAcXUIA3MxOgBjCAJlA3MxVwAEY291AnQDczGBAG91AnN0AGgIA3NKAAQIAmUDc1cACAJlcmJpAAgCaQBlCAJ0aQNzV3wABAFmcnUCZSADdlcAAWxhAmUgAAFsb3MCZSAAAW1pAmUgAAFuFQJlIAABcnICZSAAaAF5AnQDdwAEAXYCYQOFMQACb3JuAAhiAm8AaGUBZAIgAGhlAWgCIABoZQFrAiAAaGUBcgIgAGhlAXRyAiAAaGUBeQIgAGhlCAIMAHJlCAOFMQ0ABGhlcwFkAiADhTFXAGhlcwFoAiAAaGVzAXICIABoZXMBdHICIAAEAXBzAmUNA4VXAAhyAmUACHICaXMAZQIgAAcGYWQAAWxhbQJ5Aw1GAAJqdXRhbgMjAAQBbGcCaQMjRgABcgJpYwABeGVoAmUAAmFnAAJhbQACZW4AAmVxAAJqdW5jdCAAAm1hbiAAAm1pbiAAAm1pcmEAAm9sAAJvbgACdWxhAAJ1bHQgAAJ2ZW50AAJ2ZXIAAnZlcnQgAAJ2bwAIAmkACAJyaRUACAJ1bQBkAmVyAGQCaXRpdgBkCAJsAGUBbAJzaAMjRgZ1AG8CbGVzAyNGDQB2ZXICcwMjRlIGewBlcXVhAyNGdjE6DQBqZWMDI0l1MQAEAnZlbnR1A3NGAAJ2ZXJzYQACdmVydAAIAhUACHJ0Aml0AGQIAhUAaggDc0kAAXVxA3dGAAQBYgJvcyADhUYAAWMCZW5jAAFsAmVuAAFsAnkAAW5yb3QAAXJjAAFzAmlzAAJpEUEAAmxlAAhyAhFBAAcGYWYAARUCdGVyAwZ0UQAEAnJpAyNRAAgCZwBmAmFiAGYCZXIAZgJsdQBybwMjUSKDAAQCZWEDc1EACAIVAGYIAhUAb3JlA3NRgABmaWEIA3NRiwAEAnQMA3RRAGYBdHMAZgF3A3dRAAcGYWcACHRuYQMGI08Ab24CYWwDBiNPDTIAdWEBFQIgAwYjTzmBDQBpbwIgAwZ5SXaDAAJhIAMGeU8AaQIgAwZ5T3YABAFnbgJlIAMGhUkAAXJuZQJlIABlAWcCbWVudAABbQJlbnRhAw1JAAEKAm9uIAMNTwAIcnQDI0kABGcIAnJhdgMjTwBnCAJyZWcABG9uAXJkAyNPDTIAb24BdwIMAARlARUCIANtSQBlARUCbWVudABlAXBwAiAAZXIBFQIgA21JbgACZW5kA3NJAAQCcmVlA3NPAAgCbBUACAJvIAAIAnJvbgBnAnJlcwBnAnJpZXYAZwgCFQBoAiADeQBlbgFoCgIgA3lPDTIABAF0bm9tAmUgA3lYAGUBbGYCIAAEAW5lZXQCZQOFSQABcmVkAmUgAAFydHVvAmUgAAF0cwJlAAgCZQAIAmlzAGUBYwIgAGUBY2IAZQFjZABlAXARQwIgAGUIAmkAZQgCbABpAXQCbwOFSTkABAFsZgJyYW4DhU8AAXJmAnIAAXYCcmEAAm8gAHVlAAcGYWkABAEVAhFDYSADBoUAAXRuZQJsAAF0cnVjAmwAZwJuAG4BZAIgAwaFMgBuZWQBZAIgAwaFMkYAc2UCIAMGhVYABGMCIAMGhXYxAGMCYWwAcmUDBocABAFsbGl2Aw0AAXRmAAF0aXJiAAF0cmVjAAF0cnVjAAFzAmQDdQAEAWdyYWIDdgABbHBhAAFscmViAAF0bnVvAAF0cAAEAiADhAACaQABbgJ2A4QGfAAEA4UACAAEcgOHAHIIAHJlAiAABwZhbAABbQJubwMCIzcAAm1pZwMCdzcACAJyAwJ9NwACaXR5AwYjNwBkZQJoeQMGIzdGdgBnaWEBFQIgAwYjN0kNAAFnAmkgAwZ5NwBhbmQBFQIgAwgNN3MyRgAEAQoCaRFCYXRpAw03AAEKAmkRQmUAAQoCaXMRQ2ljAAFzAnV0AAF1cWUAAXYRQQJlbgBheQFtAw03BoUAaQEKAnMRQyADDTd2AG8BCgIgAw03gwBlaQFrAmQDDTeEAAQFAwFjAmYDIwAFAwFoAmYABQMBaAJ2AAQBcAJldAMjNwABcwJ1dGEAAXRlcgJpYQABdgJpYQACdG8AAnVtIAAIAmFzdAAIAmIACAJjAAgCZXgACAJnAAgCaQAIAmsACAJwAAgCcwAIAnYACAJ5AAhjAmUAbAFmAmEAbAFmAmliAGwBdAIRQQBsAmVsAGwCZXIAbAJvdHIAbAgCYQBsCAJlZwBsCAJpAGwIAm8AbAgRQwJvdwBs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MgAEZwFkAmVyA4UySQBnAWhjAmUAZwFyAmUAZwJlbCAABGdpbmcBaGMDhTJJdkIAZ2luZwFyAAcGYXAABGgBcmcKAmVyAwgNUQBoAXJnCgJ5AAFjAmFjAw0wAGUBcnQCegMNMHwABAJhdGgDIzAAAmVsIAACaWMAAm9nAAJvbGkACAJzAAgCdABwAmFyYQBwAmV0aQBwAmxlAHACbGljAHACcmVoAGVyCAJ0AyMwDQByZXMDIzAihQBlAXJ0AnpvAyMwdgBoCAJvAyNRAGhybwMjUSINAAQIAhUDczAAcAJlYXIAcAJsaWNhYgBwCAIVAHByZWMIAhJDA3MwInxZAGVyaQgCdANzMHUiDQBlcgJpZQNzMIgiAGgIAhUDc1EABAFjAm9uA4UwAAFtAmxlAAFwAmVyAAF0cwJsAAJpYQACaXMAAnJvAAgCZQAIAnJpAAhwAmlzAAh2Am8AaAgCaWQDhVEABwZhcgACdGlsAwJ6AGJvAWMCaAMEekWDAGNoCAIVDoCEhAMEekoABQMBFQJpbyADBiMiAGlseQEVAiADBnUiDTcCdgAEAmEgAwZ5IgACaSAABAJpYRFDIAMGhwACaWEgAAJpdQwDBociAAQBCgJpbiADDSIAAWdvbAJpAAFoAmFzcwABbQJpAAFtAmluAHkCIAMNIgJ2AGFuAW0KAw0iIzIAZQFwAm50aGUDDSJ1AGlzZQEKAiADDSKEVgBhCHACZGUDDSKFAGluZwFnAw0sbUIAAnIDIwAEARUCaXR5AyMiAAFjAmVlcgABYwJpAAFoYwJpdAABaHACaQABawJ5AAFsYwJpAAFtAmluZXIAAW0CaW8AAW0CaXQAAXACaQABcHACZW4RQwABcHMCZW4RQwACYQACZW4AAmljAAJvAAgCEUEACG0CaQAIbQJpbmERQwByCAJhbnQAcggCbwAEYQhwAyMiDQBlAnQABAEKAmRpcwNuAAEKAmRpegABCgJkeSAAAWQKAiAAAWQKAmQgAAFnCgIgAAFnZwJkIAABaAoCZCAAAWsKAmQgAAFsCgIgAAFtCgIgAAFwAnRpY3UAAXQKAiAAAXRzCgJkIAABdwJkAAF3CgJkIAABegoCZCAAAXBlcwJhdANuIgAEY2gBbmEDbjEAY2gBbm9tAAQIAm9zA3MiAAgCb3UAcggCFQBvbQJhdANzIoM/AHkFAwFub2kCIAN1IgJ2AAQBdXECcgN3AAF3AnIAAXcCcgAEAXVxAmEDdyIAdwF3AmkAAhFBA3kiAAQDegABaAJkeSAAAXRpdWcCIAABdG9lAmQgAAF0cwIgAAIgAAh0AiAAJwJudAByAiAAcmUCIAAEY2gBFQJpA3oxAGNoARUCeQBjaAgCEUERQQBjaAgCZXQAY2hhaQgDejEGhXYAY2hpCAN6MXYAY2hpdggCDAN6MYRSAHJlZAIgA3pGAGNoCAJlcgN6SgByaW5nAiADem1CAAQBaHcDfwABdXECdAABdwABd2ECZAABd2VyAmQAAXdoYwJkAAF3cwJkAAh3AmQAAXdvdAJkA4AABAFtdGgDhwABcAJpbgABdwJpAAF3AnkAAmlvdXMAZQBlAWMCEUMVAGUBdwAEAXACZW50A4ciAAF2AmkRQQB5ARFDHQOHIgJ2AGVzdAIgA4ciDVcvAGVhA4ciiABpbmcDhyxtQgAHBmFzAAJleHUDAoVXAAJpdmUDBoVXAARzAWMCIAMNVwBzAWx0AiAAcwFwbW8CIABzAXBzAiAAcwFycgBzAXYKAiAAcwF2CgIgAARleQEKAiADDVcCJQB5AQoCIABzAnUDDVkAc3VyAw1ZOYoAAWICaWwDI1YABAFtAm9uaQMjVwABdG4CdAACcGhhAAJwaQACdGhtAAJ0cmFsAAJ0cm8AAnltcAAIAmUACAJpbgAIAnBlAHMBbGMCaRFDAHMBcAJvAHMCYWcAcwJldABzAm9uAHMCeW0AcwgCaABjaWkDI1cxdgBoCAMjWQBzaW9uAXADI1kNMgBjaQFmAnMDI1l2AAJzaXN0A3MABAEKAnR5IANzVwACdGVybgACdHJvbG9nAAJ0cm9ubwAIAhUACAJwZXIACAJwaXJlAHMCdW1wAHMIAhUABGgIAmEDc1kAaAgCbwAEARFDAnADdFcAARFDAnBlAAERQwJ0AAJrAAJ0ZXIAcwFsEUMAcwFwAHMBchFDAAFoY3J1cAJlA3ZXAAF3AnADd1cABGUBaHACIAOFVgBlAXICIAAEAWICaQOFVwABaAJ0ZQABagJvbgABbQJvbgABcAJ0ZSAAAXQCdAAIAm8AdAF3AmUNA4VXLwBpYQUDCAOFWA0AYwFmAmlhA4VZAGlhCAOFWQ0ABwZhdABvCAJuYQMChS+DAAQBFQJyYSADBnkvAAJ1bQBpARUCIAMGeS92AAQBFQJvciADBoUvAAFkAnVtIAABbHUCb3J5AAFtAnVtIAACaW0gAHJpY2VzAwaFLyJtV3xWAHJpeAMGhS8idjFXAHJ5ARUCIAMIDS8idgBoARUCaXMDCA1VAGh5ARUDCA1VbQAEAQoCZWVyIAMNLwABCgJpdmUAAW0CZXJpAAFtaWxjAmUAAW5lcwABcAJlcm4AAXRzAmlzdAAIc3JldgBlAWxhcAIgAGUBbHVjYW0CIABlAWx1c25vYwIgAGUBbWl0AiAAZQFuaWQCIABlAW5vaQIgAGUBcmVkAiAAZQFyZXBtAiAAZQhyYXBlcyB0aQIgAGlzbQEKAw0vdlYNPwBlcgFtAm4DDS97AHVyZQFsAiADDUpuAAR1cgFjAw1KigB1cgFtAAQBYwJlEUMDIy8AAWcCZWF1AAFscAJlYQABbQJlcgABcnRzAmVnAHQCaWMAdAJpdABlbAhzAmwDIy8NAGVnbwFjAnJpYwMjL3ZPBncAZWdvAWMDIy92Tw0AaQhjAm9uAyMvhABoAmxvbgMjVQAEAXJmAmVybgNzLwACb21pAAgCbGFuAAgCcm9jAHQIAhUAcm9sAXADcy8igzcAbwgCbgNzL4MABGgBYgN0VQBoAXAAAXcCdAN3LwBoAWYCZXIDeVQABAEVFQJvciADhS8AAWMCZXIgAAFmAmFsAAFsYgIRQQABbgJpdmUAAm9yIAAFAwFwAnJpEUEAZQFub2luAiAAYQFkA4UvDQByb24CIAOFLyINMgBlcwFyYXACIAOFL1cAZWQBbWl0AiADhS9tRgAEaW5nARUCDAwgA4UvdkIAaW5nAW1pdAIgAGVkARUCDAwgA4UvdkYAaAFiAmUDhVQAaGVkAiADhVRGAGhlaQOFVW12AAJpYQOFWQAHBmF1AHRvCAJuAwJ9L3cAdGhlbgMCfVV1MgBjaAgDAn1jAHRvCAIVDoCEhAMEfS+DAAQBFQJyaQMGfQABcwJydXMgAGQCIAMGfUYABGdoAWwDdFEAZ2gBcmQABAFjAmxpA3cABSMBcwJzAAUjAnN0cgBsAnQDdzcACAJudAN5AAQDfQABbgJ0IABnaABnaAFscwBsAmsAdG8CbWEDfS8NAGdtZW50A31PPwZ1Mi8AcgIgA38ABAEVAnQgA4IAAWcCcwACIABzARFDAiADglcABwZhdgABbGECZXIDBnlSAAQBY3MCZW4DI1IAAWQCZW4AAWoCZWwAAWwCZW4AAWwCaQABcgJlbABlcgJzAyNSBnsAYXICaWMDI1INIgAEAmFpbANzUgACZW5nAAJvEUEACAJlchFDAG93A3NSggAEAWoCYQN5UgABbHMCaQAEAWQCaWQDhVIAAWYCbwABbGYCbwABcwJpAAFzAm8ACAJvbgBpCAIRQQOFUnYABwZiZQBnCAIRQW4ZA0UCdk8AdGEIA0UEfC8NAHRhBQMIA0UEhS8NAG5ldm8DRQ0ydVINAAQCZxFBA0VtAAJncgACbGF0AAJsaWUAAm11AAJxdQACc2VlAAJzaWUAAnRyYXkACAIRQxFBAAgCY2wACAJkcmEACAJmAAgCbGxpAAgCcxFDAAgCc3RvAAgCdBFDAAgCdwBoYQJ2A0VtaYUAcggCcwNFbgAECAIRQwsDRXUACAJjawAIAmNxAAgCZBFDAAgCZ2cACAJsEUMACAJzdGlhAAgCdGgACAJ2EUEAbmUIA0V1MnYABGQBaAIgA0V1RgBkAXJlAiAAZAF0AiAABAF5YW0CIANFfAAIAmIABwZiaQAIAhFDFRUDAkWEAAQCc2VjA0UChAAIAmVuAG8IAhUOgISDA0UEhIMAAm5vYwNFbQAEAmJsaQNFdgACYnUAAmNrAAJnDAACbGIAAmxnAAJsaW8AAmxrAAJubQACbxFDIAACb3VzAAJyaQACcnkAAnNjAAJzaAACc20AAnR1AAJ6DAAIAhFDCwAIAm5nAAgCdBFDAHICEUMDRXsABAJzcQNFfAACc3RyAAQBFQJvcxFBA0WEAAFvAnQRQQACY3kAAmtlcgACbmFyeQACbmQAAm90aWMACAIgAGdoAnQABG8CZ3IDRYQGdwBvAmxvZwBvAm5pAG8CcHMAbwNFhIMAcgUFAhFDA0WNAAcGY2gAZW1lbnQCIAMIWT+RAAQBFQJpYQMxAAFhAmlsAAFhcmIAAWFydAABZQJvAAFlbQJhAAFldAIZAAFpbQJhAAFub3JiAAFvAiAAAXJhAml2ZQABcmERQxUVAiAAAXJvAmkAAmFlAAJhc20AAmVtAAJpYyAAAmlvAAJpchFBAAJpcxFDAAJvbAACb25kAAJvchFBAAJvcmQAAnIACAISQhFHAAhhdAAIcmECEUEACHJhAmEACHJvAmVzAARhAnJpcwMxDQBvcgFuYQBvbHkDMQ03AnYAcnkCc2EDMSJ2AGxvcm8DMTcEgCKDAGxvAnIDMTeAAG9pcgMxOosAaQhyYQIVAzF2AGEIAm8DMYUAYW9zAzGFd1cABANKAAFhdAABb28CIAABcmECZXIAAm9yZSAACAIRRwBlAWFiA0oNAGFyaW8CdANKIyKIAAQBYRFDAmUDWQABYXRzAAFlAmVsAAFlcmMAAWlmAAFpbGMAAWluAAFvY2kAAW9sYwACYXNzAAJhdGVhAAJlZgACZXYAAmlvIAACdXJlAAJ1dGUAAsOpDAAIbwJlAGlvbgNZDTIAYXACZXJvA1kjMABpY2ECZwNZbTF5AGljYQJuA1ltMYUABGF1AmYDWYMAYXUCdgBlegNZhQAHBmNvAAJsb3NzAwIxdwAEAmxsYXQDMQJ3AAJuc2VjdQACbnN0aXR1EUEACAJtcGwACAJuZmlkZQAIAm5zdWx0AAgCbnRyb2wAbggDMQJ3MgBudHJhYwJ0AzECdzIvIiMxAG50cmFyAzECdzIvIocAbnNpZGVyAzECdzJXdkZuAG5zZXICdgMxAncyV3sAbW11bgJhAzECdz85gTIABAJoYWIDMQKDAAgCYWcAYQJsZXMDMQKDcwACbXB1dGEDMQR3AHJyZXNwbwMxBHcidlcwBncAbnRyYQgCEUMVDoCEhgMxBHcyLyINAG5kZQgCc2MDMQR3MkZtAAgCZRFDDoCEggMxBIMAdW50ZXIIAhUOgISHAzEGgjIvDQAEAmxsYWIDMQ0AAmxsYXAAAmxsZWMAAmxsaWQAAmxsaXMAAmxsdQACbW1lbnMAAm1tdW5pYwwMAAJycmVjdAACcnJvAAJycnVwAAgCbRUACAJubmVjdAAIAm5uZXgAbm5pdgMxDTKEUgBtZQJkaQMxDT98AAQCbWJhAzF3AAJtYmluYQACbWVkeQACbW1hIAACbW1hbmRhAAJtbWVuAAJtbWVyY2UAAm1tb2RvcgACbW11dGEAAm1wZW5zAAJtcGVyAAJtcGlsYQACbXBsZW0AAm1wbGV4IAACbXBsaWNhAAJtcGxpbQACbXBvc2l0AAJtcG9zdAACbXBvdQACbXByZWhlbgACbXByb20AAm1wdAACbnNlYwACbnNvbgACbnN0YW4AAm5zdGl0AAJudGluZQAIAm1pAAgCbXIACAJuY2VwdCAACAJuY3JldAAIAm5kaW0ACAJuZG9tAAgCbmRvcgAIAm5kdWl0AAgCbmZlcmVuAAgCbmZpZAAIAm5maXMACAJuZmx1AAgCbmdyZQAIAm5pAAgCbmp1ZwAIAm5ub2lzAAgCbnF1ZQAIAm5zYwAIAm5zb2xlAAgCbnN0YWJsAAgCbnN0aXAACAJuc3VsAAgCbnRhY3QACAJudGVtcGwACAJudGV4dAAIAm50b3VyAAgCbnRyEUEACAJudHJpYgAIAm50cm8ACAJudm95AAgCbncAcm8CbGwDMXcidwBweQgDMXcwdgBudHJhc3QIAzF3Mi8idFcvAG5ncnUDMXcyTyKBAG5maQgCZGVuAzF3MlF2AG52YQJsAzF3MlINAARuY2UIAm50cmEDMXcyVw0AbnNlcgJ2YXRpbwBuc2UIAnEDMXcyV3YAbW1vbgMxdz8NMgBtcGFyYWIDMXc/MA0iDUUAbXBlAnQRQW4DMXc/MHYAbW11bgMxdz85gTIABAJtZSADMXgAAm1wYW55AAJtcGFzcyAACAJtZgAIAm5qdXIAbWUCYgMxeD8AbWZvcgJ0AzF4P1FuAG1pbmcDMXg/bUIACAJtYQMxgwBhCAJ4AzGDIwBlCAJsA1d8AAcGZGUACAJoeWQDBEZ8AAQCYWN0A0YCfAACYXJjAAJmbGF0AAJwZXIAAnBvbAACcG9wAAJyZWcAAnRveAACdHJhaQACdmFsAAgCZW1wAAgCbwAIAnRoAG5pAnRyaQNGAnwyhAAEcwJlZwNGAnxXAHMCZW4AcwJ1bABzdGECYgNGAnxXL4UAc2UCbANGBHxXbQAEAmNvcnUDRm0AAmR1AAJtYQACbWVuAAJtaXNlAAJtb2NyYWMAAm1vcgACbW90AAJtdXIAAnJpEUMAAnJvZwAIAmJhAAgCYxUACAJmFQAIAmcVAAgCagAIAmwVAAgCbm8ACAJwFQAIAnJhaQAIAnQVAAgCdhFBAHRlc3QDRm0vdVcvAHRlcgNGbS97AHRlcgJpA0ZtL4giAG5pCAJhA0ZtMoQAbWVhA0ZtPwZ8AARzCAJpA0ZtVgBzcwgABHMCaXMDRm1XAHMIAhUABAJjaWIDRnUAAmNpbAACY2ltAAJjawACY29yAAJjcmVtAAJmZXJlbgACZmluaXQAAmZ0AAJsYXcAAmxlZwACbGljYQACbGwAAmxwaAACbHYMAAJtYWdvZwACcHJlY2EAAnB0AAJwdXQAAnIRQRFDYXRpbwACcmVsAAJ0b24AAnRyaQACdmlsAAJ2b24ACAJsdABzAmNhAHBvAnNpdGkDRnUwDQBjYQJkZW4DRnUxDQBsdQJnA0Z1NzmBAHZhcwgDRnVSDVcAcwJpZ25hA0Z1VgAEcwJlYwNGdVcAcwJpYwBzAm9sAHMCcG90AHMIAmgAcwgCawBzdGkDRnVXL3YABAJjZW5jA0Z8AAJjb20AAmNyZWFzAAJmZWN0IAACdGFpbAACdG91AAJ2aWEAAnZpbwBtAm9uaQNGfD8AYnUCZwNGfEUEeAAHBmRpAAQCc2JlFQMERnYAAnNjb24AAnNvYgACc3Bvc3MAAnNwcm9wAAgCc2EVAAgCc3JlAAQIAnNlDoCEgwMERnZXAHMIAmluDoCEgwBzYQgCcAMERnZXDQAEAmdyZXMDRgKEAAJtZW5zAAJveAACdmVyEUMAAnZlc3QAAnZ1bAAIAmgVAGdlAnN0A0YChEl1AAQCY3RhdANGbQACZmZyYWMAAmZmdXMAAm1pbgACc2FzdAACc2NvdgACc2ludAACc3JlcHUAAnZpZAACdmluAAJ2aXMAAnZvcmMACAJzFQAIAnNoZXYMAHMIAmgRQQNGbVcABAJzYyADRnYAAnNjbyAAAnNjb3JkIAACc2NvdAACc2NvdW50AAJzaBFDAAJzaCAAAnNrAAJzb2wAAnNwb3NpdAACc3NpZAACc3NpcAACc3NvbHUAAnNzb24AAnN0YW4AAnN0aWxsYXRlAAJzdHJpAGxpAmcDRnY3dgB2aQJkZW4DRnZSdgBzY2lwbGkDRnZXdjA3dgAEAmNocm8DRoQAAnNzZWN0AAJzdWwABGEIAmdvbgNGhAYjAGEIAm4AYQgDRoQNAGNobwJ0A0aEMQZ3AGx1AnQDRoQ3BoEAYQgCbANGiwAHBmVhAAQBaAJkbRFBFQMCdQABaAJkcQABcgIgAwaIAG4BcAIgAwaIMgABFQJ0aXZlAwiIAAQBCgJiaWxpAw0AAQoCYmwAYmx5AQoDDUU3AnYAdQJ0AzmBAAQBEUMCbHQDdQABEUMCdmVuAAFkAmQAAWQCZgABZAJ0aAABZG5lAnYAAWYCdGgAAWgCZAABaAJ0aGVyAAFoAnZ5AAFsAmRlbgABcgJkaWVkAAFyAmRpbHkAAXICZHkAAXJiAmQAAXJiAnMAAXJiAnRoAAFyZAJkAAFyaHQCZAABcmh0AnQAAXJwcwJkAAFydAJjaGVyAAFydAJkAAF0cwJkAAF3cwJ0AAF6AmxvAAhoAnZpAAhsAm1pAHBvAXcDdTANAGxvdQFqA3U3DQBtAnQgA3U/MABkZWQIbAN1Rm1GAAR0aAFsA3VUAHRoAXcABHMCYW4DdVYAcwJlbgBzdXIDdVhuAARyAWgCawN6AHIBaAJ0AHIBaAJ0aAAEcgFoAmQDewByAWgCc2UAcgFoZXICcwByAWwCbgByAXACbAByAXMCY2gAcgF5Am4AcgJ0aAByCAJsAHIIAm4ABAN8AAERQx0CbiAAAWICbgABZgJsdAABaAJ2AAFtAmx0AAFzEUMCIAABcmMCdAN8BoUAAWh0AnRyaQN8IwBkbWUBcgN8Rj98AGdlcgN8T24AdGgBcmICZQN8VABzbwJuA3xWDQBzZQIVA3xXAAR1A4MAdXgABAFyYgJrA4UAAXJnAnQAAXRzAmsABHIBYgOHAHIBdAIRQQByAXcAcgF3cwAEARUCIAOIAAFodAJ0AAhiAnRyaQBuAiADiDIAbAEKAiADiDcABHIDiQByAWICZAByAXcCeQAHBmVkAAQBFQJpZW4DBnxGAAFjAmUgAAFoAnJhAAFoAnJhbAABaAJyb24AAXNyAmUAdXIBFQMGfEluAAQBYxUCIA6Am4IDLwABZhUCIA6Am4IAAWhjCgIgDoCLggABaHMKAiAOgIuCAAFrFQIgDoCbggABcBUCIA6Am4IAAXNzFQIgDoCYggABeBUCIA6AioIABAERQxUCIA6Am4IDRgABFRUCIA6Am4IAAWcVAiAOgIqBAAFsYwIgDoCIgQABbGUCIA6AmIIAAW5lCgIgDoCIggABcmUVFQIgDoCIggABeQIgDoCIggAEAWQVAiAOgJuCA21GAAF0FQIgDoCbggAEAWhzEUMVAiADdUYAAXd5AiAABQgBZBUCIA6Am4IABQgBdBUCIA6Am4IAaWIBcmMDdUZ2RQBnAmUNA3VJAAQBcmQVAiADdkYAAXJmFQIgDoCIggBseQIgA3ZGNwJ2AAQBbQJpYQN8RgABbQJpbwABbQJpdQABcAJlIAABdAJpAAF3cwBpYXRlAW0VA3xGbQ0vAAcGZWkABAFsAnMDdQBjZQFsAnN0AAQBZgJ0IAN2AAJuYXRlAAQBFQJuIAN8AAEVAm5lAAFjAAJ0aAACdgACegBnaAFsAGdoAWsDfFUAbAFuA3xyAAQBYgJuZwN8dgABaHQCcxFDAAQBaAJ0IAOEAAUjAnRoZXIACABnaAFoAnQAcwhzAm0DhFYAY2gDhGMABAOFAGcCbgBnaABnaAFscwBnaHRoA4UvVQByA4cAcgF3A4kABwZlbAAECAIRQQMCdjcAbAgCaXAAZQgCY3RybwMCdjcEdQBlCAJjdHJvbAMCdjd1AGl0CAMCdjd8LwAEAWN4AiADBnU3AAFsbGECbwABbm5vAiAAAXACIAACaWdpAGxhAQoCIAMGdTcNAG9wAXYDBnU3DTAAbGkBFQIgAwZ1N3YABAFkAml2Aw03AAF2Am9jAGwBCgJvdXMAbGVyAXYKAiADDTcNAGxpbmcBCgMNN21CAAFzAmVjdANtNwAEAQoCIANyAAEKAnMgAAF0AnAABAFiaWMCIAN1NwABbGxhAAUIAQoCIAAFCAEKAnMgAG8CcQN1Nw0Ac2UIA3U3VwBlCAJjdHJvbgN1N3UABGUIAmcDdTd2AGUIAnAAZQgCdmEAZW0IA3U3dj8AAWYCaXgDfDcABwZlbQAIAwJ1PwABFQJiZXIDBnU/AAFocHMCZQMGfD8ABAEKAiADDT8AAWhwcwAEAmlzc2kDbT8AAnVscwAIAmEACAJlAAgCaXQACAJvAG0CYW4ABAJhbmEDdT8AAmJsZW0AAmJyeQACZXJhbAACZXJ5AAJpAAJwYXRoAAJwZXIAAnBoYXMAAnByZXMAAnB0aQACcHR5AAJ1bABtAmUAb3JyaAFoA3U/DSIAYmECcwN1P0UNAAQBZgJhbGUDfD8AAWgCbwACYWlsAAcGZW4ABAJkZWEDAnUyAAJpZ21hIAACbWVzAAgCFQAIAmRhAAgCZHUACAJ0aQBuCAByb2wDAnUyIoM3AHJhZ2UDAnUyIoVJAHRpY2UBCgMCdTIvhFcAbGkCdgMCdTI3hABkb3IIAwJ1MkaAAGNoYQgCbgMCdTJKdAB2aXJvAwJ1MlKEIg0AdGhyYQJsAwJ1MlUifQBjeQJjbGkDAnUyV3YAc2hyaW5lAwJ1MlkihDIAAnRlcnQDBHUyAAJ0cmVwAwR3MgAEARUCZG8gAwZ1MgABFQJ0YWwAARUCdG91cwABFQJ0dQABbGxpbQJpYQABc2VycGUCdAABc3MC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YW0CaQMGfFYAAmljAGUBbhUCIAACaXZlAwZ8VwBpcwFyAiADBnxXdlcABAEKAnQgAw1XAAEKAnkgAAF2AnR5AHMBcmUCIABzAXJ0CgIgAHNhAWNlbgJyeQMNVw0ABAEKAiAOgIKBA1YAARFDCgIgDoCCgQABaHQKAiAOgICBAAFpcmVuAiAOgIKCAAFyCgIgDoCAgQAEAWYKAiAOgICBA1cAAWsKAiAOgICBAAFwCgIgDoCAgQABdAoCIA6AgIEAAXVxCgIgDoCAgQAEAWMKAiAOgICBA21WAAFnCgIgDoCAgQABaGMKAiAOgICBAAFocAoCIA6AgIEAAWhzAiAOgICCAAFzCgIgDoCAgQABc3MKAiAOgICCAAFzdQoCIA6AgYIAAXN1cgoCIA6AgIIAAXN1dAoCIA6AgIIAAXgKAiAOgICCAAF6CgIgDoCAggAEAmNhcnADbVcAAnBlY2kAAnRhdGUACAJ0YWIAAXJwAmVudAN1VgAEAXIRQwJ0A3VXAAF2AnQMAAgCcGwAcwF0c2lkAiAAAXZyYWgCdAN2VwBvcGhhA3ZXBndRDQAECHhhA3xWAGUCIAAIAnBlYWsDfFcABwZldAAEAml0b3IDBnUvAHRlAiAAdGECIAMGdS8NAARlZAFsAiADBnwvbUYAZWQBcmMCIABpbmcBbAIgAwZ8L3ZCAHJ5AW0DCA0vIgJ2AAQBbAoCIAMNLwAIbQJpYwB0AWxhcAJlAGgBEUMVAiAOgIGDAw1VAAQBFQIgA20vAAgCZXJuAGluZwEKAiADbS8CdkIAZWQBCgIgA20vbUYABAFiYWhwAiADdS8AAWoCIAABbhFBAiAAAXJnAgwAAXMCIAABdAIgAARoAmljA3VVAGgIAmEAaAgCZWwABAEVAmF0ZQN2LwABFQJhdGlvbgABa3IAAWxsAiAABAFmAmEDfC8ACAJvbgAIbQJlAAhwAmUAZQIgAARlcgFtAiADfC9uAHJlAW0ABGgCeQN8VQBoBSMCYW5lAGgIAhFBAAFyZWICIAOFAAcGZXYABGVyAmMDBHVSbgBlcgJsAGVyAm0ABAgDbVIACAJpY3QACAJpcwBlCAJudANtUnUAZXIIAnMDbVJ7AAQBbAJlbAN1UgAFAwgCb2x1AAgCaQBlcnkDdVIibQAEZXIBbGMDdVJuAGVyAiAAZXIIAAQBbGxhA3xSAAFyYmJhAAF0cwJlAAJpbABlAWxjAmwAZQgAZW4IA3xSDTIABGVyAWYCDAN8Um4AZXIFIwhsAAcGZXgABAgDAnUxVwBjAmkAYwgCZQB0cmECb3IDAnUxVy8iAHRyYXZhAmcDAnUxVy8iI1INAHBlcmltAwJ1MVcwdSJ2PwAECAIRQQMCdU9WAGgIAAEVAmlhAwZ1MVcABAERQwJlA3UxVwACZXJjAAJwZXJ0AGMCZWxsZQB0ZXICEUMDdTFXLwZ7AHRyYQJwb2wDdTFXLyIGIwB0cmEDdTFXLyINAHRyYQJjdAN1MVcvIiMAdHJhAm4DdTFXLyKFAHBlZAJpdAN1MVcwDUYAY2F2A3UxVzENUgBvcgJjA3UxV24AZQJjdXRpbwN1MVd2AAgCaXQDdU9WAAFzcwIgA3YxVwAHBmV5AAEKAiADAnYAb3ICIAMGhW4AZWQCIA6AgIIDRgABFQIRQxUDdgAIawIMA3wABAOEAGUIAGVyAW0VAiADhG4ABAERQx0DhQABdhFDAiAAAmFuAAhiYQBlAAcGaWEABAFmAm50AwaLAAFmZQJuY2UAAWwCbmNlAAFscAJudABoAiAAdGgDBotVAHJ5AQoDCDkNIgJ2AHRlARUCIAMIbYUvAGMBCgIgAwh2IzEAARUCIAMIfA0ABAEVAnRpdmUDCIgAARUVAiAAcnkBbAoDCIgiAnYAAm5nIAM5IwAEAWxhAm50A20NAAFsbGkCbmNlAAFsbGkCbnQAAXICYgABdAJiAAJtAGdlAQoCIANtSQByZAIgA21uRgByY2gDbXoxAGkDbYQABAEVAm5hA3YGIwABFQJuaWMAARUCbml0AAhmAm5jA3YGdwBuY2UIZgN2BncyV4UAcmECIAN2BnkiDQB0ZQFycG8CIAN2DS8AbgEVAmN5A3YNMgABcAJubwN2IwByAmkRQwN2IyIAaXMBbAN2hVYAARFDHQOEDQByBQgBEUMDhHMABAEKAm4DiAAIcAJuEUEAbggDiDIAcgFsFQIgA4kABAFmAmIDiwByAHIBEUMABwZpZQB1AWwCdGUDAnVRAAEKAiADAnYACHYCdAMCiABuZQFkAiADBoR8MgB0eQEVAwaLLwJ2AGwBcgoCIAMIfHIAc3QBCgIgDoCCgwMNVy8ABHcDOYEAdwIgAGQCIA6AgoIDRgBkcwIgDoCCgwNGVgBzAiAOgIKCA1YABAJsbBFBA20GdQACbhFDaRFBAAJ0dAByAQoCeQNtDSIAbAFuCgIgA21yAHNjA211VwABZGVtAnZhbANtfABycmUCIANthwByAQoCIBgOgIKCA24AcidzAQoCIBgOgIKEA25WAAFyZgJuZAN1AAQDdgABcHACIAABcwJ2ZQACbnRhbAN2BnUAbm5lARUCIAN2BnUyAAJnbwN2BoUAZGx5A3ZGNwJ2AAQBHQN8AAFmAm5kAAFnAm4AAXJwAnN0AAJjZQACZgACawACbAACdgACdmUAAnoACHIACHoAaAIRQwBzdGEDfAZ1Vy8NAGoDfAaFAGcCZQ0DfEkABHMBY2VwcwIgA3xWAHMBcmVzAiAAaQIgA3yEAHUBbAOBAHV0ZQUDAWwDgS8GdQAEAXACIAOEAAIgAAJjAAh0AhFCAAUICGNzAm4DhHMABAEKAnQgA4gAARUCdGgAAm4ABHIDiQByAmMABAFjcwJuYwOLAAFsYwJudAACbnRpEUMAAnQACGNzAm4ACGgCcgByAWxwAiAAcghyEUMABwZpZwBuAXMCbwMCdjI5AAQCbm8DAnZPAAgCbmkACG0CcmF0AwKETwBuZQIgAwZ8MgAEdQIgAwZ8TwB1AmUAYW4BbgIgAwh2Tw0yAGVvA3ZJDQBpYgEKA3ZJDUUABAFkAm4RQQN2TwACbmEAAm5vbQACbm9yYW4AAW1hAmEgA3xPAAQBFQJuIAOEAAEVAm5lAGgBaABoAW4AaAFzAGgCdAAEbgIRQwOEMgBuAiAAbQIgA4Q/AAQBdAJlDAOETwABdAJyAAhtAnJhAAcGaW0ABAgCFQMCdj8AbQgCFQBwZXICEUMVAwJ2PzB7AAQCcGVjdQMEdj8AAnBvcnR1AAJwcmVnbmEAAnByZXNhAG0CYXQAbQJlbQBpbGUBcwMGdj9tN3YAAWhzAmEgAwZ8PwBvdXMBFQIgAwh2Pw1XAAQBFQJldHIDdj8AAWwAAWwCZXIAAmFnZQACZW50DAACaXQAAnBhYwACcGV0dXMAAnBsYW50IAACcGxlAAJwbGljYQACcHJvdmlzAAJwdWxzZSAAAnVtAG0CaWcAbQJpbgBtAnVuaXMAcG8CdGVuA3Y/MA0ABGUCdGVyIAN2P3wAZQJ0cmUABAFsYwOEPwAFAwFzAnVsdAAIcnACYQBlAWwAZQFkAm5zA4Q/dQAHBmluAAQIAhUOgISCAwJ2MgAIAmNvcnAACAJjcmVkAAgCc3RpbAAIAnRlZ3JpAG4IAnVtAHQIAmVyaW8MAwJ2Mi8AdHJhCAIRQxFDAwJ2Mi8iIwB0ZXIIAnJvZwMCdjIvdQAEdGVyCAJuIAMCdjIvewB0ZXIIAm5hbAB0ZXIIAnBvbBUAdGVyCAJwcgB0ZXJwcmUCdAMCdjIvezAidgBkCAJlZmluAwJ2MkYAZnJhCAJjAwJ2MlEiIzEAZmEIAmwDAnYyUSMABAgCZGUOgISCAwR2MgAIAmRpcw6AhIIACAJkaXYOgISCAAgCZXgOgISCAAgCc2VjDoCEggAIAnNpZ25pZg6AhIIACAJzaW5jDoCEggB0ZXIIAhFBDoCEhQMEdjIvDSIAdHJvCAIVAwR2Mi8iDQB0ZXIIAhUOgISFAwR2Mi9uAGZyYQgCDoCEhQMEdjJRIg0AARUCY2lhbAMGdjIAZGEBFQIgAwZ2MkYNAAQBawJhIAMGfDIAAWwCYSAAAXICYSAAAXQCYSAAaQEVAiADBnwydgBvAiADBnwygwBpbgEKAiADCA0ydjIABAEVAmF0ZQMIdjIAAW0KAmFsIABvdXMBFQIgAwh2Mg1XAAQBc2FiAiADDTIABQcBCgIgAAQBbWF4AmUDbTIAZQFtcmUCIAAEAQoCZW4RQwN2MgABYwJlAAFjbmkCZQABZwJlAAFrAmRlcmcAAWsCZGwAAWsCZHIAAXJ0AmkAAXYCZWcAAmRleAACZGlhAAJlYQACZWUAAmZpbml0ZQACc2VjdAAIAmIACAJjYW4ACAJjZW5zAAgCY2gACAJjb20RQQAIAmNyZQAIAmN1YgAIAmN1bAAIAmRpYwAIAmRpZ28ACAJkaXIACAJkb2wACAJmYW0ACAJmaWQACAJmaWwACAJmbG8ACAJmbHUACAJmbyAACAJqdXIACAJsAAgCbQAIAm9mAAgCb3JnAAgCcAAIAnF1ZQAIAnF1aXMACAJyAAgCc2V0AAgCc2gACAJzaWdoAAgCc29mAAgCc29sYQAIAnNvbGUACAJzb211AAgCc3BpcgAIAnN0YW4ACAJzdGkACAJzdHJ1bQAIAnN1YgAIAnN1bAAIAnRhawAIAnRlZwAIAnRpbWEACAJ0b25hAAgCdW4ACAJ2b2kACAJ3YQBlAWxhbgIgAGUBbHUCIABuCAIZAGV4CAJvcgN2MgZ1MVcABGkBZhUCdGUDdjINAG5vCAJjZQBubwgCdgBlcmEBbQJsA3YyDSINAHRlAmxsZWMDdjIvDQB0ZXICZXN0A3YyLw0iAHRlcmZlcgN2Mi8NUQaJAHRyaWd1A3YyLyIGfE8ABHRyYQgDdjIvIg0AdHJvCAJ2AHRyaWNhA3YyLyJ2MQ0AdGVyAnZpZXcDdjIvbgBjcmVtA3YyMSJ2PwBkaQgCZ2UDdjJGdgBnAXJmbgN2MkkAZmFuCAN2MlENMgBmb3ICbWF0aW8DdjJRbgBjaQJkZQN2Mld2AARpAW1kYQN2MnYAaQhtAHV0ZQhtAm0DdjJ2LwBpYXR1cgFtA3YydkpuAGlzbQIgA3YydlYNPwAEAmdvdAN2QgAIAmdybwAIAmsAZwEVAiAMDoCZgwBnAWxlAiAMDoCYgwBnAW1vFRUCIA6AmIMAZwFuZQIgDoCIgwBnAXIRQgIgAGcBcmUCIA6AiIMAZwF1Z29sAiAOgIiEAGcBeAIgDA6AiIMABGdseQEVAiAOgJmFA3ZCN3YAZ2x5AXJlAiAOgKiFAARnbWVudAEVAiAOgJmHA3ZCPw0yLwBnbWVudAFyZQIgDoCIhwBnbHkBbmUCIA6AqIUDdkJPdgAEZ3MBFQIgDoCZhAN2QlYAZ3MBbmUCIA6AiIQAZ3MBcmUCIA6AiIQABGUBYxUCIAN8MgBlAWQKAiAAZQFoYxFBAiAAZQFocAIgAGUBbGkCIABlAWxvAiAAZQFyFQIgAGUBdBUCIABlAXoCIAAEAWICZAOEMgABZgJhAAFmAmQAAWcCYSAAAWgCZBFCAAFoAmQgAAFoYwJhAAFoZWICZAABaHMCaQABawJkAAFsYgJkAAFtAmQAAXJnAmQAAXcCZGVyIAABdwJkaW5nAAF3ZXICZAABd251AmQACG0CdXMACHICZABlAXACIABlAXJjAiAAZQF0bmUVFQIgAHUIbQJ0ZQOEMgY5gQAHBmlvAHVzARUCIAMIbQ1XAAIgAwhtgwBuBQgBCgIgAwh2eDIABQcCIAMIfIMABG4BCgIgAwiIMgBuAW4ABAFnAm4DDQABaHMCbgB1AnIRQQM5DQAEcgEKAiADOW4AdXICGQACbGkgA20GgwABbQJuA213AAFkcmFjA22DAHJpdHkDdgZ3Im0vAnYAAnQgA3YNAHIBcgIgA3ZuAHV4A4EABAFiAmxvZ3kDhHcAAXYACAJuAAFiA4SDAHIBCgIMA4kABAF2AmwDiwABegJuAAhyAnQAbghsA4syAAcGaXIABAJhdAMChCIAAmVjdAByZQgCEUMDBHYidgAEARUCbyADBogiAAJhIAACaSAAAmFibGUDBosAAmF0ZQMIiCIAAXBzYQJpAyIABAJvA20iAAgCYQByAmVjb24AcgJlc28AcgJldmVyZQByAmV2b2MAcggCZWd1AHIIAmVsZQAEAnJvA3YAAnJ1AAgCchFBAAQBFQJhdGlvbgN2IgABbQJhYwABcAACaQAEA3sAAXRzAiAABAFnAm8DhCIAAmV0eQAIAmlzaAAIEUMCbyAAb24CEUEDhCIGdzIABGUBYwJuA4QiDQBvAXYCbgBlBQgDhHMAARFDFQIgA4kABAFzAmVuA4sAAXNlZABhCHACYwBlAGUBcABlcgIgA4sibgBhbAFwcwOLInIAeQIgA4sidgBvbggDizIABAUFA40ABQUBdHMCIAAHBmlzAAQBFQJjbyADBnZXAAEVAnRpYwBjARUCZW4RQwBzaW1vAiADBnZXdj+DAHRlARUCIAMGfFcvAAFyAnkgAwgNVwABcxFDFQIgAwh2VwB0YW4BFQIgAwh2Vy8jMgBhBQMCdGlvbgMNVoUACGQCZQNtVwBoAQoCIANtWQAEbQERQmkVAiAOgJCDA3ZWDT8AbQEVAiAOgJGDAG0BbmECIA6AkIMABAFiAiADdlcAAWMCIAABbRFBcnAAdGFuaQEVAiADdlcvBnkydgAEAXYCY291bgOEAAJsZSAACAJsZQBsYW5kCAOENw0yRgAEAQoCYWJsA4RWAAF2ZGEAAmVyDCAAAm8gAAJvciAAZQIgAGUCZCAAZXICIAOEVm4AYQJ0aW9uA4RWhQAEAXJoYwJ0IAOEVwACaXZlAAcGaXQAJwgDAnYvAGl1cwIgAwZ2WQ1XAAQBdBFBEUMCIAMGfC8AAmkgAAJvIABpcwIgAwaEL3ZXAAEKAml2ZSADCG0vAHkBCgIgAwhtLwIlAAEVFQJhbiADCHYvAG91cwEKAwh2Lw1XAGFyeQUDAQoCIAMNL3UiAnYABAEKAmUgA3YvAAFicm8AAWRlcmMAAWwCZXIAAW5hcmcCZQABbmlmbgJlAAFyYwJlIAABcnUCZQABc2l1cQJlAAFzb3ACZQACZXJhdAAIZGUAeQgR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ZQFjAiAABAFuAmFkA4M/AAFyAmFuAAFyaGMAYgFjAiAAYW4BcgJ0aQODPwYjMgAHBm9uAAFkAmF0AwKDMgAEARUCaWNhAwZ3MgABc3JlcAJpAHltb3VzAwZ3MnY/DVcABAFwdHNvcAMGgzIAAmkgAGlzbQEKAiADCA0ydlYNPwBpc3QBCgIgAwgNMnZXLwAEAQoCZXIgAw0yAAEVFQIgAAFiCgIgAAFjCgIgAAFjZQJkAAFkEUMCIAABaHACZXRpAAFtAmQgAAFtCgIgAAFyZAIgAAFzCgIgAAFzcmVwAAF0CgIgAAF0b2hwAHkBCgIgAw0yAnYAb3VzAQoDDTINVwBlCAM6dzIAY2UIAiADOncyVwBlBQYIAzp4MgBjZQUGCAIgAzp4MlcAZWQBEUMKAiAOgIiCA0YAaW5nARFDCgIgDoCIgwNtQgAEAWcCZQN3MgABbGYCIAABbGkCIAABbHkCIAABbgJlAAFyYwIgAAFybwIgAAFydAoCIAABdwJrAAF3AnQAAmFsZAAFAwFnYQIgAAUIARUCIAwMAGUBbQJ0aQN3Mm0ABAFtAmV5A3gyAAFtAmsAAW0CdGgAAXJmAnQAAXcACAJpbwAIaAJleQBlAWRudQIgAGcIcHMDeDJJAGUBbQJ0YQN4MnYAZwUjAW0CZXIDeEJPAAJhbiADgzIAZQgCcgODMg0AdXMDgzINVwAHBm9vAAEKAm4DBoEABAERQwJrA3EAAWYCdAABZwJkAAFoAmQAAWgCZAABaAJrAAFzAnQAAXRzAmQAAXcCZAABdwJsAAQBbGICZAN4AAFsZgJkAARyA4AAcgIgAAQDgQABawJrAAFtAm4gAAFwAmsAAXBzAm4gAAFzAnRoAHQCaWMgA4EGdy8Ac2UBaGMDgVYABHMCZQOBVwBzZQFnAAhjAnADgwZ3AHIBYwJkA4MGfwBzAWhjAmVuA4NWAARyAXADigByCG0ABwZvcgAIZgJzFQMCfwAEZQFmAmNsbwMCgABlAWYCZ28AZQFmAnNlAGUBZgJ0bwAEARUCaWMgAwZ3IgABFQJpY2FsAAEVAmNhIAMGfwACaSADBn8iAHRlAWYCIAMGgC+FAGlseQEVAiADCA0iDTcCdgAEAQoCYXRpb24DDSIAAmlnaW5hAHkBCgIgAw0iAnYAZXNjAw0iBnVXAGkBaAJ6Aw0ihABlZAEKAiADDUYAZwFmAml2Aw1PAGVkAWgCIA6AgIEDRgAEAQoCIANuAAFiYgJuAAFkbgIgAAFmAmcRQXQAAWYKAmQgAAFmZmUCdAABdG5ldgIgAGUBdBUCIAAEAQoCYXRlA24iAAEKAm91cwBjZQF3AnN0A3EAAnIDdwAEARUCaXRpA3ciAAEVAml0eQABbGYCaQABbQJhbAACZRFCIAACZW4RQwACaWcABSMIaAJvAAgCaRFDAHIIbQAEYQJjbAN3Ig0AYQgCdG8AZWlnbgFmA3ciDTIABGUBZgJzdAN3InYAaQFoAnpvbnQAAXcCcgN4AG91Z2gDeCINAG91Z2gFAwN4IoMABAF3A3sAAXcCbQABdwJzZQABdwJ0aAAFAwJyA30ABAFjAmsDfwABZgJldmVyAAFmAmsAAWhjAmQAAWwCZAABeQJrAAJjaCAAAmVzaXMAAm0gAAJuIAACc2UgAAJ0AAgACGMCFQAIZgIVAAhtAGUIZgIRQQBlCGYCEUMABAOAAAFjAmUgAAFkAiAAAWxwAAFwAnQAAXRuAiAAAXcCZQABdwJuAAF3AnQgAAF3cwJkAAUIAQoCIAAFCAEVFQIgDoCQggBlAGUBdHMCIABlCG0AcgIgAAQBbGhjAmljA4AiAAFsaGMCb3VzAAIRQQACZRFBAAJldAACZXgAeQh0cwOAInYABAUFAXcDjgAFBQF3Am0ABQUBdwJzZQAFBQF3AnRoAAcGb3MAAml0eQMGd1cAAmFsIAMGg1YAAml2ZQMGg1cAaXMCIAMGg1d2VwB1cmUDBoNYbgAEAXACaXRpbwMNVgBzAXACZXNzAGUBcHJ1cAIgAw1XAAR0AXACZXJpA3dXLwB0AXACdQB0AXBhAHQBcGVyAHQBcGVycAB0AXBtaQB0AXBtb2MAdAFweGUAdAFweWgABAUDAWMCdAN+VwAFAwFyZgJ0AHMFAwFiAHMFAwFsAHMFAwFtAHMFAwFyAAhsAmUDgVYABAEdAnkDg1YAZQIgAAQBYwJlYwODVwABYwJpbmUgAHMBcmcABHQBaAIgA4NXLwB0AWhnAHQBbQB0AXAABwZvdQB0CAIVDoCEgwMCgi8AARUCbSADBoEABHMBEUIKAiADCA1XAHMBcmQKAiAABGdoAXJiAiADDQBnaAFybwByZWQBCgMNRgAEcwEKAiADDVcAcwFsCgIgAHMBbQoCIABzAW4KAiAAc3kBCgIgAw1XAiUAAWgCbQM5gQBhAzp5AARyAQoCIANuAHIBcBFBAGwCZANxAGNlAWxnAnMDdwAEZ2gBYwN3UQBnaAFydAAEAWMCbnRyA3gAAWMCcGwAAWMCcmFnAAFjAnNpAAFkAmIAAWQCZwABbgJyaQABcnQCYmwAAXMCdGhlcgABdAJjaAABeQJuZwAEZ2gBbAN4UQBnaAFuAGdoAXIAZ2gBdAAEcgN7AHIBYwJ0ZQByAm4AcgUDAWMCYWcAcgUDAW4CaQAEZ2gBYgJ0A30AZ2gBaAJ0AGdoAW4CdABnaAFyYgJ0AGdoAXJ3AGdoAnQAZ2gIAARnaAUDAWMDflEAZ2gFAwFydAAEcgFiAm4DgAByAWMCcwByAWMCdAByAWMCdGVzYQByAW0CbgByAXAAcgFwbgIgAHIIZgByCHkAcmNlAXMDgFcABAFiAmQDgQABYgJsbAABYwJ0aAABaGcCbAABawABbQJzc2UAAW4CZ2EAAXICYmwAAXICdGluAAF0AmNhbgABdwJuZBFBAAF3Am5kEUMAAXkCdAACIAACZgACaQACbBFBAAJwAAJ2AAUjAXICdGUAZ2gBcmh0AHgCIABnZQFyA4FYAGNoAWQDgVkABAOCAAFmAmxlAAFyEUMCdAABeQJ0IAACdABiAWQCdABnaAFiAGdoAWQCdABnaAFscABnaAFscwBnaAFyZAAEAWICbGQDgwABaHMCbGRlcgABbQJsEUMAAXACbHQAAXMCbABnaABnaAFkAGdoAWgAZ2gBbHIABHIBYgJzZQOKAHIBdAByAXQCIAByAXQCbgByBQcIeQByCGcCZAAEcgFjcwOMAHIBaAByAWxmAHIBcwByAXRzAHIBdmUCZWQAcgF2ZWQAcggAcghkAARyBQUDjgByBQUBYwJ0ZQByBQUCbgAHBm92AGVyCAIVDoCEhAMEg1JuAGl0Y2gBFQIgAwgNUnZKAAQBYwJlbhFDA3dSAAFoAmVsAAFoAmVyAAFuAmVsAAFwAmVyFQABcmcCZWwAAXJwAmVyAAFydAJlcgAIAnVsAGVyZWlnbgFzA3dSDSJ2MgAEAWMCZW4DeFIAAWMCZXQAAWhzAgwAAWwAAWwCZQAIAmVuAGUBZABlCGwABGVyAWMDeFJuAGVyAWMCIABlcm4BZwN4Um4yAAQBFQJhbAOBUgABbQIRQQABbQJpAAFycAJlDQBlcgFycAIgA4FSbgAEAWxjAmUDg1IAAWxsdXAAAWxwAAJlcgAIAhFBAAhscwJlbhFBAARlcgEKAiADg1JuAGVyAmNvYQBlcgJkb3MAZXICZHJhAGVyAmRyaQBlcgJzaWcAZXICdG9uAGVyAnR1cgBlcgJ2aWUABwZvdwACaXR6IAMIg1IAAmF5IAMNOgBsZQFuawJkA3c3dgAEAWEDggABYgJlbAABYgJlcgABYgJzEUEAAWICc3AAAWMAAWQCbgABZG5lAAFmAAFnAAFoAAFoYwABaHMCZXIAAWh3AAFoeQABagABawABbGMAAWxmAmVyAAFsZwJlcgABbGxhc2kAAWxwAAFuAmFkAAFuZQJuAAFwAAFyAmQAAXJiAAFyYwJuAAFyZAABcmYAAXJnAmwAAXJwAAFydAJlAAF0AmVsAAF0AmVyAAF0Am4AAXYAAXcAAXkACAJsAAhkAAhsbGEACG4CIAAIbgJ0AAQDgwABY3NvbQABaHMABwZwZQAIAm5yAzACdQAEAm5pbnN1AzANAHICc3AAcgJpcGgDMA0iAARyAmNlaQMwbgByAmNlcAByAmN1bGkAcgJmZWMAcgJmb3JtAHICZnVuAHICZnVzAHICbWlzcwByAm1pdAByAnBldAByAnBsZQByAnNpcwByAnN1AHICc3UAcgJ0YWkAcgJ0dQByAnYVAARyAnBldHIDMHsAcgJ2aQBybWUCYQMwez92AHJzcGkCcmEDMHtXMA0AcnNldmVyAzB7V3ZSBokAYWNlAzB8VwAHBnByAGUIAmRpDoCEgwMwIgIlAARlCAIRQxUDMCICdgBlCAJkaWMAZQgCZW1wAGUIAnNjcgBlcwgCZW50AzAiAnZWAARlCAJtb2wDMCICfABlCAJ1AGUIAmluFQ6AhIMDMCIEfABvAnBhbgMwIgaDAARvAmNlZAMwIg0AbwJjZWUAbwJjZXNzaQBvAmNsYWkAbwJjdXIAbwJkdWMAbwJmYW4AbwJmZXMAbwJmaWMAbwJmb3UAbwJmdQBvAmdyZXMAbwJoaWIAbwJqZWMAbwJsaWYAbwJsb24AbwJtb3QAbwJub3VuYwBvAm51bgBvAnBlbABvAnBlbnMAbwJwaXQAbwJwcmllAG8CcHVsAG8Cc3BlY3QRQQBvAnRlYwBvAnRlc3QAbwJ0cmFjAG8CdHJ1AG8CdmlkAG8CdmlzAG8Cdm9jAG8Cdm9rAG8IAnARQQBvCAJzYQBvCAJzYwAEZQJjaW8DMCJ1AGUCanVkaQBlCAJmZXJlbgBlCAJnbgBlCAJtaQBlCAJuGQBlCAJwIABlCAJwb3NpAGUIAnNzAGUIAnN0AGVkYQJ0bwMwInVGDQBldggCYWwDMCJ1UgAEZXMCZW5jAzAidVYAZXMIAmVudGEAZXNpAmRlbgMwInVWdgAEbwJkdWN0AzAidwBvAnBlcgBvAnBoAG8CcG9zaXQAbwJzZWMAbwJ0ZXN0YW4AbwJ2aWRlbgBvBQMCY2VzcwBvCAJwYWcAb2JhYgMwIndFDUUABGUCZml4AzAifABlAmhpc3QAZQgCIABlCAJhbQBlCAJjaW5jAGUIAmZlYwBlCAJtaXUAZQgCcXUAZQgCc2MAZQgCdmlldwBlCAJ2aW8AZWEIAmNoAGVkZQJjZXMDMCJ8RnYABG8CZmlsAzAigwBvAmdyYQBvAmxvZwBvbWUCdGgDMCKDP3wAaQgCbwMwIoQAaW8Ccml0AzAihAZ3AGl2YXQIAzAihFINLwAHBnJlAAJnZW5lcgMCInwABAgCYWxpZwMEInwACAJhbGwACAJhdRUOgISCAAgCY29uDoCEggBhCAJsbG8OgISCAARkZQFudQIRQwMEInxGbQBkZQgCEUMAAXZ1ZW9uAw0AZAF0EUMKAiADDUYABAgCZHIDIgJ8AAgCZWR1DoCEggAIAmVtDoCEggAIAmVuDoCEggAIAmVxDoCEggAIAmVzDoCEggAIAmV4DoCEggB0cm8CDoCEhQMiBHUvIoMABAgCaRUOgISCAyIEfAAIAnVuDoCEggAEYQIRQwsDIgR8DQBhCAJkEUMABAERQQIgAyINAAFyAiAAAm1lbnQAcgIgAGQBEUIKAiADIg1GAAQBbnUCEUMVAyJtAAJhY3QAAmRlbQwACAIRQxUAYQJsaXQDIm0jAHBlAnRpdGl2AyJtMHUAbGUCbnQDIm03dQAEbGkBbnUCYQMibTeEAGxpAmEABHMCaWduAyJtVgBzAnVsdABhAmx0ZQMibXcAYQJnZW4DIm2FAAQCEUNlbCADInUAAmNrAAJjdAACZBFDAAJmdWcAAmdpc3QAAnBsaQACcHJpbQACcHQAAnNpZHVlAAJzb2x1AAJzb24AAnN0bAACdGljAAJ0aW5hAAJ2ZWwAAnZlcmVuAAJ2b2x1AAgCEUMRQyAACAIRQyAACAJkEUMACAJuEUMACAJzY3UAYQJsbQBwZQJ0aXQDInUwDQBwcmVzZW50AyJ1MCJtVgZ1Mi8AcGVyCAJ0AyJ1MG4AY28CZwMidTENAARja29uAyJ1MQ0yAGNvbgJjAGxlCAJnAyJ1N20AbGUCdgMidTd2AGdpbQMidUl2PwBndQJsAyJ1TzmBAGZlcmVuZAMidVENIgZ1MkYAdmUCbhFBAyJ1Ug0Ac2kCZGVuAyJ1Vm0AbWVudAMidj8NMi8AaGVuAyJ2aQZ1MgAEAmdlbgMifAACZ2lvbgACdGFpbAAIAmFuAAgCY2VudABhAm0AYQUDAmwDInwOAHNlAmwDInxXdQAEaQJzAyKEAGkIAmMAaQgCbABhAmwDIogAAiADbgAHBnN1AAFlcgJtEUEDVjmBAG1hYgFlcgNWOYE/DUUABQMBZXICbRFBA1aBAAQCYmR1ZQNXAngAAmJzZXIAAmJzaXMAAmJ0cmEABAJibWVyZwNXDQACYm1pAAJic2NyaWIAAmJ1cmJhAAJidgACY2MRQQACZmZpYwACcHBsAAJwcG9yAAJwcHJlcwBic3RhAm50A1cNRVcvIwAEcwgCcANXDVcAcwgCdGFpAHNjCAJlAAFuAmFsA1c5gQAEcgFudQJwA1duAHICbQByAnBhAHICcHIAcgJyAHICdgAEAmNjdWwDV3gAAnBwbGUAAnBwbGljAAgCYgByAnJleQAEcgNXewByCABzCAIRQQNXgVYABHIFBQNXjgByBQUIAARyAWFlA1huAHIBbwByZQEKAiAABAJhbANYgQAIYWMAZ2FyA1lxT24ABHIBbmUDWYoAcgFuaQIRQQByAmFuAHJlCAAHBnRoAAEgMA8CIAMNVQAIAm9tFQMvAAQCYW5kAy9pAAJlYWQAAmVhcnQAAmlsbAACb2xlAAJvb2QAAm91c2UAZXF1ZQMvdTEAYWkDL4QABAFhZQJlcgNUAAFvb2IAAW9vbXMAAXICaWVyAAFyAnkAAXJvAmkAAmVuIAACZXIRQwACZXJuIAACZXN0AAJpdGgAZQIgAGVtCANUAnU/AGVsZXNzA1QNNwZ1VwBlZAF1bwIgA1RGAGluZwFlZQNUbUIABGVyAiADVG4AZXICZXIAZXJlAiAAZXJlCANUhwAEA1UAASAw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", 5 | "voice":"Ly8gbW92aW5nIHRvd2FyZHMgVVMgRW5nbGlzaApuYW1lIGVuZ2xpc2gtdXMKbGFuZ3VhZ2UgZW4tdXMgMgpsYW5ndWFnZSBlbi1yCmxhbmd1YWdlIGVuIDMKZ2VuZGVyIG1hbGUKCnBob25lbWVzIGVuLXVzCmRpY3RydWxlcyAzIDYKb3B0aW9uIHJlZHVjZV90IDEKCnN0cmVzc0xlbmd0aCAxNDUgMTI1IDE5MCAxNzAgMCAwIDI2MCAyOTAKc3RyZXNzQW1wICAxNyAxNiAgMTkgMTkgIDE5IDE5ICAyMSAxOQoKcmVwbGFjZSAwMyBJICBpCnJlcGxhY2UgMDMgSTIgaQpyZXBsYWNlIDAzIEAgIEAvCg==" 6 | } --------------------------------------------------------------------------------